Squashed commit of the following:

commit 19e44efef1
Author: Changelogs <action@github.com>
Date:   Mon Jun 21 00:24:03 2021 +0000

    Automatic changelog compile [ci skip]

commit bd1344b4b2
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 20 18:26:23 2021 -0500

    Automatic changelog generation for PR #14872 [ci skip]

commit 3a914072b5
Merge: 8a81fa7d79 29604b939c
Author: Lin <linzolle@gmail.com>
Date:   Sun Jun 20 16:26:21 2021 -0700

    Merge pull request #14872 from Citadel-Station-13/silicons-patch-40

    it turns out i accidentally buffed glowshrooms by a factor of 21. this should probably be fixed.

commit 8a81fa7d79
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 20 18:25:25 2021 -0500

    Automatic changelog generation for PR #14873 [ci skip]

commit 9117cc6a5c
Merge: 0a1f0d3e66 0113412190
Author: Lin <linzolle@gmail.com>
Date:   Sun Jun 20 16:25:23 2021 -0700

    Merge pull request #14873 from timothyteakettle/vore

    vore href exploit fix

commit 29604b939c
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 20 13:18:54 2021 -0700

    Update glowshroom.dm

commit 0a1f0d3e66
Author: Changelogs <action@github.com>
Date:   Sun Jun 20 00:24:26 2021 +0000

    Automatic changelog compile [ci skip]

commit 0113412190
Author: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date:   Sat Jun 19 16:28:52 2021 +0100

    Update vorepanel.dm

commit ab9a776690
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sat Jun 19 09:04:51 2021 -0500

    Automatic changelog generation for PR #14863 [ci skip]

commit 0cfe2ec4ca
Merge: 0067cc2b6e cf0d7f704a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 19 07:04:48 2021 -0700

    Merge pull request #14863 from miniusAreas/fdmm-patch-28485128-miniusAreas

    Various Fixes (freelance)

commit 8f3c1fe03a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 19 07:02:51 2021 -0700

    Update glowshroom.dm

commit c0e3af55bc
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 19 06:59:26 2021 -0700

    Update glowshroom.dm

commit 0067cc2b6e
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 22:03:46 2021 -0500

    Automatic changelog generation for PR #14734 [ci skip]

commit 3c7786dafd
Merge: de26ea4a20 538efd2d8f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 20:03:43 2021 -0700

    Merge pull request #14734 from keronshb/SpaceDragon

    (READY) Ports Space Dragon Midround Event.

commit de26ea4a20
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 22:02:25 2021 -0500

    Automatic changelog generation for PR #14867 [ci skip]

commit fd0afa209f
Merge: ae6a648c4b 20bc2f2f59
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 20:02:23 2021 -0700

    Merge pull request #14867 from kiwedespars/wheelyheely

    wheely heelies finally have that downside people have been telling me about

commit ae6a648c4b
Merge: 2fa8136e6a fb9cc6fe45
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 20:02:07 2021 -0700

    Merge pull request #14869 from bunny232/21/79-the-finale

    21/79 the finale now with less map merge issues woops

commit 2fa8136e6a
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 22:01:08 2021 -0500

    Automatic changelog generation for PR #14860 [ci skip]

commit 4768b23398
Merge: 0e7760fb09 5619b73e6b
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 20:01:05 2021 -0700

    Merge pull request #14860 from Arturlang/nanite_updates

    Updates our nanite stuff to TG's, mostly

commit 0e7760fb09
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 21:58:29 2021 -0500

    Automatic changelog generation for PR #14831 [ci skip]

commit bc4773b728
Merge: ec2548949b a64d94a7cc
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 19:58:27 2021 -0700

    Merge pull request #14831 from zeroisthebiggay/beltsprites

    TG Resprite Compendium Atomization Project | Episode Six: Beltslot Sprites & Telebaton Resprite

commit ec2548949b
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 21:58:09 2021 -0500

    Automatic changelog generation for PR #14864 [ci skip]

commit 30d5a72688
Merge: 5d3384d649 d823c5b168
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 18 19:58:06 2021 -0700

    Merge pull request #14864 from EmeraldSundisk/moresnax

    Smaller but more important changes to Snaxi.

commit 5d3384d649
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 20:52:39 2021 -0500

    Automatic changelog generation for PR #14847 [ci skip]

commit f6b3bce2f3
Merge: 84068b467a 03b921a121
Author: Putnam3145 <putnam3145@gmail.com>
Date:   Fri Jun 18 18:52:37 2021 -0700

    Merge pull request #14847 from bunny232/21/79-the-revengence

    21/79 not 20/80 the revenge

commit 84068b467a
Merge: 1400c8deb9 687d0adf23
Author: Putnam3145 <putnam3145@gmail.com>
Date:   Fri Jun 18 17:23:35 2021 -0700

    Merge pull request #14658 from silicons/backend_sync

    Updates tgui and build backend, fixes the build.bat for those with latest eslint (?)

commit 1400c8deb9
Author: Changelogs <action@github.com>
Date:   Sat Jun 19 00:23:19 2021 +0000

    Automatic changelog compile [ci skip]

commit adc6b7d76a
Merge: eab6579cce a8b7c07f00
Author: Lin <linzolle@gmail.com>
Date:   Fri Jun 18 13:53:23 2021 -0700

    Merge pull request #14865 from Citadel-Station-13/silicons-patch-39

    when sprint is disabled, people jogging can still slip :)

commit eab6579cce
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 18 12:22:50 2021 -0500

    Automatic changelog generation for PR #14862 [ci skip]

commit a192757843
Author: keronshb <54602815+keronshb@users.noreply.github.com>
Date:   Fri Jun 18 13:22:48 2021 -0400

    BUG FIX: Changeling Bone Gauntlets work again (#14862)

    * Fixes Bone Gauntlets

    * Better fix

    * return

commit fb9cc6fe45
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Fri Jun 18 05:25:02 2021 -0400

    Update atmospherics.dm

commit 5d574acdc2
Merge: 2b89214d14 eaf36d3137
Author: Putnam3145 <putnam3145@gmail.com>
Date:   Fri Jun 18 00:47:07 2021 -0700

    Merge pull request #14794 from Citadel-Station-13/silicons-patch-35

    updates GLOB.flags to the new byond limit of 24 flags in one variable, up from 16.

commit 2b89214d14
Author: Changelogs <action@github.com>
Date:   Fri Jun 18 00:22:21 2021 +0000

    Automatic changelog compile [ci skip]

commit 20bc2f2f59
Author: 123 <aeromireleks@gmail.com>
Date:   Thu Jun 17 16:16:21 2021 -0700

    Update scooter.dm

commit 04debb2c20
Author: Changelogs <action@github.com>
Date:   Sun Mar 14 00:27:26 2021 +0000

    Automatic changelog compile [ci skip]

commit a8b7c07f00
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Thu Jun 17 07:07:49 2021 -0700

    Update open.dm

commit d823c5b168
Author: EmeraldSundisk <thachazman@hotmail.com>
Date:   Wed Jun 16 21:58:32 2021 -0700

    Update Snaxi.dmm

commit 507b1f43c0
Merge: a121153f0f 21845e0618
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Wed Jun 16 21:17:32 2021 -0700

    Merge pull request #82 from EmeraldSundisk/Citadel-Station-13-master

    Citadel station 13 master

commit 21845e0618
Merge: a121153f0f 64f762f59b
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Wed Jun 16 21:16:14 2021 -0700

    Merge pull request #81 from Citadel-Station-13/master

    6/16

commit cf0d7f704a
Author: miniusAreas <39163353+miniusAreas@users.noreply.github.com>
Date:   Wed Jun 16 22:20:52 2021 -0400

    AAAAAAAAAAA

commit 04b67e3584
Author: miniusAreas <39163353+miniusAreas@users.noreply.github.com>
Date:   Wed Jun 16 22:14:57 2021 -0400

    metapubbydelta

commit 687d0adf23
Merge: b734c28370 64f762f59b
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 16 19:04:07 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit 64f762f59b
Author: Changelogs <action@github.com>
Date:   Thu Jun 17 00:22:08 2021 +0000

    Automatic changelog compile [ci skip]

commit 0a3aa1e94d
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 16 13:30:04 2021 -0500

    Automatic changelog generation for PR #14851 [ci skip]

commit 1e66357706
Merge: dc6b686ac5 df72710cae
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 16 11:30:01 2021 -0700

    Merge pull request #14851 from Vynzill/spritinghell

    Extended Armwraps

commit dc6b686ac5
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 16 12:27:22 2021 -0500

    Automatic changelog generation for PR #14854 [ci skip]

commit e12380cc40
Author: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date:   Wed Jun 16 18:27:19 2021 +0100

    Update embedded.dm (#14854)

commit 3864baaf76
Author: Changelogs <action@github.com>
Date:   Wed Jun 16 00:23:43 2021 +0000

    Automatic changelog compile [ci skip]

commit 5619b73e6b
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 02:02:28 2021 +0300

    Makes it actually, actually work

commit ad0c3d477e
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:48:54 2021 +0300

    Makes it work proper, hopefully

commit 795ab3f835
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:32:24 2021 +0300

    https://github.com/tgstation/tgstation/pull/49798

commit 096e7d4d67
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:31:53 2021 +0300

    https://github.com/tgstation/tgstation/pull/49927

commit fbcd1a3026
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:26:02 2021 +0300

    https://github.com/tgstation/tgstation/pull/55883

    With a minor tweak so humans don't benefit

commit ab82766757
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:19:48 2021 +0300

    https://github.com/tgstation/tgstation/pull/59169

commit f33343c6db
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:17:13 2021 +0300

    https://github.com/tgstation/tgstation/pull/56739

commit 74c186d871
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:16:39 2021 +0300

    https://github.com/tgstation/tgstation/pull/56516

commit a430dc4d4d
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:16:08 2021 +0300

    https://github.com/tgstation/tgstation/pull/56542

commit f3e16b298b
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:15:21 2021 +0300

    https://github.com/tgstation/tgstation/pull/56588

commit b0d7482f04
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:09:30 2021 +0300

    https://github.com/tgstation/tgstation/pull/55902

commit e2eb9d52d0
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:03:51 2021 +0300

    https://github.com/tgstation/tgstation/pull/55164

commit 18aee24231
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 01:01:41 2021 +0300

    https://github.com/tgstation/tgstation/pull/54902

commit 337998e99a
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 00:46:05 2021 +0300

    https://github.com/tgstation/tgstation/pull/54793

commit 724b34f55d
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 16 00:44:32 2021 +0300

    https://github.com/tgstation/tgstation/pull/54710

commit 70de0547ab
Merge: 9277e685e9 0d206742fa
Author: Lin <linzolle@gmail.com>
Date:   Mon Jun 14 20:17:05 2021 -0700

    Merge pull request #14713 from silicons/json_interface

    adds json topic api for manifest, players, revision, and status.

commit 9277e685e9
Merge: e22ea7de59 bc56f74229
Author: Lin <linzolle@gmail.com>
Date:   Mon Jun 14 20:15:52 2021 -0700

    Merge pull request #14797 from Citadel-Station-13/silicons-patch-36-1

    Delete docker_publish.yml

commit e22ea7de59
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Mon Jun 14 22:15:45 2021 -0500

    Automatic changelog generation for PR #14834 [ci skip]

commit 4ae09baa63
Merge: 84a6467fc9 8feb473e65
Author: Lin <linzolle@gmail.com>
Date:   Mon Jun 14 20:15:42 2021 -0700

    Merge pull request #14834 from silicons/on_found

    Fixes on_found triggering on storage

commit 84a6467fc9
Merge: a1db7518e2 2c61a48860
Author: Lin <linzolle@gmail.com>
Date:   Mon Jun 14 20:14:05 2021 -0700

    Merge pull request #14835 from Citadel-Station-13/silicons-patch-37

    Mark datum is now a global verb

commit a1db7518e2
Author: Changelogs <action@github.com>
Date:   Tue Jun 15 00:23:42 2021 +0000

    Automatic changelog compile [ci skip]

commit df72710cae
Author: Vynzill <crimsonrazoralt@gmail.com>
Date:   Mon Jun 14 17:19:05 2021 -0500

    herewego

commit c3f87c312c
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Mon Jun 14 16:30:56 2021 -0500

    Automatic changelog generation for PR #14849 [ci skip]

commit ecd3454ce5
Merge: 38d40b5892 4fec75fe87
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Mon Jun 14 14:30:53 2021 -0700

    Merge pull request #14849 from EmeraldSundisk/snaxifollowup

    Quick Snaxi fixes.

commit 4fec75fe87
Author: EmeraldSundisk <thachazman@hotmail.com>
Date:   Mon Jun 14 08:48:14 2021 -0700

    initialfix

commit 03b921a121
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Mon Jun 14 06:12:04 2021 -0400

    Update tank.dm

commit a121153f0f
Merge: 29e37b0f5e 38d40b5892
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Sun Jun 13 22:33:35 2021 -0700

    Merge pull request #80 from Citadel-Station-13/master

    6/13

commit 38d40b5892
Author: Changelogs <action@github.com>
Date:   Mon Jun 14 00:22:34 2021 +0000

    Automatic changelog compile [ci skip]

commit b734c28370
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 16:27:38 2021 -0700

    fixes

commit 6495bbcc81
Merge: a8f17c3305 eb353c9687
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 16:13:30 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit a64d94a7cc
Merge: bae89fcaba eb353c9687
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Sun Jun 13 18:25:35 2021 -0400

    Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into beltsprites

commit eb353c9687
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:24:33 2021 -0500

    Automatic changelog generation for PR #14832 [ci skip]

commit 49efd115ee
Merge: cc88ebd185 319e03476b
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:24:30 2021 -0700

    Merge pull request #14832 from zeroisthebiggay/miscsprites

    TG Resprite Compendium Atomization Project | Episode Seven: Misc. Resprites & Distinctive Combat Defibs

commit cc88ebd185
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:19:48 2021 -0500

    Automatic changelog generation for PR #14818 [ci skip]

commit ddf885f42e
Merge: 744ed08466 c44750760d
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:19:46 2021 -0700

    Merge pull request #14818 from EmeraldSundisk/snaxiforrealthistime

    HEY HEY! COME ON OVER, HAVE SOME FUN WITH SNOW TAXI!!!

commit 744ed08466
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:19:39 2021 -0500

    Automatic changelog generation for PR #14837 [ci skip]

commit a91d5111c4
Merge: a88561d1aa a395fc1b52
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:19:37 2021 -0700

    Merge pull request #14837 from zeroisthebiggay/trojancoyoteskirt

    (held against my will) adds a onesleeved croptop

commit a88561d1aa
Merge: 3170d60919 ed929dda12
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:19:08 2021 -0700

    Merge pull request #14770 from keronshb/spaceadaptaura

    Changes Space Adapt to a proper animated outline so it doesn't look awful.

commit bae89fcaba
Merge: 1122135c17 3170d60919
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Sun Jun 13 18:19:01 2021 -0400

    Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into beltsprites

commit 3170d60919
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:18:48 2021 -0500

    Automatic changelog generation for PR #14824 [ci skip]

commit d6aaf5c96a
Merge: a8f7a56d41 e78929cde1
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:18:46 2021 -0700

    Merge pull request #14824 from timothyteakettle/bee

    bees can go in containers and are released upon opening the container

commit a8f7a56d41
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:17:21 2021 -0500

    Automatic changelog generation for PR #14814 [ci skip]

commit dc80bcaabb
Merge: ef5a523729 01a61b551c
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:17:18 2021 -0700

    Merge pull request #14814 from TripleShades/delda

    Delta Tweaks

commit ef5a523729
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:16:39 2021 -0500

    Automatic changelog generation for PR #14816 [ci skip]

commit d0fc422b3a
Merge: 81cd001359 3321e17c6f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:16:37 2021 -0700

    Merge pull request #14816 from SandPoot/tablet-pen-slot

    Adds a pen slot for tablet computers

commit 319e03476b
Merge: e757f9ea2c 81cd001359
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Sun Jun 13 18:16:08 2021 -0400

    Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into miscsprites

commit 81cd001359
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:16:02 2021 -0500

    Automatic changelog generation for PR #14841 [ci skip]

commit f56e95e4e7
Merge: fe031f32c0 a324701730
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:15:59 2021 -0700

    Merge pull request #14841 from MrJWhit/revert-14762-patch-2

    Revert "adds cat meteors"

commit fe031f32c0
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:15:35 2021 -0500

    Automatic changelog generation for PR #14813 [ci skip]

commit 2dd0d014b9
Merge: 0f2bbc2a13 d70a35a48d
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:15:32 2021 -0700

    Merge pull request #14813 from SandPoot/small-issues

    Fixes some small issues with cosmetic syndicate clothing (loadout clothing)

commit 0f2bbc2a13
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:15:22 2021 -0500

    Automatic changelog generation for PR #14820 [ci skip]

commit 431acd9d5c
Merge: b2f530da5d 584dce4a80
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:15:20 2021 -0700

    Merge pull request #14820 from qweq12yt/more-cargo-stuff

    [FIX] Some cargo related fixes

commit b2f530da5d
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:15:07 2021 -0500

    Automatic changelog generation for PR #14836 [ci skip]

commit 5e1818819b
Merge: 6efe680a47 1303f4b9ae
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:15:04 2021 -0700

    Merge pull request #14836 from timothyteakettle/funny-tips

    adds 7 more round tips

commit 6efe680a47
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:14:32 2021 -0500

    Automatic changelog generation for PR #14830 [ci skip]

commit b77da2824a
Merge: f02098d1a1 4486b08bd4
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:14:30 2021 -0700

    Merge pull request #14830 from zeroisthebiggay/dishdrive

    TG Resprite Compendium Atomization Project | Episode Five: Dish Drives

commit f02098d1a1
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:14:07 2021 -0500

    Automatic changelog generation for PR #14829 [ci skip]

commit 211fed05d7
Merge: 81be45f062 8a5a5ef6cc
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:14:04 2021 -0700

    Merge pull request #14829 from zeroisthebiggay/singulohammer

    TG Resprite Compendium Atomization Project | Episode Four: Singularity Hammers

commit 81be45f062
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:13:49 2021 -0500

    Automatic changelog generation for PR #14826 [ci skip]

commit 33d8e95144
Merge: 5324544a63 39d951a4a8
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:13:46 2021 -0700

    Merge pull request #14826 from zeroisthebiggay/bankmachine

    TG Resprite Compendium Atomization Project | Episode Two: Bank Machines

commit 5324544a63
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sun Jun 13 17:13:25 2021 -0500

    Automatic changelog generation for PR #14825 [ci skip]

commit 8eff0ca5b3
Merge: 405135834e 5bf831be0f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Jun 13 15:13:23 2021 -0700

    Merge pull request #14825 from zeroisthebiggay/watercooler

    TG Resprite Compendium Atomization Project | Episode One: Water Coolers

commit a324701730
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Sun Jun 13 05:25:02 2021 -0400

    Revert "adds cat meteors"

commit c44750760d
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Sat Jun 12 21:34:41 2021 -0700

    Add files via upload

commit 686798b789
Author: EmeraldSundisk <thachazman@hotmail.com>
Date:   Sat Jun 12 21:21:43 2021 -0700

    stronk

commit a395fc1b52
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Sat Jun 12 19:58:53 2021 -0400

    a

commit e757f9ea2c
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Sat Jun 12 17:41:09 2021 -0400

    thetwentythirdofmany

commit 1303f4b9ae
Author: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date:   Sat Jun 12 15:34:58 2021 +0100

    Update tips.txt

commit 2c61a48860
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 12 05:09:13 2021 -0700

    Update mark_datum.dm

commit 8feb473e65
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 12 04:49:23 2021 -0700

    fixes

commit 55e8d67521
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 12 04:41:58 2021 -0700

    refactor a bit

commit 85b1125c83
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat Jun 12 04:36:02 2021 -0700

    fix

commit 01a61b551c
Author: TripleShades <MegaProto@gmx.com>
Date:   Sat Jun 12 01:08:22 2021 -0400

    Update DeltaStation2.dmm

commit 3fae79f876
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 20:28:25 2021 -0400

    thetwentyfirstofmany

commit 405135834e
Author: Changelogs <action@github.com>
Date:   Sat Jun 12 00:20:05 2021 +0000

    Automatic changelog compile [ci skip]

commit 1122135c17
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 20:04:05 2021 -0400

    thetwentiethofmany

commit b7eecc315f
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 19:49:43 2021 -0400

    theeighteenthofmany

commit 53e95b7356
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 19:48:04 2021 -0400

    theseventeenthofmany

commit 4486b08bd4
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 19:33:51 2021 -0400

    thefifteenthofmany

commit 979aa04a69
Merge: c33348fe18 b188a6ea0f
Author: Putnam3145 <putnam3145@gmail.com>
Date:   Fri Jun 11 16:22:06 2021 -0700

    Merge pull request #14828 from silicons/sigh_516

    fixes the crafting menu, adds an unit test to automatically yell at people who PR untested code that ended up breaking it for me (thanks drpanis)

commit 8a5a5ef6cc
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 19:22:05 2021 -0400

    thethirteenthofmany

commit b188a6ea0f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 11 16:15:31 2021 -0700

    why

commit a8f17c3305
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 11 15:33:55 2021 -0700

    hm

commit 39d951a4a8
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 18:24:29 2021 -0400

    thesixthofmany

commit 5bf831be0f
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Fri Jun 11 18:17:16 2021 -0400

    thefourthofmany

commit 0830181b26
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 11 15:10:29 2021 -0700

    hm

commit e78929cde1
Author: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date:   Fri Jun 11 17:55:38 2021 +0100

    typo

commit baad78e7fe
Author: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date:   Fri Jun 11 16:08:55 2021 +0100

    bee

commit 816b09bf32
Merge: 4289b8be1e c33348fe18
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Thu Jun 10 22:36:26 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit 7980ee2c37
Author: EmeraldSundisk <thachazman@hotmail.com>
Date:   Thu Jun 10 21:54:00 2021 -0700

    strongdmm

commit 584dce4a80
Author: qweq12yt <45515587+qweq12yt@users.noreply.github.com>
Date:   Fri Jun 11 01:34:19 2021 -0300

    updating comments

commit 78470092fc
Author: qweq12yt <45515587+qweq12yt@users.noreply.github.com>
Date:   Fri Jun 11 01:12:16 2021 -0300

    Update settings.json

commit c33348fe18
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Thu Jun 10 19:52:15 2021 -0500

    Automatic changelog generation for PR #14768 [ci skip]

commit 86881dc1af
Merge: a683754160 b1b931a7c4
Author: BlackMajor <henrydyer6@hotmail.com>
Date:   Fri Jun 11 12:52:12 2021 +1200

    Merge pull request #14768 from Citadel-Station-13/silicons-patch-33

    makes xenos immune to stamina damage, with something that might be potentially horrifically abusable but isn't really fixable in a clean way yet

commit a683754160
Author: Changelogs <action@github.com>
Date:   Fri Jun 11 00:23:59 2021 +0000

    Automatic changelog compile [ci skip]

commit 0ca61af62a
Author: qweq12yt <45515587+qweq12yt@users.noreply.github.com>
Date:   Thu Jun 10 16:50:44 2021 -0300

    fixed combo lockers

commit ebb4ab1f07
Author: EmeraldSundisk <thachazman@hotmail.com>
Date:   Wed Jun 9 21:21:24 2021 -0700

    to finish

commit 29e37b0f5e
Merge: 375da54dc2 9376ec0d04
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Wed Jun 9 21:19:25 2021 -0700

    Merge pull request #79 from Citadel-Station-13/master

    6/9

commit 3321e17c6f
Author: SandPoot <43283559+SandPoot@users.noreply.github.com>
Date:   Wed Jun 9 21:48:06 2021 -0300

    Update NtosWindow.js

    Delet unused stuff

commit e63eac2c57
Author: SandPoot <43283559+SandPoot@users.noreply.github.com>
Date:   Wed Jun 9 21:47:33 2021 -0300

    upload NtosWindow.js

commit 79c501a7b4
Author: SandPoot <enric_gabirel@hotmail.com>
Date:   Wed Jun 9 21:36:43 2021 -0300

    upload files

commit 9376ec0d04
Author: Changelogs <action@github.com>
Date:   Thu Jun 10 00:25:00 2021 +0000

    Automatic changelog compile [ci skip]

commit 42b8120f74
Author: TripleShades <MegaProto@gmx.com>
Date:   Wed Jun 9 15:47:33 2021 -0400

    Update DeltaStation2.dmm

commit 0ca6e983c9
Author: TripleShades <MegaProto@gmx.com>
Date:   Wed Jun 9 15:32:48 2021 -0400

    changies

    delda changies good

commit d3f1a163b1
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 14:14:39 2021 -0500

    Automatic changelog generation for PR #14683 [ci skip]

commit 5e4f3ed694
Merge: e78715d952 33affb4f10
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 12:14:37 2021 -0700

    Merge pull request #14683 from keronshb/shovedisarmgun

    Off Balance Disarms only if shoved into a wall or person.

commit 33affb4f10
Author: keronshb <keronshb@live.com>
Date:   Wed Jun 9 15:14:07 2021 -0400

    THREE SECONDS

commit ed929dda12
Author: keronshb <keronshb@live.com>
Date:   Wed Jun 9 15:12:22 2021 -0400

    Changes up the animation a bit

commit d70a35a48d
Author: SandPoot <enric_gabirel@hotmail.com>
Date:   Wed Jun 9 15:49:57 2021 -0300

    upload syndicate.dm

commit e78715d952
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:29:26 2021 -0500

    Automatic changelog generation for PR #14776 [ci skip]

commit 09d61c3bec
Merge: 13c965e5f3 7884ccf316
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:29:24 2021 -0700

    Merge pull request #14776 from WanderingFox95/WanderingFox95-CatSurgeon

    New Challenger: The Cat Surgeon has appeared! (Ready!)

commit 13c965e5f3
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:22:28 2021 -0500

    Automatic changelog generation for PR #14766 [ci skip]

commit a77aa8bd41
Merge: fa24353b16 ed86a6628a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:22:26 2021 -0700

    Merge pull request #14766 from Linzolle/cultfix

    Fix cult area shenanigans, cult can do stuff in maint again.

commit fa24353b16
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:21:57 2021 -0500

    Automatic changelog generation for PR #14762 [ci skip]

commit 224efa0e26
Merge: 535435633e 2eeb6ede1e
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:21:55 2021 -0700

    Merge pull request #14762 from DrPainis/patch-2

    adds cat meteors

commit 535435633e
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:21:24 2021 -0500

    Automatic changelog generation for PR #14760 [ci skip]

commit eb4b4088f4
Merge: 323e2f4355 40f9941849
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:21:22 2021 -0700

    Merge pull request #14760 from keronshb/floorcluwneport

    Ports Floor Cluwnes and Cluwnes.

commit 323e2f4355
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:21:14 2021 -0500

    Automatic changelog generation for PR #14759 [ci skip]

commit 996a99b7f4
Merge: c094d771c1 71a8c08e22
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:21:12 2021 -0700

    Merge pull request #14759 from Arturlang/uplink_misc_item_rebalances

    Changes the cost of the holoparasite injector and the ricochet eyepatch

commit c094d771c1
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:20:52 2021 -0500

    Automatic changelog generation for PR #14749 [ci skip]

commit a56ac3ce07
Merge: 34b3fd1011 7dab80cbb7
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:20:49 2021 -0700

    Merge pull request #14749 from DrPainis/patch-14

    adds goliath calamari (currently untested because Forget™)

commit 34b3fd1011
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:19:42 2021 -0500

    Automatic changelog generation for PR #14771 [ci skip]

commit 30e7939e0e
Merge: 8d9cfc7b4a 25fe97e8fe
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:19:40 2021 -0700

    Merge pull request #14771 from keronshb/disposalcargo

    Lets the Cargo Shuttle use Disposal Pipes again

commit 8d9cfc7b4a
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:18:35 2021 -0500

    Automatic changelog generation for PR #14796 [ci skip]

commit 564a3aaa4b
Merge: 82a61121cd 2db540aae3
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:18:32 2021 -0700

    Merge pull request #14796 from MrJWhit/the-pr-that-gets-people-pissed

    Moves medical holodeck to restricted

commit 82a61121cd
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:18:12 2021 -0500

    Automatic changelog generation for PR #14803 [ci skip]

commit b28d4f26f3
Merge: 21e816abba 26544ddbb7
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:18:10 2021 -0700

    Merge pull request #14803 from bunny232/airmixies

    21/79 not 20/80

commit 21e816abba
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:17:54 2021 -0500

    Automatic changelog generation for PR #14806 [ci skip]

commit dcd80edf5f
Merge: 0ee2892bee 536135ec02
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:52 2021 -0700

    Merge pull request #14806 from zeroisthebiggay/patch-11

    cuts the amount of essence revenant objective needs in half so it is actually feasibly possible

commit 0ee2892bee
Merge: 5197b0aff3 fcd1ec83cc
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:39 2021 -0700

    Merge pull request #14807 from Putnam3145/make-sleeper-pref-good

    makes medihound sleeper toggle do something

commit 5197b0aff3
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:17:27 2021 -0500

    Automatic changelog generation for PR #14808 [ci skip]

commit 7af470efef
Merge: 4b675a9300 00bb96d467
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:25 2021 -0700

    Merge pull request #14808 from SandPoot/fixes-soulstones

    Fixes soulstones runtiming

commit 4b675a9300
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:17:20 2021 -0500

    Automatic changelog generation for PR #14810 [ci skip]

commit c7df74f452
Merge: ec63a4c62b 082ffa16f3
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:17 2021 -0700

    Merge pull request #14810 from zeroisthebiggay/patch-12

    Clowncar exploit fix

commit ec63a4c62b
Merge: 3d86ce9bda 84db564e0f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:14 2021 -0700

    Merge pull request #14779 from Arturlang/Orbit_menu_antags

    Makes orbit menu show antags if DNR

commit 3d86ce9bda
Merge: a339d43eac 015bd3c338
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:17:06 2021 -0700

    Merge pull request #14787 from WanderingFox95/WanderingFox95-ORV-Revamp

    ORV Uniform Revamp

commit eaf36d3137
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:16:55 2021 -0700

    Update _flags.dm

commit a339d43eac
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:15:58 2021 -0500

    Automatic changelog generation for PR #14802 [ci skip]

commit a7781f77fd
Merge: 31b544dc67 7826ced174
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:15:56 2021 -0700

    Merge pull request #14802 from bunny232/atmosfoam

    Atmos resin buff? fix?

commit 31b544dc67
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:15:41 2021 -0500

    Automatic changelog generation for PR #14805 [ci skip]

commit 2402c56bfc
Merge: 460026f3bc 1a72070f5c
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:15:36 2021 -0700

    Merge pull request #14805 from bunny232/hydroslimejelly

    Hydroponics slimejelly recipe from tg

commit 460026f3bc
Merge: 5ffceb376d 5563ed1492
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:15:22 2021 -0700

    Merge pull request #14774 from Citadel-Station-13/dependabot/npm_and_yarn/tgui/ws-7.4.6

    Bump ws from 7.4.3 to 7.4.6 in /tgui

commit 5ffceb376d
Merge: 87e6b3992f 413bb15961
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:15:11 2021 -0700

    Merge pull request #14812 from Citadel-Station-13/dependabot/pip/tools/pillow-8.2.0

    Bump pillow from 8.1.1 to 8.2.0 in /tools

commit 87e6b3992f
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:15:03 2021 -0500

    Automatic changelog generation for PR #14809 [ci skip]

commit c0e3b8d5ef
Merge: 259aed7903 b0940456f5
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:15:01 2021 -0700

    Merge pull request #14809 from SandPoot/speak-nice-yes

    Centralizes borg speech and uses some of the icons for the typing indicator

commit 259aed7903
Merge: fe8323f503 b2e2c49011
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:14:48 2021 -0700

    Merge pull request #14783 from DeltaFire15/spec-species-color

    Colors species names depending on traits

commit fe8323f503
Merge: 03e71c36a5 7458909970
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:13:13 2021 -0700

    Merge pull request #14747 from keronshb/reinforcedplasmawindowsteps

    Adds more deconstruction steps to stronger windows.

commit 03e71c36a5
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:12:26 2021 -0500

    Automatic changelog generation for PR #14712 [ci skip]

commit 7963dce24e
Merge: 0a2f05b5dd f4780d4b5a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:12:23 2021 -0700

    Merge pull request #14712 from keronshb/hereticadjustments

    Minor Heretic rework and fixes (Includes shifting realities and more)

commit 0a2f05b5dd
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 9 13:10:20 2021 -0500

    Automatic changelog generation for PR #14160 [ci skip]

commit 716c2a04e4
Merge: 103731ed05 475a7d2499
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Jun 9 11:10:17 2021 -0700

    Merge pull request #14160 from keronshb/motivation

    Adds a new traitor item, Motivation (Part 1)

commit 103731ed05
Author: Changelogs <action@github.com>
Date:   Wed Jun 9 00:26:52 2021 +0000

    Automatic changelog compile [ci skip]

commit 413bb15961
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Tue Jun 8 23:13:41 2021 +0000

    Bump pillow from 8.1.1 to 8.2.0 in /tools

    Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.1.1 to 8.2.0.
    - [Release notes](https://github.com/python-pillow/Pillow/releases)
    - [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
    - [Commits](https://github.com/python-pillow/Pillow/compare/8.1.1...8.2.0)

    ---
    updated-dependencies:
    - dependency-name: pillow
      dependency-type: direct:production
    ...

    Signed-off-by: dependabot[bot] <support@github.com>

commit 082ffa16f3
Author: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com>
Date:   Tue Jun 8 15:43:32 2021 -0400

    Update car.dm

commit b0940456f5
Author: SandPoot <enric_gabirel@hotmail.com>
Date:   Tue Jun 8 13:13:22 2021 -0300

    upload files

commit 00bb96d467
Author: SandPoot <enric_gabirel@hotmail.com>
Date:   Tue Jun 8 12:32:12 2021 -0300

    upload soulstone.dm

commit fcd1ec83cc
Author: Putnam <putnam3145@gmail.com>
Date:   Tue Jun 8 00:25:31 2021 -0700

    removed redundant check

commit f6e08a8d2a
Author: Putnam <putnam3145@gmail.com>
Date:   Tue Jun 8 00:24:54 2021 -0700

    include a message too

commit a236357ebe
Author: Putnam <putnam3145@gmail.com>
Date:   Tue Jun 8 00:21:19 2021 -0700

    makes medihound sleeper toggle do something

commit 536135ec02
Author: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com>
Date:   Tue Jun 8 01:17:10 2021 -0400

    last bit of finetuning

commit 55075fb31b
Author: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com>
Date:   Tue Jun 8 01:15:03 2021 -0400

    Update revenant.dm

commit 538f1c802d
Author: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com>
Date:   Tue Jun 8 01:13:12 2021 -0400

    Update revenant.dm

commit 1a72070f5c
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Mon Jun 7 21:44:33 2021 -0400

    slimejelly

    a

commit 614c3192e5
Author: Changelogs <action@github.com>
Date:   Tue Jun 8 00:43:09 2021 +0000

    Automatic changelog compile [ci skip]

commit 26544ddbb7
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Sun Jun 6 17:24:10 2021 -0400

    21/79 not 20/80

commit 7826ced174
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Sun Jun 6 12:54:07 2021 -0400

    Update effects_foam.dm

commit e24ecea492
Author: Changelogs <action@github.com>
Date:   Sun Jun 6 00:41:17 2021 +0000

    Automatic changelog compile [ci skip]

commit 697fffd347
Merge: f3f5b0d605 e4c01b3f74
Author: Lin <linzolle@gmail.com>
Date:   Sat Jun 5 16:27:12 2021 -0500

    Merge pull request #14792 from bunny232/meta-pool

    More reasonable SUCC for the meta pool drain.

commit f3f5b0d605
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Sat Jun 5 16:26:23 2021 -0500

    Automatic changelog generation for PR #14793 [ci skip]

commit 27d7b4b564
Merge: 06bcb7c904 720966f31e
Author: Lin <linzolle@gmail.com>
Date:   Sat Jun 5 16:26:21 2021 -0500

    Merge pull request #14793 from bunny232/pool-fog

    Pools now get misty at warm insteaed of scalding

commit 06bcb7c904
Merge: 5f6cb40d16 d3f6b69a86
Author: Lin <linzolle@gmail.com>
Date:   Sat Jun 5 16:21:12 2021 -0500

    Merge pull request #14795 from MrJWhit/boxstation-touchups2

    Boxstation touchups2

commit 7884ccf316
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Sat Jun 5 14:51:59 2021 +0200

    Only 5 units are necessary, so why keep it at 10?

    I mean, this is the refining process

commit bc56f74229
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 4 20:23:02 2021 -0700

    Delete docker_publish.yml

commit 40f9941849
Author: keronshb <keronshb@live.com>
Date:   Fri Jun 4 22:52:03 2021 -0400

    Fixes invisibility when being dragged and glass table cheese

commit 5f6cb40d16
Merge: 4b3a4d99dc 0dc1163a29
Author: Lin <linzolle@gmail.com>
Date:   Fri Jun 4 21:37:42 2021 -0500

    Merge pull request #14773 from Putnam3145/fix-activity-typo

    Fixes an activity display issue

commit 2db540aae3
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Fri Jun 4 20:53:34 2021 -0400

    Update holodeck.dm

commit 4b3a4d99dc
Author: Changelogs <action@github.com>
Date:   Sat Jun 5 00:48:25 2021 +0000

    Automatic changelog compile [ci skip]

commit 560ce54d59
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 4 17:37:59 2021 -0500

    Automatic changelog generation for PR #14763 [ci skip]

commit b757e22956
Merge: 2ec1abe71e 7dea33f6c2
Author: Putnam3145 <putnam3145@gmail.com>
Date:   Fri Jun 4 15:37:57 2021 -0700

    Merge pull request #14763 from zeroisthebiggay/dogears

    adds floppy dog ears that aren't obscenely dark

commit d3f6b69a86
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Fri Jun 4 13:26:06 2021 -0400

    Update BoxStation.dmm

commit 2ec1abe71e
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 4 12:13:39 2021 -0500

    Automatic changelog generation for PR #14786 [ci skip]

commit a31c99e361
Merge: 9acd1ed386 f631879b88
Author: Lin <linzolle@gmail.com>
Date:   Fri Jun 4 12:13:36 2021 -0500

    Merge pull request #14786 from Arturlang/fixes_float

    Fixes float()

commit 829944640e
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 4 09:24:15 2021 -0700

    Update _flags.dm

commit 9acd1ed386
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Fri Jun 4 10:29:45 2021 -0500

    Automatic changelog generation for PR #14788 [ci skip]

commit 4b3e33bb8a
Merge: 3fccc79483 2cfbee96ea
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri Jun 4 08:29:43 2021 -0700

    Merge pull request #14788 from coderbus13/master

    Pubbystation toxins burn chamber fix

commit 3fccc79483
Author: Changelogs <action@github.com>
Date:   Fri Jun 4 01:10:04 2021 +0000

    Automatic changelog compile [ci skip]

commit 720966f31e
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Thu Jun 3 19:10:46 2021 -0400

    Misty~

commit e4c01b3f74
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Thu Jun 3 18:49:43 2021 -0400

    Woopsie, right vars are set now

commit 4b5b6a9063
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Thu Jun 3 18:38:59 2021 -0400

    Update MetaStation.dmm

commit 2cfbee96ea
Author: coderbus13 <31148848+coderbus13@users.noreply.github.com>
Date:   Thu Jun 3 01:09:41 2021 -0500

    Delete temp

commit 9df9828666
Author: coderbus13 <31148848+coderbus13@users.noreply.github.com>
Date:   Thu Jun 3 01:08:36 2021 -0500

    Add files via upload

commit 8ca433fadb
Author: coderbus13 <31148848+coderbus13@users.noreply.github.com>
Date:   Thu Jun 3 01:08:20 2021 -0500

    Create temp

commit 8dff4fa301
Author: coderbus13 <31148848+coderbus13@users.noreply.github.com>
Date:   Thu Jun 3 01:06:35 2021 -0500

    Delete _maps/map_files/PubbyStation directory

    all my homies hate webedit

commit ef4ea8b0da
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 2 21:50:36 2021 -0500

    Automatic changelog generation for PR #14772 [ci skip]

commit c2c2825027
Merge: 36284922da 9040c08698
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 21:50:33 2021 -0500

    Merge pull request #14772 from Putnam3145/fix-sniper-bad

    Makes sniper zooming work

commit 36284922da
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 2 20:23:09 2021 -0500

    Automatic changelog generation for PR #14785 [ci skip]

commit 24f7576b92
Merge: 8a4c6c4cf4 160882fb6c
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 20:23:06 2021 -0500

    Merge pull request #14785 from MrJWhit/metastation-fix

    Metastation atmos fix

commit 8a4c6c4cf4
Author: Changelogs <action@github.com>
Date:   Thu Jun 3 01:12:16 2021 +0000

    Automatic changelog compile [ci skip]

commit c869f9b53a
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 2 19:44:57 2021 -0500

    Automatic changelog generation for PR #14784 [ci skip]

commit 0ead4e0bbb
Merge: 5876399d14 e08c10e5fb
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 19:44:55 2021 -0500

    Merge pull request #14784 from TripleShades/sigh-pubby

    Tiny Pubby Additions

commit 5876399d14
Merge: b341c184b5 f70d6b9ea5
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 19:41:45 2021 -0500

    Merge pull request #14723 from bunny232/delta-ce-office-update

    Delta ce office rearrangement

commit b341c184b5
Author: CitadelStationBot <citadelstationcommunity@gmail.com>
Date:   Wed Jun 2 19:41:25 2021 -0500

    Automatic changelog generation for PR #14782 [ci skip]

commit 2b8ef762a7
Merge: 0fdfda7dc4 fe9fdf0975
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 19:41:23 2021 -0500

    Merge pull request #14782 from MrJWhit/xenoruin-fix

    Fixing xenoruins floor

commit 0fdfda7dc4
Merge: cb52be5dd9 0f0ad31aab
Author: Lin <linzolle@gmail.com>
Date:   Wed Jun 2 19:40:59 2021 -0500

    Merge pull request #14764 from MrJWhit/boxstation-touchups

    Touching up boxstation engineering

commit b2e2c49011
Author: DeltaFire <andreoxgrievous@gmail.com>
Date:   Wed Jun 2 17:47:57 2021 +0200

    plasmamen & golems

commit 015bd3c338
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 17:22:46 2021 +0200

    Armor for security armor and a small fix

commit d8e31af507
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 15:31:19 2021 +0200

    And the Icons themselves

commit 505dd3399f
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 15:30:13 2021 +0200

    Inventory Icons

commit 5c827d9796
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 15:28:46 2021 +0200

    Bit of that

commit 9cdc45a905
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 15:27:47 2021 +0200

    Bit of this

commit b563e6c2e0
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Wed Jun 2 15:25:50 2021 +0200

    Splits Engineering and Security ORV Suits

commit f631879b88
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed Jun 2 14:27:22 2021 +0300

    fixes_float

commit 0d206742fa
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Tue Jun 1 21:35:49 2021 -0700

    Update world_topic.dm

commit 160882fb6c
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Tue Jun 1 21:48:22 2021 -0400

    Update MetaStation.dmm

commit e08c10e5fb
Author: TripleShades <MegaProto@gmx.com>
Date:   Tue Jun 1 17:00:16 2021 -0400

    fucking pubby

    this should be everything

commit 0f01a4a7da
Author: DeltaFire <andreoxgrievous@gmail.com>
Date:   Tue Jun 1 22:52:39 2021 +0200

    huh

commit dd33371a3b
Author: DeltaFire <andreoxgrievous@gmail.com>
Date:   Tue Jun 1 22:48:57 2021 +0200

    colors

commit fe9fdf0975
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Tue Jun 1 11:26:46 2021 -0400

    Update lavaland_surface_alien_nest.dmm

commit 656d0545cd
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Tue Jun 1 01:32:54 2021 -0700

    Update world_topic.dm

commit f9be173f08
Author: keronshb <keronshb@live.com>
Date:   Mon May 31 22:25:32 2021 -0400

    Fixes the shoes?

    Maybe?

commit 70926f5daf
Merge: e0a1e50927 cb52be5dd9
Author: keronshb <keronshb@live.com>
Date:   Mon May 31 22:21:34 2021 -0400

    Merge remote-tracking branch 'upstream/master' into floorcluwneport

commit 84db564e0f
Author: Arturlang <arturpaavooskari.lang@gmail.com>
Date:   Tue Jun 1 02:25:06 2021 +0300

    Prettier? code

commit 4b541d3dac
Author: Arturlang <arturpaavooskari.lang@gmail.com>
Date:   Tue Jun 1 02:21:33 2021 +0300

    phonecode

commit 8687312935
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Mon May 31 18:14:06 2021 +0300

    Makes orbit menu show antags if DNR

commit e69729beb4
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 12:15:16 2021 +0200

    So he doesn't need sodium thiopental after all.

    Turns out Furranium has a knockdown.

commit dd6452ad5b
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 10:11:12 2021 +0200

    Fixes the file? Please?

commit b3851a4647
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 10:01:13 2021 +0200

    Adds the event to the game so it actually loads, oops

commit 249d23a6cc
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 09:52:31 2021 +0200

    Fixed something with the event

commit f70d6b9ea5
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Mon May 31 01:52:43 2021 -0400

    dir = 1 and adds a forgotten fire alarm.

commit ff379e41b6
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Mon May 31 01:47:49 2021 -0400

    Think map preview think!

commit 398491b584
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 00:42:33 2021 +0200

    It's on the nose but here's a sound for the spawn.

commit 2516afbbba
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Mon May 31 00:41:59 2021 +0200

    Cat Surgeon Event

    If I did it right, thanks Keron!

commit ae2970f318
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Sun May 30 21:17:03 2021 +0200

    Adds a special Catranq Dart

commit df0e1057d1
Author: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com>
Date:   Sun May 30 21:15:44 2021 +0200

    Imagine this crazy person became a threat suddenly

commit 5563ed1492
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Sun May 30 17:06:12 2021 +0000

    Bump ws from 7.4.3 to 7.4.6 in /tgui

    Bumps [ws](https://github.com/websockets/ws) from 7.4.3 to 7.4.6.
    - [Release notes](https://github.com/websockets/ws/releases)
    - [Commits](https://github.com/websockets/ws/compare/7.4.3...7.4.6)

    Signed-off-by: dependabot[bot] <support@github.com>

commit 0dc1163a29
Author: Putnam <putnam3145@gmail.com>
Date:   Sun May 30 00:44:02 2021 -0700

    adds a sorely needed line break

commit 9040c08698
Author: Putnam <putnam3145@gmail.com>
Date:   Sun May 30 00:38:07 2021 -0700

    whoops i forgot the var

commit 2ab05d1247
Author: Putnam <putnam3145@gmail.com>
Date:   Sun May 30 00:31:20 2021 -0700

    makes sniper zooming work

commit 25fe97e8fe
Author: keronshb <keronshb@live.com>
Date:   Sat May 29 13:21:23 2021 -0400

    Lets Disposal pipes work on the cargo shuttle again

    Silly removal.

commit 71db9298a1
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri May 28 18:21:46 2021 -0700

    Update world_topic.dm

commit c1a9f9cfe9
Author: keronshb <keronshb@live.com>
Date:   Fri May 28 17:40:43 2021 -0400

    GLOW ANIMATION

commit 86a825bb9f
Author: keronshb <keronshb@live.com>
Date:   Fri May 28 15:57:16 2021 -0400

    Space Adapt outline

commit b1b931a7c4
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Thu May 27 22:48:24 2021 -0700

    Update _bodyparts.dm

commit ed86a6628a
Author: Linzolle <linzolle@gmail.com>
Date:   Thu May 27 19:53:55 2021 -0500

    THIS SHOULD REALLY BE THE OTHER WAY AROUND

commit 0cf7c5070d
Author: Linzolle <linzolle@gmail.com>
Date:   Thu May 27 19:45:12 2021 -0500

    parentheses

commit 46833abf0b
Author: Linzolle <linzolle@gmail.com>
Date:   Thu May 27 19:34:00 2021 -0500

    add cult_permitted area flag

commit 0f0ad31aab
Author: MrJWhit <48370570+MrJWhit@users.noreply.github.com>
Date:   Thu May 27 17:58:21 2021 -0400

    Update BoxStation.dmm

commit 7dea33f6c2
Author: zerothebigboy <cookiesvvww@gmail.com>
Date:   Thu May 27 16:08:28 2021 -0400

    doge

commit f7ca7d7afe
Merge: f4ba3aa688 bff21669e3
Author: keronshb <keronshb@live.com>
Date:   Thu May 27 13:29:08 2021 -0400

    Merge remote-tracking branch 'upstream/master'

commit e0a1e50927
Author: keronshb <keronshb@live.com>
Date:   Thu May 27 13:25:27 2021 -0400

    Fixes the linter

commit 482b679937
Author: keronshb <keronshb@live.com>
Date:   Thu May 27 12:24:16 2021 -0400

    Should fix the linter?

commit 2eeb6ede1e
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 12:20:54 2021 -0400

    lowers cat meteor threat and makes them use the cat meteor sprite

commit 903ff69621
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 12:19:51 2021 -0400

    adds a sprite for cat meteors (it's just a copy of the space cat sprite)

commit d42fb1ae90
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 12:17:41 2021 -0400

    makes cat meteors significantly rarer than meaty ores

commit 8f1db2d5ec
Author: keronshb <keronshb@live.com>
Date:   Thu May 27 12:16:54 2021 -0400

    Fixes some stuff

    Actually ticks the spell, fixes the brain damage issue, etc.

commit 1ce8ffba11
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 11:48:09 2021 -0400

    fixes the typepath for cat meteors

commit 11a6cfd99c
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Thu May 27 03:27:10 2021 -0400

    Delta station ce office, now with less microwave slaughter.

commit 1b8ef53014
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 00:55:41 2021 -0400

    maybe makes this compile

commit cbb7673e79
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 00:30:29 2021 -0400

    Adds the actual event.

    Yes, cat meteors have the same announcement as carp.

commit 98d5499712
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 00:25:55 2021 -0400

    adds the cat wave_type

commit d199f0585a
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Thu May 27 00:23:24 2021 -0400

    adds cat meteors

    because funny

commit 7dbab19597
Author: keronshb <keronshb@live.com>
Date:   Thu May 27 00:14:43 2021 -0400

    Fixes the linters and adds a proper async

commit 78db6bd5c2
Author: keronshb <keronshb@live.com>
Date:   Wed May 26 21:58:35 2021 -0400

    Ports Floor Cluwnes

    Oh fuck oh god

commit 71a8c08e22
Author: Arturlang <arturpaavooskari.lang@gmail.com>
Date:   Wed May 26 18:40:59 2021 +0300

    A lil more

commit 673a322cbb
Author: Artur <arturpaavooskari.lang@gmail.com>
Date:   Wed May 26 18:29:18 2021 +0300

    changes cost of two uplink items

commit 9e3c1ff860
Author: keronshb <keronshb@live.com>
Date:   Mon May 24 22:46:59 2021 -0400

    adds floor cluwnes from yog

commit 7dab80cbb7
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Sun May 23 23:42:16 2021 -0400

    fuck

commit 51911e1f27
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Sun May 23 23:36:11 2021 -0400

    adds the recipe for goliath calamari

commit a7add64905
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Sun May 23 23:29:25 2021 -0400

    adds a lazily made sprite for goliath calamari

    I suck at spriting so this is the best I could do.

commit ce1b170b46
Author: DrPainis <79603707+DrPainis@users.noreply.github.com>
Date:   Sun May 23 23:27:48 2021 -0400

    adds goliath calamari

commit 7458909970
Author: keronshb <keronshb@live.com>
Date:   Sun May 23 13:36:03 2021 -0400

    Switched heated screws to solder.

commit 8787caccba
Author: keronshb <keronshb@live.com>
Date:   Sat May 22 14:12:31 2021 -0400

    Fixes the roundstart deconstruction issue

commit bd05dd29b6
Author: keronshb <keronshb@live.com>
Date:   Sat May 22 13:58:01 2021 -0400

    ReinforcedPlasmaSteps

    Adds more steps for deconning stronger windows

commit 0dd24d9de9
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri May 21 19:35:46 2021 -0700

    Update world_topic.dm

commit f07d832cad
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Fri May 21 18:20:28 2021 -0700

    Update world_topic.dm

commit 538efd2d8f
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 20:01:11 2021 -0400

    Alt Click and Alt Click message

commit 88dc0821d1
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 19:49:48 2021 -0400

    User gibs when being turned into a spess dragon

commit 0f7c71cfdb
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 19:16:24 2021 -0400

    trailing endline

commit 1d843cc72f
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 19:19:35 2021 -0400

    Part 3 - the missing stuff

commit b19fb1cfa8
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 19:18:50 2021 -0400

    Part 2 with Sprites

commit a15637a929
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 19:18:19 2021 -0400

    Part 1 of Health Bars for Space Dragon

commit f4780d4b5a
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 11:19:12 2021 -0400

    Correct Raw Prophet recipe

commit 547b3d0a0b
Author: keronshb <keronshb@live.com>
Date:   Wed May 19 11:15:48 2021 -0400

    TP finally works

commit b8b25662ff
Author: keronshb <keronshb@live.com>
Date:   Tue May 18 22:12:02 2021 -0400

    Couple of fixes, almost ready to go

commit d2f69acaf8
Author: keronshb <keronshb@live.com>
Date:   Tue May 18 12:06:32 2021 -0400

    Space Dragon Event

    Ports the Space Dragon event

commit f802890153
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun May 16 22:17:50 2021 -0700

    Update world_topic.dm

commit 8ff0685f0d
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sat May 15 18:28:00 2021 -0700

    Update world_topic.dm

commit 3ae3caa14a
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Fri May 14 18:05:24 2021 -0400

    Update DeltaStation2.dmm

commit 94bd7308ae
Author: bunny232 <bunnyracer23@yahoo.com>
Date:   Fri May 14 17:38:55 2021 -0400

    Update DeltaStation2.dmm

commit bc35ffeaa2
Author: keronshb <keronshb@live.com>
Date:   Fri May 14 12:35:53 2021 -0400

    [READY] Space Dragon Quality Improvement Update (#57942)

     qol: Space Dragon's gust attack is now tied to right click instead of an ability button
    balance: Space Dragon has received numerous balance changes, most notably that Space Dragon will stall the shuttle until it loses or completes its objectives
    fix: Fixed numerous bugs with Space Dragon, most notably the rifts not vanishing after Space Dragon's death
    soundadd: Space Dragon now has a custom roar for dying and winning
    imagedel: Deleted now unused Space Dragon ability icon
    refactor: Space Dragon's speed changes are now controlled using movespeed modifiers instead of direct speed adjustments

    Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

commit 0b06957dc7
Author: Ghom <42542238+Ghommie@users.noreply.github.com>
Date:   Sat Mar 6 02:13:11 2021 +0100

    Space Dragons are now actually capable of flight. (#57428)

    * Space Dragons are now actually capable of flight.

    * Gives them the tag so the flying animation doesn't apply, it looks like shit without this

commit a6ae645fc2
Author: keronshb <keronshb@live.com>
Date:   Fri May 14 12:32:48 2021 -0400

    Space Dragon Fixes (#55759)

commit 3aa72f7d31
Author: keronshb <keronshb@live.com>
Date:   Fri May 14 12:31:42 2021 -0400

    Space Dragon QOL and Additional Features (#54124)

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

commit 7e5a44cbd6
Author: keronshb <keronshb@live.com>
Date:   Fri May 14 12:28:59 2021 -0400

    Minor refactor to space dragon code to fix various bugs and issues (#53944)

commit 2eba3ae383
Author: keronshb <keronshb@live.com>
Date:   Fri May 14 12:27:03 2021 -0400

    [READY]New Side Antagonist: Space Dragon (#42551)

    * Add files via upload

    * Rename space_dragon.dm to code/modules/events/space_dragon.dm

    * Adds Space Dragon

    * Adds Space Dragon Event

    * Remove Copied File

    * Put antagonist definition in proper location for space dragon

    * Update space_dragon.dm

    * Removed passive health regen from space dragon

    * Updated Weight and Earliness for Space Dragon

    * Added Objective to Space Dragon, Updated Starting Blurb

    * Cleaned Up the Objective Determiner

    * Actually fix the space dragon objectives

    * Fix the objective display for the space dragon's target

    * Updated Space Dragon Intro Blurb

    * Updated Centcom Message When Space Dragon Spawns

    * Updated Space Dragon's description with new lore

    * Clean Up Space Dragon's OnFire()

    * Add Space Dragon Sprites

    * Sprite in wrong location

    * Properly adds Space Dragon Sprites

    * Adds Space Dragon Tiny Sprite to be Carp

    * Space Dragon Uses New Sprites, Tiny Form Updated

    * Increased Time Til' Dragon Spawn

    * Drake's Tail Sweep Now Uses Prebuilt Spell

    Thanks to Cobblestone for the head's up on this.

commit ef470a3baf
Author: keronshb <keronshb@live.com>
Date:   Thu May 13 13:37:35 2021 -0400

    Fixes Void Robes for Digi legs

commit bdd42c728d
Author: keronshb <keronshb@live.com>
Date:   Thu May 13 13:21:34 2021 -0400

    Adds a missing space

commit 55ee9a00b4
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 18:24:26 2021 -0700

    woo yeah woo yeah

commit 8e2921f3c0
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 17:36:01 2021 -0700

    woo

commit 59f160be57
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 16:59:48 2021 -0700

    woo

commit 2a3a45573f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 16:58:17 2021 -0700

    woo

commit 6237928c4b
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 16:55:21 2021 -0700

    woo

commit 0b9d021d9b
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 16:51:28 2021 -0700

    woo

commit 482be2ee0d
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 16:37:13 2021 -0700

    okay

commit 611dca2776
Author: keronshb <keronshb@live.com>
Date:   Wed May 12 17:04:10 2021 -0400

    New Line at End of file

commit 21ca62a2e2
Author: keronshb <keronshb@live.com>
Date:   Wed May 12 14:54:44 2021 -0400

    FINALLY fixes the comma, I think

    Time to try

commit 0841cea1d5
Author: keronshb <keronshb@live.com>
Date:   Wed May 12 13:17:23 2021 -0400

    I still have no idea what's messing with this

commit 3fb84eb1d8
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 03:35:02 2021 -0700

    fix

commit aeefeb6c53
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed May 12 03:33:41 2021 -0700

    woo

commit 0185007e6c
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 19:33:53 2021 -0400

    adding ; to line 25

commit 0cb6f2469b
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 18:39:36 2021 -0400

    Have no idea...

commit 8c7c41bfd4
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 18:17:41 2021 -0400

    Fixes the comma, I think

commit 1de8b69312
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 18:10:27 2021 -0400

    Fixes the linter

    Fixes the linter

commit 79f5feea9f
Merge: 4749be2ba8 82b6443928
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 17:58:41 2021 -0400

    Merge remote-tracking branch 'upstream/master' into hereticadjustments

commit 4749be2ba8
Author: keronshb <keronshb@live.com>
Date:   Tue May 11 16:52:16 2021 -0400

    Final rework

    Last part.

commit 57dfe8dc09
Author: keronshb <keronshb@live.com>
Date:   Mon May 10 21:12:45 2021 -0400

    New Reality when one disappears

    Spawns in a new reality when one disappears.

commit cda492c6ba
Author: keronshb <keronshb@live.com>
Date:   Sun May 9 20:10:38 2021 -0400

    Removes the condition if they're knocked down

commit 82e4421cde
Author: keronshb <keronshb@live.com>
Date:   Sun May 9 20:01:30 2021 -0400

    Ports Break in hand from tg

    58526

commit 11a7e118fe
Author: keronshb <keronshb@live.com>
Date:   Fri May 7 23:58:09 2021 -0400

    Puts off balance duration to 2 seconds

    Might be better at 2.

commit 7947258e51
Author: keronshb <keronshb@live.com>
Date:   Wed May 5 23:57:01 2021 -0400

    Off balance disarm

    If it hits a wall or a person while under the effect of off balance.

commit be2e962983
Author: keronshb <keronshb@live.com>
Date:   Tue May 4 00:51:16 2021 -0400

    Off Balance for Guns only again

    Was intended for guns

commit 4289b8be1e
Merge: 78a9cdc5c6 0c803e0232
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 22:34:17 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit 78a9cdc5c6
Merge: 7cc6bba5ff 810eba15ed
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 22:32:58 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit 7cc6bba5ff
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 22:27:09 2021 -0700

    fixes

commit 456b55cb06
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 22:25:39 2021 -0700

    that too

commit 80a8467e9e
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 22:24:49 2021 -0700

    hm

commit fefb33454f
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 16:16:55 2021 -0700

    do that too

commit c3d91f01db
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 07:20:54 2021 -0700

    scripts

commit d06c33bd8d
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 07:17:34 2021 -0700

    restore cit stuff

commit 3f09460b6e
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 07:04:29 2021 -0700

    let's do that

commit 488a6a6927
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Wed Apr 28 07:02:26 2021 -0700

    woops

commit 375da54dc2
Merge: 133f3d55d2 810eba15ed
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Tue Apr 27 10:34:29 2021 -0700

    Merge pull request #78 from Citadel-Station-13/master

    4/27

commit 50831a9c73
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:40:33 2021 -0700

    fixes

commit 47bd3c6c7c
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:22:46 2021 -0700

    ok

commit 7919f09160
Merge: 1dbd86499c 44c2a9eecd
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:21:20 2021 -0700

    Merge remote-tracking branch 'citadel/master' into backend_sync

commit 1dbd86499c
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:18:41 2021 -0700

    others

commit d017d7df66
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:16:38 2021 -0700

    let's do that

commit 9e123db32a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:15:25 2021 -0700

    ok

commit 990e74179a
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:09:41 2021 -0700

    other thing

commit 9933a917ac
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 16:08:33 2021 -0700

    ?

commit fdafe0fb84
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 15:57:32 2021 -0700

    vscode

commit 12894384ff
Author: silicons <2003111+silicons@users.noreply.github.com>
Date:   Sun Apr 25 14:17:37 2021 -0700

    okay

commit 475a7d2499
Author: keronshb <keronshb@live.com>
Date:   Wed Apr 14 18:01:17 2021 -0400

    Icon fixes

    Should fix the merge conflict

commit 20c190c17d
Merge: bb047bd57e 4d797ab694
Author: keronshb <keronshb@live.com>
Date:   Wed Apr 14 17:55:24 2021 -0400

    Merge remote-tracking branch 'upstream/master' into motivation

commit bb047bd57e
Author: keronshb <keronshb@live.com>
Date:   Wed Apr 14 17:54:33 2021 -0400

    dunno why this is here

    dunno why this is here

commit 133f3d55d2
Merge: 624b5a9707 d4d3eea5aa
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Mon Apr 12 22:26:26 2021 -0700

    Merge pull request #77 from Citadel-Station-13/master

    4/12

commit 624b5a9707
Merge: 98e3464604 b6b9619f2d
Author: EmeraldSundisk <51142887+EmeraldSundisk@users.noreply.github.com>
Date:   Fri Apr 9 16:40:36 2021 -0700

    Merge pull request #75 from Citadel-Station-13/master

    4/9

commit 41530110a2
Author: keronshb <keronshb@live.com>
Date:   Wed Feb 10 20:00:17 2021 -0500

    LINTER

    AHHHH NEW LINE

commit 827b4efb42
Author: keronshb <keronshb@live.com>
Date:   Fri Jan 29 13:42:07 2021 -0500

    Fixes ANOTHER merge conflict

    agony

commit ae970d5b22
Merge: 26dfff87fc c8dc669e58
Author: keronshb <keronshb@live.com>
Date:   Fri Jan 29 13:38:11 2021 -0500

    Merge remote-tracking branch 'origin/master' into motivation

commit 26dfff87fc
Author: keronshb <keronshb@live.com>
Date:   Fri Jan 29 13:17:46 2021 -0500

    Slight stat buffs, adds parries and comments

    Should be pretty close to 20tc worthy.

commit 4346cb937a
Author: keronshb <keronshb@live.com>
Date:   Fri Jan 29 09:32:28 2021 -0500

    Fixes merge conflict and makes minor adjustments

    TItle

commit a4e933185e
Merge: 5761417e5b 4d945d5f15
Author: keronshb <keronshb@live.com>
Date:   Fri Jan 29 09:29:55 2021 -0500

    Merge remote-tracking branch 'origin/master' into motivation

commit 5761417e5b
Author: keronshb <keronshb@live.com>
Date:   Thu Jan 28 22:21:20 2021 -0500

    Adding it to traitors

    Here it is!

commit a6725b3c23
Author: keronshb <keronshb@live.com>
Date:   Thu Jan 28 22:06:25 2021 -0500

    Motivation near final

    Should be almost done after this.

commit a2833ea85f
Author: keronshb <keronshb@live.com>
Date:   Tue Jan 26 13:27:06 2021 -0500

    Movitation WIP

    WIP still working on this
This commit is contained in:
DeltaFire
2021-06-21 17:50:24 +02:00
parent cd4c75b7eb
commit 8c89d3193d
368 changed files with 92539 additions and 77696 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# end_of_line = lf
end_of_line = lf
[*.yml]
indent_style = space
+108
View File
@@ -0,0 +1,108 @@
# dmdoc
[DOCUMENTATION]: http://codedocs.tgstation13.org
[BYOND]: https://secure.byond.com/
[DMDOC]: https://github.com/SpaceManiac/SpacemanDMM/tree/master/src/dmdoc
[DMDOC] is a documentation generator for DreamMaker, the scripting language
of the [BYOND] game engine. It produces simple static HTML files based on
documented files, macros, types, procs, and vars.
We use **dmdoc** to generate [DOCUMENTATION] for our code, and that documentation
is automatically generated and built on every new commit to the master branch
This gives new developers a clickable reference [DOCUMENTATION] they can browse to better help
gain understanding of the /tg/station codebase structure and api reference.
## Documenting code on /tg/station
We use block comments to document procs and classes, and we use `///` line comments
when documenting individual variables.
It is required that all new code be covered with DMdoc code, according to the [Requirements](#Required)
We also require that when you touch older code, you must document the functions that you
have touched in the process of updating that code
### Required
A class *must* always be autodocumented, and all public functions *must* be documented
All class level defined variables *must* be documented
Internal functions *should* be documented, but may not be
A public function is any function that a developer might reasonably call while using
or interacting with your object. Internal functions are helper functions that your
public functions rely on to implement logic
### Documenting a proc
When documenting a proc, we give a short one line description (as this is shown
next to the proc definition in the list of all procs for a type or global
namespace), then a longer paragraph which will be shown when the user clicks on
the proc to jump to it's definition
```
/**
* Short description of the proc
*
* Longer detailed paragraph about the proc
* including any relevant detail
* Arguments:
* * arg1 - Relevance of this argument
* * arg2 - Relevance of this argument
*/
```
### Documenting a class
We first give the name of the class as a header, this can be omitted if the name is
just going to be the typepath of the class, as dmdoc uses that by default
Then we give a short oneline description of the class
Finally we give a longer multi paragraph description of the class and it's details
```
/**
* # Classname (Can be omitted if it's just going to be the typepath)
*
* The short overview
*
* A longer
* paragraph of functionality about the class
* including any assumptions/special cases
*
*/
```
### Documenting a variable/define
Give a short explanation of what the variable, in the context of the class, or define is.
```
/// Type path of item to go in suit slot
var/suit = null
```
## Module level description of code
Modules are the best way to describe the structure/intent of a package of code
where you don't want to be tied to the formal layout of the class structure.
On /tg/station we do this by adding markdown files inside the `code` directory
that will also be rendered and added to the modules tree. The structure for
these is deliberately not defined, so you can be as freeform and as wheeling as
you would like.
[Here is a representative example of what you might write](http://codedocs.tgstation13.org/code/modules/keybindings/readme.html)
## Special variables
You can use certain special template variables in DM DOC comments and they will be expanded
```
[DEFINE_NAME] - Expands to a link to the define definition if documented
[/mob] - Expands to a link to the docs for the /mob class
[/mob/proc/Dizzy] - Expands to a link that will take you to the /mob class and anchor you to the dizzy proc docs
[/mob/var/stat] - Expands to a link that will take you to the /mob class and anchor you to the stat var docs
```
You can customise the link name by using `[link name][link shorthand].`
eg. `[see more about dizzy here] [/mob/proc/Dizzy]`
This is very useful to quickly link to other parts of the autodoc code to expand
upon a comment made, or reasoning about code
+345 -90
View File
@@ -1,8 +1,29 @@
# CONTRIBUTING
## Reporting Issues
1. [Reporting Issues](#reporting-issues)
2. [Introduction](#introduction)
3. [Getting Started](#getting-started)
4. [Meet the Team](#meet-the-team)
1. [Headcoder](#headcoder)
2. [Maintainers](#maintainers)
3. [Issue Managers](#issue-managers)
5. [Specifications](#specifications)
6. [Pull Request Process](#pull-request-process)
7. [Porting features/sprites/sounds/tools from other codebases](#porting-featuresspritessoundstools-from-other-codebases)
8. [Banned content](#banned-content)
9. [A word on Git](#a-word-on-git)
See [this page](http://tgstation13.org/wiki/Reporting_Issues) for a guide and format to issue reports.
## Reporting Issues
If you ever encounter a bug in-game, the best way to let a coder know about it is with our GitHub Issue Tracker. Please make sure you use the supplied issue template, and include the round ID for the server.
(If you don't have an account, making a new one takes only one minute.)
If you have difficulty, ask for help in the #coding-general channel on our discord.
## Citadel Station 13
Notice: We are currently using a near-copy of /tg/station's CONTRIBUTING.md file. Keep in mind which codebase you are on.
Any questions regarding help for development/spriting/coding/etc should go on #development-discussion-main on our discord.
https://discord.gg/fkVVfVH48n
## Introduction
@@ -15,35 +36,63 @@ First things first, we want to make it clear how you can contribute (if you've n
/tg/station doesn't have a list of goals and features to add; we instead allow freedom for contributors to suggest and create their ideas for the game. That doesn't mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful starting guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
If you want to contribute the first thing you'll need to do is [set up Git](http://tgstation13.org/wiki/Setting_up_git) so you can download the source code.
After setting it up, optionally navigate your git commandline to the project folder and run the command: `git config blame.ignoreRevsFile .git-blame-ignore-revs`.
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) that will help you get started contributing to /tg/station with Git and Dream Maker. For beginners, it is recommended you work on small projects like bugfixes at first. If you need help learning to program in BYOND, check out this [repository of resources](http://www.byond.com/developer/articles/resources).
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/Guides#Development_and_Contribution_Guides) that will help you get started contributing to /tg/station with Git and Dream Maker. For beginners, it is recommended you work on small projects like bugfixes at first. If you need help learning to program in BYOND, check out this [repository of resources](http://www.byond.com/developer/articles/resources).
There is an open list of approachable issues for [your inspiration here](https://github.com/tgstation/-tg-station/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22).
There is an open list of approachable issues for [your inspiration here](https://github.com/Citadel-Station-13/Citadel-Station-13/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22).
You can of course, as always, ask for help at [#coderbus](irc://irc.rizon.net/coderbus) on irc.rizon.net. We're just here to have fun and help out, so please don't expect professional support.
You can of course, as always, ask for help on the Discord channels or the forums. We're just here to have fun and help out, so please don't expect professional support.
## Meet the Team
**Design Lead**
The Design Lead has the final say on what gameplay changes get into and out of the game. He or she has full veto power on any feature or balance additions, changes, or removals, and establishes a general, personally-preferred direction for the game.
**Headcoder**
### Headcoder
The Headcoder is responsible for controlling, adding, and removing maintainers from the project. In addition to filling the role of a normal maintainer, they have sole authority on who becomes a maintainer, as well as who remains a maintainer and who does not.
**Art Director**
The Art Director controls sprites and aesthetic that get into the game. While sprites for brand-new additions are generally accepted regardless of quality, modified current art assets fall to the Art Director, who can decide whether or not a sprite tweak is both merited and a suitable replacement.
They also control the general "perspective" of the game - how sprites should generally look, especially the angle from which they're viewed. An example of this is the [3/4 perspective](http://static.tvtropes.org/pmwiki/pub/images/kakarikovillage.gif), which is a bird's eye view from above the object being viewed.
**Maintainers**
### Maintainers
Maintainers are quality control. If a proposed pull request doesn't meet the following specifications, they can request you to change it, or simply just close the pull request. Maintainers are required to give a reason for closing the pull request.
Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
<details>
<summary>Maintainer Guidelines</summary>
These are the few directives we have for project maintainers.
- Do not merge PRs you create.
- Do not merge PRs until 24 hours have passed since it was opened. Exceptions include:
- Emergency fixes.
- Try to get secondary maintainer approval before merging if you are able to.
- PRs with empty commits intended to generate a changelog.
- Do not merge PRs that contain content from the [banned content list](./CONTRIBUTING.md#banned-content).
These are not steadfast rules as maintainers are expected to use their best judgement when operating.
Our team is entirely voluntary, as such we extend our thanks to maintainers, issue managers, and contributors alike for helping keep the project alive.
</details>
### Issue Managers
Issue Managers help out the project by labelling bug reports and PRs and closing bug reports which are duplicates or are no longer applicable.
<details>
<summary>What You Can and Can't Do as an Issue Manager</summary>
This should help you understand what you can and can't do with your newfound github permissions.
Things you **CAN** do:
* Label issues appropriately
* Close issues when appropriate
* Label PRs when appropriate
Things you **CAN'T** do:
* [Close PRs](https://imgur.com/w2RqpX8.png): Only maintainers are allowed to close PRs. Do not hit that button.
</details>
## Specifications
As mentioned before, you are expected to follow these specifications in order to make everyone's lives easier. It'll save both your time and ours, by making sure you don't have to make any changes and we don't have to ask you to. Thank you for reading this section!
@@ -57,6 +106,7 @@ As BYOND's Dream Maker (henceforth "DM") is an object-oriented language, code mu
DM will allow you nest almost any type keyword into a block, such as:
```DM
// Not our style!
datum
datum1
var
@@ -77,7 +127,7 @@ datum
proc3()
code
proc2()
..()
. = ..()
code
```
@@ -86,6 +136,7 @@ The use of this is not allowed in this project as it makes finding definitions v
The previous code made compliant:
```DM
// Matches /tg/station style.
/datum/datum1
var/varname1
var/varname2
@@ -101,18 +152,50 @@ The previous code made compliant:
/datum/datum1/datum2/proc/proc3()
code
/datum/datum1/datum2/proc2()
..()
. = ..()
code
```
### All `process` procs need to make use of delta-time and be frame independent
In a lot of our older code, `process()` is frame dependent. Here's some example mob code:
```DM
/mob/testmob
var/health = 100
var/health_loss = 4 //We want to lose 2 health per second, so 4 per SSmobs process
/mob/testmob/process(delta_time) //SSmobs runs once every 2 seconds
health -= health_loss
```
As the mobs subsystem runs once every 2 seconds, the mob now loses 4 health every process, or 2 health per second. This is called frame dependent programming.
Why is this an issue? If someone decides to make it so the mobs subsystem processes once every second (2 times as fast), your effects in process() will also be two times as fast. Resulting in 4 health loss per second rather than 2.
How do we solve this? By using delta-time. Delta-time is the amount of seconds you would theoretically have between 2 process() calls. In the case of the mobs subsystem, this would be 2 (As there is 2 seconds between every call in `process()`). Here is a new example using delta-time:
```DM
/mob/testmob
var/health = 100
var/health_loss = 2 //Health loss every second
/mob/testmob/process(delta_time) //SSmobs runs once every 2 seconds
health -= health_loss * delta_time
```
In the above example, we made our health_loss variable a per second value rather than per process. In the actual process() proc we then make use of deltatime. Because SSmobs runs once every 2 seconds. Delta_time would have a value of 2. This means that by doing health_loss * delta_time, you end up with the correct amount of health_loss per process, but if for some reason the SSmobs subsystem gets changed to be faster or slower in a PR, your health_loss variable will work the same.
For example, if SSmobs is set to run once every 4 seconds, it would call process once every 4 seconds and multiply your health_loss var by 4 before subtracting it. Ensuring that your code is frame independent.
### No overriding type safety checks
The use of the : operator to override type safety checks is not allowed. You must cast the variable to the proper type.
### Type paths must begin with a /
### Type paths must begin with a `/`
eg: `/datum/thing`, not `datum/thing`
### Type paths must be lowercase
eg: `/datum/thing/blue`, not `datum/thing/BLUE` or `datum/thing/Blue`
### Type paths must be snake case
eg: `/datum/blue_bird`, not `/datum/BLUEBIRD` or `/datum/BlueBird` or `/datum/Bluebird` or `/datum/blueBird`
### Datum type paths must began with "datum"
In DM, this is optional, but omitting it makes finding definitions harder.
@@ -128,16 +211,28 @@ var/path_type = /obj/item/baseball_bat
var/path_type = "/obj/item/baseball_bat"
```
### Use var/name format when declaring variables
### Use `var/name` format when declaring variables
While DM allows other ways of declaring variables, this one should be used for consistency.
### Tabs, not spaces
You must use tabs to indent your code, NOT SPACES.
(You may use spaces to align something, but you should tab to the block level first, then add the remaining spaces)
Do not use tabs/spaces for indentation in the middle of a code line. Not only is this inconsistent because the size of a tab is undefined, but it means that, should the line you're aligning to change size at all, we have to adjust a ton of other code. Plus, it often time hurts readability.
```dm
// Bad
#define SPECIES_MOTH "moth"
#define SPECIES_LIZARDMAN "lizardman"
#define SPECIES_FELINID "felinid"
// Good
#define SPECIES_MOTH "moth"
#define SPECIES_LIZARDMAN "lizardman"
#define SPECIES_FELINID "felinid"
```
### No hacky code
Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is ***no*** other option. (Protip: 'I couldn't immediately think of a proper way so thus there must be no other option' is not gonna cut it here! If you can't think of anything else, say that outright and admit that you need help with it. Maintainers exist for exactly that reason.)
Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is ***no*** other option. (Protip: "I couldn't immediately think of a proper way so thus there must be no other option" is not gonna cut it here! If you can't think of anything else, say that outright and admit that you need help with it. Maintainers exist for exactly that reason.)
You can avoid hacky code by using object-oriented methodologies, such as overriding a function (called "procs" in DM) or sectioning code into functions and then overriding them as required.
@@ -158,7 +253,7 @@ There are two key points here:
Remember: although this tradeoff makes sense in many cases, it doesn't cover them all. Think carefully about your addition before deciding if you need to use it.
### Prefer `Initialize()` over `New()` for atoms
Our game controller is pretty good at handling long operations and lag, but it can't control what happens when the map is loaded, which calls `New` for all atoms on the map. If you're creating a new atom, use the `Initialize` proc to do what you would normally do in `New`. This cuts down on the number of proc calls needed when the world is loaded. See here for details on `Initialize`: https://github.com/tgstation/tgstation/blob/master/code/game/atoms.dm#L49
Our game controller is pretty good at handling long operations and lag, but it can't control what happens when the map is loaded, which calls `New` for all atoms on the map. If you're creating a new atom, use the `Initialize` proc to do what you would normally do in `New`. This cuts down on the number of proc calls needed when the world is loaded. See here for details on `Initialize`: https://github.com/tgstation/tgstation/blob/34775d42a2db4e0f6734560baadcfcf5f5540910/code/game/atoms.dm#L166
While we normally encourage (and in some cases, even require) bringing out of date code up to date when you make unrelated changes near the out of date code, that is not the case for `New` -> `Initialize` conversions. These systems are generally more dependant on parent and children procs so unrelated random conversions of existing things can cause bugs that take months to figure out.
### No magic numbers or strings
@@ -187,7 +282,7 @@ This is clearer and enhances readability of your code! Get used to doing it!
### Control statements
(if, while, for, etc)
* All control statements must not contain code on the same line as the statement (`if (blah) return`)
* No control statement may contain code on the same line as the statement (`if (blah) return`)
* All control statements comparing a variable to a number should use the formula of `thing` `operator` `number`, not the reverse (eg: `if (count <= 10)` not `if (10 >= count)`)
### Use early return
@@ -213,6 +308,97 @@ This is good:
````
This prevents nesting levels from getting deeper then they need to be.
### Use our time defines
The codebase contains some defines which will automatically multiply a number by the correct amount to get a number in deciseconds. Using these is preffered over using a literal amount in deciseconds.
The defines are as follows:
* SECONDS
* MINUTES
* HOURS
This is bad:
````DM
/datum/datum1/proc/proc1()
if(do_after(mob, 15))
mob.dothing()
````
This is good:
````DM
/datum/datum1/proc/proc1()
if(do_after(mob, 1.5 SECONDS))
mob.dothing()
````
### Getters and setters
* Avoid getter procs. They are useful tools in languages with that properly enforce variable privacy and encapsulation, but DM is not one of them. The upfront cost in proc overhead is met with no benefits, and it may tempt to develop worse code.
This is bad:
```DM
/datum/datum1/proc/simple_getter()
return gotten_variable
```
Prefer to either access the variable directly or use a macro/define.
* Make usage of variables or traits, set up through condition setters, for a more maintainable alternative to compex and redefined getters.
These are bad:
```DM
/datum/datum1/proc/complex_getter()
return condition ? VALUE_A : VALUE_B
/datum/datum1/child_datum/complex_getter()
return condition ? VALUE_C : VALUE_D
```
This is good:
```DM
/datum/datum1
var/getter_turned_into_variable
/datum/datum1/proc/set_condition(new_value)
if(condition == new_value)
return
condition = new_value
on_condition_change()
/datum/datum1/proc/on_condition_change()
getter_turned_into_variable = condition ? VALUE_A : VALUE_B
/datum/datum1/child_datum/on_condition_change()
getter_turned_into_variable = condition ? VALUE_C : VALUE_D
```
### Avoid unnecessary type checks and obscuring nulls in lists
Typecasting in `for` loops carries an implied `istype()` check that filters non-matching types, nulls included. The `as anything` key can be used to skip the check.
If we know the list is supposed to only contain the desired type then we want to skip the check not only for the small optimization it offers, but also to catch any null entries that may creep into the list.
Nulls in lists tend to point to improperly-handled references, making hard deletes hard to debug. Generating a runtime in those cases is more often than not positive.
This is bad:
```DM
var/list/bag_of_atoms = list(new /obj, new /mob, new /atom, new /atom/movable, new /atom/movable)
var/highest_alpha = 0
for(var/atom/thing in bag_of_atoms)
if(thing.alpha <= highest_alpha)
continue
highest_alpha = thing.alpha
```
This is good:
```DM
var/list/bag_of_atoms = list(new /obj, new /mob, new /atom, new /atom/movable, new /atom/movable)
var/highest_alpha = 0
for(var/atom/thing as anything in bag_of_atoms)
if(thing.alpha <= highest_alpha)
continue
highest_alpha = thing.alpha
```
### Develop Secure Code
* Player input must always be escaped safely, we recommend you use stripped_input in all cases where you would use input. Essentially, just always treat input from players as inherently malicious and design with that use case in mind
@@ -245,15 +431,24 @@ This prevents nesting levels from getting deeper then they need to be.
* Primary keys are inherently immutable and you must never do anything to change the primary key of a row or entity. This includes preserving auto increment numbers of rows when copying data to a table in a conversion script. No amount of bitching about gaps in ids or out of order ids will save you from this policy.
* The ttl for data from the database is 10 seconds. You must have a compelling reason to store and reuse data for longer then this.
* Do not write stored and transformed data to the database, instead, apply the transformation to the data in the database directly.
* ie: SELECTing a number from the database, doubling it, then updating the database with the doubled number. If the data in the database changed between step 1 and 3, you'll get an incorrect result. Instead, directly double it in the update query. `UPDATE table SET num = num*2` instead of `UPDATE table SET num = [num]`.
* if the transformation is user provided (such as allowing a user to edit a string), you should confirm the value being updated did not change in the database in the intervening time before writing the new user provided data by checking the old value with the current value in the database, and if it has changed, allow the user to decide what to do next.
### Mapping Standards
* Adding, Removing, or Replacing Station Maps
* All pull requests adding, removing, or replacing station maps must receive prior approval from a maptainer, or they will be closed without additional warning.
* TGM Format & Map Merge
* All new maps submitted to the repo through a pull request must be in TGM format (unless there is a valid reason present to have it in the default BYOND format.) This is done using the [Map Merge](https://github.com/tgstation/tgstation/wiki/Map-Merger) utility included in the repo to convert the file to TGM format.
* All new maps submitted to the repo through a pull request must be in TGM format (unless there is a valid reason present to have it in the default BYOND format). This is done using the [Map Merge](https://tgstation13.org/wiki/Map_Merger) utility included in the repo to convert the file to TGM format.
* Likewise, you MUST run Map Merge prior to opening your PR when updating existing maps to minimize the change differences (even when using third party mapping programs such as FastDMM.)
* Failure to run Map Merge on a map after using third party mapping programs (such as FastDMM) greatly increases the risk of the map's key dictionary becoming corrupted by future edits after running map merge. Resolving the corruption issue involves rebuilding the map's key dictionary; id est rewriting all the keys contained within the map by reconverting it from BYOND to TGM format - which creates very large differences that ultimately delay the PR process and is extremely likely to cause merge conflicts with other pull requests.
* Variable Editing (Var-edits)
* While var-editing an item within the editor is perfectly fine, it is preferred that when you are changing the base behavior of an item (how it functions) that you make a new subtype of that item within the code, especially if you plan to use the item in multiple locations on the same map, or across multiple maps. This makes it easier to make corrections as needed to all instances of the item at one time as opposed to having to find each instance of it and change them all individually.
* Subtypes only intended to be used on away mission or ruin maps should be contained within an .dm file with a name corresponding to that map within `code\modules\awaymissions` or `code\modules\ruins` respectively. This is so in the event that the map is removed, that subtype will be removed at the same time as well to minimize leftover/unused data within the repo.
* Subtypes only intended to be used on away mission or ruin maps should be contained within a .dm file with a name corresponding to that map within `code\modules\awaymissions` or `code\modules\ruins` respectively. This is so in the event that the map is removed, that subtype will be removed at the same time as well to minimize leftover/unused data within the repo.
* Please attempt to clean out any dirty variables that may be contained within items you alter through var-editing. For example, due to how DM functions, changing the `pixel_x` variable from 23 to 0 will leave a dirty record in the map's code of `pixel_x = 0`. Likewise this can happen when changing an item's icon to something else and then back. This can lead to some issues where an item's icon has changed within the code, but becomes broken on the map due to it still attempting to use the old entry.
* Areas should not be var-edited on a map to change it's name or attributes. All areas of a single type and it's altered instances are considered the same area within the code, and editing their variables on a map can lead to issues with powernets and event subsystems which are difficult to debug.
@@ -264,6 +459,99 @@ This prevents nesting levels from getting deeper then they need to be.
* [tgui/README.md](../tgui/README.md)
* [tgui/tutorial-and-examples.md](../tgui/docs/tutorial-and-examples.md)
### Signal Handlers
All procs that are registered to listen for signals using `RegisterSignal()` must contain at the start of the proc `SIGNAL_HANDLER` eg;
```
/type/path/proc/signal_callback()
SIGNAL_HANDLER
// rest of the code
```
This is to ensure that it is clear the proc handles signals and turns on a lint to ensure it does not sleep.
There exists `SIGNAL_HANDLER_DOES_SLEEP`, but this is only for legacy signal handlers that still sleep, new/changed code should not use this.
### Enforcing parent calling
When adding new signals to root level procs, eg;
```
/atom/proc/setDir(newdir)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
```
The `SHOULD_CALL_PARENT(TRUE)` lint should be added to ensure that overrides/child procs call the parent chain and ensure the signal is sent.
### Use descriptive and obvious names
Optimize for readability, not writability. While it is certainly easier to write `M` than `victim`, it will cause issues down the line for other developers to figure out what exactly your code is doing, even if you think the variable's purpose is obvious.
#### Don't use abbreviations
Avoid variables like C, M, and H. Prefer names like "user", "victim", "weapon", etc.
```dm
// What is M? The user? The target?
// What is A? The target? The item?
/proc/use_item(mob/M, atom/A)
// Much better!
/proc/use_item(mob/user, atom/target)
```
Unless it is otherwise obvious, try to avoid just extending variables like "C" to "carbon"--this is slightly more helpful, but does not describe the *context* of the use of the variable.
#### Naming things when typecasting
When typecasting, keep your names descriptive:
```dm
var/mob/living/living_target = target
var/mob/living/carbon/carbon_target = living_target
```
Of course, if you have a variable name that better describes the situation when typecasting, feel free to use it.
Note that it's okay, semantically, to use the same variable name as the type, e.g.:
```dm
var/atom/atom
var/client/client
var/mob/mob
```
Your editor may highlight the variable names, but BYOND, and we, accept these as variable names:
```dm
// This functions properly!
var/client/client = CLIENT_FROM_VAR(usr)
// vvv this may be highlighted, but it's fine!
client << browse(...)
```
#### Name things as directly as possible
`was_called` is better than `has_been_called`. `notify` is better than `do_notification`.
#### Avoid negative variable names
`is_flying` is better than `is_not_flying`. `late` is better than `not_on_time`.
This prevents double-negatives (such as `if (!is_not_flying)` which can make complex checks more difficult to parse.
#### Exceptions to variable names
Exceptions can be made in the case of inheriting existing procs, as it makes it so you can use named parameters, but *new* variable names must follow these standards. It is also welcome, and encouraged, to refactor existing procs to use clearer variable names.
Naming numeral iterator variables `i` is also allowed, but do remember to [Avoid unnecessary type checks and obscuring nulls in lists](#avoid-unnecessary-type-checks-and-obscuring-nulls-in-lists), and making more descriptive variables is always encouraged.
```dm
// Bad
for (var/datum/reagent/R as anything in reagents)
// Good
for (var/datum/reagent/deadly_reagent as anything in reagents)
// Allowed, but still has the potential to not be clear. What does `i` refer to?
for (var/i in 1 to 12)
// Better
for (var/month in 1 to 12)
// Bad, only use `i` for numeral loops
for (var/i in reagents)
```
### Other Notes
* Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the "tools.dm" file)
@@ -273,6 +561,8 @@ This prevents nesting levels from getting deeper then they need to be.
* Do not divide when you can easily convert it to multiplication. (ie `4/2` should be done as `4*0.5`)
* Separating single lines into more readable blocks is not banned, however you should use it only where it makes new information more accessible, or aids maintainability. We do not have a column limit, and mass conversions will not be received well.
* If you used regex to replace code during development of your code, post the regex in your PR for the benefit of future developers and downstream users.
* Changes to the `/config` tree must be made in a way that allows for updating server deployments while preserving previous behaviour. This is due to the fact that the config tree is to be considered owned by the user and not necessarily updated alongside the remainder of the code. The code to preserve previous behaviour may be removed at some point in the future given the OK by maintainers.
@@ -306,77 +596,43 @@ Math operators like +, -, /, *, etc are up in the air, just choose which version
#### Use
* Bitwise AND - '&'
* Should be written as ```bitfield & bitflag``` NEVER ```bitflag & bitfield```, both are valid, but the latter is confusing and nonstandard.
* Should be written as `variable & CONSTANT` NEVER `CONSTANT & variable`. Both are valid, but the latter is confusing and nonstandard.
* Associated lists declarations must have their key value quoted if it's a string
* WRONG: list(a = "b")
* RIGHT: list("a" = "b")
* WRONG: `list(a = "b")`
* RIGHT: `list("a" = "b")`
### Dream Maker Quirks/Tricks
Like all languages, Dream Maker has its quirks, some of them are beneficial to us, like these
#### In-To for-loops
```for(var/i = 1, i <= some_value, i++)``` is a fairly standard way to write an incremental for loop in most languages (especially those in the C family), but DM's ```for(var/i in 1 to some_value)``` syntax is oddly faster than its implementation of the former syntax; where possible, it's advised to use DM's syntax. (Note, the ```to``` keyword is inclusive, so it automatically defaults to replacing ```<=```; if you want ```<``` then you should write it as ```1 to some_value-1```).
`for(var/i = 1, i <= some_value, i++)` is a fairly standard way to write an incremental for loop in most languages (especially those in the C family), but DM's `for(var/i in 1 to some_value)` syntax is oddly faster than its implementation of the former syntax; where possible, it's advised to use DM's syntax. (Note, the `to` keyword is inclusive, so it automatically defaults to replacing `<=`; if you want `<` then you should write it as `1 to some_value-1`).
HOWEVER, if either ```some_value``` or ```i``` changes within the body of the for (underneath the ```for(...)``` header) or if you are looping over a list AND changing the length of the list then you can NOT use this type of for-loop!
HOWEVER, if either `some_value` or `i` changes within the body of the for (underneath the `for(...)` header) or if you are looping over a list AND changing the length of the list then you can NOT use this type of for-loop!
### for(var/A in list) VS for(var/i in 1 to list.len)
#### `for(var/A in list)` versus `for(var/i in 1 to list.len)`
The former is faster than the latter, as shown by the following profile results:
https://file.house/zy7H.png
Code used for the test in a readable format:
https://pastebin.com/w50uERkG
#### Istypeless for loops
A name for a differing syntax for writing for-each style loops in DM. It's NOT DM's standard syntax, hence why this is considered a quirk. Take a look at this:
```DM
var/list/bag_of_items = list(sword, apple, coinpouch, sword, sword)
var/obj/item/sword/best_sword
for(var/obj/item/sword/S in bag_of_items)
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
The above is a simple proc for checking all swords in a container and returning the one with the highest damage, and it uses DM's standard syntax for a for-loop by specifying a type in the variable of the for's header that DM interprets as a type to filter by. It performs this filter using ```istype()``` (or some internal-magic similar to ```istype()``` - this is BYOND, after all). This is fine in its current state for ```bag_of_items```, but if ```bag_of_items``` contained ONLY swords, or only SUBTYPES of swords, then the above is inefficient. For example:
```DM
var/list/bag_of_swords = list(sword, sword, sword, sword)
var/obj/item/sword/best_sword
for(var/obj/item/sword/S in bag_of_swords)
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
specifies a type for DM to filter by.
With the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? Is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Wherever a list (or other container, such as an atom (in which case you're technically accessing their special contents list, but that's irrelevant)) contains datums of the same datatype or subtypes of the datatype you require for your loop's body,
you can circumvent DM's filtering and automatic ```istype()``` checks by writing the loop as such:
```DM
var/list/bag_of_swords = list(sword, sword, sword, sword)
var/obj/item/sword/best_sword
for(var/s in bag_of_swords)
var/obj/item/sword/S = s
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
Of course, if the list contains data of a mixed type then the above optimisation is DANGEROUS, as it will blindly typecast all data in the list as the specified type, even if it isn't really that type, causing runtime errors.
#### Dot variable
Like other languages in the C family, DM has a ```.``` or "Dot" operator, used for accessing variables/members/functions of an object instance.
Like other languages in the C family, DM has a `.` or "Dot" operator, used for accessing variables/members/functions of an object instance.
eg:
```DM
var/mob/living/carbon/human/H = YOU_THE_READER
H.gib()
```
However, DM also has a dot variable, accessed just as ```.``` on its own, defaulting to a value of null. Now, what's special about the dot operator is that it is automatically returned (as in the ```return``` statement) at the end of a proc, provided the proc does not already manually return (```return count``` for example.) Why is this special?
However, DM also has a dot variable, accessed just as `.` on its own, defaulting to a value of null. Now, what's special about the dot operator is that it is automatically returned (as in the `return` statement) at the end of a proc, provided the proc does not already manually return (`return count` for example.) Why is this special?
With ```.``` being everpresent in every proc, can we use it as a temporary variable? Of course we can! However, the ```.``` operator cannot replace a typecasted variable - it can hold data any other var in DM can, it just can't be accessed as one, although the ```.``` operator is compatible with a few operators that look weird but work perfectly fine, such as: ```.++``` for incrementing ```.'s``` value, or ```.[1]``` for accessing the first element of ```.```, provided that it's a list.
With `.` being everpresent in every proc, can we use it as a temporary variable? Of course we can! However, the `.` operator cannot replace a typecasted variable - it can hold data any other var in DM can, it just can't be accessed as one, although the `.` operator is compatible with a few operators that look weird but work perfectly fine, such as: `.++` for incrementing `.'s` value, or `.[1]` for accessing the first element of `.`, provided that it's a list.
## Globals versus static
### Globals versus static
DM has a var keyword, called global. This var keyword is for vars inside of types. For instance:
```DM
mob
var
global
thing = TRUE
/mob
var/global/thing = TRUE
```
This does NOT mean that you can access it everywhere like a global var. Instead, it means that that var will only exist once for all instances of its type, in this case that var will only exist once for all mobs - it's shared across everything in its type. (Much more like the keyword `static` in other languages like PHP/C++/C#/Java)
@@ -388,11 +644,13 @@ There is also an undocumented keyword called `static` that has the same behaviou
There is no strict process when it comes to merging pull requests. Pull requests will sometimes take a while before they are looked at by a maintainer; the bigger the change, the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be courteous and respectful. Here are some helpful ways to make it easier for you and for the maintainers when making a pull request.
* Make sure your pull request complies to the requirements outlined in [this guide](http://tgstation13.org/wiki/Getting_Your_Pull_Accepted)
* Make sure your pull request complies to the requirements outlined here
* You are going to be expected to document all your changes in the pull request. Failing to do so will mean delaying it as we will have to question why you made the change. On the other hand, you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data.
* You are expected to have tested your pull requests if it is anything that would warrant testing. Text only changes, single number balance changes, and similar generally don't need testing, but anything else does. This means by extension web edits are disallowed for larger changes.
* We ask that you use the changelog system to document your change, which prevents our players from being caught unaware by changes - you can find more information about this [on this wiki page](http://tgstation13.org/wiki/Guide_to_Changelogs).
* You are going to be expected to document all your changes in the pull request. Failing to do so will mean delaying it as we will have to question why you made the change. On the other hand, you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data. Should you be optimizing a routine you must provide proof by way of profiling that your changes are faster.
* We ask that you use the changelog system to document your player facing changes, which prevents our players from being caught unaware by said changes - you can find more information about this [on this wiki page](http://tgstation13.org/wiki/Guide_to_Changelogs).
* If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable.
@@ -400,10 +658,12 @@ There is no strict process when it comes to merging pull requests. Pull requests
* Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
* If your pull request is not finished make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one.
* If your pull request is not finished, you may open it as a draft for potential review. If you open it as a full-fledged PR make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one.
* While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality *before* you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes.
* After leaving reviews on an open pull request, maintainers may convert it to a draft. Once you have addressed all their comments to the best of your ability, feel free to mark the pull as `Ready for Review` again.
## Porting features/sprites/sounds/tools from other codebases
If you are porting features/tools from other codebases, you must give them credit where it's due. Typically, crediting them in your pull request and the changelog is the recommended way of doing it. Take note of what license they use though, porting stuff from AGPLv3 and GPLv3 codebases are allowed.
@@ -413,19 +673,14 @@ Regarding sprites & sounds, you must credit the artist and possibly the codebase
## Banned content
Do not add any of the following in a Pull Request or risk getting the PR closed:
* National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references
* Code where one line of code is split across mutiple lines (except for multiple, separate strings and comments; in those cases, existing longer lines must not be split up)
* Code adding, removing, or updating the availability of alien races/species/human mutants without prior approval. Pull requests attempting to add or remove features from said races/species/mutants require prior approval as well.
* Code which violates GitHub's [terms of service](https://github.com/site/terms).
Just because something isn't on this list doesn't mean that it's acceptable. Use common sense above all else.
## Content requiring prior approval
Certain types of changes may require prior approval from maintainers. This currently includes:
* Code adding, removing, or updating the availability of alien races/species/human mutants. This includes pull requests attempting to add or remove features from said races/species/mutants. (Requires approval from at least one maintainer)
* Code adding, removing, or modifying the functionality of adult-oriented features (such as, but not limited to: vore, genitals, MKUltra, and more). This also includes pull requests attempting to add or remove these features outright. (Requires approval from at least half of the formal maintainer team)
The above content requires approval from the specified amount of maintainers prior to PR creation. Seeking approval must be done via a @Maintainer ping in a relevant development/code or staff channel on the Discord, otherwise it will be considered insufficient. If a PR contains any of the above content, but the creator does not have sufficient approval prior to the PR's creation, then the PR may be closed by any maintainer, at any time, for any reason.
## A word on Git
Yes, we know that the files have a tonne of mixed Windows and Linux line endings. Attempts to fix this have been met with less than stellar success, and as such we have decided to give up caring until there comes a time when it matters.
This repository uses `LF` line endings for all code as specified in the **.gitattributes** and **.editorconfig** files.
Therefore, EOF settings of main repo are forbidden territory one must avoid wandering into, at risk of losing body and/or mind to the Git gods.
Unless overridden or a non standard git binary is used the line ending settings should be applied to your clone automatically.
Note: VSC requires an [extension](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) to take advantage of editorconfig.
+10
View File
@@ -0,0 +1,10 @@
## DOWNLOADING
There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at https://www.tgstation13.org/wiki/Downloading_the_source_code
Option 1:
Follow this: https://www.tgstation13.org/wiki/Setting_up_git, only with Citadel Station's repository instead of /tg/'s.
Option 2: Download the source code as a zip by clicking the ZIP button in the
code tab of https://github.com/Citadel-Station-13/Citadel-Station-13
(note: this will use a lot of bandwidth if you wish to update and is a lot of
hassle if you want to make any changes at all, so it's not recommended.)
+95
View File
@@ -0,0 +1,95 @@
# INSTALLATION
First-time installation should be fairly straightforward. First, you'll need
BYOND installed. You can get it from https://www.byond.com/download. Once you've done
that, extract the game files to wherever you want to keep them. This is a
sourcecode-only release, so the next step is to compile the server files.
Double-click `BUILD.bat` in the root directory of the source code. This'll take
a little while, and if everything's done right you'll get a message like this:
```
saving tgstation.dmb (DEBUG mode)
tgstation.dmb - 0 errors, 0 warnings
```
If you see any errors or warnings, something has gone wrong - possibly a corrupt
download or the files extracted wrong. If problems persist, ask for assistance
in irc://irc.rizon.net/coderbus
Once that's done, open up the config folder. You'll want to edit config.txt to
set the probabilities for different gamemodes in Secret and to set your server
location so that all your players don't get disconnected at the end of each
round. It's recommended you don't turn on the gamemodes with probability 0,
except Extended, as they have various issues and aren't currently being tested,
so they may have unknown and bizarre bugs. Extended is essentially no mode, and
isn't in the Secret rotation by default as it's just not very fun.
You'll also want to edit config/admins.txt to remove the default admins and add
your own. "Game Master" is the highest level of access, and probably the one
you'll want to use for now. You can set up your own ranks and find out more in
config/admin_ranks.txt
The format is
```
byondkey = Rank
```
where the admin rank must be properly capitalised.
This codebase also depends on a native library called rust-g. A precompiled
Windows DLL is included in this repository, but Linux users will need to build
and install it themselves. Directions can be found at the [rust-g
repo](https://github.com/tgstation/rust-g).
Finally, to start the server, run Dream Daemon and enter the path to your
compiled tgstation.dmb file. Make sure to set the port to the one you
specified in the config.txt, and set the Security box to 'Safe'. Then press GO
and the server should start up and be ready to join. It is also recommended that
you set up the SQL backend (see below).
## UPDATING
To update an existing installation, first back up your /config and /data folders
as these store your server configuration, player preferences and banlist.
Then, extract the new files (preferably into a clean directory, but updating in
place should work fine), copy your /config and /data folders back into the new
install, overwriting when prompted except if we've specified otherwise, and
recompile the game. Once you start the server up again, you should be running
the new version.
## HOSTING
If you'd like a more robust server hosting option for tgstation and its
derivatives. Check out our server tools suite at
https://github.com/tgstation/tgstation-server
If you decide to go this route, here are /tg/ specific details on hosting with TGS.
- We have two directories which should be setup in the instance's `Configuration/GameStaticFiles` directory:
- `config` should be where you place your production configuration. Overwrites the default contents of the repo's [config](../config) directory.
- `data` should be initially created as an empty directory. The game stores persistent data here.
- You should incorporate our [custom build scripts for TGS4](../tools/tgs4_scripts) in the instance's `Configuration/EventScripts` directory. These handle including TGUI in the build and setting up rust-g on Linux.
- Deployment security level must be set to `Trusted` or it will likely fail due to our native library usage.
- We highly recommend using the BYOND version specified in [dependencies.sh](../dependencies.sh) to avoid potential unrecorded issues.
## SQL SETUP
The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database
If you are hosting a testing server on windows you can use a standalone version of MariaDB pre load with a blank (but initialized) tgdb database. Find them here: https://tgstation13.download/database/ Just unzip and run for a working (but insecure) database server. Includes a zipped copy of the data folder for easy resetting back to square one.
## WEB/CDN RESOURCE DELIVERY
Web delivery of game resources makes it quicker for players to join and reduces some of the stress on the game server.
1. Edit compile_options.dm to set the `PRELOAD_RSC` define to `0`
1. Add a url to config/external_rsc_urls pointing to a .zip file containing the .rsc.
* If you keep up to date with /tg/ you could reuse /tg/'s rsc cdn at http://tgstation13.download/byond/tgstation.zip. Otherwise you can use cdn services like CDN77 or cloudflare (requires adding a page rule to enable caching of the zip), or roll your own cdn using route 53 and vps providers.
* Regardless even offloading the rsc to a website without a CDN will be a massive improvement over the in game system for transferring files.
## IRC BOT SETUP
Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified
IRC channel/server, see the /tools/minibot folder for more
+20
View File
@@ -0,0 +1,20 @@
no_balance_label = "GBP: No Update"
reset_label = "GBP: Reset"
[points]
"Atomic" = 2
"Balance/Rebalance" = -8
"Code Improvement" = 2
"Feature" = -10
"Feedback" = 2
"Fix" = 3
"Grammar and Formatting" = 1
"Logging" = 1
"Performance" = 12
"Priority: CRITICAL" = 20
"Priority: High" = 15
"Quality of Life" = 1
"Refactor" = 10
"Sound" = 3
"Sprites" = 3
"Unit Tests" = 6
+9 -5
View File
@@ -58,8 +58,9 @@ jobs:
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
python3 tools/ci/template_dm_generator.py
tgui/bin/tgui --build
bash tools/ci/dm.sh -DCIBUILDING -DCITESTING -DALL_MAPS tgstation.dme
tools/build/build
env:
CBT_BUILD_MODE : ALL_MAPS
run_all_tests:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
@@ -97,9 +98,10 @@ jobs:
run: |
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
tgui/bin/tgui --build
bash tools/ci/dm.sh -DCIBUILDING tgstation.dme
# bash tools/ci/run_server.sh
tools/build/build
# bash tools/ci/run_server.sh
env:
CBT_BUILD_MODE: TEST_RUN
test_windows:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
@@ -109,6 +111,8 @@ jobs:
- uses: actions/checkout@v2
- name: Compile
run: pwsh tools/ci/build.ps1
env:
DM_EXE: "C:\\byond\\bin\\dm.exe"
- name: Create artifact
run: |
md deploy
-23
View File
@@ -1,23 +0,0 @@
name: Docker Build
on:
push:
branches:
- master
jobs:
publish:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Build and Publish Docker Image to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: tgstation/tgstation
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
dockerfile: Dockerfile
tags: "latest"
cache: true
+3 -6
View File
@@ -12,12 +12,9 @@
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"workbench.editorAssociations": [
{
"filenamePattern": "*.dmi",
"viewType": "imagePreview.previewEditor"
}
],
"workbench.editorAssociations": {
"*.dmi": "imagePreview.previewEditor"
},
"files.eol": "\n",
"gitlens.advanced.blame.customArguments": ["-w"],
"tgstationTestExplorer.project.resultsType": "json",
@@ -499,10 +499,6 @@
/mob/living/simple_animal/hostile/alien,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/xenonest)
"bD" = (
/obj/structure/alien/weeds,
/turf/template_noop,
/area/ruin/unpowered/xenonest)
"dE" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
@@ -1573,8 +1569,8 @@ aa
aa
aa
ac
bD
bD
ag
ag
aa
"}
(20,1,1) = {"
@@ -1625,7 +1621,7 @@ aa
aa
aa
ac
bD
ag
aa
"}
(21,1,1) = {"
@@ -1676,8 +1672,8 @@ ac
aa
aa
ac
bD
bD
ag
ag
"}
(22,1,1) = {"
ab
@@ -1727,8 +1723,8 @@ ac
ac
ac
aW
bD
bD
ag
ag
"}
(23,1,1) = {"
ab
@@ -1778,8 +1774,8 @@ ag
aw
ar
ag
bD
bD
ag
ag
"}
(24,1,1) = {"
ab
@@ -1829,8 +1825,8 @@ ag
aw
ar
ag
bD
bD
ag
ag
"}
(25,1,1) = {"
ab
@@ -1880,8 +1876,8 @@ ac
ac
ac
ac
bD
bD
ag
ag
"}
(26,1,1) = {"
ab
+54 -50
View File
@@ -23919,11 +23919,11 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/maintenance/port)
"bfe" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/maintenance/port)
"bff" = (
@@ -27606,13 +27606,13 @@
/obj/structure/sign/warning/radiation/rad_area{
pixel_x = 32
},
/obj/structure/cable{
icon_state = "0-2"
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plating,
/area/engineering/gravity_generator)
"bnX" = (
@@ -40890,8 +40890,8 @@
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bTT" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
dir = 8
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 1
},
/obj/machinery/meter,
/turf/open/floor/plasteel,
@@ -56045,7 +56045,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/reagent_dispensers/fueltank,
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/maintenance/port)
"jyO" = (
@@ -56262,6 +56262,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/engineering/engine_smes)
"jLv" = (
@@ -56574,7 +56575,7 @@
dir = 6
},
/obj/structure/cable{
icon_state = "0-8"
icon_state = "0-2"
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
@@ -57372,6 +57373,7 @@
/area/service/bar)
"moS" = (
/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible,
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engineering/atmos)
"mps" = (
@@ -57535,6 +57537,19 @@
/obj/structure/falsewall,
/turf/open/floor/plating,
/area/security/prison)
"mJf" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plating,
/area/engineering/gravity_generator)
"mJo" = (
/obj/structure/door_assembly/door_assembly_mai,
/obj/item/electronics/airlock,
@@ -57576,9 +57591,6 @@
name = "Gravity Generator";
req_access_txt = "11"
},
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel/dark,
/area/engineering/gravity_generator)
"mOG" = (
@@ -58245,9 +58257,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/light{
dir = 4;
light_color = "#c1caff"
@@ -60541,6 +60550,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"tJS" = (
@@ -60771,10 +60783,10 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"ugu" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"uhm" = (
@@ -61143,10 +61155,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/power/terminal,
/turf/closed/wall/r_wall,
/area/engineering/gravity_generator)
"uRn" = (
@@ -61353,11 +61361,10 @@
/turf/open/floor/plating,
/area/maintenance/port)
"vob" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
/area/engineering/atmos)
"voW" = (
/obj/structure/pool/Lboard,
/turf/open/pool,
@@ -61563,10 +61570,13 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"vFr" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/power/terminal{
dir = 4
},
/obj/structure/cable{
icon_state = "0-8"
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"vGn" = (
@@ -62192,9 +62202,6 @@
/turf/open/floor/carpet/royalblue,
/area/maintenance/starboard/aft)
"xgC" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/machinery/power/apc{
areastring = "/area/engineering/gravity_generator";
dir = 8;
@@ -62208,13 +62215,13 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/structure/cable{
icon_state = "0-2"
},
/obj/machinery/light{
dir = 8;
light_color = "#e8eaff"
},
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"xgF" = (
@@ -62224,13 +62231,10 @@
},
/area/maintenance/bar)
"xhS" = (
/obj/structure/cable{
icon_state = "2-4"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"xhV" = (
@@ -81880,7 +81884,7 @@ aQN
aQN
aZA
aPA
aWv
jxF
aYb
aZE
aZE
@@ -82651,7 +82655,7 @@ aQW
aQW
xDM
aPA
jxF
aWv
aYb
aZE
bjp
@@ -85028,7 +85032,7 @@ btG
rXl
xgC
ugu
bnV
mJf
bph
bih
big
@@ -85283,7 +85287,7 @@ xTy
xTy
tJK
xTy
vob
xTy
xhS
mOB
bph
@@ -86189,7 +86193,7 @@ aaa
aaa
gXs
gXs
aaH
gXs
abc
abu
abu
@@ -87072,11 +87076,11 @@ bCq
bSs
ceY
ccw
ccw
cjJ
cnR
cgT
cjJ
ccw
cjJ
ccw
ccw
ccw
@@ -96303,7 +96307,7 @@ bPc
bQs
cez
ceA
daq
bTT
bUN
bOd
bOd
@@ -97335,9 +97339,9 @@ moS
kGv
bUS
cCE
bTT
bUS
bXU
bUS
vob
bUS
bXU
bUS
+302 -155
View File
@@ -14064,6 +14064,25 @@
},
/turf/open/space,
/area/space/nearstation)
"bbJ" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"bbQ" = (
/obj/structure/sign/poster/random,
/turf/closed/wall,
@@ -20284,6 +20303,29 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bFm" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"bFD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -23429,9 +23471,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-4"
},
@@ -30106,9 +30145,6 @@
/turf/open/floor/plasteel,
/area/security/brig)
"cgW" = (
/obj/structure/cable/white{
icon_state = "1-8"
},
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -30125,6 +30161,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable/white{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
"cgX" = (
@@ -32693,9 +32732,6 @@
/obj/structure/cable/white{
icon_state = "1-4"
},
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-8"
},
@@ -36366,6 +36402,10 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
"cEA" = (
/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"cFF" = (
/turf/open/floor/engine{
name = "Holodeck Projector Floor"
@@ -43526,22 +43566,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXc" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/shower{
dir = 4;
name = "emergency shower"
},
/obj/effect/turf_decal/stripes/end{
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cXd" = (
/obj/structure/cable/white{
icon_state = "4-8"
@@ -43579,22 +43603,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cXg" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/shower{
dir = 8;
name = "emergency shower"
},
/obj/effect/turf_decal/stripes/end{
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cXh" = (
/obj/structure/cable/white{
icon_state = "2-4"
@@ -46132,8 +46140,8 @@
},
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/components/binary/valve/digital{
icon_state = "dvalve_map-2";
dir = 8
dir = 8;
icon_state = "dvalve_map-2"
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -72111,6 +72119,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"ewA" = (
@@ -72141,24 +72150,6 @@
/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/engineering/atmos)
"exg" = (
/obj/structure/chair/office/light{
dir = 8
},
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
/area/command/heads_quarters/ce)
"exo" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -73900,6 +73891,15 @@
},
/turf/open/floor/plasteel/grimy,
/area/commons/dorms)
"ffl" = (
/obj/effect/turf_decal/bot,
/obj/machinery/shower{
dir = 8;
name = "emergency shower";
pixel_y = -4
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
"ffE" = (
/obj/structure/cable/white{
icon_state = "0-2"
@@ -74607,8 +74607,10 @@
/turf/open/floor/wood,
/area/service/library)
"fsx" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/engine/air,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
"fsP" = (
/obj/structure/table/wood,
@@ -77529,8 +77531,8 @@
/area/engineering/main)
"grf" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
icon_state = "pipe11-2";
dir = 5
dir = 5;
icon_state = "pipe11-2"
},
/turf/closed/wall/r_wall,
/area/science/xenobiology)
@@ -77866,8 +77868,8 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
icon_state = "inje_map-2";
dir = 4
dir = 4;
icon_state = "inje_map-2"
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
@@ -79857,20 +79859,6 @@
},
/turf/open/floor/plasteel/dark,
/area/service/library)
"hkJ" = (
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
/area/command/heads_quarters/ce)
"hkK" = (
/obj/structure/table/reinforced,
/obj/item/electronics/firelock,
@@ -81753,6 +81741,18 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/command/storage/eva)
"hMb" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/end{
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"hMm" = (
/obj/structure/table/wood,
/obj/item/toy/cards/deck,
@@ -83406,6 +83406,28 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/storage/eva)
"ipc" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"ipl" = (
/obj/structure/rack,
/obj/item/book/manual/wiki/engineering_hacking{
@@ -86455,6 +86477,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -91661,6 +91686,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
"laA" = (
@@ -92099,7 +92127,6 @@
/turf/closed/wall,
/area/commons/storage/primary)
"lkg" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
@@ -92991,9 +93018,6 @@
/area/engineering/break_room)
"lCx" = (
/obj/structure/table/reinforced,
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/item/clipboard,
/obj/item/toy/figure/ce,
/obj/effect/turf_decal/tile/neutral{
@@ -93526,9 +93550,6 @@
/area/service/abandoned_gambling_den)
"lLv" = (
/obj/structure/table/reinforced,
/obj/structure/cable/white{
icon_state = "2-4"
},
/obj/item/folder/blue{
pixel_x = 3;
pixel_y = 3
@@ -93666,7 +93687,6 @@
/turf/open/floor/plasteel,
/area/engineering/main)
"lNq" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
@@ -94394,9 +94414,6 @@
/obj/item/gps/engineering{
gpstag = "CE0"
},
/obj/machinery/newscaster{
pixel_y = 32
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -94410,6 +94427,15 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/power/apc{
areastring = "/area/command/heads_quarters/ce";
dir = 1;
name = "Chief Engineer's APC";
pixel_y = 30
},
/obj/structure/cable/white{
icon_state = "0-2"
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
"mcu" = (
@@ -95015,6 +95041,10 @@
},
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
"mmq" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrogen,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"mmC" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -100497,7 +100527,6 @@
/turf/open/floor/plasteel/dark,
/area/service/library)
"ohX" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
@@ -101554,6 +101583,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/engineering/break_room)
"oCd" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/end{
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"oCi" = (
/obj/structure/bookcase/manuals/engineering,
/turf/open/floor/wood,
@@ -102263,6 +102304,27 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"oOQ" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"oOV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -102502,9 +102564,6 @@
/turf/open/floor/plasteel,
/area/engineering/break_room)
"oTt" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
@@ -103383,6 +103442,28 @@
},
/turf/open/floor/plating,
/area/cargo/qm)
"pkY" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"plb" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -105899,6 +105980,7 @@
dir = 1;
name = "atmospherics camera"
},
/obj/effect/turf_decal/vg_decals/atmos/mix,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"qbJ" = (
@@ -105947,6 +106029,10 @@
},
/turf/open/floor/plating,
/area/engineering/atmos)
"qcm" = (
/obj/effect/turf_decal/vg_decals/atmos/plasma,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"qcW" = (
/obj/machinery/firealarm{
pixel_y = 26
@@ -108143,6 +108229,10 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmospherics_engine)
"qYy" = (
/obj/effect/turf_decal/vg_decals/atmos/oxygen,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"qYD" = (
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 9
@@ -109351,25 +109441,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/service/hydroponics)
"rts" = (
/obj/structure/cable/white,
/obj/machinery/power/apc{
areastring = "/area/command/heads_quarters/ce";
name = "Chief Engineer's APC";
pixel_y = -26
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
"rtx" = (
/obj/structure/table/wood,
/obj/item/storage/briefcase{
@@ -109841,6 +109912,10 @@
dir = 6
},
/area/science/circuit)
"rCx" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"rCK" = (
/obj/machinery/button/door{
id = "teleporterhubshutters";
@@ -116011,6 +116086,10 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"tBF" = (
/obj/effect/turf_decal/vg_decals/atmos/air,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"tBH" = (
/obj/machinery/door/airlock/atmos/glass/critical{
heat_proof = 1;
@@ -116201,6 +116280,19 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/engineering/storage/tech)
"tGF" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable/white{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/command/heads_quarters/ce)
"tGL" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -117009,7 +117101,6 @@
/turf/open/floor/plasteel,
/area/cargo/storage)
"tWb" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
@@ -117812,9 +117903,6 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-8"
},
/obj/machinery/light{
dir = 4
},
@@ -117829,6 +117917,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
"uiv" = (
@@ -121250,9 +121342,6 @@
/area/service/chapel/office)
"vBq" = (
/obj/structure/table/reinforced,
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/item/cartridge/engineering{
pixel_x = 6
},
@@ -122264,6 +122353,22 @@
/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/plating,
/area/service/abandoned_gambling_den)
"vXq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/firealarm{
pixel_y = -28
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
"vXw" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -122632,6 +122737,29 @@
},
/turf/open/floor/plasteel/dark,
/area/service/chapel/office)
"wcM" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"wei" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -124083,10 +124211,6 @@
/obj/item/cartridge/atmos,
/obj/item/cartridge/atmos,
/obj/item/cartridge/atmos,
/obj/machinery/airalarm{
dir = 1;
pixel_y = -22
},
/obj/item/stamp/ce,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -124403,6 +124527,29 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
"wIV" = (
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"wJE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/blood/old,
@@ -134740,7 +134887,7 @@ bkF
pQq
hzs
hzs
hzs
ipc
hzs
uSd
fWX
@@ -134748,7 +134895,7 @@ gxc
gxc
gxc
gxc
gxc
bFm
gxc
kdA
brN
@@ -135275,12 +135422,12 @@ cab
bPC
bRO
ivC
gxc
bFm
gxc
eCQ
hzs
oMz
hzs
ipc
hzs
rew
brN
@@ -136022,7 +136169,7 @@ ajr
ajr
ajr
bkF
tBB
bbJ
brO
aad
btH
@@ -136053,7 +136200,7 @@ cdt
cdt
aad
bkE
tBB
oOQ
brM
ajr
ajr
@@ -138078,7 +138225,7 @@ ajr
ajr
ajr
bkF
tBB
bbJ
brO
aad
btH
@@ -138109,7 +138256,7 @@ cdt
cdt
aad
bkE
tBB
oOQ
brM
ajr
ajr
@@ -138873,12 +139020,12 @@ cam
bPC
bRO
ygA
gxc
wcM
gxc
eCQ
hzs
xaW
hzs
pkY
hzs
elb
brN
@@ -139366,7 +139513,7 @@ bkF
mdI
hzs
hzs
hzs
pkY
hzs
uhb
fWX
@@ -139374,7 +139521,7 @@ gxc
gxc
gxc
tzE
gxc
wcM
gxc
xic
brN
@@ -141436,7 +141583,7 @@ aad
bNF
aad
bRP
swP
wIV
stE
evL
aJD
@@ -149890,15 +150037,15 @@ aSQ
iio
iMu
ohX
hFW
cEA
iio
sEM
lkg
kRS
qcm
iio
rUo
oTt
lbI
rCx
iio
kcG
kcG
@@ -151712,13 +151859,13 @@ mMB
pRP
kkO
mcs
mHG
tGF
xKr
lLv
lCx
vBq
hkJ
rts
ikP
vXq
qjg
ine
vJe
@@ -151971,7 +152118,7 @@ kkO
nZq
jpC
ivQ
exg
tbI
tbI
ilG
hbc
@@ -152485,7 +152632,7 @@ kkO
jKf
prr
qPW
xSN
kkO
sSa
jry
pTd
@@ -152972,13 +153119,13 @@ fcn
lfN
oUP
hlN
lXg
fsx
rmJ
lXg
lXg
lXg
xQQ
lXg
fsx
lXg
lXg
mhk
@@ -157340,16 +157487,16 @@ aaa
aad
iio
wTN
fsx
lEq
tBF
iio
wjw
tWb
sCm
qYy
iio
eFu
lNq
skw
mmq
iio
aMN
emZ
@@ -157404,7 +157551,7 @@ cQv
cRY
cTJ
tXb
cXc
oCd
cYS
dax
dci
@@ -158946,7 +159093,7 @@ kiv
cSc
cTO
hDD
cXg
hMb
oJE
dav
dcm
@@ -160743,7 +160890,7 @@ cNh
cOQ
cQy
cSh
cTT
ffl
cVR
cXk
cYZ
+131 -126
View File
@@ -4911,22 +4911,6 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
"anj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/light{
dir = 4
},
/obj/structure/extinguisher_cabinet{
pixel_x = 27
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/brig)
"ank" = (
/obj/structure/table,
/obj/item/storage/box/evidence,
@@ -29465,19 +29449,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
"ckg" = (
/obj/structure/sink{
dir = 4;
pixel_x = 11
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/research)
"ckh" = (
/obj/machinery/light{
dir = 4
@@ -30069,21 +30040,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/research)
"clH" = (
/obj/machinery/shower{
dir = 8
},
/obj/item/radio/intercom{
dir = 8;
name = "Station Intercom (General)";
pixel_y = -28
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/white,
/area/science/research)
"clI" = (
/obj/machinery/firealarm{
dir = 8;
@@ -50265,6 +50221,21 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
"egm" = (
/obj/machinery/light{
dir = 4
},
/obj/structure/extinguisher_cabinet{
pixel_x = 27
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/brig)
"egt" = (
/obj/machinery/camera/autoname,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -51280,6 +51251,13 @@
},
/turf/open/floor/plasteel/dark,
/area/commons/fitness/recreation)
"eHV" = (
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/air_sensor/atmos/nitrous_tank,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"eJd" = (
/obj/structure/closet/secure_closet/RD,
/obj/machinery/keycard_auth{
@@ -51449,6 +51427,15 @@
},
/turf/open/floor/engine,
/area/engineering/main)
"eOP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/research)
"ePg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -52531,10 +52518,6 @@
dir = 8
},
/area/service/chapel/main)
"fwH" = (
/obj/machinery/air_sensor/atmos/nitrogen_tank,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"fxb" = (
/obj/machinery/vending/engivend,
/obj/structure/cable/yellow{
@@ -52880,6 +52863,10 @@
/obj/item/clothing/under/misc/burial,
/turf/open/floor/plasteel/grimy,
/area/service/chapel/office)
"fId" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrogen,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"fIC" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -53189,7 +53176,10 @@
/turf/open/floor/plasteel,
/area/engineering/atmos)
"fVD" = (
/obj/machinery/pool/drain,
/obj/machinery/pool/drain{
drain_suck_range = 2;
item_suction_range = 1
},
/turf/open/pool,
/area/commons/fitness/pool)
"fVX" = (
@@ -53285,10 +53275,6 @@
},
/turf/open/floor/wood,
/area/service/theater)
"fXs" = (
/obj/machinery/light/small,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"fXZ" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -53606,6 +53592,11 @@
/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
/turf/open/floor/engine,
/area/engineering/main)
"gim" = (
/obj/machinery/light/small,
/obj/machinery/air_sensor/atmos/oxygen_tank,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"gin" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -55480,6 +55471,10 @@
},
/turf/open/floor/plasteel,
/area/cargo/miningoffice)
"htG" = (
/obj/effect/turf_decal/vg_decals/atmos/air,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"htH" = (
/obj/machinery/firealarm{
dir = 8;
@@ -57093,10 +57088,6 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
"iqT" = (
/obj/machinery/air_sensor/atmos/air_tank,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"iqU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/chair/stool,
@@ -59320,12 +59311,6 @@
/obj/machinery/light,
/turf/open/floor/wood,
/area/service/bar)
"jGW" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"jIg" = (
/obj/structure/sign/directions/evac,
/obj/structure/sign/directions/medical{
@@ -60380,10 +60365,6 @@
},
/turf/open/floor/plasteel,
/area/service/bar)
"kro" = (
/obj/machinery/air_sensor/atmos/oxygen_tank,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"krD" = (
/turf/closed/wall,
/area/science/circuit)
@@ -62371,10 +62352,6 @@
dir = 5
},
/area/service/kitchen)
"lwJ" = (
/obj/machinery/light/small,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"lwL" = (
/turf/open/floor/plasteel,
/area/service/janitor)
@@ -62590,6 +62567,13 @@
dir = 1
},
/area/engineering/atmos)
"lCt" = (
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/air_sensor/atmos/toxin_tank,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"lDu" = (
/obj/machinery/door/firedoor,
/obj/structure/cable/yellow{
@@ -62629,6 +62613,10 @@
},
/turf/open/floor/plasteel,
/area/commons/dorms)
"lFn" = (
/obj/effect/turf_decal/vg_decals/atmos/mix,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"lFD" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
@@ -62880,6 +62868,10 @@
dir = 1
},
/area/command/gateway)
"lNP" = (
/obj/effect/turf_decal/vg_decals/atmos/plasma,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"lOi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -63711,12 +63703,6 @@
},
/turf/open/floor/plasteel,
/area/construction/storage_wing)
"mkz" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"mkS" = (
/obj/structure/closet/boxinggloves,
/obj/effect/turf_decal/tile/neutral{
@@ -64405,12 +64391,6 @@
},
/turf/open/floor/plasteel,
/area/cargo/qm)
"mEw" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"mEE" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -64893,10 +64873,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/chapel,
/area/service/chapel/main)
"mWu" = (
/obj/machinery/air_sensor/atmos/toxin_tank,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"mWy" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -65064,10 +65040,6 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
"naS" = (
/obj/machinery/air_sensor/atmos/carbon_tank,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"nbl" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -65602,6 +65574,18 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
"nyA" = (
/obj/item/radio/intercom{
dir = 8;
name = "Station Intercom (General)";
pixel_y = -28
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/white,
/area/science/research)
"nzp" = (
/obj/structure/urinal{
pixel_y = 29
@@ -65727,10 +65711,6 @@
/obj/machinery/bookbinder,
/turf/open/floor/wood,
/area/service/library)
"nFp" = (
/obj/machinery/air_sensor/atmos/nitrous_tank,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"nFz" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/closed/wall/r_wall,
@@ -67711,6 +67691,9 @@
pixel_y = 24
},
/obj/machinery/computer/atmos_control,
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
dir = 4
},
/turf/open/floor/plasteel/checker,
/area/engineering/atmos)
"oOi" = (
@@ -68491,10 +68474,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/commons/fitness/recreation)
"pii" = (
/obj/machinery/light/small,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"piB" = (
/obj/machinery/vending/hydroseeds{
slogan_delay = 700
@@ -69702,6 +69681,13 @@
},
/turf/open/floor/plasteel,
/area/cargo/miningoffice)
"pSz" = (
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/air_sensor/atmos/mix_tank,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"pSE" = (
/obj/effect/landmark/start/captain,
/obj/machinery/airalarm{
@@ -72061,6 +72047,11 @@
/obj/item/storage/dice,
/turf/open/floor/plasteel,
/area/commons/locker)
"rjT" = (
/obj/machinery/light/small,
/obj/machinery/air_sensor/atmos/air_tank,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"rkx" = (
/turf/closed/wall/r_wall,
/area/engineering/supermatter)
@@ -73801,6 +73792,13 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/command/heads_quarters/cmo)
"smL" = (
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/air_sensor/atmos/carbon_tank,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"smU" = (
/turf/closed/wall,
/area/engineering/storage/tech)
@@ -74465,6 +74463,10 @@
/obj/machinery/field/generator,
/turf/open/floor/plating,
/area/engineering/main)
"sLx" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"sLW" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -74811,10 +74813,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
"sZg" = (
/obj/machinery/air_sensor/atmos/mix_tank,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"sZz" = (
/obj/structure/table,
/obj/item/paper/fluff/holodeck/disclaimer,
@@ -76308,12 +76306,6 @@
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
/area/maintenance/port)
"tUr" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"tUN" = (
/obj/machinery/conveyor_switch/oneway{
id = "packageSort2";
@@ -79922,6 +79914,11 @@
},
/turf/open/floor/plasteel,
/area/cargo/sorting)
"wlz" = (
/obj/machinery/light/small,
/obj/machinery/air_sensor/atmos/nitrogen_tank,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"wlC" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 5
@@ -80967,6 +80964,10 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
"wNX" = (
/obj/effect/turf_decal/vg_decals/atmos/oxygen,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"wOW" = (
/obj/structure/window/reinforced{
dir = 4
@@ -81784,6 +81785,10 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
"xlP" = (
/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"xlU" = (
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -108970,7 +108975,7 @@ aiw
ajp
akz
ajQ
anj
egm
aot
apG
apG
@@ -114179,8 +114184,8 @@ bZo
bZo
chp
iTm
ckg
clH
eOP
nyA
bZn
coa
cpl
@@ -125228,9 +125233,9 @@ rVI
qHn
aaf
dYX
fwH
fId
sTB
fXs
wlz
dPI
aaf
aaa
@@ -126256,9 +126261,9 @@ rSI
uKL
aaf
dYX
kro
wNX
eFn
lwJ
gim
dPI
aaf
aaa
@@ -127284,9 +127289,9 @@ rSI
uKL
aaf
dYX
iqT
htG
wFX
pii
rjT
dPI
aaf
aaa
@@ -129062,19 +129067,19 @@ aaa
aaf
dPI
xXd
sZg
lFn
pAr
dPI
qGy
nFp
sLx
kNs
dPI
iiP
mWu
lNP
lBv
dPI
ipG
naS
xlP
ktS
dPI
aaf
@@ -129576,19 +129581,19 @@ aaf
aaf
dPI
jQT
mkz
pSz
gdM
dPI
izZ
jGW
eHV
mMU
dPI
oMq
mEw
lCt
erE
dPI
hGX
tUr
smL
rxl
dPI
aaf
+51 -25
View File
@@ -10755,6 +10755,11 @@
name = "Port Solar APC";
pixel_y = 23
},
/obj/machinery/camera{
c_tag = "Port Bow Solar";
dir = 9;
name = "solar camera"
},
/turf/open/floor/plating,
/area/maintenance/solars/port)
"ayD" = (
@@ -37823,6 +37828,10 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
/obj/item/radio/intercom{
pixel_x = 30;
pixel_y = -2
},
/turf/open/floor/plasteel,
/area/science/mixing)
"bHI" = (
@@ -40841,7 +40850,7 @@
/turf/open/floor/engine/vacuum,
/area/science/mixing)
"bOu" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input{
dir = 4
},
/turf/open/floor/plating/airless,
@@ -46706,15 +46715,6 @@
},
/turf/open/floor/plating,
/area/engineering/main)
"cda" = (
/obj/structure/reflector/single/anchored{
dir = 10
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating,
/area/engineering/main)
"cdc" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -52321,7 +52321,6 @@
/area/service/library)
"czp" = (
/obj/structure/table/wood,
/obj/item/disk/nuclear/fake,
/obj/item/barcodescanner,
/turf/open/floor/plasteel/dark,
/area/service/library)
@@ -57379,6 +57378,11 @@
name = "Starboard Solar APC";
pixel_x = -25
},
/obj/machinery/camera{
c_tag = "Starboard Solar";
dir = 10;
name = "solar camera"
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
"mwg" = (
@@ -57549,6 +57553,15 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"mQB" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating,
/area/engineering/main)
"mSc" = (
/obj/machinery/space_heater,
/turf/open/floor/plating,
@@ -58833,12 +58846,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/space/nearstation)
"pCo" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating,
/area/engineering/main)
"pDP" = (
/obj/machinery/vending/assist,
/obj/effect/turf_decal/tile/neutral{
@@ -58916,6 +58923,19 @@
/obj/structure/closet/crate,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"pKU" = (
/obj/machinery/power/emitter/anchored{
dir = 8;
state = 2
},
/obj/structure/cable{
icon_state = "0-4"
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating,
/area/engineering/main)
"pMG" = (
/obj/structure/sink{
dir = 8;
@@ -61590,6 +61610,12 @@
"wcs" = (
/turf/open/floor/plasteel/dark,
/area/engineering/main)
"wcE" = (
/obj/structure/reflector/single/anchored{
dir = 10
},
/turf/open/floor/plating,
/area/engineering/main)
"wdx" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -93541,8 +93567,8 @@ bYT
bZB
caq
cbk
aac
ccY
bXk
mQB
cdT
ccY
cbX
@@ -94055,8 +94081,8 @@ bYV
bZA
cam
ccW
bXk
cda
aac
wcE
wcs
wcs
wcs
@@ -94569,8 +94595,8 @@ bYX
bZA
cam
lfx
bXk
pCo
aac
cbX
wcs
wcs
wcs
@@ -95083,8 +95109,8 @@ wjm
bZF
cbm
mgz
aac
oHa
bXk
pKU
oHa
eWi
cbX
File diff suppressed because it is too large Load Diff
+10639 -7662
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -53,6 +53,7 @@
#define GELADIKINESIS /datum/mutation/human/geladikinesis
#define CRYOKINESIS /datum/mutation/human/cryokinesis
#define SPIDER_WEB /datum/mutation/human/webbing
#define CLUWNEMUT /datum/mutation/human/cluwne
#define UI_CHANGED "ui changed"
#define UE_CHANGED "ue changed"
+7 -3
View File
@@ -17,7 +17,11 @@
} while(0);
#define CHECK_MULTIPLE_BITFIELDS(flagvar, flags) (((flagvar) & (flags)) == (flags))
GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768))
GLOBAL_LIST_INIT(bitflags, list(
1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7,
1<<8, 1<<9, 1<<10, 1<<11, 1<<12, 1<<13, 1<<14, 1<<15,
1<<16, 1<<17, 1<<18, 1<<19, 1<<20, 1<<21, 1<<22, 1<<23
))
// for /datum/var/datum_flags
#define DF_USE_TAG (1<<0)
@@ -56,8 +60,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define UNUSED_RESERVATION_TURF_1 (1<<1)
/// If a turf can be made dirty at roundstart. This is also used in areas.
#define CAN_BE_DIRTY_1 (1<<2)
/// If blood cultists can draw runes or build structures on this turf
#define CULT_PERMITTED_1 (1<<3)
/// Blocks lava rivers being generated on the turf
#define NO_LAVA_GEN_1 (1<<6)
/// Blocks ruins spawning on the turf
@@ -92,6 +94,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define ABDUCTOR_PROOF (1<<11)
/// If an area should be hidden from power consoles, power/atmosphere alerts, etc.
#define NO_ALERTS (1<<12)
/// If blood cultists can draw runes or build structures on this AREA.
#define CULT_PERMITTED (1<<13)
/*
These defines are used specifically with the atom/pass_flags bitmask
+1
View File
@@ -82,6 +82,7 @@
#define ADMIN_PUNISHMENT_PICKLE "Pickle-ify"
#define ADMIN_PUNISHMENT_FRY "Fry"
#define ADMIN_PUNISHMENT_PERFORATE ":B:erforate"
#define ADMIN_PUNISHMENT_CLUWNE "Cluwne"
#define AHELP_ACTIVE 1
#define AHELP_CLOSED 2
+3 -3
View File
@@ -148,10 +148,10 @@
#define CANVERTICALATMOSPASS(A, O) ( A.CanAtmosPassVertical == ATMOS_PASS_PROC ? A.CanAtmosPass(O, TRUE) : ( A.CanAtmosPassVertical == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPassVertical ) )
//OPEN TURF ATMOS
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
#define OPENTURF_DEFAULT_ATMOS "o2=21.78;n2=82.36;TEMP=293.15" //the default air mix that open turfs spawn, also is what the station vents output at assuming a 21/79% o2/n2 mix
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15degC telecommunications. also used for xenobiology slime killrooms
#define AIRLESS_ATMOS "TEMP=2.7" //space
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15degC snow and ice turfs
#define FROZEN_ATMOS "o2=21.78;n2=82.36;TEMP=180" //-93.15degC snow and ice turfs
#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
@@ -160,7 +160,7 @@
#define ATMOS_TANK_PLASMA "plasma=70000;TEMP=293.15"
#define ATMOS_TANK_O2 "o2=100000;TEMP=293.15"
#define ATMOS_TANK_N2 "n2=100000;TEMP=293.15"
#define ATMOS_TANK_AIRMIX "o2=2644;n2=10580;TEMP=293.15"
#define ATMOS_TANK_AIRMIX "o2=2811;n2=10583;TEMP=293.15"
//LAVALAND
#define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland
+1 -1
View File
@@ -158,7 +158,7 @@
/// how long they're staggered for
#define SHOVE_STAGGER_DURATION 35
/// how long they're off balance for
#define SHOVE_OFFBALANCE_DURATION 30
#define SHOVE_OFFBALANCE_DURATION 3 SECONDS
//Embedded objects
+8
View File
@@ -23,6 +23,14 @@
#define WINDOW_IN_FRAME 1
#define WINDOW_SCREWED_TO_FRAME 2
//reinforced plasma window construction states
#define PRWINDOW_FRAME_BOLTED 3
#define PRWINDOW_BARS_CUT 4
#define PRWINDOW_POPPED 5
#define PRWINDOW_BOLTS_OUT 6
#define PRWINDOW_BOLTS_HEATED 7
#define PRWINDOW_SECURE 8
//airlock assembly construction states
#define AIRLOCK_ASSEMBLY_NEEDS_WIRES 0
#define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1
+1 -1
View File
@@ -532,7 +532,7 @@
// /datum/component/storage signals
#define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool.
#define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" //(obj/item/inserting, mob/user, silent, force) - returns bool
#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force) - returns bool.
#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force, trigger_on_found) - returns bool.
#define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from" //(mob/hide_from) - returns bool
#define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all" //returns bool
#define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state" //(newstate)
+1
View File
@@ -515,6 +515,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define VOMIT_TOXIC 1
#define VOMIT_PURPLE 2
#define VOMIT_NANITE 3
// possible bitflag return values of intercept_zImpact(atom/movable/AM, levels = 1) calls
#define FALL_INTERCEPTED (1<<0) //Stops the movable from falling further and crashing on the ground
+5 -1
View File
@@ -12,6 +12,11 @@
#define NANITE_CLOUD_DISABLE 2
#define NANITE_CLOUD_ENABLE 3
//Nanite excess thresholds
#define NANITE_EXCESS_MINOR 25
#define NANITE_EXCESS_VOMIT 100
#define NANITE_EXCESS_BURST 350
///Nanite Protocol types
#define NANITE_PROTOCOL_REPLICATION "nanite_replication"
#define NANITE_PROTOCOL_STORAGE "nanite_storage"
@@ -45,4 +50,3 @@
#define NES_SCAN_TYPE "Scan Type"
#define NES_BUTTON_NAME "Button Name"
#define NES_ICON "Icon"
#define NES_COLOR "Color"
+3 -1
View File
@@ -37,6 +37,7 @@
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
#define ROLE_GANG "gangster"
#define ROLE_BLOODSUCKER "bloodsucker"
#define ROLE_SPACE_DRAGON "Space Dragon"
//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
#define ROLE_GHOSTCAFE "ghostcafe"
#define ROLE_MINOR_ANTAG "minorantag"
@@ -70,7 +71,8 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_SENTIENCE,
ROLE_GANG = /datum/game_mode/gang,
ROLE_HERETIC = /datum/game_mode/heretics,
ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker
ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker,
ROLE_SPACE_DRAGON
//ROLE_MONSTERHUNTER Disabled for now
))
+21 -17
View File
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
#define TGS_DMAPI_VERSION "5.2.9"
#define TGS_DMAPI_VERSION "6.0.3"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -67,7 +67,7 @@
#define TGS_EVENT_REPO_CHECKOUT 1
/// When the repository performs a fetch operation. No parameters
#define TGS_EVENT_REPO_FETCH 2
/// When the repository merges a pull request. Parameters: PR Number, PR Sha, (Nullable) Comment made by TGS user
/// When the repository test merges. Parameters: PR Number, PR Sha, (Nullable) Comment made by TGS user
#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3
/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path
#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4
@@ -95,8 +95,13 @@
#define TGS_EVENT_WATCHDOG_SHUTDOWN 15
/// Before the watchdog detaches for a TGS update/restart. No parameters.
#define TGS_EVENT_WATCHDOG_DETACH 16
// We don't actually implement this value as the DMAPI can never receive it
// We don't actually implement these 4 events as the DMAPI can never receive them.
// #define TGS_EVENT_WATCHDOG_LAUNCH 17
// #define TGS_EVENT_WATCHDOG_CRASH 18
// #define TGS_EVENT_WORLD_END_PROCESS 19
// #define TGS_EVENT_WORLD_REBOOT 20
/// Watchdog event when TgsInitializationComplete() is called. No parameters.
#define TGS_EVENT_WORLD_PRIME 21
// OTHER ENUMS
@@ -130,7 +135,6 @@
*
* This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running.
* Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184
* Before this point, note that any static files or directories may be in use by another server. Your code should account for this.
* This function should not be called before ..() in [/world/proc/New].
*/
/world/proc/TgsInitializationComplete()
@@ -140,7 +144,7 @@
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
/**
* Call this at the beginning of [world/proc/Reboot].
* Call this as late as possible in [world/proc/Reboot].
*/
/world/proc/TgsReboot()
return
@@ -152,6 +156,8 @@
/datum/tgs_revision_information
/// Full SHA of the commit.
var/commit
/// ISO 8601 timestamp of when the commit was created
var/timestamp
/// Full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch.
var/origin_commit
@@ -190,21 +196,19 @@
/// Represents a merge of a GitHub pull request.
/datum/tgs_revision_information/test_merge
/// The pull request number.
/// The test merge number.
var/number
/// The pull request title when it was merged.
/// The test merge source's title when it was merged.
var/title
/// The pull request body when it was merged.
/// The test merge source's body when it was merged.
var/body
/// The GitHub username of the pull request's author.
/// The Username of the test merge source's author.
var/author
/// An http URL to the pull request.
/// An http URL to the test merge source.
var/url
/// The SHA of the pull request when that was merged.
var/pull_request_commit
/// ISO 8601 timestamp of when the pull request was merged.
var/time_merged
/// (Nullable) Comment left by the TGS user who initiated the merge..
/// The SHA of the test merge when that was merged.
var/head_commit
/// Optional comment left by the TGS user who initiated the merge.
var/comment
/// Represents a connected chat channel.
@@ -263,11 +267,11 @@
// API FUNCTIONS
/// Returns the maximum supported [/datum/tgs_version] of the DMAPI.
/world/proc/TgsMaximumAPIVersion()
/world/proc/TgsMaximumApiVersion()
return
/// Returns the minimum supported [/datum/tgs_version] of the DMAPI.
/world/proc/TgsMinimumAPIVersion()
/world/proc/TgsMinimumApiVersion()
return
/**
+1
View File
@@ -341,3 +341,4 @@
#define ACTIVE_PARRY_TRAIT "active_parry"
#define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name
#define TRAIT_SACRIFICED "sacrificed" //Makes sure that people cant be cult sacrificed twice.
#define TRAIT_SPACEWALK "spacewalk"
+1 -1
View File
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"ABDUCTOR_PROOF" = ABDUCTOR_PROOF,
"BLOBS_ALLOWED" = BLOBS_ALLOWED,
"BLOCK_SUICIDE" = BLOCK_SUICIDE,
// "CULT_PERMITTED" = CULT_PERMITTED,
"CULT_PERMITTED" = CULT_PERMITTED,
"FLORA_ALLOWED" = FLORA_ALLOWED,
"HIDDEN_AREA" = HIDDEN_AREA,
"MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED,
+29 -1
View File
@@ -84,7 +84,35 @@ GLOBAL_LIST_INIT(mutant_transform_list, list("wingsopen" = "wings",
"waggingspines" = "spines",
"mam_waggingtail" = "mam_tail"))
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list(
"ghost",
"ghostian",
"ghostian2",
"ghostking",
"ghost_red",
"ghost_black",
"ghost_blue",
"ghost_yellow",
"ghost_green",
"ghost_pink",
"ghost_cyan",
"ghost_dblue",
"ghost_dred",
"ghost_dgreen",
"ghost_dcyan",
"ghost_grey",
"ghost_dyellow",
"ghost_dpink",
"skeleghost",
"ghost_purpleswirl",
"ghost_rainbow",
"ghost_fire",
"ghost_funkypurp",
"ghost_pinksherbert",
"ghost_blazeit",
"ghost_mellow",
"ghost_camo",
"catghost")) //stores the ghost forms that support directional sprites
GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things
GLOBAL_LIST_INIT(ai_core_display_screens, list(
+2 -1
View File
@@ -123,7 +123,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_HIGH_BLOOD" = TRAIT_HIGH_BLOOD,
"TRAIT_EMPATH" = TRAIT_EMPATH,
"TRAIT_FRIENDLY" = TRAIT_FRIENDLY,
"TRAIT_IWASBATONED" = TRAIT_IWASBATONED
"TRAIT_IWASBATONED" = TRAIT_IWASBATONED,
"TRAIT_SPACEWALK" = TRAIT_SPACEWALK
),
/obj/item/bodypart = list(
"TRAIT_PARALYSIS" = TRAIT_PARALYSIS
+12 -9
View File
@@ -1,10 +1,13 @@
/*!
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
/**
* tgui subsystem
*
* Contains all tgui state and subsystem code.
*
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
SUBSYSTEM_DEF(tgui)
@@ -42,8 +45,8 @@ SUBSYSTEM_DEF(tgui)
var/datum/tgui/ui = current_run[current_run.len]
current_run.len--
// TODO: Move user/src_object check to process()
if(ui && ui.user && ui.src_object)
ui.process()
if(ui?.user && ui.src_object)
ui.process(wait * 0.1)
else
open_uis.Remove(ui)
if(MC_TICK_CHECK)
@@ -191,8 +194,8 @@ SUBSYSTEM_DEF(tgui)
return count
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.process(force = 1)
if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.process(wait * 0.1, force = 1)
count++
return count
@@ -213,7 +216,7 @@ SUBSYSTEM_DEF(tgui)
return count
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.close()
count++
return count
@@ -230,7 +233,7 @@ SUBSYSTEM_DEF(tgui)
for(var/key in open_uis_by_src)
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.close()
count++
return count
@@ -251,7 +254,7 @@ SUBSYSTEM_DEF(tgui)
return count
for(var/datum/tgui/ui in user.tgui_open_uis)
if(isnull(src_object) || ui.src_object == src_object)
ui.process(force = 1)
ui.process(wait * 0.1, force = 1)
count++
return count
+9
View File
@@ -793,6 +793,15 @@
small_icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
small_icon_state = "ash_whelp"
/datum/action/small_sprite/megafauna/colossus
small_icon_state = "Basilisk"
/datum/action/small_sprite/megafauna/bubblegum
small_icon_state = "goliath2"
/datum/action/small_sprite/megafauna/legion
small_icon_state = "mega_legion"
/datum/action/small_sprite/Trigger()
..()
if(!small)
+5
View File
@@ -176,6 +176,11 @@
scheduled_destruction = world.time + (lifespan - CHAT_MESSAGE_EOL_FADE)
enter_subsystem()
var/mob/living/silicon/robot/R = target
if(iscyborg(R))
if(R.module.dogborg == TRUE || R.dogborg == TRUE) //I hate whoever that thought that putting two types of dogborg that don't even sync up properly was good
message.pixel_x = 16
/**
* Applies final animations to overlay CHAT_MESSAGE_EOL_FADE deciseconds prior to message deletion
* Arguments:
@@ -52,7 +52,7 @@
/datum/crafting_recipe/armwraps
name = "Armwraps"
result = /obj/item/clothing/gloves/fingerless/pugilist
result = /obj/item/clothing/gloves/fingerless/pugilist/crafted
time = 60
tools = list(TOOL_WIRECUTTER)
reqs = list(/obj/item/stack/sheet/cloth = 4,
+1 -1
View File
@@ -159,7 +159,7 @@
/datum/component/embedded/proc/jostleCheck()
var/mob/living/carbon/victim = parent
var/damage = weapon.w_class * pain_mult
var/damage = weapon.w_class * jostle_pain_mult
var/pain_chance_current = jostle_chance
if(victim.m_intent == MOVE_INTENT_WALK || !(victim.mobility_flags & MOBILITY_STAND))
pain_chance_current *= 0.5
+64
View File
@@ -170,6 +170,7 @@
/**
* Used to rid ourselves
*/
///Deletes nanites!
/datum/component/nanites/proc/delete_nanites()
if(can_be_deleted)
qdel(src)
@@ -214,6 +215,7 @@
return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK)
//Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status)
///Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status)
/datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE)
var/list/programs_to_remove = programs.Copy() - permanent_programs
var/list/programs_to_add = source.programs.Copy()
@@ -233,6 +235,7 @@
var/datum/nanite_program/SNP = X
add_program(null, SNP.copy())
///Syncs the nanites to their assigned cloud copy, if it is available. If it is not, there is a small chance of a software error instead.
/datum/component/nanites/proc/cloud_sync()
if(cloud_id)
var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id)
@@ -246,6 +249,7 @@
var/datum/nanite_program/NP = pick(programs)
NP.software_error()
///Adds a nanite program, replacing existing unique programs of the same type. A source program can be specified to copy its programming onto the new one.
/datum/component/nanites/proc/add_program(datum/source, datum/nanite_program/new_program, datum/nanite_program/source_program)
for(var/X in programs)
var/datum/nanite_program/NP = X
@@ -268,11 +272,68 @@
adjust_nanites(null, -amount)
return (nanite_volume > 0)
///Modifies the current nanite volume, then checks if the nanites are depleted or exceeding the maximum amount
/datum/component/nanites/proc/adjust_nanites(datum/source, amount)
nanite_volume = clamp(nanite_volume + amount, 0, max_nanites)
SIGNAL_HANDLER
nanite_volume += amount
if(nanite_volume > max_nanites)
reject_excess_nanites()
if(nanite_volume <= 0) //oops we ran out
nanites_depleted()
/**
* Handles how nanites leave the host's body if they find out that they're currently exceeding the maximum supported amount
*
* IC explanation:
* Normally nanites simply discard excess volume by slowing replication or 'sweating' it out in imperceptible amounts,
* but if there is a large excess volume, likely due to a programming change that leaves them unable to support their current volume,
* the nanites attempt to leave the host as fast as necessary to prevent nanite poisoning. This can range from minor oozing to nanites
* rapidly bursting out from every possible pathway, causing temporary inconvenience to the host.
*/
/datum/component/nanites/proc/reject_excess_nanites()
var/excess = nanite_volume - max_nanites
nanite_volume = max_nanites
switch(excess)
if(0 to NANITE_EXCESS_MINOR) //Minor excess amount, the extra nanites are quietly expelled without visible effects
return
if((NANITE_EXCESS_MINOR + 0.1) to NANITE_EXCESS_VOMIT) //Enough nanites getting rejected at once to be visible to the naked eye
host_mob.visible_message("<span class='warning'>A grainy grey slurry starts oozing out of [host_mob].</span>", "<span class='warning'>A grainy grey slurry starts oozing out of your skin.</span>", null, 4);
if((NANITE_EXCESS_VOMIT + 0.1) to NANITE_EXCESS_BURST) //Nanites getting rejected in massive amounts, but still enough to make a semi-orderly exit through vomit
if(iscarbon(host_mob))
var/mob/living/carbon/C = host_mob
host_mob.visible_message("<span class='warning'>[host_mob] vomits a grainy grey slurry!</span>", "<span class='warning'>You suddenly vomit a metallic-tasting grainy grey slurry!</span>", null);
C.vomit(0, FALSE, TRUE, FLOOR(excess / 100, 1), FALSE, VOMIT_NANITE, FALSE, TRUE, 0)
else
host_mob.visible_message("<span class='warning'>A metallic grey slurry bursts out of [host_mob]'s skin!</span>", "<span class='userdanger'>A metallic grey slurry violently bursts out of your skin!</span>", null);
if(isturf(host_mob.drop_location()))
var/turf/T = host_mob.drop_location()
T.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
if((NANITE_EXCESS_BURST + 0.1) to INFINITY) //Way too many nanites, they just leave through the closest exit before they harm/poison the host
host_mob.visible_message("<span class='warning'>A torrent of metallic grey slurry violently bursts out of [host_mob]'s face and floods out of [host_mob.p_their()] skin!</span>",
"<span class='userdanger'>A torrent of metallic grey slurry violently bursts out of your eyes, ears, and mouth, and floods out of your skin!</span>");
host_mob.blind_eyes(15) //nanites coming out of your eyes
host_mob.Paralyze(120)
if(iscarbon(host_mob))
var/mob/living/carbon/C = host_mob
var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
if(ears)
ears.adjustEarDamage(0, 30) //nanites coming out of your ears
C.vomit(0, FALSE, TRUE, 2, FALSE, VOMIT_NANITE, FALSE, TRUE, 0) //nanites coming out of your mouth
//nanites everywhere
if(isturf(host_mob.drop_location()))
var/turf/T = host_mob.drop_location()
T.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
for(var/turf/adjacent_turf in oview(host_mob, 1))
if(adjacent_turf.density || !adjacent_turf.Adjacent(T))
continue
adjacent_turf.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
///Updates the nanite volume bar visible in diagnostic HUDs
/datum/component/nanites/proc/set_nanite_bar(remove = FALSE)
var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD]
var/icon/I = icon(host_mob.icon, host_mob.icon_state, host_mob.dir)
@@ -347,6 +408,9 @@
/datum/component/nanites/proc/set_max_volume(datum/source, amount)
max_nanites = max(1, max_nanites)
SIGNAL_HANDLER
max_nanites = max(1, amount)
/datum/component/nanites/proc/set_cloud(datum/source, amount)
cloud_id = clamp(amount, 0, 100)
@@ -37,7 +37,7 @@
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
@@ -81,7 +81,7 @@
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
+23 -10
View File
@@ -271,20 +271,20 @@
var/turf/T = get_turf(A)
var/list/things = contents()
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE)
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE, mob/user)
var/atom/real_location = real_location()
for(var/obj/item/I in things)
things -= I
if(I.loc != real_location)
continue
remove_from_storage(I, target)
if(trigger_on_found && I.on_found())
if(trigger_on_found && user && (user.active_storage != src) && I.on_found(user))
return FALSE
remove_from_storage(I, target)
if(TICK_CHECK)
progress.update(progress.goal - length(things))
return TRUE
@@ -429,7 +429,7 @@
return FALSE
// this must come before the screen objects only block, dunno why it wasn't before
if(over_object == M)
user_show_to_mob(M)
user_show_to_mob(M, trigger_on_found = TRUE)
return
if(isrevenant(M))
RevenantThrow(over_object, M, source)
@@ -448,15 +448,28 @@
return
A.add_fingerprint(M)
/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE)
/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE, trigger_on_found = FALSE)
var/atom/A = parent
if(!istype(M))
return FALSE
A.add_fingerprint(M)
if(!force && (check_locked(null, M) || !M.CanReach(parent, view_only = TRUE)))
return FALSE
if(trigger_on_found)
if(check_on_found(M))
return
ui_show(M)
/**
* Check if we should trigger on_found()
* If this returns TRUE, it means an on_found() returned TRUE and immediately broke the chain.
* In most contexts, this should mean to stop.
*/
/datum/component/storage/proc/check_on_found(mob/user)
for(var/obj/item/I in contents())
if(I.on_found(user))
return TRUE
/datum/component/storage/proc/mousedrop_receive(datum/source, atom/movable/O, mob/M)
if(isitem(O))
var/obj/item/I = O
@@ -579,8 +592,8 @@
/datum/component/storage/proc/show_to_ghost(datum/source, mob/dead/observer/M)
return user_show_to_mob(M, TRUE)
/datum/component/storage/proc/signal_show_attempt(datum/source, mob/showto, force = FALSE)
return user_show_to_mob(showto, force)
/datum/component/storage/proc/signal_show_attempt(datum/source, mob/showto, force = FALSE, trigger_on_found = TRUE)
return user_show_to_mob(showto, force, trigger_on_found = trigger_on_found)
/datum/component/storage/proc/on_check()
return TRUE
@@ -649,7 +662,7 @@
if(A.loc == user)
. = COMPONENT_NO_ATTACK_HAND
if(!check_locked(source, user, TRUE))
ui_show(user)
user_show_to_mob(user, trigger_on_found = TRUE)
A.do_jiggle()
/datum/component/storage/proc/signal_on_pickup(datum/source, mob/user)
@@ -679,7 +692,7 @@
var/atom/A = parent
if(!quickdraw)
A.add_fingerprint(user)
user_show_to_mob(user)
user_show_to_mob(user, trigger_on_found = TRUE)
if(rustle_sound)
playsound(A, "rustle", 50, 1, -5)
return TRUE
+12 -1
View File
@@ -7,8 +7,9 @@
var/left_hand
var/inv_slots
var/proctype //if present, will be invoked on headwear generation.
var/escape_on_find = FALSE //if present, will be released upon the item being 'found' (i.e. opening a container or pocket with it present)
/datum/element/mob_holder/Attach(datum/target, worn_state, alt_worn, right_hand, left_hand, inv_slots = NONE, proctype)
/datum/element/mob_holder/Attach(datum/target, worn_state, alt_worn, right_hand, left_hand, inv_slots = NONE, proctype, escape_on_find)
. = ..()
if(!isliving(target))
@@ -20,6 +21,7 @@
src.left_hand = left_hand
src.inv_slots = inv_slots
src.proctype = proctype
src.escape_on_find = escape_on_find
RegisterSignal(target, COMSIG_CLICK_ALT, .proc/mob_try_pickup)
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine)
@@ -55,6 +57,8 @@
to_chat(user, "<span class='notice'>You pick [source] up.</span>")
source.drop_all_held_items()
var/obj/item/clothing/head/mob_holder/holder = new(get_turf(source), source, worn_state, alt_worn, right_hand, left_hand, inv_slots)
holder.escape_on_find = escape_on_find
if(proctype)
INVOKE_ASYNC(src, proctype, source, holder, user)
user.put_in_hands(holder)
@@ -78,6 +82,7 @@
w_class = WEIGHT_CLASS_BULKY
dynamic_hair_suffix = ""
var/mob/living/held_mob
var/escape_on_find
/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/target, worn_state, alt_worn, right_hand, left_hand, slots = NONE)
. = ..()
@@ -189,3 +194,9 @@
if(ismob(location))
return location.loc.remove_air(amount)
return location.remove_air(amount)
// escape when found if applicable
/obj/item/clothing/head/mob_holder/on_found(mob/living/finder)
if(escape_on_find)
finder.visible_message("[finder] accidentally releases the [held_mob]!")
release()
+4 -4
View File
@@ -16,7 +16,7 @@
if(revinfo)
commit = revinfo.commit
originmastercommit = revinfo.origin_commit
date = rustg_git_commit_date(commit)
date = revinfo.timestamp || rustg_git_commit_date(commit)
// goes to DD log and config_error.txt
log_world(get_log_message())
@@ -29,8 +29,8 @@
for(var/line in testmerge)
var/datum/tgs_revision_information/test_merge/tm = line
msg += "Test merge active of PR #[tm.number] commit [tm.pull_request_commit]"
SSblackbox.record_feedback("associative", "testmerged_prs", 1, list("number" = "[tm.number]", "commit" = "[tm.pull_request_commit]", "title" = "[tm.title]", "author" = "[tm.author]"))
msg += "Test merge active of PR #[tm.number] commit [tm.head_commit]"
SSblackbox.record_feedback("associative", "testmerged_prs", 1, list("number" = "[tm.number]", "commit" = "[tm.head_commit]", "title" = "[tm.title]", "author" = "[tm.author]"))
if(commit && commit != originmastercommit)
msg += "HEAD: [commit]"
@@ -45,7 +45,7 @@
. = header ? "The following pull requests are currently test merged:<br>" : ""
for(var/line in testmerge)
var/datum/tgs_revision_information/test_merge/tm = line
var/cm = tm.pull_request_commit
var/cm = tm.head_commit
var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11))
if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder))
continue
+57
View File
@@ -0,0 +1,57 @@
/datum/mutation/human/cluwne
name = "Cluwne"
quality = NEGATIVE
locked = TRUE
text_gain_indication = "<span class='danger'>You feel like your brain is tearing itself apart.</span>"
/datum/mutation/human/cluwne/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
owner.dna.add_mutation(CLOWNMUT)
owner.dna.add_mutation(EPILEPSY)
owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199)
var/mob/living/carbon/human/H = owner
if(!istype(H.wear_mask, /obj/item/clothing/mask/gas/cluwne))
if(!H.dropItemToGround(H.wear_mask))
qdel(H.wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), SLOT_WEAR_MASK)
if(!istype(H.w_uniform, /obj/item/clothing/under/cluwne))
if(!H.dropItemToGround(H.w_uniform))
qdel(H.w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), SLOT_W_UNIFORM)
if(!istype(H.shoes, /obj/item/clothing/shoes/clown_shoes/cluwne))
if(!H.dropItemToGround(H.shoes))
qdel(H.shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), SLOT_SHOES)
owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot
owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), SLOT_BACK) // ditto
/datum/mutation/human/cluwne/on_life(mob/living/carbon/human/owner)
if((prob(15) && owner.IsUnconscious()))
owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199) // there I changed it to setBrainLoss
switch(rand(1, 6))
if(1)
owner.say("HONK")
if(2 to 5)
owner.emote("scream")
if(6)
owner.Stun(1)
owner.Knockdown(20)
owner.Jitter(500)
/datum/mutation/human/cluwne/on_losing(mob/living/carbon/human/owner)
owner.adjust_fire_stacks(1)
owner.IgniteMob()
owner.dna.add_mutation(CLUWNEMUT)
/mob/living/carbon/human/proc/cluwneify()
dna.add_mutation(CLUWNEMUT)
emote("scream")
regenerate_icons()
visible_message("<span class='danger'>[src]'s body glows green, the glow dissipating only to leave behind a cluwne formerly known as [src]!</span>", \
"<span class='danger'>Your brain feels like it's being torn apart, there is only the honkmother now.</span>")
flash_act()
+9 -8
View File
@@ -8,23 +8,24 @@
time_coeff = 5
instability = 30
/datum/mutation/human/space_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "space_adapt", -MUTATIONS_LAYER))
/datum/mutation/human/space_adaptation/get_visual_indicator()
return visual_indicators[type][1]
/datum/mutation/human/space_adaptation/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
ADD_TRAIT(owner, TRAIT_RESISTCOLD, "cold_resistance")
ADD_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance")
owner.add_filter("space_glow", 2, list("type" = "outline", "color" = "#ffe46bd8", "size" = 1))
addtimer(CALLBACK(src, .proc/glow_loop, owner), rand(1,19))
/datum/mutation/human/space_adaptation/proc/glow_loop(mob/living/carbon/human/owner)
var/filter = owner.get_filter("space_glow")
if(filter)
animate(filter, alpha = 190, time = 15, loop = -1)
animate(alpha = 110, time = 25)
/datum/mutation/human/space_adaptation/on_losing(mob/living/carbon/human/owner)
if(..())
return
REMOVE_TRAIT(owner, TRAIT_RESISTCOLD, "cold_resistance")
REMOVE_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance")
owner.remove_filter("space_glow")
+1 -1
View File
@@ -642,7 +642,7 @@
O.Remove()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
C.vomit(0, toxic = TRUE)
C.vomit(0)
O.forceMove(get_turf(owner))
if(isliving(owner))
var/mob/living/L = owner
+98
View File
@@ -207,3 +207,101 @@
if(!key_valid)
GLOB.topic_status_cache = .
/datum/world_topic/jsonstatus
keyword = "jsonstatus"
/datum/world_topic/jsonstatus/Run(list/input, addr)
. = list()
.["mode"] = "hidden" // GLOB.master_mode - woops we don't want people to know if there's secret/extended :)
.["round_id"] = "[GLOB.round_id]"
.["players"] = GLOB.clients.len
var/list/adm = get_admin_counts()
var/list/presentmins = adm["present"]
var/list/afkmins = adm["afk"]
.["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho
.["security_level"] = "[NUM2SECLEVEL(GLOB.security_level)]"
.["round_duration"] = WORLDTIME2TEXT("hh:mm:ss")
.["map"] = SSmapping.config.map_name
return json_encode(.)
/datum/world_topic/jsonplayers
keyword = "jsonplayers"
/datum/world_topic/jsonplayers/Run(list/input, addr)
. = list()
for(var/client/C in GLOB.clients)
if(C.holder?.fakekey)
. += C.holder.fakekey
continue
. += C.key
return json_encode(.)
/datum/world_topic/jsonmanifest
keyword = "jsonmanifest"
/datum/world_topic/jsonmanifest/Run(list/input, addr)
var/list/command = list()
var/list/security = list()
var/list/engineering = list()
var/list/medical = list()
var/list/science = list()
var/list/cargo = list()
var/list/civilian = list()
var/list/misc = list()
for(var/datum/data/record/R in GLOB.data_core.general)
var/name = R.fields["name"]
var/rank = R.fields["rank"]
var/real_rank = rank // make_list_rank(R.fields["real_rank"])
if(real_rank in GLOB.security_positions)
security[name] = rank
else if(real_rank in GLOB.engineering_positions)
engineering[name] = rank
else if(real_rank in GLOB.medical_positions)
medical[name] = rank
else if(real_rank in GLOB.science_positions)
science[name] = rank
else if(real_rank in GLOB.supply_positions)
cargo[name] = rank
else if(real_rank in GLOB.civilian_positions)
civilian[name] = rank
else
misc[name] = rank
// mixed departments, /datum/department when
if(real_rank in GLOB.command_positions)
command[name] = rank
. = list()
.["Command"] = command
.["Security"] = security
.["Engineering"] = engineering
.["Medical"] = medical
.["Science"] = science
.["Cargo"] = cargo
.["Civilian"] = civilian
.["Misc"] = misc
return json_encode(.)
/datum/world_topic/jsonrevision
keyword = "jsonrevision"
/datum/world_topic/jsonrevision/Run(list/input, addr)
var/datum/getrev/revdata = GLOB.revdata
var/list/data = list(
"date" = copytext(revdata.date, 1, 11),
"dd_version" = world.byond_version,
"dd_build" = world.byond_build,
"dm_version" = DM_VERSION,
"dm_build" = DM_BUILD,
"revision" = revdata.commit,
"round_id" = "[GLOB.round_id]",
"testmerge_base_url" = "[CONFIG_GET(string/githuburl)]/pull/"
)
if (revdata.testmerge.len)
for (var/datum/tgs_revision_information/test_merge/TM in revdata.testmerge)
data["testmerges"] += list(list(
"id" = TM.number,
"desc" = TM.title,
"author" = TM.author
))
return json_encode(data)
+10 -13
View File
@@ -209,7 +209,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Generic Maintenance"
// ambience_index = AMBIENCE_MAINT
ambientsounds = MAINTENANCE
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
// airlock_wires = /datum/wires/airlock/maint
sound_environment = SOUND_AREA_TUNNEL_ENCLOSED
@@ -294,7 +294,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/maintenance/department/science/xenobiology
name = "Xenobiology Maintenance"
icon_state = "xenomaint"
area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | XENOBIOLOGY_COMPATIBLE
area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | XENOBIOLOGY_COMPATIBLE | CULT_PERMITTED
//Maintenance - Generic
@@ -598,11 +598,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/commons
name = "Crew Quarters"
sound_environment = SOUND_AREA_STANDARD_STATION
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
/area/commons/dorms
name = "Dormitories"
icon_state = "dorms"
area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA
/area/commons/dorms/barracks
name = "Sleep Barracks"
@@ -899,7 +899,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
// mood_bonus = 5
// mood_message = "<span class='nicegreen'>I love being in the library!</span>\n"
// mood_trait = TRAIT_INTROVERT
flags_1 = CULT_PERMITTED_1
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
sound_environment = SOUND_AREA_LARGE_SOFTFLOOR
/area/service/library/lounge
@@ -926,7 +926,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/service/library/abandoned
name = "Abandoned Library"
icon_state = "abandoned_library"
flags_1 = CULT_PERMITTED_1
nightshift_public_area = NIGHTSHIFT_AREA_NONE
/area/service/chapel
@@ -973,8 +972,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/service/janitor
name = "Custodial Closet"
icon_state = "janitor"
flags_1 = CULT_PERMITTED_1
sound_environment = SOUND_AREA_SMALL_ENCLOSED
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
/area/service/janitor/aux
name = "Auxiliary Custodial Closet"
@@ -1027,7 +1026,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/engineering/atmos
name = "Atmospherics"
icon_state = "atmos"
flags_1 = CULT_PERMITTED_1
/area/engineering/atmos/upper
name = "Upper Atmospherics"
@@ -1035,7 +1033,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/engineering/atmospherics_engine
name = "Atmospherics Engine"
icon_state = "atmos_engine"
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
/area/engineering/lobby
name = "Engineering Lobby"
@@ -1044,7 +1042,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/engineering/supermatter
name = "Supermatter Engine"
icon_state = "engine_sm"
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
sound_environment = SOUND_AREA_SMALL_ENCLOSED
/area/engineering/break_room
@@ -1084,7 +1082,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/engineering/storage/tcomms
name = "Telecomms Storage"
icon_state = "tcom"
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
clockwork_warp_allowed = FALSE
//Engineering - Construction
@@ -1314,7 +1312,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/medical/virology
name = "Virology"
icon_state = "virology"
flags_1 = CULT_PERMITTED_1
/area/medical/morgue
name = "Morgue"
@@ -1608,7 +1605,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/science/test_area
name = "Toxins Test Area"
icon_state = "tox_test"
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
/area/science/mixing
name = "Toxins Mixing Lab"
@@ -1617,7 +1614,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/science/mixing/chamber
name = "Toxins Mixing Chamber"
icon_state = "tox_mix_chamber"
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
/area/science/misc_lab
name = "Testing Lab"
+1 -1
View File
@@ -13,7 +13,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
invisibility = INVISIBILITY_LIGHTING
var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA
var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
var/fire = null
///Whether there is an atmos alarm in this area
+1 -1
View File
@@ -11,7 +11,7 @@
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
requires_power = FALSE
has_gravity = STANDARD_GRAVITY
area_flags = VALID_TERRITORY | UNIQUE_AREA | NOTELEPORT
area_flags = UNIQUE_AREA | NOTELEPORT
flags_1 = NONE
/area/centcom/control
+4 -4
View File
@@ -3,7 +3,6 @@
icon_state = "Holodeck"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
flags_1 = NONE
area_flags = VALID_TERRITORY | UNIQUE_AREA
sound_environment = SOUND_ENVIRONMENT_PADDED_CELL
var/obj/machinery/computer/holodeck/linked
@@ -87,9 +86,6 @@
/area/holodeck/rec_center/lounge
name = "Holodeck - Lounge"
/area/holodeck/rec_center/medical
name = "Holodeck - Emergency Medical"
/area/holodeck/rec_center/pet_lounge
name = "Holodeck - Pet Park"
@@ -128,6 +124,10 @@
name = "Holodeck - Holdout Bunker"
restricted = 1
/area/holodeck/rec_center/medical
name = "Holodeck - Emergency Medical"
restricted = 1
/area/holodeck/rec_center/anthophila
name = "Holodeck - Anthophila"
restricted = 1
+2 -2
View File
@@ -157,10 +157,10 @@
/area/shuttle/escape
name = "Emergency Shuttle"
area_flags = BLOBS_ALLOWED
area_flags = BLOBS_ALLOWED | CULT_PERMITTED
// area_limited_icon_smoothing = /area/shuttle/escape
canSmoothWithAreas = /area/shuttle/escape
flags_1 = CAN_BE_DIRTY_1 // | CULT_PERMITTED_1
flags_1 = CAN_BE_DIRTY_1
/area/shuttle/escape/backup
name = "Backup Emergency Shuttle"
+2
View File
@@ -800,6 +800,8 @@
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
if(STR == src_object)
return
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
stoplag(1)
qdel(progress)
+1 -1
View File
@@ -579,7 +579,7 @@
//TODO: Better floating
/atom/movable/proc/float(on, throw_override)
if(throwing || !throw_override)
if(throwing && !throw_override)
return
if(on && !(movement_type & FLOATING))
animate(src, pixel_y = 2, time = 10, loop = -1, flags = ANIMATION_RELATIVE)
+4 -1
View File
@@ -1,7 +1,10 @@
/obj/machinery/computer/bank_machine
name = "bank machine"
desc = "A machine used to deposit and withdraw station funds."
icon = 'goon/icons/obj/goon_terminals.dmi'
icon = 'icons/obj/computer.dmi'
icon_state = "computer"
icon_screen = "vault"
icon_keyboard = "security_key"
idle_power_usage = 100
var/siphoning = FALSE
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A culinary marvel that uses matter-to-energy conversion to store dishes and shards. Convenient! \
Additional features include a vacuum function to suck in nearby dishes, and an automatic transfer beam that empties its contents into nearby disposal bins every now and then. \
Or you can just drop your plates on the floor, like civilized folk."
icon = 'goon/icons/obj/kitchen.dmi'
icon = 'icons/obj/kitchen.dmi'
icon_state = "synthesizer"
idle_power_usage = 8 //5 with default parts
active_power_usage = 13 //10 with default parts
@@ -341,6 +341,9 @@
return TRUE
. = ..()
/obj/structure/foamedmetal/resin/BlockSuperconductivity()
return TRUE
#undef ALUMINUM_FOAM
#undef IRON_FOAM
#undef RESIN_FOAM
+8
View File
@@ -73,6 +73,8 @@
myseed.adjust_yield(rand(-3,2))
myseed.adjust_production(rand(-3,3))
myseed.endurance = clamp(myseed.endurance + rand(-3,2), 0, 100) // adjust_endurance has a min value of 10, need to edit directly
// Scale health to endurance
max_integrity = obj_integrity = 10 + myseed.endurance / 2
delay_spread = delay_spread - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
if(ispath(G)) // Seeds were ported to initialize so their genes are still typepaths here, luckily their initializer is smart enough to handle us doing this
@@ -193,8 +195,14 @@
/obj/structure/glowshroom/proc/Decay(spread, amount)
if (spread) // Decay due to spread
myseed.endurance -= amount
max_integrity = min(max_integrity, 10 + myseed.endurance / 2)
if(obj_integrity > max_integrity)
obj_integrity = max_integrity
else // Timed decay
myseed.endurance -= 1
max_integrity = min(max_integrity, 10 + myseed.endurance / 2)
if(obj_integrity > max_integrity)
obj_integrity = max_integrity
if (myseed.endurance > 0)
addtimer(CALLBACK(src, .proc/Decay), delay_decay, FALSE) // Recall decay timer
return
@@ -378,6 +378,12 @@
icon_state = "shieldsparkles"
duration = 6
/obj/effect/temp_visual/impact_effect/judgement_cut
name = "judgement cut impact"
icon = 'icons/effects/effects.dmi'
icon_state = "impact_judgement"
duration = 6
/obj/effect/temp_visual/heart
name = "heart"
icon = 'icons/mob/animal.dmi'
@@ -535,3 +541,7 @@
/obj/effect/temp_visual/slime_puddle/reverse
icon_state = "from_puddle"
duration = 7
/obj/effect/temp_visual/gib_animation
icon = 'icons/mob/mob.dmi'
duration = 15
+13 -7
View File
@@ -21,7 +21,7 @@
var/powered = FALSE //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
var/obj/item/shockpaddles/paddles
var/obj/item/stock_parts/cell/cell
var/combat = FALSE //can we revive through space suits?
var/combat = FALSE //if true, revive through hardsuits, allow for combat shocking, and tint paddles syndicate colors
var/grab_ghost = FALSE // Do we pull the ghost back into their body?
var/healdisk = FALSE // Does the unit have the healdisk upgrade?
var/pullshocksafely = FALSE // Will we shock people dragging the body?
@@ -176,7 +176,9 @@
A.UpdateButtonIcon()
/obj/item/defibrillator/proc/make_paddles()
return new /obj/item/shockpaddles(src)
if(!combat)
return new /obj/item/shockpaddles(src)
return new /obj/item/shockpaddles/syndicate(src)
/obj/item/defibrillator/equipped(mob/user, slot)
..()
@@ -245,6 +247,8 @@
/obj/item/defibrillator/compact/combat
name = "combat defibrillator"
desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
icon_state = "defibcombat" //needs defib inhand sprites
item_state = "defibcombat"
combat = TRUE
safety = FALSE
always_emagged = TRUE
@@ -279,6 +283,7 @@
var/combat = FALSE //If it penetrates armor and gives additional functionality
var/grab_ghost = FALSE
var/tlimit = DEFIB_TIME_LIMIT * 10
var/base_icon_state = "defibpaddles"
var/disarm_shock_time = 10
var/wielded = FALSE // track wielded status on item
@@ -352,10 +357,10 @@
return (OXYLOSS)
/obj/item/shockpaddles/update_icon_state()
icon_state = "defibpaddles[wielded]"
item_state = "defibpaddles[wielded]"
icon_state = "[base_icon_state][wielded]"
item_state = icon_state
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
icon_state = "[base_icon_state][wielded]_cooldown"
/obj/item/shockpaddles/dropped(mob/user)
if(!req_defib)
@@ -704,8 +709,9 @@
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively."
combat = TRUE
icon = 'icons/obj/defibrillators.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
icon_state = "syndiepaddles0"
item_state = "syndiepaddles0"
base_icon_state = "syndiepaddles"
req_defib = FALSE
///////////////////////////////////////////
@@ -77,8 +77,11 @@
return
if(!iscarbon(target))
return
if(!(target?.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER))
to_chat(user, "<span class='warning'>The user has opted out of the use of your [src].")
return
var/voracious = TRUE
if(!target.client || !(target.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
if(!hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
voracious = FALSE
if(target.buckled)
to_chat(user, "<span class='warning'>The user is buckled and can not be put into your [src].</span>")
+2 -2
View File
@@ -381,8 +381,8 @@ GENETICS SCANNER
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
msg += "\t<span class='info'>Reported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]</span>\n"
msg += "\t<span class='info'>Base Species: [S.name]</span>\n"
msg += "\t<span class='info'>Reported Species: [H.spec_trait_examine_font()][H.dna.custom_species ? H.dna.custom_species : S.name]</font></span>\n"
msg += "\t<span class='info'>Base Species: [H.spec_trait_examine_font()][S.name]</font></span>\n"
if(mutant)
msg += "\t<span class='info'>Subject has mutations present.</span>\n"
msg += "\t<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>\n"
+2 -2
View File
@@ -399,7 +399,7 @@
on_sound = 'sound/weapons/batonextend.ogg'
on_icon_state = "telebaton_1"
off_icon_state = "telebaton_0"
on_item_state = "nullrod"
on_item_state = "telebaton_1"
force_on = 10
force_off = 0
weight_class_on = WEIGHT_CLASS_BULKY
@@ -472,7 +472,7 @@
on_stun_sound = 'sound/effects/contractorbatonhit.ogg'
on_icon_state = "contractor_baton_1"
off_icon_state = "contractor_baton_0"
on_item_state = "contractor_baton"
on_item_state = "contractor_baton_1"
force_on = 16
force_off = 5
weight_class_on = WEIGHT_CLASS_NORMAL
+4 -2
View File
@@ -4,10 +4,10 @@
desc = "A handheld tracking device that locks onto certain signals."
icon = 'icons/obj/device.dmi'
icon_state = "pinpointer"
item_state = "pinpointer"
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
throw_speed = 3
@@ -97,6 +97,7 @@
name = "crew pinpointer"
desc = "A handheld tracking device that points to crew suit sensors."
icon_state = "pinpointer_crew"
item_state = "pinpointer_crew"
custom_price = PRICE_ABOVE_EXPENSIVE
var/has_owner = FALSE
var/pinpointer_owner = null
@@ -208,6 +209,7 @@
name = "fugitive pinpointer"
desc = "A handheld tracking device that locates the bounty hunter shuttle for quick escapes."
icon_state = "pinpointer_hunter"
item_state = "pinpointer_black"
var/obj/shuttleport
/obj/item/pinpointer/shuttle/Initialize(mapload)
@@ -231,4 +233,4 @@
/obj/item/pinpointer/custom
resets_target = FALSE
+3 -3
View File
@@ -1,7 +1,7 @@
/obj/item/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "mjollnir0"
icon_state = "singularity_hammer0"
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
flags_1 = CONDUCT_1
@@ -25,7 +25,7 @@
/obj/item/singularityhammer/ComponentInitialize()
. = ..()
AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="mjollnir1")
AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="singularity_hammer1")
/// triggered on wield of two handed item
/obj/item/singularityhammer/proc/on_wield(obj/item/source, mob/user)
@@ -36,7 +36,7 @@
wielded = FALSE
/obj/item/singularityhammer/update_icon_state()
icon_state = "mjollnir0"
icon_state = "singularity_hammer0"
/obj/item/singularityhammer/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -593,7 +593,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
return
var/turf/T = get_turf(user) //we may have moved. adjust as needed...
var/area/A = get_area(user)
if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !(A.flags_1 & CULT_PERMITTED_1)))
if((!is_station_level(T.z) && !is_mining_level(T.z)) || !(A?.area_flags & CULT_PERMITTED))
to_chat(user, "<span class='warning'>The veil is not weak enough here.</span>")
return FALSE
return ..()
+1
View File
@@ -85,6 +85,7 @@
name = "trash bag of holding"
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
item_state = "bluetrashbag"
item_flags = NO_MAT_REDEMPTION
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+2 -2
View File
@@ -211,8 +211,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
"<span class='userdanger'>YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! <i>THERE CAN BE ONLY ONE!!!</i></span>")
user.update_icons()
new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]"
icon_state = "claymore_valhalla"
item_state = "cultblade"
icon_state = "claymore_gold"
item_state = "claymore_gold"
remove_atom_colour(ADMIN_COLOUR_PRIORITY)
name = new_name
@@ -13,15 +13,16 @@
return 0
. = ..()
// Exists to work around the minimum 700 cr price for goodies / small items
/obj/structure/closet/secure_closet/goodies
// Exists to work around the minimum 700 cr price for goodies / small items / materials
/obj/structure/closet/secure_closet/cargo
name = "cargo locker"
icon_state = "goodies"
desc = "A sturdier card-locked storage unit used for bulky shipments."
max_integrity = 500 // Same as crates.
melee_min_damage = 25 // Idem.
/obj/structure/closet/secure_closet/goodies/owned
name = "private locker"
/obj/structure/closet/secure_closet/cargo/owned
name = "private cargo locker"
desc = "A locker designed to only open for who purchased its contents."
///Account of the person buying the crate if private purchasing.
var/datum/bank_account/buyer_account
@@ -32,18 +33,18 @@
///Is the crate being bought by a person, or a budget card?
var/department_purchase = FALSE
/obj/structure/closet/secure_closet/goodies/owned/examine(mob/user)
/obj/structure/closet/secure_closet/cargo/owned/examine(mob/user)
. = ..()
. += "<span class='notice'>It's locked with a privacy lock, and can only be unlocked by the buyer's ID.</span>"
/obj/structure/closet/secure_closet/goodies/owned/Initialize(mapload, datum/bank_account/_buyer_account)
/obj/structure/closet/secure_closet/cargo/owned/Initialize(mapload, datum/bank_account/_buyer_account)
. = ..()
buyer_account = _buyer_account
if(istype(buyer_account, /datum/bank_account/department))
department_purchase = TRUE
department_account = buyer_account
/obj/structure/closet/secure_closet/goodies/owned/togglelock(mob/living/user, silent)
/obj/structure/closet/secure_closet/cargo/owned/togglelock(mob/living/user, silent)
if(privacy_lock)
if(!broken)
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
+97 -17
View File
@@ -21,6 +21,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
var/ini_dir = null
var/state = WINDOW_OUT_OF_FRAME
var/reinf = FALSE
var/extra_reinforced = FALSE
var/heat_resistance = 800
var/decon_speed = 30
var/wtype = "glass"
@@ -65,6 +66,20 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
. += "<span class='notice'>The window is out of the frame, but could be <i>pried</i> in. It is <b>screwed</b> to the floor.</span>"
else if(!anchored)
. += "<span class='notice'>The window is <i>unscrewed</i> from the floor, and could be deconstructed by <b>wrenching</b>.</span>"
switch(state)
if(PRWINDOW_SECURE)
if(extra_reinforced)
. += "It's been screwed in with one way screws, you'd need to <b>heat their solder cover</b> to have any chance of backing them out."
else
. += "It's been screwed in with solid screws, you'd need to <b>screw them</b> out to unsecure the window."
if(PRWINDOW_BOLTS_HEATED)
. += "The solder cover melts away, and you'll likely be able to <b>unscrew them</b> now."
if(PRWINDOW_BOLTS_OUT)
. += "The screws have been removed, revealing a small gap you could fit a <b>prying tool</b> in."
if(PRWINDOW_POPPED)
. += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be <b>cut</b>."
if(PRWINDOW_BARS_CUT)
. += "The main pane can be easily moved out of the way to reveal some <b>bolts</b> holding the frame in."
else
if(anchored)
. += "<span class='notice'>The window is <b>screwed</b> to the floor.</span>"
@@ -75,8 +90,13 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
. = ..()
if(direct)
setDir(direct)
if(reinf && anchored)
if(extra_reinforced && anchored)
state = PRWINDOW_SECURE
else if(reinf && anchored)
state = WINDOW_SCREWED_TO_FRAME
if(mapload && electrochromatic_id && electrochromatic_id[1] == "!")
electrochromatic_id = SSmapping.get_obfuscated_id(electrochromatic_id)
@@ -230,29 +250,26 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
make_electrochromatic(K.id)
qdel(K)
if(!(flags_1&NODECONSTRUCT_1))
if(!(flags_1 & NODECONSTRUCT_1) && !(state >= PRWINDOW_FRAME_BOLTED))
if(I.tool_behaviour == TOOL_SCREWDRIVER)
I.play_tool_sound(src, 75)
if(reinf)
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME && anchored)
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
if(extra_reinforced && state == WINDOW_IN_FRAME)
state = PRWINDOW_SECURE
else
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
else if(state == WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
setAnchored(!anchored)
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
else //if we're not reinforced, we don't need to check or update state
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
else if(state == WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
setAnchored(!anchored)
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
return
else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME))
else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME) && anchored)
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
I.play_tool_sound(src, 75)
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
@@ -270,8 +287,67 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
to_chat(user, "<span class='notice'>You successfully disassemble [src].</span>")
qdel(src)
return
if(!reinf || !anchored)
return ..()
switch(state)
if(PRWINDOW_SECURE)
if(extra_reinforced)
if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HARM)
user.visible_message("<span class='notice'>[user] holds \the [I] to the security screws on \the [src]...</span>",
"<span class='notice'>You begin heating the security screws on \the [src]...</span>")
if(I.use_tool(src, user, 180, volume = 100))
to_chat(user, "<span class='notice'>The security bolts are glowing white hot and look ready to be removed.</span>")
state = PRWINDOW_BOLTS_HEATED
addtimer(CALLBACK(src, .proc/cool_bolts), 300)
return
else
if(I.tool_behaviour == TOOL_SCREWDRIVER)
user.visible_message("<span class='notice'>[user] digs into the screws and starts removing them...</span>",
"<span class='notice'>You dig into the screws hard and they start turning...</span>")
if(I.use_tool(src, user, 80, volume = 50))
state = PRWINDOW_BOLTS_OUT
to_chat(user, "<span class='notice'>The screws come out, and a gap forms around the edge of the pane.</span>")
return
if(PRWINDOW_BOLTS_HEATED)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
user.visible_message("<span class='notice'>[user] digs into the security screws and starts removing them...</span>",
"<span class='notice'>You dig into the screws hard and they start turning...</span>")
if(I.use_tool(src, user, 80, volume = 50))
state = PRWINDOW_BOLTS_OUT
to_chat(user, "<span class='notice'>The screws come out, and a gap forms around the edge of the pane.</span>")
return
if(PRWINDOW_BOLTS_OUT)
if(I.tool_behaviour == TOOL_CROWBAR)
user.visible_message("<span class='notice'>[user] wedges \the [I] into the gap in the frame and starts prying...</span>",
"<span class='notice'>You wedge \the [I] into the gap in the frame and start prying...</span>")
if(I.use_tool(src, user, 50, volume = 50))
state = PRWINDOW_POPPED
to_chat(user, "<span class='notice'>The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.</span>")
return
if(PRWINDOW_POPPED)
if(I.tool_behaviour == TOOL_WIRECUTTER)
user.visible_message("<span class='notice'>[user] starts cutting the exposed bars on \the [src]...</span>",
"<span class='notice'>You start cutting the exposed bars on \the [src]</span>")
if(I.use_tool(src, user, 30, volume = 50))
state = PRWINDOW_BARS_CUT
to_chat(user, "<span class='notice'>The panels falls out of the way exposing the frame bolts.</span>")
return
if(PRWINDOW_BARS_CUT)
if(I.tool_behaviour == TOOL_WRENCH)
user.visible_message("<span class='notice'>[user] starts unfastening \the [src] from the frame...</span>",
"<span class='notice'>You start unfastening the bolts from the frame...</span>")
if(I.use_tool(src, user, 50, volume = 50))
to_chat(user, "<span class='notice'>You unscrew the bolts from the frame and the window pops loose.</span>")
state = WINDOW_OUT_OF_FRAME
setAnchored(FALSE)
return
return ..()
/obj/structure/window/proc/cool_bolts()
if(state == PRWINDOW_BOLTS_HEATED)
state = PRWINDOW_SECURE
visible_message("<span class='notice'>The bolts on \the [src] look like they've cooled off...</span>")
/obj/structure/window/setAnchored(anchorvalue)
..()
air_update_turf(TRUE)
@@ -577,6 +653,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
desc = "A window made out of a plasma-silicate alloy and a rod matrix. It looks hopelessly tough to break and is most likely nigh fireproof."
icon_state = "plasmarwindow"
reinf = TRUE
extra_reinforced = TRUE
heat_resistance = 50000
armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
max_integrity = 500
@@ -642,6 +719,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
icon_state = "rplasmawindow"
dir = FULLTILE_WINDOW_DIR
state = PRWINDOW_SECURE
max_integrity = 1000
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
@@ -726,6 +804,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
reinf = TRUE
extra_reinforced = TRUE
heat_resistance = 1600
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
smooth = SMOOTH_TRUE
@@ -758,6 +837,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
wave_explosion_multiply = EXPLOSION_DAMPEN_BOROSILICATE_WINDOW
decon_speed = 40
extra_reinforced = TRUE
glass_type = /obj/item/stack/tile/brass
glass_amount = 1
reinf = FALSE
+1 -1
View File
@@ -280,7 +280,7 @@
if(lube & NO_SLIP_WHEN_WALKING)
if(C.m_intent == MOVE_INTENT_WALK)
return FALSE
if(ishuman(C) && !(lube & SLIP_WHEN_JOGGING))
if(ishuman(C) && !(lube & SLIP_WHEN_JOGGING) && CONFIG_GET(flag/sprint_enabled))
var/mob/living/carbon/human/H = C
if(!(H.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) && H.getStaminaLoss() <= 20)
return FALSE
+12 -9
View File
@@ -386,7 +386,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress)))
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress, TRUE, user)))
stoplag(1)
qdel(progress)
@@ -579,7 +579,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/AllowDrop()
return TRUE
/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE)
/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE, purge_ratio = 0.1)
var/obj/effect/decal/cleanable/vomit/V = new /obj/effect/decal/cleanable/vomit(src, M.get_static_viruses())
//if the vomit combined, apply toxicity and reagents to the old vomit
@@ -587,21 +587,24 @@ GLOBAL_LIST_EMPTY(station_turfs)
V = locate() in src
if(!V) //the decal was spawned on a wall or groundless turf and promptly qdeleted.
return
// Make toxins and blazaam vomit look different
// Apply the proper icon set based on vomit type
if(toxvomit == VOMIT_PURPLE)
V.icon_state = "vomitpurp_[pick(1,4)]"
else if (toxvomit == VOMIT_TOXIC)
V.icon_state = "vomittox_[pick(1,4)]"
if (iscarbon(M))
var/mob/living/carbon/C = M
if(C.reagents)
clear_reagents_to_vomit_pool(C,V)
else if (toxvomit == VOMIT_NANITE)
V.name = "metallic slurry"
V.desc = "A puddle of metallic slurry that looks vaguely like very fine sand. It almost seems like it's moving..."
V.icon_state = "vomitnanite_[pick(1,4)]"
if (purge_ratio && iscarbon(M))
clear_reagents_to_vomit_pool(M, V, purge_ratio)
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V)
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge_ratio = 0.1)
for(var/datum/reagent/consumable/R in M.reagents.reagent_list) //clears the stomach of anything that might be digested as food
if(R.nutriment_factor > 0)
M.reagents.del_reagent(R.type)
M.reagents.trans_to(V, M.reagents.total_volume / 10)
var/chemicals_lost = M.reagents.total_volume * purge_ratio
M.reagents.trans_to(V, chemicals_lost)
//Whatever happens after high temperature fire dies out or thermite reaction works.
//Should return new turf
+1
View File
@@ -116,6 +116,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/show_tip,
/client/proc/smite,
/client/proc/admin_away,
/client/proc/spawn_floor_cluwne,
/client/proc/cmd_admin_toggle_fov, //CIT CHANGE - FOV
/client/proc/roll_dices //CIT CHANGE - Adds dice verb
))
+1 -1
View File
@@ -104,7 +104,7 @@ GLOBAL_VAR(antag_prototypes)
var/datum/component/activity/activity = current.GetComponent(/datum/component/activity)
if(activity)
out += "Activity level: [activity.activity_level]<br>"
out += "Hasn't changed areas in approximately [activity.not_moved_counter] seconds"
out += "Hasn't changed areas in approximately [activity.not_moved_counter] seconds<br>"
var/special_statuses = get_special_statuses()
if(length(special_statuses))
+29 -3
View File
@@ -1333,9 +1333,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
ADMIN_PUNISHMENT_SHOES,
ADMIN_PUNISHMENT_PICKLE,
ADMIN_PUNISHMENT_FRY,
ADMIN_PUNISHMENT_CRACK,
ADMIN_PUNISHMENT_BLEED,
ADMIN_PUNISHMENT_SCARIFY)
ADMIN_PUNISHMENT_CRACK,
ADMIN_PUNISHMENT_BLEED,
ADMIN_PUNISHMENT_SCARIFY,
ADMIN_PUNISHMENT_CLUWNE)
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
@@ -1501,6 +1502,11 @@ Traitors and the like can also be revived with the previous role mostly intact.
to_chat(usr,"<span class='warning'>[C] does not have knottable shoes!</span>")
return
sick_kicks.adjust_laces(SHOES_KNOTTED)
if(ADMIN_PUNISHMENT_CLUWNE)
if(!iscarbon(target))
to_chat(usr,"<span class='warning'>This must be used on a carbon mob.</span>")
return
target.cluwneify()
punish_log(target, punishment)
@@ -1691,3 +1697,23 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!source)
return
REMOVE_TRAIT(D,chosen_trait,source)
/client/proc/spawn_floor_cluwne()
set category = "Admin.Fun"
set name = "Unleash Floor Cluwne"
set desc = "Pick a specific target or just let it select randomly and spawn the floor cluwne mob on the station. Be warned: spawning more than one may cause issues!"
var/target
if(!check_rights(R_FUN))
return
var/turf/T = get_turf(usr)
target = input("Any specific target in mind? Please note only live, non cluwned, human targets are valid.", "Target", target) as null|anything in GLOB.player_list
if(target && ishuman(target))
var/mob/living/carbon/human/H = target
var/mob/living/simple_animal/hostile/floor_cluwne/FC = new /mob/living/simple_animal/hostile/floor_cluwne(T)
FC.Acquire_Victim(H)
else
new /mob/living/simple_animal/hostile/floor_cluwne(T)
log_admin("[key_name(usr)] spawned floor cluwne.")
message_admins("[key_name(usr)] spawned floor cluwne.")
@@ -6,7 +6,7 @@
holder.marked_datum = D
vv_update_display(D, "marked", VV_MSG_MARKED)
/client/proc/mark_datum_mapview(datum/D as mob|obj|turf|area in view(view))
/client/proc/mark_datum_mapview(datum/D in world)
set category = "Debug"
set name = "Mark Object"
mark_datum(D)
@@ -684,6 +684,7 @@
if(HAS_TRAIT(user, TRAIT_NOPUGILIST))
to_chat(user, "<span class='warning'>We would gain nothing by forming our fists into brute-force weapons when we are trained in precision martial arts!</span>")
return
return ..()
/obj/item/clothing/gloves/fingerless/pugilist/cling // switches between lesser GotNS and Big Punchy Rib Breaky Hands
name = "hewn bone gauntlets"
@@ -25,7 +25,7 @@
/datum/clockwork_scripture/create_object/stargazer/check_special_requirements()
var/area/A = get_area(invoker)
var/turf/T = get_turf(invoker)
if(!is_station_level(invoker.z) || isspaceturf(T) || !(A.area_flags & VALID_TERRITORY))
if(!is_station_level(invoker.z) || isspaceturf(T) || !(A?.area_flags & CULT_PERMITTED))
to_chat(invoker, "<span class='danger'>Stargazers can't be built off-station.</span>")
return
return ..()
@@ -34,7 +34,7 @@
return FALSE
var/area/A = get_area(invoker)
var/turf/T = get_turf(invoker)
if(!is_station_level(T.z) || isspaceturf(T) || !(A.area_flags & VALID_TERRITORY) || isshuttleturf(T))
if(!is_station_level(T.z) || isspaceturf(T) || !(A?.area_flags & CULT_PERMITTED) || isshuttleturf(T))
to_chat(invoker, "<span class='warning'>You must be on the station to activate the Ark!</span>")
return FALSE
if(GLOB.clockwork_gateway_activated)
@@ -52,7 +52,7 @@
break
if(has_starlight && anchored)
var/area/A = get_area(src)
if(A.outdoors || A.map_name == "Space" || !(A.area_flags & VALID_TERRITORY))
if(A.outdoors || A.map_name == "Space" || !(A?.area_flags & CULT_PERMITTED))
has_starlight = FALSE
if(old_status != has_starlight)
if(has_starlight)
+1 -1
View File
@@ -419,7 +419,7 @@
var/sanity = 0
while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100)
var/area/summon = pick(GLOB.sortedAreas - summon_spots)
if(summon && is_station_level(summon.z) && !(summon.area_flags & VALID_TERRITORY))
if(summon && is_station_level(summon.z) && (summon.area_flags & VALID_TERRITORY))
summon_spots += summon
sanity++
update_explanation_text()
+1 -1
View File
@@ -148,7 +148,7 @@ This file contains the cult dagger and rune list code
to_chat(user, "<span class='cult'>There is already a rune here.</span>")
return FALSE
var/area/A = get_area(T)
if((!is_station_level(T.z) && !is_mining_level(T.z)) || !(A?.area_flags & VALID_TERRITORY))
if((!is_station_level(T.z) && !is_mining_level(T.z)) || !(A?.area_flags & CULT_PERMITTED))
to_chat(user, "<span class='warning'>The veil is not weak enough here.</span>")
return FALSE
return TRUE
@@ -89,6 +89,7 @@
var/list/lore = list()
data["charges"] = charge
data["total_sacs"] = cultie.total_sacrifices
for(var/X in to_know)
lore = list()
@@ -96,7 +97,11 @@
lore["type"] = EK.type
lore["name"] = EK.name
lore["cost"] = EK.cost
lore["disabled"] = EK.cost <= charge ? FALSE : TRUE
lore["sacs"] = EK.sacs_needed
if(EK.cost <= charge && cultie.total_sacrifices >= EK.sacs_needed)
lore["disabled"] = FALSE
else
lore["disabled"] = TRUE
lore["path"] = EK.route
lore["state"] = "Research"
lore["flavour"] = EK.gain_text
@@ -108,6 +113,7 @@
var/datum/eldritch_knowledge/EK = known[X]
lore["name"] = EK.name
lore["cost"] = EK.cost
lore["sacs"] = EK.sacs_needed
lore["disabled"] = TRUE
lore["path"] = EK.route
lore["state"] = "Researched"
@@ -165,6 +165,25 @@
new /obj/effect/reality_smash(chosen_location)
ReworkNetwork()
/**
*CIT CHANGE
*
*Creates a singular reality smash
*Credit to slimelust
*/
/datum/reality_smash_tracker/proc/RandomSpawnSmash(var/deferred = FALSE)
var/turf/chosen_location = get_safe_random_station_turf()
//we also dont want them close to each other, at least 1 tile of separation
var/obj/effect/reality_smash/what_if_i_have_one = locate() in range(1, chosen_location)
var/obj/effect/broken_illusion/what_if_i_had_one_but_got_used = locate() in range(1, chosen_location)
var/tries = 10
while((what_if_i_have_one || what_if_i_had_one_but_got_used) && tries-- > 0)
chosen_location = get_safe_random_station_turf()
new /obj/effect/reality_smash(chosen_location)
if(!deferred)
ReworkNetwork()
/**
* Adds a mind to the list of people that can see the reality smashes
*
@@ -200,15 +219,23 @@
/obj/effect/broken_illusion/Initialize()
. = ..()
addtimer(CALLBACK(src,.proc/show_presence),15 SECONDS)
addtimer(CALLBACK(src,.proc/remove_presence),195 SECONDS)
var/image/I = image('icons/effects/eldritch.dmi',src,null,OBJ_LAYER)
I.override = TRUE
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "pierced_reality", I)
/obj/effect/broken_illusion/Destroy()
GLOB.reality_smash_track.RandomSpawnSmash()
return ..()
///Makes this obj appear out of nothing
/obj/effect/broken_illusion/proc/show_presence()
animate(src,alpha = 255,time = 15 SECONDS)
/obj/effect/broken_illusion/proc/remove_presence()
qdel(src)
/obj/effect/broken_illusion/attack_hand(mob/living/user, list/modifiers)
if(!ishuman(user))
return ..()
@@ -44,46 +44,6 @@
if(target.stat == DEAD)
to_chat(user,"<span class='warning'>[target.real_name] is dead. Bring them onto a transmutation rune!</span>")
/datum/action/innate/heretic_shatter
name = "Shattering Offer"
desc = "After a brief delay, you will be granted salvation from a dire situation at the cost of your blade. (Teleports you to a random safe turf on your current z level after a windup, but destroys your blade.)"
background_icon_state = "bg_ecult"
button_icon_state = "shatter"
icon_icon = 'icons/mob/actions/actions_ecult.dmi'
check_flags = MOBILITY_HOLD|MOBILITY_MOVE|MOBILITY_USE
var/mob/living/carbon/human/holder
var/obj/item/melee/sickly_blade/sword
/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object)
sword = object
holder = user
//i know what im doing
return ..()
/datum/action/innate/heretic_shatter/IsAvailable()
if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
return ..()
else
return FALSE
/datum/action/innate/heretic_shatter/Activate()
if(do_after(holder,10, target = holder))
if(!sword || QDELETED(sword))
return
if(!IsAvailable()) //Never trust the user.
return
var/swordz = (get_turf(sword))?.z //SHOULD usually have a turf but if it doesn't better be prepared.
if(!swordz)
to_chat(holder, "<span class='warning'>[sword] flickers but remains in place, as do you...</span>")
return
var/turf/safe_turf = find_safe_turf(zlevels = swordz, extended_safety_checks = TRUE)
if(!safe_turf)
to_chat(holder, "<span class='warning'>[sword] flickers but remains in place, as do you...</span>")
return
do_teleport(holder,safe_turf,forceMove = TRUE,channel=TELEPORT_CHANNEL_MAGIC)
to_chat(holder,"<span class='warning'>You feel a gust of energy flow through your body... the Rusted Hills heard your call...</span>")
qdel(sword)
/obj/item/melee/sickly_blade
name = "sickly blade"
desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..."
@@ -101,11 +61,6 @@
throwforce = 10
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "lacerated", "ripped", "diced", "rended")
var/datum/action/innate/heretic_shatter/linked_action
/obj/item/melee/sickly_blade/Initialize()
. = ..()
linked_action = new(src)
/obj/item/melee/sickly_blade/attack(mob/living/target, mob/living/user)
if(!(IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
@@ -120,13 +75,17 @@
return
return ..()
/obj/item/melee/sickly_blade/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
/obj/item/melee/sickly_blade/dropped(mob/user, silent)
. = ..()
linked_action.Remove(user, src)
/obj/item/melee/sickly_blade/attack_self(mob/user)
var/turf/safe_turf = find_safe_turf(zlevels = z, extended_safety_checks = TRUE)
if(IS_HERETIC(user) || IS_HERETIC_MONSTER(user))
if(do_teleport(user, safe_turf, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC))
to_chat(user,"<span class='warning'>As you shatter [src], you feel a gust of energy flow through your body. The Rusted Hills heard your call...</span>")
else
to_chat(user,"<span class='warning'>You shatter [src], but your plea goes unanswered.</span>")
else
to_chat(user,"<span class='warning'>You shatter [src].</span>")
playsound(src, "shatter", 70, TRUE) //copied from the code for smashing a glass sheet onto the ground to turn it into a shard
qdel(src)
/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
@@ -141,6 +100,11 @@
else
eldritch_knowledge_datum.on_ranged_attack_eldritch_blade(target,user,click_parameters)
/obj/item/melee/sickly_blade/examine(mob/user)
. = ..()
if(IS_HERETIC(user) || IS_HERETIC_MONSTER(user))
. += "<span class='notice'><B>A heretic (or a servant of one) can shatter this blade to teleport to a random, mostly safe location by activating it in-hand.</B></span>"
/obj/item/melee/sickly_blade/rust
name = "rusted blade"
desc = "This crescent blade is decrepit, wasting to rust. Yet still it bites, ripping flesh and bone with jagged, rotten teeth."
@@ -243,6 +207,7 @@
// slightly worse than normal cult robes
armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/suit/hooded/cultrobes/void/ToggleHood()
if(!iscarbon(loc))
@@ -15,6 +15,8 @@
var/gain_text = ""
///Cost of knowledge in souls
var/cost = 0
///Required sacrifices to unlock
var/sacs_needed = 0
///Next knowledge in the research tree
var/list/next_knowledge = list()
///What knowledge is incompatible with this. This will simply make it impossible to research knowledges that are in banned_knowledge once this gets researched.
@@ -230,7 +232,6 @@
atoms -= H
H.gib()
///////////////
///Base lore///
///////////////
@@ -109,10 +109,15 @@
gain_text = "When the Glory of the Lantern scorches and sears their skin, nothing will protect them from the ashes."
desc = "Fire off five streams of fire from your hand, each setting ablaze targets hit and scorching them upon contact."
cost = 2
sacs_needed = 3
spell_to_add = /obj/effect/proc_holder/spell/pointed/nightwatchers_rite
next_knowledge = list(/datum/eldritch_knowledge/final/ash_final)
route = PATH_ASH
/datum/eldritch_knowledge/spell/nightwatchers_rite/on_gain(mob/user)
. = ..()
priority_announce("Large heat signatures discovered! A swelling fiery horror is coming..", sound = 'sound/misc/notice1.ogg')
/datum/eldritch_knowledge/ash_blade_upgrade
name = "Fiery Blade"
gain_text = "Blade in hand, he swung and swung as the ash fell from the skies. His city, his people... all burnt to cinders, and yet life still remained in his charred body."
@@ -181,6 +186,7 @@
desc = "Bring 3 corpses onto a transmutation rune, you will become immune to fire, the vacuum of space, cold and other enviromental hazards and become overall sturdier to all other damages. You will gain a spell that passively creates ring of fire around you as well ,as you will gain a powerful ability that lets you create a wave of flames all around you."
required_atoms = list(/mob/living/carbon/human)
cost = 5
sacs_needed = 8
route = PATH_ASH
var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE)
@@ -170,7 +170,7 @@
gain_text = "The Uncanny Man, who walks alone in the valley between the worlds... I was able to summon his aid."
desc = "You can now summon a Raw Prophet by transmutating a pair of eyes, a left arm and a pool of blood. Raw prophets have increased seeing range, as well as X-Ray vision, but they are very fragile."
cost = 1
required_atoms = list(/obj/item/organ/eyes,/obj/item/bodypart/l_arm,/obj/item/bodypart/r_arm,/obj/effect/decal/cleanable/blood)
required_atoms = list(/obj/item/organ/eyes,/obj/item/bodypart/l_arm,/obj/effect/decal/cleanable/blood)
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/raw_prophet
next_knowledge = list(/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rune_carver,/datum/eldritch_knowledge/curse/paralysis)
route = PATH_FLESH
@@ -217,6 +217,7 @@
desc = "Bring 3 bodies onto a transmutation rune to shed your human form and ascend to untold power."
required_atoms = list(/mob/living/carbon/human)
cost = 5
sacs_needed = 8
route = PATH_FLESH
/datum/eldritch_knowledge/final/flesh_final/on_finished_recipe(mob/living/user, list/atoms, loc)
@@ -257,6 +258,11 @@
gain_text = "The ignorant mind that inhabits their feeble bodies will crumble when they acknowledge - willingly or not, the truth."
desc = "By forcing the knowledge of the Mansus upon my foes, I can show them things that would drive any normal man insane."
cost = 2
sacs_needed = 3
spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mad_touch
next_knowledge = list(/datum/eldritch_knowledge/final/flesh_final)
route = PATH_FLESH
/datum/eldritch_knowledge/spell/touch_of_madness/on_gain(mob/user)
. = ..()
priority_announce("The stench of rotting flesh fills the air... An approaching abomination has been detected!", sound = 'sound/misc/notice1.ogg')
@@ -159,15 +159,21 @@
desc = "Applying your knowledge of rust to the human body, a knowledge that could decay your foes from the inside out, resulting in organ failure, vomiting, or eventual death through the peeling of rotting flesh."
gain_text = "Rust, decay, it's all the same. All that remains is application."
cost = 2
sacs_needed = 3
spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay
next_knowledge = list(/datum/eldritch_knowledge/final/rust_final)
route = PATH_RUST
/datum/eldritch_knowledge/spell/grasp_of_decay/on_gain(mob/user)
. = ..()
priority_announce("A foul wind is blowing... The floor creaks with rust as something sinister approaches!", sound = 'sound/misc/notice1.ogg')
/datum/eldritch_knowledge/final/rust_final
name = "Rustbringer's Oath"
desc = "Bring three corpses onto a transmutation rune. After you finish the ritual, rust will now automatically spread from the rune. Your healing on rust is also tripled, while you become more resilient overall."
gain_text = "Champion of rust. Corruptor of steel. Fear the dark for the Rustbringer has come! Rusted Hills, CALL MY NAME!"
cost = 5
sacs_needed = 8
required_atoms = list(/mob/living/carbon/human)
route = PATH_RUST
@@ -160,15 +160,21 @@
gain_text = "This world will be my stage, and nothing will be out of my reach."
desc = "Gain the ability to mark a 7x7 area as your domain after a short delay. Creatures in your domain are slowed and branded with a void mark, allowing you to quickly teleport to them and slash them, further inhibiting their ability to move."
cost = 2
sacs_needed = 3
spell_to_add = /obj/effect/proc_holder/spell/aoe_turf/domain_expansion
next_knowledge = list(/datum/eldritch_knowledge/final/void_final)
route = PATH_VOID
/datum/eldritch_knowledge/spell/domain_expansion/on_gain(mob/user)
. = ..()
priority_announce("Echos of the lost in space are heard... An ominous presence is being detected! ", sound = 'sound/misc/notice1.ogg')
/datum/eldritch_knowledge/final/void_final
name = "Waltz at the End of Time"
desc = "Bring 3 corpses onto the transmutation rune. After you finish the ritual you will automatically silence people around you and will summon a snow storm around you."
gain_text = "The world falls into darkness. I stand in an empty plane, small flakes of ice fall from the sky. The Aristocrat stands before me, he motions to me. We will play a waltz to the whispers of dying reality, as the world is destroyed before our eyes."
cost = 5
sacs_needed = 8
required_atoms = list(/mob/living/carbon/human)
route = PATH_VOID
///soundloop for the void theme
@@ -61,6 +61,7 @@
name = "syndicate pinpointer"
desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device."
icon_state = "pinpointer_syndicate"
item_state = "pinpointer_black"
/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative.
name = "cyborg syndicate pinpointer"
@@ -492,7 +492,7 @@
var/targetAmount = 100
/datum/objective/revenant/New()
targetAmount = rand(350,600)
targetAmount = rand(150,300)
explanation_text = "Absorb [targetAmount] points of essence from humans."
..()
@@ -0,0 +1,79 @@
/datum/antagonist/space_dragon
name = "Space Dragon"
roundend_category = "space dragons"
antagpanel_category = "Space Dragon"
job_rank = ROLE_SPACE_DRAGON
show_in_antagpanel = TRUE
show_name_in_check_antagonists = TRUE
var/list/datum/mind/carp = list()
/datum/antagonist/space_dragon/greet()
to_chat(owner, "<b>Endless time and space we have moved through. We do not remember from where we came, we do not know where we will go. All space belongs to us.\n\
Space is an empty void, of which our kind is the apex predator, and there was little to rival our claim to this title.\n\
But now, we find intruders spread out amongst our claim, willing to fight our teeth with magics unimaginable, their dens like lights flicking in the depths of space.\n\
Today, we will snuff out one of those lights.</b>")
to_chat(owner, "<span class='boldwarning'>You have five minutes to find a safe location to place down the first rift. If you take longer than five minutes to place a rift, you will be returned from whence you came.\n\
Alt click to cause a gust around you!</span>")
owner.announce_objectives()
SEND_SOUND(owner.current, sound('sound/magic/demon_attack1.ogg'))
/datum/antagonist/space_dragon/proc/forge_objectives()
var/datum/objective/summon_carp/summon = new()
summon.dragon = src
objectives += summon
/datum/antagonist/space_dragon/on_gain()
forge_objectives()
. = ..()
/datum/objective/summon_carp
var/datum/antagonist/space_dragon/dragon
explanation_text = "Summon and protect the rifts to flood the station with carp."
/datum/antagonist/space_dragon/roundend_report()
var/list/parts = list()
var/datum/objective/summon_carp/S = locate() in objectives
if(S.check_completion())
parts += "<span class='redtext big'>The [name] has succeeded! Station space has been reclaimed by the space carp!</span>"
parts += printplayer(owner)
var/objectives_complete = TRUE
if(objectives.len)
parts += printobjectives(objectives)
for(var/datum/objective/objective in objectives)
if(!objective.check_completion())
objectives_complete = FALSE
break
if(objectives_complete)
parts += "<span class='greentext big'>The [name] was successful!</span>"
else
parts += "<span class='redtext big'>The [name] has failed!</span>"
parts += "<span class='header'>The [name] was assisted by:</span>"
parts += printplayerlist(carp)
return "<div class='panel redborder'>[parts.Join("<br>")]</div>"
/datum/antagonist/space_dragon/admin_add(datum/mind/new_owner, mob/admin)
// pick the spawn loc
var/list/spawn_locs = list()
for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list)
if(!isturf(carp_spawn.loc))
stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]")
continue
spawn_locs += carp_spawn.loc
if(!spawn_locs.len)
message_admins("No valid spawn locations found, aborting...")
return MAP_ERROR
// spawn our dragon
var/mob/living/simple_animal/hostile/space_dragon/S = new(pick(spawn_locs))
// gib or delete the old mob here
new_owner.current.gib()
// alternativelly, isntead of using the code above to pick a location, we can gib the mob, then spawn the dragon where it died for a goresome transformation
//mind transfer and role setup
new_owner.transfer_to(S)
new_owner.assigned_role = "Space Dragon"
new_owner.special_role = "Space Dragon"
playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
. = ..()
return SUCCESSFUL_SPAWN
@@ -244,6 +244,7 @@
name = "contractor pinpointer"
desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate."
icon_state = "pinpointer_syndicate"
item_state = "pinpointer_black"
minimum_range = 25
has_owner = TRUE
ignore_suit_sensor_level = TRUE
@@ -145,7 +145,7 @@
if("VICTIM")
var/mob/living/carbon/human/T = target
var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
if(C?.cult_team.is_sacrifice_target(T.mind))
if(C && C.cult_team.is_sacrifice_target(T.mind))
if(iscultist(user))
to_chat(user, "<span class='cult'><b>\"This soul is mine.</b></span> <span class='cultlarge'>SACRIFICE THEM!\"</span>")
else
@@ -252,6 +252,10 @@
name = "Barnyard Curse"
spell_type = /obj/effect/proc_holder/spell/pointed/barnyardcurse
/datum/spellbook_entry/cluwne
name = "Cluwne Curse"
spell_type = /obj/effect/proc_holder/spell/targeted/cluwnecurse
/datum/spellbook_entry/charge
name = "Charge"
spell_type = /obj/effect/proc_holder/spell/targeted/charge
@@ -166,6 +166,13 @@
)
parents = list("font-awesome.css" = 'html/font-awesome/css/all.min.css')
/datum/asset/simple/namespaced/tgfont
assets = list(
"tgfont.eot" = 'tgui/packages/tgfont/dist/tgfont.eot',
"tgfont.woff2" = 'tgui/packages/tgfont/dist/tgfont.woff2',
)
parents = list("tgfont.css" = 'tgui/packages/tgfont/dist/tgfont.css')
/datum/asset/spritesheet/chat
name = "chat"
@@ -21,7 +21,7 @@
air_contents.set_volume(volume)
air_contents.set_temperature(T20C)
if(gas_type)
air_contents.set_moles(AIR_CONTENTS)
air_contents.set_moles(gas_type, AIR_CONTENTS)
name = "[name] ([GLOB.meta_gas_names[gas_type]])"
setPipingLayer(piping_layer)
@@ -32,8 +32,8 @@
/obj/machinery/atmospherics/components/unary/tank/air/New()
..()
var/datum/gas_mixture/air_contents = airs[1]
air_contents.set_moles(/datum/gas/oxygen, AIR_CONTENTS * 0.2)
air_contents.set_moles(/datum/gas/nitrogen, AIR_CONTENTS * 0.8)
air_contents.set_moles(/datum/gas/oxygen, AIR_CONTENTS * 0.21)
air_contents.set_moles(/datum/gas/nitrogen, AIR_CONTENTS * 0.79)
/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide
gas_type = /datum/gas/carbon_dioxide
+1 -1
View File
@@ -96,7 +96,7 @@
var/static/list/blacklisted_error = typecacheof(list(
/obj/structure/closet/crate/secure,
/obj/structure/closet/crate/large,
/obj/structure/closet/secure_closet/goodies
/obj/structure/closet/secure_closet/cargo
))
if(is_type_in_list(container, blacklisted_error))
P.errors &= ~MANIFEST_ERROR_ITEM
+2 -2
View File
@@ -22,8 +22,8 @@
/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account)
var/obj/structure/closet/crate/C
if(paying_account)
if(ispath(crate_type, /obj/structure/closet/secure_closet/goodies)) // lets ensure private orders don't come in crates when the original one comes in lockers
C = new /obj/structure/closet/secure_closet/goodies/owned(A, paying_account) // that would lead to infinite money exploits
if(ispath(crate_type, /obj/structure/closet/secure_closet/cargo)) // lets ensure private orders don't come in crates when the original one comes in lockers
C = new /obj/structure/closet/secure_closet/cargo/owned(A, paying_account) // that would lead to infinite money exploits
else
C = new /obj/structure/closet/crate/secure/owned(A, paying_account)
C.name = "[crate_name] - Purchased by [paying_account.account_holder]"
+10 -10
View File
@@ -14,56 +14,56 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/materials/cardboard50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Cardboard Sheets"
desc = "Create a bunch of boxes."
cost = 300 //thrice their export value
contains = list(/obj/item/stack/sheet/cardboard/fifty)
/datum/supply_pack/materials/glass50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Glass Sheets"
desc = "Let some nice light in with fifty glass sheets!"
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/glass/fifty)
/datum/supply_pack/materials/metal50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Metal Sheets"
desc = "Any construction project begins with a good stack of fifty metal sheets!"
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/metal/fifty)
/datum/supply_pack/materials/plasteel20
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Plasteel Sheets"
desc = "Reinforce the station's integrity with twenty plasteel sheets!"
cost = 4000
contains = list(/obj/item/stack/sheet/plasteel/twenty)
/datum/supply_pack/materials/plastic50
crate_type = /obj/structure/closet/secure_closet/goodies
name = "50 Plastic Sheets"
/datum/supply_pack/materials/plastic20
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Plastic Sheets"
desc = "Build a limitless amount of toys with fifty plastic sheets!"
cost = 200 // double their export
contains = list(/obj/item/stack/sheet/plastic/twenty)
/datum/supply_pack/materials/sandstone30
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "30 Sandstone Blocks"
desc = "Neither sandy nor stoney, these thirty blocks will still get the job done."
cost = 150 // five times their export
contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty)
/datum/supply_pack/materials/wood20
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with twenty wooden planks!"
cost = 400 // 6-7 planks shy from having equal import/export prices
contains = list(/obj/item/stack/sheet/mineral/wood/twenty)
/datum/supply_pack/materials/rcdammo
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "Large RCD ammo Single-Pack"
desc = "A single large compressed RCD matter pack, to help with any holes or projects people might be working on."
cost = 600
+1 -1
View File
@@ -370,7 +370,7 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/misc/carpet
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "Classic Carpet Single-Pack"
desc = "Plasteel floor tiles getting on your nerves? This 50 units stack of extra soft carpet will tie any room together."
cost = 200

Some files were not shown because too many files have changed in this diff Show More