Squashed commit of the following:

commit f49219c019
Merge: 4d7a67497c 5040dc286e
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Fri May 3 01:25:48 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit 5040dc286e
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Fri May 3 01:49:04 2024 +0200

    Makes mentor PMs show up as mentor PMs again (#25351)

commit fe59ff5c3d
Author: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date:   Thu May 2 19:33:24 2024 -0400

    adds more hand keybinds (#25225)

commit b14830c85a
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Thu May 2 18:17:19 2024 -0500

    Timer log now includes the function called (#25308)

commit 073ad533fa
Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date:   Thu May 2 18:38:45 2024 +0100

    Autodocs robot_mob.dm. Removes an unused proc. (#25331)

    * Autodoc. Removes unused proc.

    * removes a space

    * Update code/modules/mob/living/silicon/robot/robot_mob.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>

    * Update robot_mob.dm

    * Update robot_mob.dm

    ---------

    Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 02a09a7c7f
Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date:   Thu May 2 13:17:12 2024 +0100

    Upgrades TGS build script to actually build RUSTG (#25340)

commit 2144a93627
Author: Henri215 <77684085+Henri215@users.noreply.github.com>
Date:   Thu May 2 08:52:00 2024 -0300

    Mining charges, second try! (#24790)

    * mining charges

    * Apply suggestions from code review

    Co-authored-by: warriorstar-orion <orion@snowfrost.garden>

    * span class

    * deconstruct comment update

    * Apply suggestions from code review

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    * Update code/game/objects/items/weapons/explosives.dm

    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>

    * ops

    * Update code/game/objects/items/weapons/explosives.dm

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/modules/mining/equipment/mining_charges.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: warriorstar-orion <orion@snowfrost.garden>
    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit d587effe2c
Author: Christasmurf <25437893+Christasmurf@users.noreply.github.com>
Date:   Thu May 2 12:37:44 2024 +0100

    Beret + softcap .dmi split (#25314)

    * beret softcap dmi split

    * icon rename

    * dme crlf to lf

    * tsf cap fixes

    * Apply suggestions from code review

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com>

    * vox cap icon name

    * remove beret subtype on fluff

    * Update code/modules/clothing/head/soft_caps.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com>

    ---------

    Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 15e7fcdb3f
Author: Divulf <134484326+Divulf@users.noreply.github.com>
Date:   Thu May 2 21:59:35 2024 +1200

    Improves barsigns and makes them buildable. (#24685)

    * Improves barsigns and makes them buildable.

    * Requested fixes.

    * fingerprints and a parent call on attack_hand() (sure hope this doesn't break anything)

    * More fixes.  (the change to barsigns.dmi is removing a bunch of almost-transparent pixels on the mead bay sign that shouldn't have been there)

    * Even more fixes.

    * Better code and sprite fixes.

    * early returns

    * better

    * more

    * switch

    * qwertyuiop

    * whoops

    * maps are stupid

    * mcramon sprites :o

    * i hope mapmerge works this time

    * i hope mapmerge works THIS time

    * zrsxdctfhghfcdszzsxdgcfhv

    ---------

    Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com>

commit fd30c12047
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Wed May 1 20:04:42 2024 -0700

    Secondary goals will now refuse to generate if messaging is offline. (#25170)

    * Secondary goals will now refuse to generate if messaging is offline.

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>

    ---------

    Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>
    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 13c583d2bf
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu May 2 04:57:26 2024 +0300

    Sanitize empty values in `file2list()` (#25255)

    * Sanitize empty values in `file2list()`

    * seperator

    ---------

    Signed-off-by: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>

commit 87aef93586
Author: asciodev <81930475+asciodev@users.noreply.github.com>
Date:   Wed May 1 20:36:02 2024 -0400

    Allow borgs to use holopads (#25094)

    * Allow borgs to use holopads

    * Revert kludge cyborg icon fix in favor of sane fix

    * Further remove cyborg hologram kludge

    For cyborgs, a false value was previously set for the safety argument
    when calling `/proc/getHologramIcon` (from commit 17c96bc24d). This was
    because the `icon/A` parameter was mistakenly set to `robot.icon`, which
    caused a runtime error to occur when `Height()` is called on it in line
    1008, preventing cyborg holograms from appearing. Setting a false safety
    value made use of the so-conditional `new(A)` call on line 1003, which
    created a new icon from the `robot.icon` string. This kludge prevented a
    runtime and made cyborg holograms appear. The kludge was removed in
    commit dbb8851ae3, but the false safety value remained. This commit
    fixes that.

    * Update code/game/machinery/hologram.dm

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit ba4994d889
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu May 2 03:35:39 2024 +0300

    Tweak recipes of glasses (#25070)

    * Tweak recipes of glasses

    * Allow some sunglasses as ingredient

    * Revert time of recipes

commit 5ca09c7fe7
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu May 2 03:27:10 2024 +0300

    Don't walk without gravity while being space drugged (#25248)

    * Don't walk without gravity while being space drugged

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

    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
    Signed-off-by: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>

    ---------

    Signed-off-by: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>

commit 24726c60fe
Author: Adrer <erwin@lombok.demon.nl>
Date:   Thu May 2 02:20:07 2024 +0200

    Moving pulled objects as a borg checks if the turf is adjacent to you. (#25253)

    * Move_Pulled now checks for adjacency of the turf you are moving something to.

    * Move comment to correct line.

    * Update code/modules/mob/mob_movement.dm

    Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com>
    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: adrermail@gmail.com <adrermail@gmail.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com>

commit 31390ff2e1
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Wed May 1 20:14:23 2024 -0400

    Check against current mob for admin keybinds (#25341)

commit 45b0f34d95
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu May 2 03:06:23 2024 +0300

    Don't check side pressure if filter isn't.. filtering (#25019)

commit 50a986b8de
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Wed May 1 17:04:50 2024 -0700

    Makes tesla movement pretty (#24786)

    * They hate how easy this is

    * No more deciseconds

    * Intermediate code

    * Made tesla movement pretty.

    * Lint.

    * Update code/modules/mob/mob_movement.dm

    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>

    * Review comments.

    ---------

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>

commit e19559ad54
Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date:   Thu May 2 01:01:24 2024 +0100

    The Gibber Now Drops 6 Meat Instead of 3 When Gibbing. (#25287)

    * Update gibber.dm

    * extra

commit 1feb21eed1
Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date:   Thu May 2 00:58:35 2024 +0100

    [FIX] Cyborgs With Guns Can Now Perform Executions (With Guns!). (#25275)

    * borg execution time

    * Update gun.dm

    * Update gun.dm

    * Update gun.dm

commit 41eff52fac
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Thu May 2 01:55:38 2024 +0200

    Renames most processing SS' to the convention of `SS[SS name here]` (#25302)

    * Renames most processing SS'

    * Contra review

commit 271d67d237
Author: Deniz <66401072+Oyu07@users.noreply.github.com>
Date:   Thu May 2 02:54:00 2024 +0300

    Adds MARK: to some comments (#25184)

    * robot_upgrades

    * disability

    * airlock

    * mecha

    * Abcudtor

    * Forgot a space here

    * Some style changes + additions

    * removed a no comment

    * comment change

    * empty

    * empty again

    dont dare look insde

    * ault

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 4a1f396707
Author: dearmochi <1496804+dearmochi@users.noreply.github.com>
Date:   Thu May 2 08:52:14 2024 +0900

    Grant TRAIT_NOFIRE while cloning (#25327)

    * Grant TRAIT_NOFIRE while cloning

    * Update code/game/machinery/clonepod.dm

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

commit f8ebba6ed1
Author: Burzah <116982774+Burzah@users.noreply.github.com>
Date:   Wed May 1 16:49:05 2024 -0700

    Adds logging for thrall deconversions (#25305)

    * thrall deconversion logging inside water.dm

    * moves logging to vamp_thrall.dm instead

commit f0209d975b
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Wed May 1 19:46:42 2024 -0400

    ion scatter gets 2 more pellets and 5 degrees more spread (#25269)

    * ion scatter gets 2 more pellets and 5 degrees more spread

    * mech ion as well

commit 96aa08823c
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Thu May 2 01:23:31 2024 +0200

    Adds it (#25254)

commit af7f35a0fe
Author: Arthri <41360489+Arthri@users.noreply.github.com>
Date:   Thu May 2 07:23:26 2024 +0800

    Remove tgui say error (#25273)

    * Remove the error

    * Build and update tgui

    * Restore precautionary if statement

    * Build and update tgui

    * trigger ci

    ---------

    Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
    Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

commit a3a1be49b0
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Wed May 1 19:23:19 2024 -0400

    modsuits have the same virus protection as space suits / biosuits (#25310)

commit daf76d3aaa
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Wed May 1 19:23:09 2024 -0400

    gives lavaland plants 50 potency (#25322)

commit 55ed33a253
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Thu May 2 01:23:03 2024 +0200

    Changes incorporeal_move to defines (#25319)

    * Changes incorporeal_mvoe to defines

    * Lets the switch use defines too

commit f2dd4f6595
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Wed May 1 19:22:59 2024 -0400

    fix shield generators on zlvl change (#25318)

commit 3e5a3ea35c
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Wed May 1 16:37:44 2024 -0400

    works (#25337)

commit f97a9ee934
Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>
Date:   Wed May 1 19:05:54 2024 +0100

    NanoMap Auto-Update (Wed May  1 01:16:06 UTC 2024) (#25329)

    Co-authored-by: NanoMap Generation <action@github.com>

commit 9d2c9d9ed1
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Wed May 1 13:27:37 2024 +0200

    Removes a variable that is only set once (#25003)

    * One of the variables of all time

    * Oyu review

commit 44fb00ca25
Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
Date:   Wed May 1 13:42:57 2024 +0300

    Qol + fix for mecha (#25206)

    * Qol + fix for mecha

    * Update code/game/mecha/mecha.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/game/mecha/mecha.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 86530f4e3e
Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
Date:   Wed May 1 13:40:48 2024 +0300

    BUFF: Mining Grenade launcher (#25204)

    * BUFF: Mining Grenade launcher

    * Update weapons.dm

commit 14ce47830d
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Wed May 1 03:39:01 2024 -0700

    Reduce the chance of getting no changes to a stat when mutating plants. (#25179)

    * Reduce the chance of getting no changes to a stat when mutating plants.

    * Update code/modules/hydroponics/seeds.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 7daf219ec0
Author: larentoun <31931237+larentoun@users.noreply.github.com>
Date:   Wed May 1 13:37:08 2024 +0300

    More Crowbar Acts (#24986)

    * crowbar acts part 1

    * livings checked

    * convert istypes to tool behaviour

    * solars

    * use tool_volume

    * Update code/modules/research/server.dm

    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
    Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com>

    * Update code/modules/power/generators/portable generators/pacman.dm

    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
    Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com>

    * return

    * return returns

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

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com>

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

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com>

    ---------

    Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com>
    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 4d7a67497c
Merge: afd185773a a2e7d95306
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Wed May 1 04:00:48 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit a2e7d95306
Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date:   Tue Apr 30 22:41:03 2024 +0100

    Moves a custom item to the right file (#25325)

commit 6ea2f09570
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Tue Apr 30 20:41:45 2024 +0200

    Removes a rogue # (#25313)

commit 9271d9e106
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Tue Apr 30 05:29:19 2024 -0700

    Added tracking of when a secondary goal is handed out. (#25168)

    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>

commit 4ea0bbd6da
Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date:   Tue Apr 30 13:07:18 2024 +0100

    Tweaks Farragus Robotics, Adds a Corpse Delivery Chute! (#25090)

    * Fixing some minor typos for cyborg upgrade flavour text

    Throws in some missing apostrophes, capitalisation, and the letter "s."

    * Briefcase Full of Cash buff

    Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr

    * Reverts double-feature PR

    * Reverts a broken revert

    * Reverting again because Ebba told me to

    * And reverting yet again

    * Makes farragus less bad

    * Tweaks

    * Reconstruction

    * Tweaks

    * Merge Deconflict AGAIN

    * Update cerestation.dmm

    * More deconflictation

    * Update cerestation.dmm

commit 107950f50e
Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date:   Tue Apr 30 12:51:15 2024 +0100

    Removes Advanced Reagent Scanner from Service & Medical Cyborgs, Transfers Functionality to Innate Reagent Vision. (#24457)

    * Update robot_modules.dm

    * Adds advanced reagent vision

    * rounding

    * Update code/datums/outfits/outfit_debug.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/modules/clothing/clothing.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update atoms.dm

    * This one hyphen will kill me if I don't fix it.

    * Update code/game/atoms.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/game/atoms.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update atoms.dm

    * Update code/game/atoms.dm

    Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com>

    * Update code/modules/clothing/clothing.dm

    Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com>
    Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>

    ---------

    Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com>

commit 773ee4afed
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Tue Apr 30 12:45:41 2024 +0100

    Update the TGUI conflict merge resolution to properly commit rebuilt bundles (#25246)

    * update the tgui conflict merge process

    * tidy this

commit 94b5d22034
Author: larentoun <31931237+larentoun@users.noreply.github.com>
Date:   Tue Apr 30 14:40:41 2024 +0300

    Records Multiline (#24991)

    * pre-wrap for labeledlist

    * multiline for pdas

    * consoles fix

    * update tgui

    * update tgui bundle

commit 54d563ada1
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Tue Apr 30 04:23:16 2024 -0700

    Reverse direction of requests console messages. (#25169)

    Also fixes a bad error message.

    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>
    Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>

commit afd185773a
Merge: 8b0ff64cc0 ec2c5638fc
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Tue Apr 30 03:45:45 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit ec2c5638fc
Author: Zantox <vetle.neumann@protonmail.com>
Date:   Tue Apr 30 02:57:36 2024 +0200

    Add ventcrawl unit-test (#24830)

    * Add ventcrawl unit-test

    * Fix linting

    * Solve chair-flipping without HANDS_BLOCKED

    * Remove unit_test_dummy variable

    * Use `isturf` helper in ventcrawl unit-test

    Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>

    * Update code/modules/unit_tests/atmos/test_ventcrawl.dm

    ---------

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 3e9c29258e
Author: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Date:   Mon Apr 29 20:51:19 2024 -0400

    Diverse Traders (#24883)

    * Diverse Traders Types

    * Trader Type control, announcements, species spawning

    * Trader Outfits

    * Posh Moth - Posh Cane

    * Landmarks, Trader ID Name Change

    * Trader Shuttle Adjustment - Landmarks for Item Pools

    * Outfit Survival Kit changes

    * Added another refill for the hand labeler due to more cargo

    * Trader Shuttle locker fix

    * Item Stocks, Item Stock Assignments, Box Kits, Love Bottle

    * Mech access, No double mechs, Small box fix

    * Removed Solgov Gunkit from General Pool

    * Spacing

    * Moved traders to not be event subtypes, added documentation to vars

    * Boxed spacing, removed improper

    * Moved postequip, used box variables

    * Lore team requested change - Bolt action instead of AK

    * Changed landmark

    * Moved soviet ammo to minor gear, increased soviet minor gear to 8.

    * Obfuscated Cybersun

    * Lootpool Adjustments

    * Readded Solgov Kit to general pool at low weight

    * Commas!

    * Spelling

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Comments

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Re-Nulled After_Equip_Job

    * Removed extraneous var spaces

    * Relocated space in trader introduction message

    * Robomoon is now once again Cybersun

    * Impropered Enforcer Kit

    * No more ERT box for non-NT boxes

    * Fixed turbine kit stock part amount

    * Subtyped skrell/unathi suit boxes

    * Replaced meson cyber eye (nodrop issue) with meson sunglasses/gar mesons

    * Reduced weight on arm/esword implant rare items

    * Also reduced arm laser weight

    * Added a couple items to skipjack large - more 'random', filled in reduced weights

    * Path typo fix

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Removed trailing / in path

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Removed Cheap Breacher suit from inventory

    * Apply suggestions from code review

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 417d6fe8cf
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Mon Apr 29 20:50:35 2024 -0400

    Makes kudzu much more likely to entangle you (#25167)

    * lets kudzu entangle you

    * Increase buckle time

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 48db11cd84
Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
Date:   Tue Apr 30 03:14:26 2024 +0300

    Ash Walkers now Ash Doctors (#25207)

    * Ash Walkers now Ash Doctors

    * Update other.dm

commit 6848ee8502
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Tue Apr 30 01:12:49 2024 +0100

    Updates readme, licence files (#25259)

    * test

    * more

    * more stuff

    * images

    * more!

    * sanity?

    * details

    * fix licences, update readme

    * remove GPL disclaimer

    * more docs

    * wiki link

    * spacing tweaks

    * text change

    * wording

    * DM language reference

    * Update README.md

    Signed-off-by: S34N <12197162+S34NW@users.noreply.github.com>

    ---------

    Signed-off-by: S34N <12197162+S34NW@users.noreply.github.com>

commit 2e4089dc15
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Mon Apr 29 03:07:25 2024 +0100

    Various TG Chat message sorting fixes (#25229)

    * Fixes unsorted emotes, announcements, votes, surgery, prayers, ahelp responses

    * Apply suggestions from code review

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    ---------

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

commit 4add53d6c1
Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
Date:   Mon Apr 29 05:00:34 2024 +0300

    Add alternative Spear recipe for Ash walkers (#25208)

    * Add alternative Spear recipe for Ash walkers

    * Update recipes.dm

    * Update code/modules/crafting/recipes.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * Update code/modules/crafting/recipes.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com>

    ---------

    Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 7f37f93408
Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
Date:   Mon Apr 29 04:33:25 2024 +0300

    fix avoiding powerfist antidrop (#25274)

    * fix avoiding powerfist antidrop

    * Update code/game/objects/items/weapons/powerfist.dm

    Co-authored-by: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com>
    Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com>

    * Update code/game/objects/items/weapons/powerfist.dm

    Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
    Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com>

    ---------

    Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com>
    Co-authored-by: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com>
    Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>

commit 83c9d8878a
Author: Rayforx <154929127+Rayforx@users.noreply.github.com>
Date:   Mon Apr 29 00:21:48 2024 +0200

    Blood level QoL for vampires (#25075)

commit a50683ef28
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Sun Apr 28 18:03:14 2024 -0400

    Adds the SPRK-12 Energy Pistol (#24869)

    * Adds the SPRK-12 Pistol

    * I Was improper and forgot to name it right

    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

    * Apply suggestions from code review

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * check it

    * Update gun.dm

    * less copypasta

    * Apply suggestions from code review

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: warriorstar-orion <orion@snowfrost.garden>
    Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>

    * early return

    ---------

    Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: warriorstar-orion <orion@snowfrost.garden>

commit fb027f73dd
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Sun Apr 28 22:57:26 2024 +0200

    Changes the `is_changeling` and `is_mindslave` procs into proper defines (#25212)

    * Changes these procs into proper defines

    * Henri review

commit fc7acc4597
Author: Burzah <116982774+Burzah@users.noreply.github.com>
Date:   Sun Apr 28 13:05:39 2024 -0700

    adjusted logic for humanize_spider (#25286)

commit a42bacb9fa
Author: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date:   Sun Apr 28 15:53:29 2024 -0400

    fifty percent off deal (#25243)

commit 057e9f16eb
Author: Code-Lyoko0 <degg444@gmail.com>
Date:   Sun Apr 28 14:51:34 2024 -0500

    Informs Deathsquad that the bomb has been armed during Epsilon Alert. (#25242)

    * informs the Death Squad that the bomb has been armed during Epsilon Alert

    * Contra review, properly qdel'ing the radio on destory

commit 6fa7a48ba8
Author: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date:   Sun Apr 28 15:48:13 2024 -0400

    ibheriewfofi0wnmfeionfm (#25294)

commit daa368ca10
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Sun Apr 28 15:48:00 2024 -0400

    day 1 shadow tweaks (#25290)

commit 36f7c43c9c
Author: larentoun <31931237+larentoun@users.noreply.github.com>
Date:   Sun Apr 28 06:01:16 2024 +0300

    Better Gas Scans (Chatbox and Colored!) (#24975)

    * feat: Better Gas Analyzer AND TGUI!
    https://github.com/ss220-space/Paradise/pull/2333
    https://github.com/ss220-space/Paradise/pull/2461
    https://github.com/ss220-space/Paradise/pull/2522

    * rename atmos helpers

    * remove tgui

    * more fixes

    * better act self

    * now scanner finally works again

    * what if we want turf beneath the target?

    * fix chatbox

    * color code the gases

    * unnecessary stuff removal

    * ghosts can now scan portable atmospherics

    * better code

    * do we really need to know that?

    * change colors

    * add a space to separate gases from other info

    * update tgui bundle

    * update dark-theme CO2 color

commit 1d4d95a10b
Author: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date:   Sat Apr 27 21:43:58 2024 -0400

    yes (#25297)

commit a3e43a3161
Author: warriorstar-orion <orion@snowfrost.garden>
Date:   Sat Apr 27 20:06:39 2024 -0400

    fix: null check during morph eat (#25291)

commit d2d932d4d1
Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>
Date:   Sat Apr 27 12:22:22 2024 +0100

    NanoMap Auto-Update (Sat Apr 27 01:09:53 UTC 2024) (#25280)

    Co-authored-by: NanoMap Generation <action@github.com>

commit 572b79bce9
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Sat Apr 27 10:25:17 2024 +0200

    Removes num2dir (#25261)

commit dbc3bf1c8b
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Sat Apr 27 03:23:48 2024 -0500

    Removes a lot of lists (#25272)

    * Removes a lot of lists

    * Update code/game/turfs/simulated/floor.dm

    Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com>

    * Update code/game/turfs/simulated/floor/misc_floor.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com>

    * Update code/game/turfs/simulated/floor/mineral_floors.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com>

    * Update code/game/turfs/simulated/floor/mineral_floors.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com>

    ---------

    Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit e810b3a9c7
Author: Adrer <erwin@lombok.demon.nl>
Date:   Sat Apr 27 10:21:13 2024 +0200

    Security level changes no longer force depowered lights on. (#25245)

    Co-authored-by: adrermail@gmail.com <adrermail@gmail.com>

commit b165839073
Author: Christasmurf <25437893+Christasmurf@users.noreply.github.com>
Date:   Sat Apr 27 01:17:59 2024 +0100

    Biosuit resprite (#25004)

    * biosuits babeyyy

    * minor changes to comments

    * lil booties

    * suggested change

commit e73dc13a29
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Fri Apr 26 20:00:51 2024 -0400

    Improves interactions with display cases. (#25228)

    * better player info for display case

    * this too

    * improved messaging

    * finish out the docs

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

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com>

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com>

    ---------

    Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com>
    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 7a45c712b8
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Sat Apr 27 00:32:00 2024 +0200

    Adds a stamina meter (#24782)

    * Finally done

    * Contra + Qwerty review

    * I don't think I broke anything :D

    * Lewc review

commit 88af37bfcf
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Fri Apr 26 18:31:09 2024 -0400

    Adds the NTSS Shadow (#24778)

    * WIP

    * change this

    * the rest of the fucking owl

    * removes QWERTODO

    * let us fix the CC beacons too

    * makes it look better

    * makes CI work on everything but shadow, asking warriorstar

    * exclude ntss shadow from window spawner checks

    * final changes hopefully

    * moved around parts of the shuttle

    * Update code/modules/atmospherics/machinery/components/trinary_devices/filter.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * moves it moves it to it's own file

    * move it move it

    * bobby_drop_tables

    * oops

    * fuck

    ---------

    Co-authored-by: warriorstar-orion <orion@snowfrost.garden>
    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 78e782dfcb
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Fri Apr 26 23:11:08 2024 +0100

    skip nanomap when no changes needed (#25182)

commit 8b0ff64cc0
Merge: c75279f7c8 7ab24d6519
Author: Fordoxia <fordoxia@googlemail.com>
Date:   Fri Apr 26 22:42:06 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit 7ab24d6519
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Fri Apr 26 16:50:36 2024 -0400

    fixes tarot card capitalization in uplink (#25278)

commit c75279f7c8
Merge: 8c704101de 5b8ae44d03
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Fri Apr 26 16:23:32 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit 5b8ae44d03
Author: PopeDaveThe3th <80988376+PopeDaveThe3th@users.noreply.github.com>
Date:   Thu Apr 25 15:14:31 2024 -0400

    whoops (#25268)

commit 5adf1408d1
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu Apr 25 22:04:31 2024 +0300

    Bring `respawn_enabled` back to config (#25264)

commit 20701d905c
Author: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date:   Thu Apr 25 14:20:50 2024 -0400

    Shades now drop bodies when killed/destroyed (#24784)

    * this was a bit of a pain

    * yes

    * damger reviwe

    * funny review

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit e204ca6694
Author: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Date:   Fri Apr 26 04:20:35 2024 +1000

    pens (#25159)

commit ae7da539e3
Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date:   Thu Apr 25 19:20:14 2024 +0100

    Fixes an SQL update file + null character save issue (#25149)

    * This is what I get for sending a PR

    * I DID SAY TESTING: None

commit 1377fd1166
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Thu Apr 25 06:00:44 2024 +0300

    [s] Disguise with plant trick (#25260)

    * Fix plant-disguise trick

    * Resolve name collision

commit af5d187014
Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date:   Wed Apr 24 19:10:46 2024 -0400

    Adds magic tarot cards [SERIOUS DO NOT CLOSE AFTER AFD] (#24933)

    * starts it

    * Update magic_tarot.dm

    * MORE PROGRESS

    * So many thanks to Cloudbucket, for sprites

    * The Work, the Art, continues.

    * more changes

    * pushes the Work foward. All cards done.

    * and more thanks github

    * adds to BSH

    * tochat

    * Finishes QWERTYTODO. Magic key. World smoke

    * Isaac and his mother lived alone in a small house on a hill.  Isaac kept to himself, drawing pictures and playing with his toys as his mom watched Christian broadcasts on the television.  Life was simple, and they were both happy. That was, until the day Isaac’s mom heard a voice from above.  “Your son has become corrupted by sin. He needs to be saved.”  “I will do my best to save him, my Lord,” Isaac’s mother replied, rushing into Isaac’s room, removing all that was evil from his life.  Again the voice called to her, "Isaac’s soul is still corrupt. He needs to be cut off from all that is evil in this world and confess his sins."  “I will follow your instructions, Lord. I have faith in thee,” Isaac’s mother replied, as she locked Isaac in his room, away from the evils of the world.  One last time, Isaac’s mom heard the voice of God calling to her.  “You've done as I've asked, but I still question your devotion to me. To prove your faith, I will ask one more thing of you."  "Yes Lord, anything!” Isaac’s mother begged.  "To prove your love and devotion, I require a sacrifice. Your son, Isaac, will be this sacrifice. Go into his room and end his life, as an offering to me to prove you love me above all else."  "Yes Lord", she replied, grabbing a butcher’s knife from the kitchen.  Isaac, watching through a crack in his door, trembled in fear.  Scrambling around his room to find a hiding place, he noticed a trap door to the basement hidden under his rug.  Without hesitation, he flung open the hatch, just as his mother burst through his door, and threw himself down into the unknown depths below.

    * nanny bag it before I forget

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * returns early

    * Apply suggestions from code review

    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

    * RE-RE-RE-REVIEW

    * Apply suggestions from code review

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com>

    * requested changes and such

    * duh

    * Apply suggestions from code review

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * returns early

    * Update code/datums/status_effects/buffs.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * new hrefs here to troll CI :trollface:

    * Update code/game/gamemodes/wizard/magic_tarot.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>

    ---------

    Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
    Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
    Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com>

commit 69d6a8df21
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Wed Apr 24 16:21:11 2024 -0500

    Overhauls player facing verb UI (#24060)

    * Preference verb overhaul

    * this too

    * Update code/__DEFINES/preferences_defines.dm

    * Update code/modules/client/preference/preferences.dm

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    * fixes + better html

    * removes unused define

    ---------

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

commit e615738e22
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Wed Apr 24 20:42:12 2024 +0100

    All your TGUI belong to us (#25250)

commit 0c5fdaa57b
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Wed Apr 24 15:40:45 2024 -0400

    Updates contributing guide regarding signals, removes SIGNAL_HANDLER_DOES_SLEEP (#24824)

    * Updates contributing guide, removes DOES_SLEEP

    * Update .github/CONTRIBUTING.md

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 3333fd051f
Author: larentoun <31931237+larentoun@users.noreply.github.com>
Date:   Wed Apr 24 22:38:47 2024 +0300

    if you have PROCCALL rights, you can call it from VV (#25030)

commit 20a0836d1a
Author: Rayforx <154929127+Rayforx@users.noreply.github.com>
Date:   Wed Apr 24 07:45:43 2024 +0200

    Update ghost_bar.dm (#25234)

commit c3af4456e1
Author: chuga-git <98280110+chuga-git@users.noreply.github.com>
Date:   Wed Apr 24 00:45:37 2024 -0500

    Restricts rubbershot's guaranteed knockdown range (#25178)

    * restricts rubbershot knockdown range

    * actually commit the right version

    * Henri review

commit a2de7f4533
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Wed Apr 24 00:45:25 2024 -0500

    fixes a radial menu gc false positive (#25237)

commit 6c756f98c0
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Wed Apr 24 07:45:16 2024 +0200

    Makes the walls from Desecrated Duel GC properly (#24990)

    * GC is a thing of all time

    * Spacing

commit d233824add
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Wed Apr 24 00:45:03 2024 -0500

    nerfs machine overload (#25153)

commit 752deb8119
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Tue Apr 23 22:09:44 2024 +0300

    Make it possible to get out of abductors experimentation machine (#24842)

    * Make it possible to get out of abductors experimentation machine

    * Better roll of result

    * Better message of escape attempt

    * Apply suggestions from code review

    * Remove unnecessary check

    * Slightly tweak values

commit 8c704101de
Merge: 339ded7dd3 67cba07b99
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Tue Apr 23 03:22:48 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit 67cba07b99
Author: SchrodingersWolf <108938550+SchrodingersWolf@users.noreply.github.com>
Date:   Mon Apr 22 21:14:08 2024 -0400

    Fixes Cerestation Medical Storage disposals bin, also simplifies disposals in Medbay Break Room (#24776)

    * Fixes Medbay Storage disposals bin

    * Life is pain

    * Rogue pipe be gone

commit 853f108c89
Author: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date:   Mon Apr 22 20:50:48 2024 -0400

    [SERIOUS] Improves admin tooling for radiation (#24968)

    * lets clean some radiation

    * changes

    * lgtm

commit de6a54fbde
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Tue Apr 23 02:49:52 2024 +0200

    Removes all mentions of `return .` where they would be unnecessary (#25142)

    * Removes all mentions of `return .`

    * I can do this all day

    * Arthri review

    * Update code/__HELPERS/sanitize_values.dm

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    * Update code/__HELPERS/sanitize_values.dm

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

    ---------

    Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

commit 6b442d3ed2
Author: warriorstar-orion <orion@snowfrost.garden>
Date:   Mon Apr 22 20:48:08 2024 -0400

    cere: increase maint loot spawns (#25152)

commit a1ca632a19
Author: Aylong <69762909+AyIong@users.noreply.github.com>
Date:   Tue Apr 23 01:37:59 2024 +0300

    [TGUI] Coin Mint (#24885)

    * Backend

    * Simplify

    * Almost ready

    * Done., i think

    * You can now craft a money bag

    * Autodoc

    * Fingerprints

    * Earlier return if no money bag

    * Update code/modules/mining/mint.dm

    * Update code/modules/mining/mint.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update tgui.bundle.js

    * Rebuild

    * Fuckin hell

    * Rebuild

    * Update tgui.bundle.js

    * Update code/modules/mining/mint.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/modules/mining/mint.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 2cfa9d620f
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Tue Apr 23 01:04:38 2024 +0300

    Fixes exploit (#25101)

commit 7fa44a31fb
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Tue Apr 23 00:32:49 2024 +0300

    Full Auto Gun Mode Component (#24998)

    * Full Auto Gun Mode Component

    * Apply some refactoring

    * spaces mhmm

    * Some signal movement

    * Apply DGamerL suggestions

    * Unknown SIGNAL_HANDLER no more

    * Fix runtime if uid is passed

    * Why the hell you even care

    * god you serious

    ---------

    Co-authored-by: Gottfrei <zweisen@gmail.com>

commit 00be61a811
Author: Mikhail Dzianishchyts <mikhail.dzianishchyts@gmail.com>
Date:   Mon Apr 22 23:53:14 2024 +0300

    Better round start time handling after using delay (#25035)

commit 2d1d7e283b
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Mon Apr 22 15:46:21 2024 -0500

    makes some uis no longer automatically update (#25121)

    * makes some uis no longer automatically update

    * fixes cloning sporadically not working

    * Revert "fixes cloning sporadically not working"

    This reverts commit 2d88887cf6.

    * Update code/modules/hydroponics/seed_extractor.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * Update code/modules/hydroponics/seed_extractor.dm

    * Update code/modules/hydroponics/seed_extractor.dm

    ---------

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 80438de316
Author: larentoun <31931237+larentoun@users.noreply.github.com>
Date:   Mon Apr 22 23:46:20 2024 +0300

    Remove automatedannouncer mob (#24727)

    * remove automated announcer mob

    * remove list(z) from autosay

    * typo

    * remove more of unused role args

    * missed passing a value...

    * move comment

    * better check

    * better check

    * comment for say_understands

    * Update code/modules/mob/living/brain/living_brain.dm

    Co-authored-by: Charlie Nolan <funnyman3595@gmail.com>

    ---------

    Co-authored-by: Charlie Nolan <funnyman3595@gmail.com>

commit 8b6fec0622
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Mon Apr 22 13:38:01 2024 -0700

    Prevent duplicate messages when sending a PM to yourself. (#25124)

    * Prevent duplicate messages when replying to yourself.

    * Oops.

    ---------

    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>

commit 58c61475e6
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Mon Apr 22 15:37:16 2024 -0500

    fixes repair borg not working in some cases (#25151)

commit 3449f5175d
Author: warriorstar-orion <orion@snowfrost.garden>
Date:   Mon Apr 22 16:33:14 2024 -0400

    ci: add maplints/fix matching stacked disposals/pipes (#25120)

commit 831776b40d
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Mon Apr 22 15:33:07 2024 -0500

    fixes some action button issues (#25140)

    * fixes some action button issues

    * murder

    * thanks autocopy

    * morph and xenos

    * Update code/datums/action.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 71bc06cd4e
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Mon Apr 22 22:32:58 2024 +0200

    Halves the damage dealt by PKAs to blobs (#25154)

    * Makes PKAs deal half damage to blobs

    * Update code/modules/events/blob/theblob.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

commit 15483d1b88
Author: S34N <12197162+S34NW@users.noreply.github.com>
Date:   Mon Apr 22 21:32:52 2024 +0100

    Add modern equivalents of legacy IE-only CSS rules/properties (#25205)

    * alternatives to legacy -ms stuff from TGUI

    * tgui build

    * bundle

    * rebuild

    ---------

    Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>

commit fdea9d7669
Author: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Date:   Mon Apr 22 23:08:45 2024 +1000

    Update cerestation.dmm (#25190)

commit 5fe22f485c
Author: chuga-git <98280110+chuga-git@users.noreply.github.com>
Date:   Mon Apr 22 08:00:03 2024 -0500

    permits mobs with chunky fingers to fire blowgun (#25176)

commit 4b0f774cdc
Author: Code-Lyoko0 <degg444@gmail.com>
Date:   Mon Apr 22 05:29:06 2024 -0500

    make the station not go into delta alert when the Death Squad arms the nuke (#25163)

commit 339ded7dd3
Merge: 8481f50f90 f12f75c652
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Mon Apr 22 01:52:33 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit f12f75c652
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Sun Apr 21 16:47:32 2024 -0700

    Update CONTRIBUTING.md (#25235)

commit 6d3549c3ca
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Mon Apr 22 01:34:33 2024 +0200

    LOOK IT'S COCAINE BEAR (1985) (#25086)

commit ebbbf62cec
Author: tristan1333 <ttb09RD@gmail.com>
Date:   Mon Apr 22 09:06:47 2024 +1000

    Chicken meat/burger, Onigiri, Seaweed, updated boiled rice sprite (#24813)

    * Adds chicken meat, burger, onigiri, updates boiled rice sprite

    * Update code/modules/food_and_drinks/food/foods/side_dishes.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/game/objects/items/stacks/seaweed.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * changed chickenburger pathname, deleted old boiled rice sprite

    * Transfers reagents from rice to onigiri

    * Update code/modules/research/designs/biogenerator_designs.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * All sushi now requires seaweed

    * new seaweed desc, attackverb oopsy daisy, seaweed attack_self doesn't show pointless list, Onigiri goes in hand

    * moved seaweed sprite to organic.dmi

    * Update code/modules/research/designs/biogenerator_designs.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update organic.dmi

    * re

    * goal

    * oops

    * early return

    * Update code/modules/food_and_drinks/food/foods/side_dishes.dm

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

    * Update code/modules/food_and_drinks/food/foods/side_dishes.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * Update code/modules/food_and_drinks/food/foods/side_dishes.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    * Update code/modules/food_and_drinks/food/foods/side_dishes.dm

    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

    ---------

    Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
    Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

commit 224c488c40
Author: Burzah <116982774+Burzah@users.noreply.github.com>
Date:   Sun Apr 21 15:54:06 2024 -0700

    CA Gang (#25233)

commit 0a38123ff8
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Mon Apr 22 00:39:59 2024 +0200

    Adds me to `CONTRIBUTING.md` (#25232)

    * I WILL conflict burza and funny

    * Okaaaaaaaay fiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiine

commit 8481f50f90
Merge: 5b793c36ed 4f8d91a316
Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Date:   Sun Apr 21 21:54:14 2024 +0100

    Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise

commit 4f8d91a316
Author: Charlie Nolan <funnyman3595@gmail.com>
Date:   Sun Apr 21 12:45:47 2024 -0700

    oops (#25210)

    Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>

commit 9e6dcf9c46
Author: GDN <96800819+GDNgit@users.noreply.github.com>
Date:   Sun Apr 21 13:26:35 2024 -0500

    removes the remaining datum redeclares (#25220)

    * removes the remaining datum redeclares

    * the two fixes

    * finneee contra

    * OK CONTRA

    * readd

    * CURSED TO BE BROWN!

    * facking automerge

commit f83ef617e9
Author: Luc <89928798+lewcc@users.noreply.github.com>
Date:   Sun Apr 21 11:59:23 2024 -0400

    Expands "genderless" to all species, adds body-type option, removes some gender checks (#23910)

    * adds most body type support, removes some gender checks

    * remove gender from species, accessories

    * restore pick_list

    * re-adds limitations on accessories

    * Universal access to body hair

    * remove unused var

    * Update example config, some preference saving code

    * updates tgui bundle

    * oops

    * Remove formatting

    * hopefully undoes formatting changes

    * dammit

    * been meaning to fix this one for a while

    * dgamer reviews

    * move body_type into human_defines

    * sql file changes

    * update tgui

    * Update db code

    * bump versions

    ---------

    Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com>
    Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>

commit 9bc9b4b67a
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Sun Apr 21 17:24:50 2024 +0200

    Removes duplicate definitions of `/datum/gamemode` on almost every gamemode file (#25219)

    * Why did every gamemode do this :(

    * Contra request

commit 585a885b1f
Author: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date:   Sun Apr 21 16:53:25 2024 +0200

    Easy fix (#25216)

commit f6196809f2
Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>
Date:   Sat Apr 20 10:08:45 2024 +0100

    NanoMap Auto-Update (Sat Apr 20 01:09:53 UTC 2024) (#25211)

    Co-authored-by: NanoMap Generation <action@github.com>
This commit is contained in:
Fordoxia
2024-05-03 01:26:30 +01:00
parent 5f19080fec
commit baaf5dd7b8
609 changed files with 11397 additions and 4508 deletions
+5
View File
@@ -26,3 +26,8 @@ _build_dependencies.sh @AffectedArc07
dreamchecker.exe @AffectedArc07
rust_g.dll @AffectedArc07
librust_g.so @AffectedArc07
### S34NW
# TGUI stuff
/tgui/bin @S34NW
+31 -2
View File
@@ -157,7 +157,7 @@ if(thing == TRUE)
return "bleh"
var/other_thing = pick(TRUE, FALSE)
if(other_thing == FALSE)
return "meh"
return "meh"
// Good
var/thing = pick(TRUE, FALSE)
@@ -165,7 +165,7 @@ if(thing)
return "bleh"
var/other_thing = pick(TRUE, FALSE)
if(!other_thing)
return "meh"
return "meh"
```
### Use `pick(x, y, z)`, not `pick(list(x, y, z))`
@@ -452,6 +452,32 @@ Look for code examples on how to properly use it.
addtimer(CALLBACK(target, PROC_REF(dothing), arg1, arg2, arg3), 5 SECONDS)
```
### Signals
Signals are a slightly more advanced topic, but are often useful for attaching external behavior to objects that should be triggered when a specific event occurs.
When defining procs that should be called by signals, you must include `SIGNAL_HANDLER` after the proc header. This ensures that no sleeping code can be called from within a signal handler, as that can cause problems with the signal system.
Since callbacks can be connected to many signals with `RegisterSignal`, it can be difficult to pin down the source that a callback is invoked from. Any new `SIGNAL_HANDLER` should be followed by a comment listing the signals that the proc is expected to be invoked for. If there are multiple signals to be handled, separate them with a `+`.
```dm
/atom/movable/proc/when_moved(atom/movable/A)
SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED
do_something()
/datum/component/foo/proc/on_enter(datum/source, atom/enterer)
SIGNAL_HANDLER // COMSIG_ATOM_ENTERED + COMSIG_ATOM_INITIALIZED_ON
do_something_else()
```
If your proc does have something that needs to sleep (such as a `do_after()`), do not simply omit the `SIGNAL_HANDLER`. Instead, call the sleeping code with `INVOKE_ASYNC` from within the signal handling function.
```dm
/atom/movable/proc/when_moved(atom/movable/A)
SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED
INVOKE_ASYNC(src, PROC_REF(thing_that_sleeps), arg1)
```
### Operators
#### Spacing of operators
@@ -834,8 +860,10 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c
`Commit Access` members have write access to the repository and can merge your PRs. People included in this role are:
- [AffectedArc07](https://github.com/AffectedArc07)
- [Burzah](https://github.com/Burzah)
- [Charliminator](https://github.com/hal9000PR)
- [Contrabang](https://github.com/Contrabang)
- [DGamerL](https://github.com/DGamerL)
- [lewcc](https://github.com/lewcc)
---
@@ -846,6 +874,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c
- [Charliminator](https://github.com/hal9000PR)
- [Contrabang](https://github.com/Contrabang)
- [DGamerL](https://github.com/DGamerL)
- [FunnyMan3595](https://github.com/FunnyMan3595)
- [Henri215](https://github.com/Henri215)
- [lewcc](https://github.com/lewcc)
- [Sirryan2002](https://github.com/Sirryan2002)
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="218.06666564941406" height="35" viewBox="0 0 218.06666564941406 35"><rect width="103" height="35" fill="#31C4F3"/><rect x="103" width="115.06666564941406" height="35" fill="#389AD5"/><text x="51.5" y="21.5" font-size="12" font-family="'Roboto', sans-serif" fill="#FFFFFF" text-anchor="middle" letter-spacing="2">COMPILES</text><text x="160.53333282470703" y="21.5" font-size="12" font-family="'Montserrat', sans-serif" fill="#FFFFFF" text-anchor="middle" font-weight="900" letter-spacing="2">SOMETIMES</text></svg>

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+31
View File
@@ -0,0 +1,31 @@
<svg xmlns="http://www.w3.org/2000/svg" width="258.708" height="35.059" viewBox="0 0 258.708 35.059">
<title>made-with-crayons</title>
<g>
<rect x="72.75" width="185.958" height="35" style="fill: #5593c8"/>
<rect y="0.029" width="112.375" height="35" style="fill: #a7bfc1"/>
<g>
<path d="M131.225,15.814a2.168,2.168,0,0,0-1.062-.306,1.871,1.871,0,0,0-1.02.288,2.014,2.014,0,0,0-.72.8,2.621,2.621,0,0,0,0,2.292,2.057,2.057,0,0,0,.72.8,1.839,1.839,0,0,0,1.02.294,2.371,2.371,0,0,0,1.026-.264,3.351,3.351,0,0,0,.978-.72l1.44,1.536a5.109,5.109,0,0,1-1.65,1.188,4.591,4.591,0,0,1-4.188-.126,4.125,4.125,0,0,1-1.59-1.578,4.461,4.461,0,0,1-.576-2.255,4.254,4.254,0,0,1,.588-2.214A4.178,4.178,0,0,1,127.811,14a4.838,4.838,0,0,1,4.212-.156,4.631,4.631,0,0,1,1.584,1.092l-1.44,1.716A3.017,3.017,0,0,0,131.225,15.814Z" style="fill: #fff"/>
<path d="M141.935,22l-1.116-2.269H139.5V22H137V13.588h3.924a3.967,3.967,0,0,1,2.622.78,2.721,2.721,0,0,1,.93,2.208,3.324,3.324,0,0,1-.366,1.6,2.716,2.716,0,0,1-1.05,1.074l1.7,2.748ZM139.5,17.812h1.428a1.192,1.192,0,0,0,.87-.3,1.157,1.157,0,0,0,.306-.864,1.12,1.12,0,0,0-.306-.846,1.207,1.207,0,0,0-.87-.294H139.5Z" style="fill: #fff"/>
<path d="M154.5,22l-.492-1.345h-3.4l-.5,1.345h-2.568l3.588-8.412h2.568L157.163,22Zm-3.192-3.168h2.04l-1.008-2.748Z" style="fill: #fff"/>
<path d="M167.519,13.588l-3.024,5.748V22H162V19.384l-3.084-5.8h2.5l1.836,3.432,1.788-3.432Z" style="fill: #fff"/>
<path d="M177.161,14A4.188,4.188,0,0,1,178.8,15.55a4.239,4.239,0,0,1,.594,2.226,4.323,4.323,0,0,1-.594,2.25,4.2,4.2,0,0,1-1.644,1.572,5.123,5.123,0,0,1-4.7,0,4.214,4.214,0,0,1-1.638-1.572,4.327,4.327,0,0,1-.594-2.25,4.244,4.244,0,0,1,.594-2.226A4.2,4.2,0,0,1,172.463,14a5.174,5.174,0,0,1,4.7,0Zm-3.336,1.812a2.178,2.178,0,0,0-.756.822,2.4,2.4,0,0,0-.282,1.158,2.434,2.434,0,0,0,.282,1.164,2.215,2.215,0,0,0,.756.834,1.855,1.855,0,0,0,1.026.306,1.778,1.778,0,0,0,1-.306,2.126,2.126,0,0,0,.726-.828,2.559,2.559,0,0,0,.264-1.17,2.533,2.533,0,0,0-.264-1.158,2.094,2.094,0,0,0-.72-.822,1.8,1.8,0,0,0-1.008-.3A1.882,1.882,0,0,0,173.825,15.808Z" style="fill: #fff"/>
<path d="M188.675,13.588h2.28V22h-2.124l-3.564-4.68V22h-2.292V13.588h2.136l3.564,4.692Z" style="fill: #fff"/>
<path d="M199.582,15.628a4.26,4.26,0,0,0-1.32-.276.9.9,0,0,0-.51.126.414.414,0,0,0-.186.366.573.573,0,0,0,.36.522,6.372,6.372,0,0,0,1.14.4,11.024,11.024,0,0,1,1.464.51,2.7,2.7,0,0,1,1,.786,2.151,2.151,0,0,1,.426,1.392,2.369,2.369,0,0,1-.462,1.481,2.769,2.769,0,0,1-1.248.906,4.892,4.892,0,0,1-1.758.3,6.744,6.744,0,0,1-2.166-.366,6.019,6.019,0,0,1-1.878-1l.936-1.9a5.6,5.6,0,0,0,1.554.93,4.277,4.277,0,0,0,1.578.378,1.121,1.121,0,0,0,.636-.155.508.508,0,0,0,.228-.444.581.581,0,0,0-.372-.534,6.335,6.335,0,0,0-1.152-.39,10.531,10.531,0,0,1-1.452-.474,2.575,2.575,0,0,1-1-.762,2.081,2.081,0,0,1-.42-1.356,2.386,2.386,0,0,1,.432-1.422,2.724,2.724,0,0,1,1.218-.93,4.77,4.77,0,0,1,1.83-.324,6.76,6.76,0,0,1,1.884.27,6.245,6.245,0,0,1,1.632.714l-.924,1.92A8.056,8.056,0,0,0,199.582,15.628Z" style="fill: #fff"/>
</g>
<g>
<path d="M15.789,13.469l2.461,6.539,2.455-6.539h1.916V22H21.145V19.188l.146-3.762L18.771,22H17.711L15.2,15.432l.146,3.756V22H13.867V13.469Z" style="fill: #fff"/>
<path d="M31.894,20.014h-3.3L27.9,22H26.357l3.223-8.531h1.33L34.138,22H32.591Zm-2.889-1.2h2.473l-1.236-3.539Z" style="fill: #fff"/>
<path d="M37.745,22V13.469h2.52a3.952,3.952,0,0,1,2.007.5,3.436,3.436,0,0,1,1.356,1.43,4.538,4.538,0,0,1,.48,2.121v.428a4.519,4.519,0,0,1-.483,2.133A3.4,3.4,0,0,1,42.248,21.5,4.135,4.135,0,0,1,40.2,22Zm1.482-7.336V20.8h.967a2.229,2.229,0,0,0,1.79-.729,3.165,3.165,0,0,0,.636-2.09v-.475a3.251,3.251,0,0,0-.6-2.117,2.142,2.142,0,0,0-1.752-.731Z" style="fill: #fff"/>
<path d="M53.211,18.191h-3.5V20.8h4.1V22H48.225V13.469h5.537v1.2H49.707V17.02h3.5Z" style="fill: #fff"/>
<path d="M69.97,19.891l1.313-6.422h1.471L70.784,22H69.366l-1.623-6.229L66.085,22H64.661l-1.969-8.531h1.471l1.324,6.41,1.629-6.41h1.242Z" style="fill: #fff"/>
<path d="M78.041,22H76.564V13.469h1.477Z" style="fill: #fff"/>
<path d="M88.5,14.664h-2.66V22H84.367V14.664H81.73v-1.2H88.5Z" style="fill: #fff"/>
<path d="M99.03,22H97.554V18.215H93.739V22H92.257V13.469h1.482V17.02h3.814V13.469H99.03Z" style="fill: #fff"/>
</g>
<g>
<polygon points="229.048 13.138 245.607 13.138 245.607 21.862 229.031 21.862 229.048 13.138" style="fill: #fff"/>
<rect x="223.736" y="13.138" width="3.472" height="8.725" style="fill: #fff"/>
<polygon points="221.628 21.602 215.375 17.502 221.626 13.4 221.628 21.602" style="fill: #fff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

+1 -1
View File
@@ -101,7 +101,7 @@ jobs:
# Check if a workflow file would be modified by the merge (permissions prevent pushes if so)
latest_workflow_commit=$(git log -n 1 --pretty=format:"%H" upstream/$BASE_BRANCH -- .github/workflows)
if ! git branch --contains $latest_workflow_commit | grep -q "$(git rev-parse --abbrev-ref HEAD)"; then
gh pr comment ${{ github.event.issue.html_url }} --body "GitHub Actions can not push to this branch as workflow files have been changed since your branch was last updated. Please update your branch past https://github.com/ParadiseSS13/Paradise/commit/$latest_workflow_commit before using this command again."#
gh pr comment ${{ github.event.issue.html_url }} --body "GitHub Actions can not push to this branch as workflow files have been changed since your branch was last updated. Please update your branch past https://github.com/ParadiseSS13/Paradise/commit/$latest_workflow_commit before using this command again."
echo "FAIL_NOTIFIED=true" >> "$GITHUB_ENV"
exit 1
fi
+4 -1
View File
@@ -43,4 +43,7 @@ jobs:
git pull origin master
git commit -m "NanoMap Auto-Update (`date`)" -a || true
git push -f -u origin nanomap-render
gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master"
result=$(gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master")
if echo "$result" | grep -q "No commits between master and nanomap-render"
echo "No NanoMaps update required, skipping."
exit 78
+1 -1
View File
@@ -3,7 +3,7 @@
version: 1
# The BYOND version to use
# Must be interpreted as a string, keep quoted
byond: "515.1620"
byond: '515.1633'
# Folders to create in "<instance_path>/Configuration/GameStaticFiles/"
static_files:
# Config directory should be static
-19
View File
@@ -1,19 +0,0 @@
Paradise
Copyright (C) 2010-2016 Paradise, Baystation12, Goonstation and tgstation13.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Any files located in the Paradise/goon, Paradise/icons/goonstation, or Paradise/sound/goonstation directories, or any subdirectories of mentioned directories are licensed under the Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) from Goonstation.
+361
View File
@@ -0,0 +1,361 @@
Creative Commons Legal Code
Attribution-NonCommercial-ShareAlike 3.0 Unported
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation,
derivative work, arrangement of music or other alterations of a
literary or artistic work, or phonogram or performance and includes
cinematographic adaptations or any other form in which the Work may be
recast, transformed, or adapted including in any form recognizably
derived from the original, except that a work that constitutes a
Collection will not be considered an Adaptation for the purpose of
this License. For the avoidance of doubt, where the Work is a musical
work, performance or phonogram, the synchronization of the Work in
timed-relation with a moving image ("synching") will be considered an
Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed
in Section 1(g) below, which, by reason of the selection and
arrangement of their contents, constitute intellectual creations, in
which the Work is included in its entirety in unmodified form along
with one or more other contributions, each constituting separate and
independent works in themselves, which together are assembled into a
collective whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined above) for the purposes of this
License.
c. "Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or
other transfer of ownership.
d. "License Elements" means the following high-level license attributes
as selected by Licensor and indicated in the title of this License:
Attribution, Noncommercial, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
f. "Original Author" means, in the case of a literary or artistic work,
the individual, individuals, entity or entities who created the Work
or if no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
g. "Work" means the literary and/or artistic work offered under the terms
of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book,
pamphlet and other writing; a lecture, address, sermon or other work
of the same nature; a dramatic or dramatico-musical work; a
choreographic work or entertainment in dumb show; a musical
composition with or without words; a cinematographic work to which are
assimilated works expressed by a process analogous to cinematography;
a work of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of applied
art; an illustration, map, plan, sketch or three-dimensional work
relative to geography, topography, architecture or science; a
performance; a broadcast; a phonogram; a compilation of data to the
extent it is protected as a copyrightable work; or a work performed by
a variety or circus performer to the extent it is not otherwise
considered a literary or artistic work.
h. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
i. "Publicly Perform" means to perform public recitations of the Work and
to communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a
place individually chosen by them; to perform the Work to the public
by any means or process and the communication to the public of the
performances of the Work, including by public digital performance; to
broadcast and rebroadcast the Work by any means including signs,
sounds or images.
j. "Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to
clearly label, demarcate or otherwise identify that changes were made
to the original Work. For example, a translation could be marked "The
original work was translated from English to Spanish," or a
modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated
in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights in
other media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved, including but not limited to the
rights described in Section 4(e).
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms
of this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms
on the Work that restrict the terms of this License or the ability of
the recipient of the Work to exercise the rights granted to that
recipient under the terms of the License. You may not sublicense the
Work. You must keep intact all notices that refer to this License and
to the disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of the
Work from You to exercise the rights granted to that recipient under
the terms of the License. This Section 4(a) applies to the Work as
incorporated in a Collection, but this does not require the Collection
apart from the Work itself to be made subject to the terms of this
License. If You create a Collection, upon notice from any Licensor You
must, to the extent practicable, remove from the Collection any credit
as required by Section 4(d), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the extent
practicable, remove from the Adaptation any credit as required by
Section 4(d), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under: (i)
the terms of this License; (ii) a later version of this License with
the same License Elements as this License; (iii) a Creative Commons
jurisdiction license (either this or a later license version) that
contains the same License Elements as this License (e.g.,
Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License").
You must include a copy of, or the URI, for Applicable License with
every copy of each Adaptation You Distribute or Publicly Perform. You
may not offer or impose any terms on the Adaptation that restrict the
terms of the Applicable License or the ability of the recipient of the
Adaptation to exercise the rights granted to that recipient under the
terms of the Applicable License. You must keep intact all notices that
refer to the Applicable License and to the disclaimer of warranties
with every copy of the Work as included in the Adaptation You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Adaptation, You may not impose any effective technological
measures on the Adaptation that restrict the ability of a recipient of
the Adaptation from You to exercise the rights granted to that
recipient under the terms of the Applicable License. This Section 4(b)
applies to the Adaptation as incorporated in a Collection, but this
does not require the Collection apart from the Adaptation itself to be
made subject to the terms of the Applicable License.
c. You may not exercise any of the rights granted to You in Section 3
above in any manner that is primarily intended for or directed toward
commercial advantage or private monetary compensation. The exchange of
the Work for other copyrighted works by means of digital file-sharing
or otherwise shall not be considered to be intended for or directed
toward commercial advantage or private monetary compensation, provided
there is no payment of any monetary compensation in con-nection with
the exchange of copyrighted works.
d. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party
or parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party
or parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does not
refer to the copyright notice or licensing information for the Work;
and, (iv) consistent with Section 3(b), in the case of an Adaptation,
a credit identifying the use of the Work in the Adaptation (e.g.,
"French translation of the Work by Original Author," or "Screenplay
based on original Work by Original Author"). The credit required by
this Section 4(d) may be implemented in any reasonable manner;
provided, however, that in the case of a Adaptation or Collection, at
a minimum such credit will appear, if a credit for all contributing
authors of the Adaptation or Collection appears, then as part of these
credits and in a manner at least as prominent as the credits for the
other contributing authors. For the avoidance of doubt, You may only
use the credit required by this Section for the purpose of attribution
in the manner set out above and, by exercising Your rights under this
License, You may not implicitly or explicitly assert or imply any
connection with, sponsorship or endorsement by the Original Author,
Licensor and/or Attribution Parties, as appropriate, of You or Your
use of the Work, without the separate, express prior written
permission of the Original Author, Licensor and/or Attribution
Parties.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor
reserves the exclusive right to collect such royalties for any
exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme can be waived, the Licensor reserves
the exclusive right to collect such royalties for any exercise by
You of the rights granted under this License if Your exercise of
such rights is for a purpose or use which is otherwise than
noncommercial as permitted under Section 4(c) and otherwise waives
the right to collect royalties through any statutory or compulsory
licensing scheme; and,
iii. Voluntary License Schemes. The Licensor reserves the right to
collect royalties, whether individually or, in the event that the
Licensor is a member of a collecting society that administers
voluntary licensing schemes, via that society, from any exercise
by You of the rights granted under this License that is for a
purpose or use which is otherwise than noncommercial as permitted
under Section 4(c).
f. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any
Adaptations or Collections, You must not distort, mutilate, modify or
take other derogatory action in relation to the Work which would be
prejudicial to the Original Author's honor or reputation. Licensor
agrees that in those jurisdictions (e.g. Japan), in which any exercise
of the right granted in Section 3(b) of this License (the right to
make Adaptations) would be deemed to be a distortion, mutilation,
modification or other derogatory action prejudicial to the Original
Author's honor and reputation, the Licensor will waive or not assert,
as appropriate, this Section, to the fullest extent permitted by the
applicable national law, to enable You to reasonably exercise Your
right under Section 3(b) of this License (right to make Adaptations)
but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE
FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS
AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE
WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection,
the Licensor offers to the recipient a license to the Work on the same
terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same
terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for the Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
and the Universal Copyright Convention (as revised on July 24, 1971).
These rights and subject matter take effect in the relevant
jurisdiction in which the License terms are sought to be enforced
according to the corresponding provisions of the implementation of
those treaty provisions in the applicable national law. If the
standard suite of rights granted under applicable copyright law
includes additional rights not granted under this License, such
additional rights are deemed to be included in the License; this
License is not intended to restrict the license of any rights under
applicable law.
Creative Commons Notice
Creative Commons is not a party to this License, and makes no warranty
whatsoever in connection with the Work. Creative Commons will not be
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of this License.
Creative Commons may be contacted at https://creativecommons.org/.
-60
View File
@@ -1,60 +0,0 @@
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
"License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
to Distribute and Publicly Perform Adaptations.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).
4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.
You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.
If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
For the avoidance of doubt:
Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+359
View File
@@ -0,0 +1,359 @@
Creative Commons Legal Code
Attribution-ShareAlike 3.0 Unported
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation,
derivative work, arrangement of music or other alterations of a
literary or artistic work, or phonogram or performance and includes
cinematographic adaptations or any other form in which the Work may be
recast, transformed, or adapted including in any form recognizably
derived from the original, except that a work that constitutes a
Collection will not be considered an Adaptation for the purpose of
this License. For the avoidance of doubt, where the Work is a musical
work, performance or phonogram, the synchronization of the Work in
timed-relation with a moving image ("synching") will be considered an
Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed
in Section 1(f) below, which, by reason of the selection and
arrangement of their contents, constitute intellectual creations, in
which the Work is included in its entirety in unmodified form along
with one or more other contributions, each constituting separate and
independent works in themselves, which together are assembled into a
collective whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined below) for the purposes of this
License.
c. "Creative Commons Compatible License" means a license that is listed
at https://creativecommons.org/compatiblelicenses that has been
approved by Creative Commons as being essentially equivalent to this
License, including, at a minimum, because that license: (i) contains
terms that have the same purpose, meaning and effect as the License
Elements of this License; and, (ii) explicitly permits the relicensing
of adaptations of works made available under that license under this
License or a Creative Commons jurisdiction license with the same
License Elements as this License.
d. "Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or
other transfer of ownership.
e. "License Elements" means the following high-level license attributes
as selected by Licensor and indicated in the title of this License:
Attribution, ShareAlike.
f. "Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
g. "Original Author" means, in the case of a literary or artistic work,
the individual, individuals, entity or entities who created the Work
or if no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
h. "Work" means the literary and/or artistic work offered under the terms
of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book,
pamphlet and other writing; a lecture, address, sermon or other work
of the same nature; a dramatic or dramatico-musical work; a
choreographic work or entertainment in dumb show; a musical
composition with or without words; a cinematographic work to which are
assimilated works expressed by a process analogous to cinematography;
a work of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of applied
art; an illustration, map, plan, sketch or three-dimensional work
relative to geography, topography, architecture or science; a
performance; a broadcast; a phonogram; a compilation of data to the
extent it is protected as a copyrightable work; or a work performed by
a variety or circus performer to the extent it is not otherwise
considered a literary or artistic work.
i. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
j. "Publicly Perform" means to perform public recitations of the Work and
to communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a
place individually chosen by them; to perform the Work to the public
by any means or process and the communication to the public of the
performances of the Work, including by public digital performance; to
broadcast and rebroadcast the Work by any means including signs,
sounds or images.
k. "Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to
clearly label, demarcate or otherwise identify that changes were made
to the original Work. For example, a translation could be marked "The
original work was translated from English to Spanish," or a
modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated
in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor
reserves the exclusive right to collect such royalties for any
exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme can be waived, the Licensor waives the
exclusive right to collect such royalties for any exercise by You
of the rights granted under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right to
collect royalties, whether individually or, in the event that the
Licensor is a member of a collecting society that administers
voluntary licensing schemes, via that society, from any exercise
by You of the rights granted under this License.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights in
other media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved.
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms
of this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms
on the Work that restrict the terms of this License or the ability of
the recipient of the Work to exercise the rights granted to that
recipient under the terms of the License. You may not sublicense the
Work. You must keep intact all notices that refer to this License and
to the disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of the
Work from You to exercise the rights granted to that recipient under
the terms of the License. This Section 4(a) applies to the Work as
incorporated in a Collection, but this does not require the Collection
apart from the Work itself to be made subject to the terms of this
License. If You create a Collection, upon notice from any Licensor You
must, to the extent practicable, remove from the Collection any credit
as required by Section 4(c), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the extent
practicable, remove from the Adaptation any credit as required by
Section 4(c), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under the
terms of: (i) this License; (ii) a later version of this License with
the same License Elements as this License; (iii) a Creative Commons
jurisdiction license (either this or a later license version) that
contains the same License Elements as this License (e.g.,
Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible
License. If you license the Adaptation under one of the licenses
mentioned in (iv), you must comply with the terms of that license. If
you license the Adaptation under the terms of any of the licenses
mentioned in (i), (ii) or (iii) (the "Applicable License"), you must
comply with the terms of the Applicable License generally and the
following provisions: (I) You must include a copy of, or the URI for,
the Applicable License with every copy of each Adaptation You
Distribute or Publicly Perform; (II) You may not offer or impose any
terms on the Adaptation that restrict the terms of the Applicable
License or the ability of the recipient of the Adaptation to exercise
the rights granted to that recipient under the terms of the Applicable
License; (III) You must keep intact all notices that refer to the
Applicable License and to the disclaimer of warranties with every copy
of the Work as included in the Adaptation You Distribute or Publicly
Perform; (IV) when You Distribute or Publicly Perform the Adaptation,
You may not impose any effective technological measures on the
Adaptation that restrict the ability of a recipient of the Adaptation
from You to exercise the rights granted to that recipient under the
terms of the Applicable License. This Section 4(b) applies to the
Adaptation as incorporated in a Collection, but this does not require
the Collection apart from the Adaptation itself to be made subject to
the terms of the Applicable License.
c. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party
or parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party
or parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does not
refer to the copyright notice or licensing information for the Work;
and (iv) , consistent with Ssection 3(b), in the case of an
Adaptation, a credit identifying the use of the Work in the Adaptation
(e.g., "French translation of the Work by Original Author," or
"Screenplay based on original Work by Original Author"). The credit
required by this Section 4(c) may be implemented in any reasonable
manner; provided, however, that in the case of a Adaptation or
Collection, at a minimum such credit will appear, if a credit for all
contributing authors of the Adaptation or Collection appears, then as
part of these credits and in a manner at least as prominent as the
credits for the other contributing authors. For the avoidance of
doubt, You may only use the credit required by this Section for the
purpose of attribution in the manner set out above and, by exercising
Your rights under this License, You may not implicitly or explicitly
assert or imply any connection with, sponsorship or endorsement by the
Original Author, Licensor and/or Attribution Parties, as appropriate,
of You or Your use of the Work, without the separate, express prior
written permission of the Original Author, Licensor and/or Attribution
Parties.
d. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any
Adaptations or Collections, You must not distort, mutilate, modify or
take other derogatory action in relation to the Work which would be
prejudicial to the Original Author's honor or reputation. Licensor
agrees that in those jurisdictions (e.g. Japan), in which any exercise
of the right granted in Section 3(b) of this License (the right to
make Adaptations) would be deemed to be a distortion, mutilation,
modification or other derogatory action prejudicial to the Original
Author's honor and reputation, the Licensor will waive or not assert,
as appropriate, this Section, to the fullest extent permitted by the
applicable national law, to enable You to reasonably exercise Your
right under Section 3(b) of this License (right to make Adaptations)
but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection,
the Licensor offers to the recipient a license to the Work on the same
terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same
terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for the Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
and the Universal Copyright Convention (as revised on July 24, 1971).
These rights and subject matter take effect in the relevant
jurisdiction in which the License terms are sought to be enforced
according to the corresponding provisions of the implementation of
those treaty provisions in the applicable national law. If the
standard suite of rights granted under applicable copyright law
includes additional rights not granted under this License, such
additional rights are deemed to be included in the License; this
License is not intended to restrict the license of any rights under
applicable law.
Creative Commons Notice
Creative Commons is not a party to this License, and makes no warranty
whatsoever in connection with the Work. Creative Commons will not be
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of the License.
Creative Commons may be contacted at https://creativecommons.org/.
-4
View File
@@ -1,7 +1,3 @@
Note: New submissions as of 5th January 2015 now fall under AGPL v3, prior code is
still licensed GPL v3, see README.md for details.
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
+133 -38
View File
@@ -1,51 +1,146 @@
# Paradise
[![CI](https://github.com/ParadiseSS13/Paradise/workflows/CI/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3ACI)
[![Render Nanomaps](https://github.com/ParadiseSS13/Paradise/workflows/Render%20Nanomaps/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3A%22Render+Nanomaps%22)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue")
[![Percentage of issues still open](http://isitmaintained.com/badge/open/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open")
<a href="#"><img src=".github/assets/paradise.png" alt="Paradise Station"></a>
[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com)
[![forthebadge](http://forthebadge.com/images/badges/contains-technical-debt.svg)](http://forthebadge.com)
[![forthebadge](http://forthebadge.com/images/badges/fuck-it-ship-it.svg)](http://forthebadge.com)
## <p align="center">Welcome to the main repository for the Paradise Station version of [Space Station 13](https://spacestation13.com/).</p>
# Useful Links
<p align="center">
<a href="https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3ACI"><img src="https://github.com/ParadiseSS13/Paradise/workflows/CI/badge.svg" alt="CI"></a>
<a href="https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3A%22Render+Nanomaps%22"><img src="https://github.com/ParadiseSS13/Paradise/workflows/Render%20Nanomaps/badge.svg" alt="Render Nanomaps"></a>
<a href="http://isitmaintained.com/project/paradisess13/paradise"><img src="http://isitmaintained.com/badge/resolution/paradisess13/paradise.svg" alt="Average time to resolve an issue"></a>
<a href="http://isitmaintained.com/project/paradisess13/paradise"><img src="http://isitmaintained.com/badge/open/paradisess13/paradise.svg" alt="Percentage of issues still open"></a>
</p>
- [Discord](https://discordapp.com/invite/YJDsXFE)
- [Documentation](https://codedocs.paradisestation.org)
- [Website](https://www.paradisestation.org/)
# Useful Documents
<p align="center">
<a href="https://xkcd.com/371/"><img src=".github/assets/compiles-sometimes.svg" alt="Compiles sometimes"></a>
<a href="https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a/"><img src=".github/assets/made-in-byond.gif" alt="Made in BYOND"></a>
<a href="https://xkcd.com/1811/"><img src=".github/assets/made-with-crayons.svg" alt="Made with crayons"></a>
</p>
- [Autodocumentation Guide](.github/AUTODOC_GUIDE.md)
- [Code of Conduct](./CODE_OF_CONDUCT.md)
- [Contribution Guide](.github/CONTRIBUTING.md)
- [Installation Guide](.github/DOWNLOADING.md)
<p align="center">
<a href="https://discord.gg/paradisess13">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/discord-light.png">
<source media="(prefers-color-scheme: light)" srcset=".github/assets/discord-dark.png">
<img width="15%" alt="Discord" hspace="3%" src=".github/assets/discord-dark.png">
</picture>
</a>
<a href="https://codedocs.paradisestation.org">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/book-light.png">
<source media="(prefers-color-scheme: light)" srcset=".github/assets/book-dark.png">
<img alt="Code docs" width="15%" hspace="3%" src=".github/assets/book-dark.png">
</picture>
</a>
<a href="https://www.paradisestation.org/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/web-light.png">
<source media="(prefers-color-scheme: light)" srcset=".github/assets/web-dark.png">
<img width="15%" alt="Website" hspace="3%" src=".github/assets/web-dark.png">
</picture>
</a>
<a href="https://paradisestation.org/wiki">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/wiki-light.png">
<source media="(prefers-color-scheme: light)" srcset=".github/assets/wiki-dark.png">
<img width="15%" alt="Game Wiki" hspace="3%" src=".github/assets/wiki-dark.png">
</picture>
</a>
</p>
> [!TIP]
> Want to contribute for the first time but unsure where to start?<br>
> Join our Discord and check out the [#coding_chat](https://discord.com/channels/145533722026967040/145700319819464704) channel for helpful links and advice!<br>
> Alternatively, have a look at our community maintained [Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing)
# Useful Documents and Links
- ### [Dream Maker (DM) Reference](https://www.byond.com/docs/ref/)
This reference site by the creators of BYOND details information on the DM language, the syntax used, functionality of native procs, and a lot more. This is always useful to have on hand when contributing.
- ### [Autodocumentation Guide](.github/AUTODOC_GUIDE.md)
This guide shows you how to leave code comments that comply with "autodocumentation", a system designed to make everyone's lives easier when reading or reviewing code!
- ### [Code of Conduct](./CODE_OF_CONDUCT.md)
All contributors are expected to read our Code of Conduct before they take part in our community.
- ### [Contribution Guide](.github/CONTRIBUTING.md)
Not sure how to take part and contribute? This guide gives an overview of how to make comments, pull requests, and open issues.
This guide also sets out our code standards that we expect all submitted code to adhere to.
- ### [Community Maintained Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing)
This community maintained guide covers how to set yourself up for success when attempting to contribute to Paracode.
> [!IMPORTANT]
> Paradise does not provide precompiled binaries, requiring you to build from source to host a local server.<br>
> Building Paradise is quick and simple, all you need to install is [BYOND](https://www.byond.com/download/).<br>
> You can learn more in our [Installation Guide](.github/DOWNLOADING.md).
- ### [Paradise Station Development Team Structure](https://www.paradisestation.org/dev/policy/)
A detailed policy document that governs how the Paradise Station Development Team functions, from the various roles that help keep things running to the process each PR goes through depending on the content.
- ### [TGUI Tutorial](tgui/docs/tutorial-and-examples.md)
TGUI is a user interface framework, built on InfernoJS, for all new player-facing UIs.
TGUI is very different to most other BYOND user interfaces as it is written entirely in JavaScript with some data passed to and from DreamMaker. If you are looking to get to grips with TGUI, this tutorial is a good starting point. Additional information can also be found [here.](tgui)
- ### [Mapping Guide](https://hackmd.io/@tgstation/SyVma0dS5#san7890s-A-Z-Guide-to-Mapping)
Mapping for Paradise station can be daunting to new contributors. Here's a comprehensive quick-start put together by a community member that takes you from A-Z.
---
### LICENSE
# LICENSES
Paradise is licensed under the GNU Affero General Public License version 3.
As of 5th January 2015 any new contributions are licensed under the AGPL as well,
if you wish to submit code under the GPL v3 then commits and files must be marked as such
in comments. If you wish to use our code in a closed source manner you may use anything
before commit 445615b8439bf606ff204a42c8e7b6b69d983255,
which is licensed under GPL v3.
The major change here is that if you host a server using any code licensed under AGPL you
are required to provide full source code for your servers users as well,
including addons and modifications you have made.
> [!CAUTION]
> If you wish to use our code in a closed source manner (i.e. not make it available to the public and/or those who connect to services you offer using this code) you must **only** use code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b), which is licenced under GPLv3.
See [this](https://www.gnu.org/licenses/why-affero-gpl.html) for more information.
### Click each banner for further information
Any files located in the
`Paradise/goon`,
`Paradise/icons/goonstation`, or
`Paradise/sound/goonstation`
directories, or any subdirectories of mentioned directories are licensed under the
Creative Commons 3.0 BY-NC-SA license
(https://creativecommons.org/licenses/by-nc-sa/3.0)
---
All other assets including icons and sound files are licensed under the
Creative Commons 3.0 BY-SA license (https://creativecommons.org/licenses/by-sa/3.0/),
unless otherwise indicated.
<details>
<summary><a href="#"><img src="https://img.shields.io/badge/licence-AGPL_3-red?style=for-the-badge" alt="AGPLv3 license"></a></summary>
>All code after and including commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GNU Affero General Public License version 3](https://www.gnu.org/licenses/agpl-3.0.en.html) unless otherwise specified within the folder or file.
</details>
<details>
<summary><a href="#"><img src="https://img.shields.io/badge/licence-GPL_3-orange?style=for-the-badge" alt="GPLv3 license"></a></summary>
>All code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GPL General Public License version 3](https://www.gnu.org/licenses/gpl-3.0.en.html)
</details>
<details>
<summary><a href="#"><img src="https://img.shields.io/badge/licence-MIT-green?style=for-the-badge" alt="MIT license"></a></summary>
>Some files are licenced under the [MIT license](https://opensource.org/license/MIT), these files will clearly specify this licence at the head of each file.
</details>
<details>
<summary><a href="#"><img src="https://img.shields.io/badge/licence-CC_3.0_BY--NC--SA-blue?style=for-the-badge" alt="Creative Commons 3.0 BY-NC-SA" align="centre"></a></summary>
>Any files with the ancestor directories [`Paradise/icons/goonstation`](icons/goonstation) or [`Paradise/sound/goonstation`](sound/goonstation) are licensed under the [Creative Commons 3.0 BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/3.0).
>
>Further files or folders may also fall under this licence, and any such instances will be specified within the folder or file.
</details>
<details>
<summary><a href="#"><img src="https://img.shields.io/badge/licence-CC_3.0_BY--SA-lightblue?style=for-the-badge" alt="Creative Commons 3.0 BY-SA"></a></summary>
>All other non-code assets, including icons and sound files, are licensed under the [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/), unless otherwise specified within the folder or file.
</details>
+1
View File
@@ -27,6 +27,7 @@ CREATE TABLE `characters` (
`real_name` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL,
`name_is_always_random` tinyint(1) NOT NULL,
`gender` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`age` smallint(4) NOT NULL,
`species` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
`language` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
+1 -1
View File
@@ -2,4 +2,4 @@
#Add a choice for what type of brain borgs want to have
ALTER TABLE `characters`
ADD COLUMN `cyborg_brain_type` VARCHAR(11) NOT NULL DEFAULT 'MMI' AFTER `height`;
ADD COLUMN `cyborg_brain_type` ENUM('MMI', 'Robobrain', 'Positronic') NOT NULL DEFAULT 'MMI' AFTER `height`;
+9
View File
@@ -0,0 +1,9 @@
# Updating DB from 54-55 - lewc
# Adds a new `body_type` (gender sprite) column to the `characters` table
# Add the new column next to the existing `gender` one
ALTER TABLE `characters`
ADD COLUMN `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL AFTER `gender`;
# Set the `body_type` column to whatever's already in `gender`, so that it doesn't change existing characters
UPDATE `characters` SET `body_type` = `gender` WHERE `gender` IS NOT NULL
@@ -126,6 +126,11 @@
/obj/structure/bed,
/turf/simulated/floor/mineral/titanium/purple,
/area/ruin/space/powered)
"Z" = (
/obj/structure/table/wood,
/obj/item/blank_tarot_card,
/turf/simulated/floor/mineral/titanium/purple,
/area/ruin/space/powered)
(1,1,1) = {"
a
@@ -277,7 +282,7 @@ b
j
r
w
n
Z
j
b
a
@@ -551,7 +551,6 @@
info = "Nothing of interest to report.";
name = "november report"
},
/obj/item/pen,
/obj/item/tape,
/obj/item/radio/intercom{
freerange = 1;
@@ -559,7 +558,7 @@
name = "intercom"
},
/obj/item/paper_bin,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/dark,
/area/ruin/space/syndicate_listening_station)
@@ -523,7 +523,7 @@
/obj/item/paper_bin{
pixel_x = -6
},
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/mineral/plastitanium,
/area/ruin/space/mech_transport)
"MA" = (
@@ -5200,6 +5200,7 @@
},
/obj/item/coin/antagtoken/syndicate,
/obj/structure/table,
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/plating/asteroid/ancient,
/area/ruin/space/moonbase19)
"rk" = (
@@ -259,7 +259,6 @@
/area/ruin/space/onehalf/hallway)
"aM" = (
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment,
/obj/machinery/door/poddoor{
id_tag = "bayint1";
name = "mining drone bay blast door"
@@ -636,9 +635,6 @@
/area/ruin/space/onehalf/hallway)
"bA" = (
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -653,15 +649,6 @@
},
/turf/simulated/floor/plasteel,
/area/ruin/space/onehalf/drone_bay)
"bC" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/simulated/floor/plasteel,
/area/ruin/space/onehalf/drone_bay)
"bD" = (
/obj/structure/disposalpipe/junction{
dir = 8
@@ -1643,7 +1630,7 @@ aD
aq
aX
bm
bC
bn
bT
aa
cn
@@ -98,11 +98,11 @@
pixel_x = 4
},
/obj/item/paper/syndicate_druglab,
/obj/item/pen,
/obj/item/flashlight/lamp/green/off{
pixel_y = 12;
pixel_x = -6
},
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/carpet/black,
/area/ruin/space/syndicate_druglab)
"qa" = (
@@ -2985,7 +2985,7 @@
dir = 8
},
/obj/item/hand_labeler,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkgreen"
@@ -3423,7 +3423,7 @@
"th" = (
/obj/structure/table,
/obj/item/paper_bin,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/obj/structure/extinguisher_cabinet{
name = "north bump";
pixel_y = 30
@@ -3760,7 +3760,7 @@
/area/ruin/unpowered/syndicate_space_base/service)
"vd" = (
/obj/structure/table,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/obj/item/paper_bin,
/obj/item/stamp/syndicate,
/obj/machinery/light_switch{
@@ -8462,7 +8462,7 @@
dir = 8
},
/obj/item/hand_labeler,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "darkgreen"
@@ -498,6 +498,7 @@
/obj/machinery/light/small{
dir = 4
},
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/engine,
/area/ruin/space/unpowered)
"tX" = (
@@ -665,7 +665,7 @@
"bV" = (
/obj/structure/table,
/obj/item/folder/syndicate/yellow,
/obj/item/pen,
/obj/item/pen/multi/syndicate,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -3133,10 +3133,6 @@
icon_state = "stage_stairs"
},
/area/ruin/space/derelict/crew_quarters)
"hF" = (
/obj/structure/sign/barsign,
/turf/simulated/wall/mineral/titanium/nodecon,
/area/ruin/space/derelict/crew_quarters)
"hH" = (
/obj/machinery/door/airlock/public/glass{
name = "Eastern Annex"
@@ -7572,6 +7568,13 @@
},
/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
/area/ruin/space/derelict/crew_quarters)
"Qq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/plasteel/dark,
/area/ruin/space/derelict/crew_quarters)
"QN" = (
/turf/simulated/wall/mineral/titanium/nodecon/nosmooth,
/area/ruin/space/derelict/arrival)
@@ -13520,8 +13523,8 @@ gn
gG
gG
gG
hF
hT
aV
Qq
in
iK
je
@@ -167,6 +167,7 @@
/area/ruin/space/unpowered)
"aF" = (
/obj/structure/table/wood,
/obj/item/blank_tarot_card,
/turf/simulated/floor/wood{
icon_state = "wood-broken6"
},
+81 -67
View File
@@ -234,6 +234,10 @@
icon_state = "red"
},
/area/holodeck/source_emptycourt)
"aS" = (
/obj/effect/landmark/spawner/tradergearmajor,
/turf/simulated/floor/mineral/titanium,
/area/shuttle/trade/sol)
"aT" = (
/obj/structure/sign/poster/official/random,
/turf/simulated/wall/indestructible/riveted,
@@ -2878,12 +2882,12 @@
"kf" = (
/obj/docking_port/stationary{
area_type = /area/syndicate_mothership;
dwidth = 15;
dwidth = 16;
height = 21;
id = "emergency_syndicate";
name = "404 Not Found";
turf_type = /turf/simulated/floor/plating/asteroid/snow/airless;
width = 33
width = 41
},
/turf/simulated/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
@@ -3174,6 +3178,15 @@
},
/turf/simulated/floor/plasteel/dark,
/area/syndicate_mothership)
"lc" = (
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "green"
},
/area/centcom/evac)
"le" = (
/obj/effect/landmark/spawner/syndieprisonwarp,
/turf/simulated/floor/plasteel/dark,
@@ -4489,11 +4502,11 @@
"pf" = (
/obj/docking_port/stationary/transit{
dir = 4;
dwidth = 15;
dwidth = 16;
height = 21;
id = "emergency_transit";
name = "emergency in transit";
width = 33
width = 41
},
/turf/space/transit,
/area/space/centcomm)
@@ -5371,10 +5384,6 @@
/obj/effect/landmark/spawner/syndie,
/turf/simulated/floor/wood,
/area/syndicate_mothership)
"sd" = (
/obj/structure/sign/barsign,
/turf/simulated/wall/indestructible/riveted,
/area/ghost_bar)
"se" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
@@ -5804,6 +5813,12 @@
},
/turf/simulated/floor/mineral/plastitanium/red,
/area/shuttle/syndicate)
"tP" = (
/obj/machinery/barsign/ghost_bar{
pixel_y = 32
},
/turf/simulated/floor/wood,
/area/ghost_bar)
"tQ" = (
/obj/machinery/mech_bay_recharge_port/upgraded/unsimulated{
dir = 8;
@@ -6181,7 +6196,7 @@
/turf/simulated/floor/carpet/green,
/area/ghost_bar)
"vf" = (
/obj/effect/landmark/spawner/soltrader,
/obj/effect/landmark/spawner/trader,
/obj/structure/chair/comfy/brown,
/turf/simulated/floor/wood,
/area/trader_station/sol)
@@ -6281,7 +6296,7 @@
/area/centcom/control)
"vu" = (
/obj/structure/railing,
/obj/effect/landmark/spawner/soltrader,
/obj/effect/landmark/spawner/trader,
/obj/structure/chair/comfy/brown{
dir = 4
},
@@ -6331,7 +6346,7 @@
/area/trader_station/sol)
"vD" = (
/obj/structure/railing,
/obj/effect/landmark/spawner/soltrader,
/obj/effect/landmark/spawner/trader,
/obj/structure/chair/comfy/brown{
dir = 8
},
@@ -7981,7 +7996,7 @@
/turf/simulated/wall/indestructible/syndicate,
/area/admin)
"Cv" = (
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = -32
},
/obj/machinery/icemachine,
@@ -9234,7 +9249,7 @@
/area/centcom/specops)
"GT" = (
/obj/structure/chair,
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = 32
},
/obj/effect/landmark/spawner/tdomeobserve,
@@ -11981,6 +11996,10 @@
/obj/item/lighter,
/turf/simulated/floor/plasteel/dark,
/area/centcom/specops)
"PT" = (
/obj/effect/landmark/spawner/tradergearminor,
/turf/simulated/floor/mineral/titanium,
/area/shuttle/trade/sol)
"PU" = (
/obj/effect/turf_decal/delivery,
/turf/simulated/floor/plasteel/dark,
@@ -12184,11 +12203,11 @@
},
/obj/docking_port/stationary{
dir = 4;
dwidth = 15;
dwidth = 16;
height = 21;
id = "emergency_away";
name = "emergency centcom";
width = 33
width = 41
},
/turf/simulated/floor/plating,
/area/shuttle/escape)
@@ -12922,7 +12941,7 @@
pixel_y = 5
},
/obj/structure/table/wood,
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = -32
},
/turf/simulated/floor/plasteel{
@@ -13923,11 +13942,6 @@
},
/turf/simulated/wall/indestructible/fakeglass,
/area/centcom/specops)
"Xi" = (
/obj/effect/spawner/window,
/obj/structure/sign/barsign,
/turf/simulated/floor/plating,
/area/centcom/evac)
"Xj" = (
/turf/simulated/floor/transparent/glass,
/area/centcom/specops)
@@ -46015,8 +46029,8 @@ Ng
Ng
So
Vs
Xi
Xx
Qe
lc
YO
ZZ
gI
@@ -48808,9 +48822,9 @@ vG
of
oI
pc
rK
PT
pc
uP
aS
pc
vY
of
@@ -49322,9 +49336,9 @@ vG
of
oS
pc
pa
rK
pc
pa
uP
pc
wa
of
@@ -49336,11 +49350,11 @@ aN
aN
aN
aN
aN
Db
aN
aN
aN
aN
Db
aN
aN
@@ -49375,10 +49389,10 @@ Db
aN
aN
aN
Db
aN
aN
aN
aN
Db
aN
aN
aN
@@ -50621,12 +50635,12 @@ aN
aN
aN
aN
aN
Db
aN
aN
aN
aN
aN
od
od
vy
@@ -50656,6 +50670,13 @@ XB
od
ux
ux
aN
aN
aN
aN
aN
aN
aN
Db
aN
aN
@@ -50746,13 +50767,6 @@ aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
"}
(141,1,1) = {"
aN
@@ -51906,12 +51920,12 @@ aN
aN
aN
aN
aN
Db
aN
aN
aN
aN
aN
vy
Ez
Fq
@@ -51941,6 +51955,13 @@ Pb
vy
Iv
Zp
aN
aN
aN
aN
aN
aN
aN
Db
aN
aN
@@ -52031,13 +52052,6 @@ aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
"}
(146,1,1) = {"
aN
@@ -52420,12 +52434,12 @@ aN
aN
aN
aN
aN
Db
aN
aN
aN
aN
aN
vy
EE
Fo
@@ -52455,6 +52469,13 @@ JC
vy
Iv
Zp
aN
aN
aN
aN
aN
aN
aN
Db
aN
aN
@@ -52545,13 +52566,6 @@ aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
"}
(148,1,1) = {"
aN
@@ -53705,7 +53719,6 @@ aN
aN
aN
aN
aN
Db
aN
aN
@@ -53716,6 +53729,7 @@ aN
aN
aN
aN
aN
od
JC
Mc
@@ -53740,6 +53754,13 @@ qF
od
Iv
Zp
aN
aN
aN
aN
aN
aN
aN
Db
aN
aN
@@ -53830,13 +53851,6 @@ aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
aN
"}
(153,1,1) = {"
aN
@@ -54990,11 +55004,11 @@ aN
aN
aN
aN
aN
Db
aN
aN
aN
aN
Db
aN
aN
@@ -55029,10 +55043,10 @@ Db
aN
aN
aN
Db
aN
aN
aN
aN
Db
aN
aN
aN
@@ -73022,8 +73036,8 @@ vd
Ml
vd
xy
sd
Jy
Me
tP
Jy
Jy
Jy
File diff suppressed because it is too large Load Diff
+78 -63
View File
@@ -22947,11 +22947,11 @@
"brK" = (
/obj/docking_port/stationary{
dir = 4;
dwidth = 15;
dwidth = 16;
height = 21;
id = "emergency_home";
name = "emergency evac bay";
width = 33
width = 41
},
/turf/space,
/area/space)
@@ -23086,7 +23086,7 @@
/area/station/maintenance/port)
"bsg" = (
/obj/structure/table,
/obj/item/clothing/head/soft/grey{
/obj/item/clothing/head/soft{
pixel_x = -2;
pixel_y = 3
},
@@ -24963,10 +24963,6 @@
"bzd" = (
/turf/simulated/floor/plasteel/goonplaque/memorial,
/area/station/hallway/secondary/exit)
"bze" = (
/obj/structure/sign/barsign,
/turf/simulated/wall,
/area/station/service/bar)
"bzf" = (
/turf/simulated/floor/plasteel{
dir = 1;
@@ -40410,6 +40406,7 @@
d2 = 4;
icon_state = "1-4"
},
/obj/structure/closet/emcloset,
/turf/simulated/floor/plating/airless,
/area/station/science/toxins/test)
"cDL" = (
@@ -52972,7 +52969,6 @@
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment,
/obj/structure/sign/securearea{
pixel_x = -32
},
@@ -63680,6 +63676,12 @@
},
/turf/simulated/floor/engine,
/area/station/science/xenobiology)
"iYj" = (
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/plasteel,
/area/station/hallway/primary/starboard/west)
"iYo" = (
/obj/item/taperecorder,
/obj/structure/table,
@@ -67423,13 +67425,6 @@
icon_state = "darkyellow"
},
/area/station/science/robotics/chargebay)
"kOa" = (
/obj/structure/closet/emcloset,
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating/airless,
/area/station/science/toxins/test)
"kOt" = (
/obj/machinery/hologram/holopad,
/turf/simulated/floor/plasteel,
@@ -71305,9 +71300,9 @@
"mIA" = (
/obj/structure/table,
/obj/item/stamp/granted,
/obj/item/clothing/head/soft,
/obj/item/clothing/head/soft/cargo,
/obj/item/hand_labeler,
/obj/item/clothing/head/soft,
/obj/item/clothing/head/soft/cargo,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "brown"
@@ -72200,6 +72195,15 @@
icon_state = "whitepurple"
},
/area/station/science/toxins/mixing)
"nhM" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/light{
dir = 8
},
/turf/simulated/floor/plasteel/airless,
/area/station/science/toxins/test)
"nhZ" = (
/obj/structure/cable{
d2 = 4;
@@ -74887,7 +74891,6 @@
/area/station/maintenance/apmaint)
"owP" = (
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating/airless,
/area/station/maintenance/asmaint)
"oxe" = (
@@ -87545,6 +87548,11 @@
},
/turf/simulated/floor/wood,
/area/station/security/permabrig)
"uGP" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plasteel/airless,
/area/station/science/toxins/test)
"uHC" = (
/obj/machinery/computer/communications{
dir = 4
@@ -93748,6 +93756,13 @@
},
/turf/simulated/floor/plating,
/area/station/maintenance/apmaint)
"xQI" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/light{
dir = 8
},
/turf/simulated/floor/plasteel/airless,
/area/station/science/toxins/test)
"xQL" = (
/obj/structure/table,
/obj/item/storage/toolbox/mechanical,
@@ -130556,8 +130571,8 @@ bmq
bmq
bmq
bzo
bze
bAk
aUS
iYj
bHy
bDb
bEy
@@ -152679,9 +152694,9 @@ aaa
aaa
aaa
aaa
doE
doE
doE
aaa
aaa
aaa
aaa
aaa
aab
@@ -152934,15 +152949,15 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aab
gnU
ldS
clB
cnk
cid
cie
cie
cie
cij
cvs
cie
cie
@@ -153191,18 +153206,18 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aab
aab
ldS
cjZ
cjZ
cjZ
cie
cie
ckb
cdK
xQI
cjZ
udq
ckb
nhM
cie
cie
cie
clA
@@ -153448,19 +153463,19 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aab
ldS
cjZ
cjZ
cjZ
clB
ckb
ckb
aab
cie
cie
cdK
cjZ
udq
ckb
ckb
cie
cie
jgm
cjZ
@@ -153705,13 +153720,13 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aab
aab
ldS
clA
kOa
jgm
cie
ckb
cie
ckb
cdK
cjZ
@@ -153963,9 +153978,9 @@ aaa
aaa
aaa
aaa
cid
cid
cie
aaa
aab
aab
cie
cie
ckb
@@ -154220,13 +154235,13 @@ aaa
aaa
aaa
aaa
cid
aab
aab
cie
cie
ckb
ckb
ckb
ckb
cdK
cjZ
udq
@@ -154476,10 +154491,10 @@ aaa
aaa
aaa
aaa
aaa
cij
aab
aab
cie
cie
ckb
ckb
ckb
ckb
@@ -154733,9 +154748,9 @@ aaa
aaa
aaa
aaa
aaa
aab
cie
cie
ckb
ckb
ckb
ckb
@@ -155249,7 +155264,7 @@ aaa
aaa
aab
cie
ckb
uGP
ckb
ckb
ckb
File diff suppressed because it is too large Load Diff
+47 -61
View File
@@ -2819,7 +2819,7 @@
/area/station/maintenance/fore)
"aqv" = (
/obj/structure/table/wood,
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = 32
},
/obj/item/wrench,
@@ -4880,7 +4880,7 @@
/turf/simulated/floor/engine,
/area/station/engineering/controlroom)
"avL" = (
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/plasteel{
@@ -9070,7 +9070,7 @@
/area/station/service/bar)
"aGA" = (
/obj/structure/table/wood,
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = 32
},
/obj/machinery/chem_dispenser/soda{
@@ -10845,7 +10845,6 @@
/area/station/maintenance/incinerator)
"aLk" = (
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -11828,7 +11827,6 @@
},
/area/station/service/bar)
"aOd" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/visible{
dir = 10
},
@@ -54205,7 +54203,7 @@
/obj/machinery/light{
dir = 1
},
/obj/structure/sign/barsign{
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/plating,
@@ -62697,17 +62695,6 @@
},
/turf/simulated/floor/carpet/blue,
/area/station/command/office/blueshield)
"dNS" = (
/obj/docking_port/stationary{
dir = 4;
dwidth = 15;
height = 21;
id = "emergency_home";
name = "emergency evac bay";
width = 33
},
/turf/space,
/area/space)
"dNZ" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
@@ -64687,12 +64674,6 @@
icon_state = "neutralfull"
},
/area/station/hallway/primary/central)
"dUY" = (
/obj/machinery/light,
/obj/machinery/alarm/directional/south,
/obj/effect/turf_decal/stripes/line,
/turf/simulated/floor/plasteel,
/area/station/hallway/secondary/exit)
"dUZ" = (
/obj/machinery/light,
/obj/machinery/status_display{
@@ -66935,6 +66916,17 @@
icon_state = "vault"
},
/area/station/turret_protected/ai)
"eKm" = (
/obj/docking_port/stationary{
dir = 4;
dwidth = 16;
height = 21;
id = "emergency_home";
name = "emergency evac bay";
width = 41
},
/turf/space,
/area/space)
"eKu" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -70042,9 +70034,6 @@
/area/station/command/office/hop)
"gFa" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment{
dir = 4
@@ -73775,10 +73764,6 @@
icon_state = "bar"
},
/area/station/service/kitchen)
"iVe" = (
/obj/effect/spawner/airlock,
/turf/simulated/wall,
/area/station/service/chapel/office)
"iVg" = (
/obj/machinery/economy/atm/directional/west,
/turf/simulated/floor/plasteel{
@@ -76873,6 +76858,10 @@
icon_state = "neutralfull"
},
/area/station/engineering/atmos)
"kQP" = (
/obj/effect/spawner/airlock,
/turf/simulated/wall,
/area/station/hallway/secondary/exit)
"kRp" = (
/obj/structure/cable{
d1 = 1;
@@ -82625,15 +82614,6 @@
},
/area/station/security/prison/cell_block)
"ont" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/light{
dir = 1
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -84289,6 +84269,12 @@
icon_state = "darkred"
},
/area/station/security/main)
"pib" = (
/obj/machinery/light,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/alarm/directional/south,
/turf/simulated/floor/plasteel,
/area/station/hallway/secondary/exit)
"pjk" = (
/turf/simulated/floor/engine,
/area/station/science/test_chamber)
@@ -136445,7 +136431,7 @@ dUQ
dYU
dIx
abj
aaa
abj
aaa
aaa
aaa
@@ -136700,7 +136686,8 @@ dIx
dIx
dIx
dIx
iVe
dIx
kQP
abj
aaa
aaa
@@ -136744,7 +136731,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(145,1,1) = {"
aaa
@@ -136945,6 +136931,7 @@ dLA
dMo
dKP
dKP
dKP
dOv
dPb
eBl
@@ -137001,7 +136988,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(146,1,1) = {"
aaa
@@ -137203,6 +137189,7 @@ sZI
dPM
dPM
dPM
dPM
rCw
dPM
dPM
@@ -137258,7 +137245,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(147,1,1) = {"
aaa
@@ -137460,6 +137446,7 @@ hVf
dKo
dKo
dKo
dKo
rvx
dKo
dKo
@@ -137515,7 +137502,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(148,1,1) = {"
aaa
@@ -137714,6 +137700,7 @@ cYk
cYk
cYk
dbR
cYk
dbV
ddw
dNa
@@ -137772,7 +137759,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(149,1,1) = {"
aaa
@@ -137971,6 +137957,7 @@ dKo
dKo
dKo
hVf
dKo
dNb
dNN
dOw
@@ -138029,7 +138016,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(150,1,1) = {"
aaa
@@ -138228,6 +138214,7 @@ dKo
gkk
dKo
hVf
dKo
dNc
dNO
dXF
@@ -138286,7 +138273,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(151,1,1) = {"
aaa
@@ -138485,6 +138471,7 @@ dKo
dKo
dKo
hVf
dKo
dNb
dNP
dOw
@@ -138543,7 +138530,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(152,1,1) = {"
aaa
@@ -138742,6 +138728,7 @@ dKp
dKp
dKp
dIh
dKo
dOu
dNQ
dOx
@@ -138755,7 +138742,7 @@ joI
dNc
dNQ
dOw
dUY
pib
dIH
abj
aaa
@@ -138800,7 +138787,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(153,1,1) = {"
aaa
@@ -138999,6 +138985,7 @@ wgY
rIb
rIb
pJE
dKo
dNb
bGr
dOw
@@ -139057,7 +139044,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(154,1,1) = {"
aaa
@@ -139259,6 +139245,7 @@ iFB
iqq
iqq
iqq
iqq
uFa
sbt
sDb
@@ -139282,7 +139269,6 @@ aaa
aaa
aaa
aaa
aaa
aaZ
aaa
aaa
@@ -139515,6 +139501,7 @@ nIs
ngE
kuJ
kuJ
kuJ
tJT
dXn
dXn
@@ -139571,7 +139558,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(156,1,1) = {"
aaa
@@ -139772,6 +139758,7 @@ dTJ
dMs
jac
jac
jac
vSW
scA
ajq
@@ -139828,7 +139815,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(157,1,1) = {"
aaa
@@ -140030,6 +140016,7 @@ dVp
dKp
dKp
dKp
dKp
pGr
rev
vJu
@@ -140085,7 +140072,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(158,1,1) = {"
aaa
@@ -140287,6 +140273,7 @@ ulH
dTy
dTy
dTy
dTy
rmq
msT
dKP
@@ -140342,7 +140329,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(159,1,1) = {"
aaa
@@ -140543,6 +140529,7 @@ kpd
dHO
evE
evE
evE
tJT
dKQ
jpk
@@ -140599,7 +140586,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(160,1,1) = {"
aaa
@@ -140800,6 +140786,7 @@ abj
abj
abj
abj
abj
pjC
dKP
pjC
@@ -140856,7 +140843,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(161,1,1) = {"
aaa
@@ -141057,6 +141043,7 @@ aaa
aaa
aaa
aaa
aaa
pjC
dKQ
pjC
@@ -141113,7 +141100,6 @@ aaa
aaa
aaa
aaa
aaa
"}
(162,1,1) = {"
aaa
@@ -141317,8 +141303,8 @@ aaa
aaa
aaa
aaa
dNS
aaa
eKm
aaa
aaa
aaa
+14 -24
View File
@@ -6218,10 +6218,6 @@
},
/turf/simulated/floor/plasteel,
/area/station/engineering/control)
"aHe" = (
/obj/structure/sign/barsign,
/turf/simulated/wall,
/area/station/service/bar)
"aHg" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -10928,7 +10924,7 @@
/area/station/public/locker)
"aVT" = (
/obj/structure/table,
/obj/item/clothing/head/soft/grey{
/obj/item/clothing/head/soft{
pixel_x = -2;
pixel_y = 3
},
@@ -42602,11 +42598,11 @@
"cZp" = (
/obj/docking_port/stationary{
dir = 2;
dwidth = 15;
dwidth = 16;
height = 21;
id = "emergency_home";
name = "emergency evac bay";
width = 33
width = 41
},
/turf/space,
/area/space)
@@ -71465,20 +71461,6 @@
/obj/effect/landmark/damageturf,
/turf/simulated/floor/plating,
/area/station/maintenance/apmaint)
"oDZ" = (
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/simulated/floor/plating,
/area/station/maintenance/port)
"oEe" = (
/obj/machinery/atmospherics/trinary/filter{
dir = 4;
@@ -86653,6 +86635,14 @@
},
/turf/simulated/floor/plating,
/area/station/maintenance/xenobio_south)
"uXN" = (
/obj/machinery/barsign{
pixel_y = -32
},
/turf/simulated/floor/plasteel{
icon_state = "redcorner"
},
/area/station/hallway/primary/starboard)
"uYf" = (
/obj/machinery/light{
dir = 8
@@ -115249,7 +115239,7 @@ nBj
cgt
cdT
wfa
oDZ
bqQ
cCj
cdT
kNJ
@@ -127048,8 +127038,8 @@ bjp
bez
vtx
boY
bqA
aHe
uXN
bsp
ded
bEv
bEv
+8 -6
View File
@@ -491,10 +491,6 @@
},
/turf/simulated/floor/beach/sand,
/area/ruin/powered/beach)
"Ds" = (
/obj/structure/sign/barsign,
/turf/simulated/wall/mineral/sandstone,
/area/ruin/powered/beach)
"Ec" = (
/obj/machinery/door/airlock/sandstone{
name = "Beach Access"
@@ -566,6 +562,12 @@
},
/turf/simulated/floor/pod,
/area/ruin/powered/beach)
"Yz" = (
/obj/machinery/barsign{
pixel_y = 32
},
/turf/simulated/floor/beach/sand,
/area/ruin/powered/beach)
(1,1,1) = {"
aa
@@ -1087,8 +1089,8 @@ aC
aC
aC
JF
Ds
bE
aj
Yz
bE
bE
bE
+3 -6
View File
@@ -47,7 +47,7 @@ GLOBAL_LIST(contractors)
/// Denotes that this power can not be obtained normally. Primarily used for base types such as [/datum/action/changeling/weapon].
#define CHANGELING_UNOBTAINABLE_POWER 3
#define CHANGELING_FAKEDEATH_TIME 50 SECONDS
#define CHANGELING_FAKEDEATH_TIME 50 SECONDS
#define CHANGELING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob
/**
@@ -62,9 +62,6 @@ GLOBAL_LIST(contractors)
*/
#define PULSEDEMON_SOURCE_DRAIN_INVALID (-1)
/proc/ischangeling(mob/M) // TODO: Someone please convert these to proper defines some day.
return M.mind?.has_antag_datum(/datum/antagonist/changeling)
#define IS_CHANGELING(mob) (isliving(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/changeling))
// Helper proc that determines if a mob is a mindslave.
/proc/ismindslave(mob/living/carbon/human/H)
return istype(H) && H.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE)
#define IS_MINDSLAVE(mob) (ishuman(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/mindslave, FALSE))
+4
View File
@@ -37,6 +37,10 @@
#define SLOT_HUD_COLLAR 23
#define SLOT_HUD_AMOUNT 23
// Boolean defines for hands
#define HAND_BOOL_RIGHT 0
#define HAND_BOOL_LEFT 1
// accessory slots
#define ACCESSORY_SLOT_DECOR 1
#define ACCESSORY_SLOT_UTILITY 2
+7
View File
@@ -157,3 +157,10 @@
#define STATUS_EFFECT_CONSTANT * 20
#define IS_HORIZONTAL(x) x.body_position
/// Compatible firemode is in the gun. Wait until it's held in the user hands.
#define AUTOFIRE_STAT_IDLE (1<<0)
/// Gun is active and in the user hands. Wait until user does a valid click.
#define AUTOFIRE_STAT_ALERT (1<<1)
/// Gun is shooting.
#define AUTOFIRE_STAT_FIRING (1<<2)
-4
View File
@@ -10,10 +10,6 @@
/// Every proc you pass to RegisterSignal must have this.
#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE)
/// Signifies that this proc is used to handle signals, but also sleeps.
/// Do not use this for new work.
#define SIGNAL_HANDLER_DOES_SLEEP
/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments
#define AddElement(arguments...) _AddElement(list(##arguments))
/// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments
+24 -4
View File
@@ -219,8 +219,17 @@
/////////////////
///from base of client/Click(): (atom/target, atom/location, control, params, mob/user)
// /client signals
/// from base of client/Click(): (atom/target, atom/location, control, params, mob/user)
#define COMSIG_CLIENT_CLICK "atom_client_click"
/// from base of client/MouseDown(): (/client, object, location, control, params)
#define COMSIG_CLIENT_MOUSEDOWN "client_mousedown"
/// from base of client/MouseUp(): (/client, object, location, control, params)
#define COMSIG_CLIENT_MOUSEUP "client_mouseup"
#define COMPONENT_CLIENT_MOUSEUP_INTERCEPT (1<<0)
/// from base of client/MouseUp(): (/client, object, location, control, params)
#define COMSIG_CLIENT_MOUSEDRAG "client_mousedrag"
///from base of area/Entered(): (/area)
#define COMSIG_ENTER_AREA "enter_area"
@@ -708,11 +717,16 @@
// /obj/item/gun signals
///called in /obj/item/gun/process_fire (user, target, params, zone_override)
/// called in /obj/item/gun/process_fire (user, target, params, zone_override)
#define COMSIG_MOB_FIRED_GUN "mob_fired_gun"
///called in /obj/item/gun/process_fire (user, target)
/// called in /obj/item/gun/process_fire (user, target)
#define COMSIG_GUN_FIRED "gun_fired"
/// called in /datum/component/automatic_fire/proc/on_mouse_down: (client/clicker, atom/target, turf/location, control, params)
#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown"
#define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0)
/// called in /datum/component/automatic_fire/proc/process_shot(): (atom/target, mob/living/shooter, allow_akimbo, params)
#define COMSIG_AUTOFIRE_SHOT "autofire_shot"
#define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0)
// /obj/item/grenade signals
@@ -1044,3 +1058,9 @@
// Sent when a mob spawner is attacked directly or via projectile.
#define COMSIG_SPAWNER_SET_TARGET "spawner_set_target"
/// Used by admin-tooling to remove radiation
#define COMSIG_ADMIN_DECONTAMINATE "admin_decontaminate"
/// Sent when bodies transfer between shades/shards and constructs
#define COMSIG_SHADE_TO_CONSTRUCT_TRANSFER "shade_to_construct_transfer"
+12 -11
View File
@@ -50,17 +50,18 @@
#define DNA_UI_EYES_G 35
#define DNA_UI_EYES_B 36
#define DNA_UI_GENDER 37
#define DNA_UI_BEARD_STYLE 38
#define DNA_UI_HAIR_STYLE 39
#define DNA_UI_HACC_STYLE 40
#define DNA_UI_BACC_STYLE 41
#define DNA_UI_HAIR_GRADIENT_STYLE 42
#define DNA_UI_HEAD_MARK_STYLE 43
#define DNA_UI_BODY_MARK_STYLE 44
#define DNA_UI_TAIL_MARK_STYLE 45
#define DNA_UI_PHYSIQUE 46
#define DNA_UI_HEIGHT 47
#define DNA_UI_LENGTH 48 // Update this when you add something, or you WILL break shit.
#define DNA_UI_BODY_TYPE 38
#define DNA_UI_BEARD_STYLE 39
#define DNA_UI_HAIR_STYLE 40
#define DNA_UI_HACC_STYLE 41
#define DNA_UI_BACC_STYLE 42
#define DNA_UI_HAIR_GRADIENT_STYLE 43
#define DNA_UI_HEAD_MARK_STYLE 44
#define DNA_UI_BODY_MARK_STYLE 45
#define DNA_UI_TAIL_MARK_STYLE 46
#define DNA_UI_PHYSIQUE 47
#define DNA_UI_HEIGHT 48
#define DNA_UI_LENGTH 49 // Update this when you add something, or you WILL break shit.
#define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow.
+1
View File
@@ -42,6 +42,7 @@
#define BLOOD_VOLUME_MAXIMUM 2000
#define BLOOD_VOLUME_NORMAL 560
#define BLOOD_VOLUME_SAFE 501
#define BLOOD_VOLUME_STABLE 357
#define BLOOD_VOLUME_OKAY 336
#define BLOOD_VOLUME_BAD 224
#define BLOOD_VOLUME_SURVIVE 122
+1
View File
@@ -107,6 +107,7 @@
#define ui_healthdoll "EAST-1:28,CENTER-1:15"
#define ui_health "EAST-1:28,CENTER:17"
#define ui_internal "EAST-1:28,CENTER+1:19"
#define ui_stamina "EAST-1:28,CENTER-2:15"
//borgs
#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator.
+4
View File
@@ -58,6 +58,10 @@
#define isclothing(A) (istype(A, /obj/item/clothing))
#define isprojectile(A) (istype(A, /obj/item/projectile))
#define isgun(A) (istype(A, /obj/item/gun))
#define is_pen(W) (istype(W, /obj/item/pen) || istype(W, /obj/item/flashlight/pen))
#define is_pda(W) (istype(W, /obj/item/pda))
+1 -1
View File
@@ -14,4 +14,4 @@
#define MARTIAL_COMBO_STEP_HELP "Help"
// A check used for all act types. Such as disarm_act
#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return .
#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return
+1 -1
View File
@@ -398,7 +398,7 @@
#define INVESTIGATE_BOMB "bombs"
// The SQL version required by this version of the code
#define SQL_VERSION 54
#define SQL_VERSION 55
// Vending machine stuff
#define CAT_NORMAL (1<<0)
+6 -2
View File
@@ -263,8 +263,6 @@
#define ispathsilicon(A) (ispath(A, /mob/living/silicon))
#define ispathanimal(A) (ispath(A, /mob/living/simple_animal))
#define isAutoAnnouncer(A) (istype((A), /mob/living/automatedannouncer))
#define iscameramob(A) (istype((A), /mob/camera))
#define isAIEye(A) (istype((A), /mob/camera/aiEye))
#define isovermind(A) (istype((A), /mob/camera/blob))
@@ -359,3 +357,9 @@
#define TS_TIER_3 3
#define TS_TIER_4 4
#define TS_TIER_5 5
/* Defines used for `incorporeal_move` */
#define NO_INCORPOREAL_MOVE 0
#define INCORPOREAL_MOVE_NORMAL 1
#define INCORPOREAL_MOVE_NINJA 2
#define INCORPOREAL_MOVE_HOLY_BLOCK 3
+17 -1
View File
@@ -17,7 +17,7 @@
#define PREFTOGGLE_CHAT_DEAD (1<<1)
#define PREFTOGGLE_CHAT_GHOSTEARS (1<<2)
#define PREFTOGGLE_CHAT_GHOSTSIGHT (1<<3)
#define PREFTOGGLE_CHAT_PRAYER (1<<4)
#define PREFTOGGLE_CHAT_PRAYER (1<<4) // Defunct
#define PREFTOGGLE_CHAT_RADIO (1<<5)
// #define PREFTOGGLE_AZERTY (1<<6) // obsolete
#define PREFTOGGLE_CHAT_DEBUGLOGS (1<<7)
@@ -81,6 +81,21 @@
#error toggles_2 bitflag over 16777215. Please make an issue report and postpone the feature you are working on.
#endif
// This is a list index. Required to start at 1 instead of 0 so it's properly placed in the list
#define PREFTOGGLE_CATEGORY_GENERAL 1
#define PREFTOGGLE_CATEGORY_LIVING 2
#define PREFTOGGLE_CATEGORY_GHOST 3
#define PREFTOGGLE_CATEGORY_ADMIN 4
// Preftoggle type defines
/// Special toggles, stuff that just overrides set_toggles entirely
#define PREFTOGGLE_SPECIAL 0
/// Interacts with the sound bitflag
#define PREFTOGGLE_SOUND 1
/// Interacts with the toggles bitflag
#define PREFTOGGLE_TOGGLE1 2
/// Interacts with the toggles2 bitflag
#define PREFTOGGLE_TOGGLE2 3
// Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack
@@ -133,6 +148,7 @@
#define TAB_ANTAG 2
#define TAB_GEAR 3
#define TAB_KEYS 4
#define TAB_TOGGLES 5
// Colourblind modes
#define COLOURBLIND_MODE_NONE "None"
+12
View File
@@ -18,6 +18,8 @@
#define STATUS_EFFECT_SHADOW_MEND /datum/status_effect/shadow_mend //Quick, powerful heal that deals damage afterwards. Heals 15 brute/burn every second for 3 seconds.
#define STATUS_EFFECT_VOID_PRICE /datum/status_effect/void_price //The price of healing yourself with void energy. Deals 3 brute damage every 3 seconds for 30 seconds.
#define STATUS_EFFECT_SHADOW_MEND_DEVIL /datum/status_effect/shadow_mend/devil //Tarot version, hurts others over self
#define STATUS_EFFECT_HIPPOCRATIC_OATH /datum/status_effect/hippocraticOath //Gives you an aura of healing as well as regrowing the Rod of Asclepius if lost
#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core
@@ -37,6 +39,8 @@
#define STATUS_EFFECT_BLOODDRUNK /datum/status_effect/blooddrunk //Stun immunity and greatly reduced damage taken
#define STATUS_EFFECT_BLOODDRUNK_CHARIOT /datum/status_effect/blooddrunk/chariot //adds pacifism
#define STATUS_EFFECT_DASH /datum/status_effect/dash // Grants the ability to dash, expiring after a few secodns
/// Rapid burn/brute/oxy/blood healing from the cling ability
@@ -62,6 +66,12 @@
#define STATUS_EFFECT_BEARSERKER_RAGE /datum/status_effect/bearserker_rage
#define STATUS_EFFECT_XRAY /datum/status_effect/xray // Xray vision for 2 minutes
#define STATUS_EFFECT_BADASS /datum/status_effect/badass // Badass trait for 2 minutes.
#define STATUS_EFFECT_REVERSED_SUN /datum/status_effect/reversed_sun // Weaker eternal darkness, nightvision, but nearsight
/////////////
// DEBUFFS //
/////////////
@@ -114,6 +124,8 @@
#define STATUS_EFFECT_PEPPERSPRAYED /datum/status_effect/pepper_spray
#define STATUS_EFFECT_REVERSED_HIGH_PRIESTESS /datum/status_effect/reversed_high_priestess //Bubblegum will chase the person hit by the effect, grabbing people at random. This can and WILL include the caster.
//#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse
//#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured
//#define CURSE_SPAWNING 2 //spawns creatures that attack the target only
-1
View File
@@ -242,7 +242,6 @@
continue
if(is_same_root_atom(M, speaker_coverage[ear]))
. |= M
return .
/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5)
var/turf/T
+5
View File
@@ -139,6 +139,11 @@
if(initial(D.name))
GLOB.keybindings += new path()
for(var/path in subtypesof(/datum/preference_toggle))
var/datum/preference_toggle/pref_toggle = path
if(initial(pref_toggle.name))
GLOB.preference_toggles += new path()
for(var/path in subtypesof(/datum/objective))
var/datum/objective/O = path
if(isnull(initial(O.name)))
+14 -10
View File
@@ -43,8 +43,6 @@
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE))
continue
if(species == "Machine") //If the user is a species who can have a robotic head...
if(!robohead)
robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"]
@@ -72,8 +70,6 @@
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE))
continue
if(species == "Machine") //If the user is a species who can have a robotic head...
if(!robohead)
robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"]
@@ -171,10 +167,13 @@
current_species = GLOB.all_species[species]
if(!current_species || current_species.name == "Human")
if(gender==FEMALE)
return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
else
return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names))
switch(gender)
if(FEMALE)
return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
if(MALE)
return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names))
else
return capitalize(pick(GLOB.first_names_male + GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
else
return current_species.get_random_name(gender)
@@ -190,7 +189,6 @@
return min(max(. + rand(-25, 25), -185), 34)
else if(species == "Vox")
. = rand(1, 6)
return .
/proc/skintone2racedescription(tone, species = "Human")
if(species == "Human")
@@ -610,7 +608,7 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker)
var/viewX
var/viewY
if(isnum(view))
var/totalviewrange = 1 + 2 * view
var/totalviewrange = (view < 0 ? -1 : 1) + 2 * view
viewX = totalviewrange
viewY = totalviewrange
else if(istext(view))
@@ -626,6 +624,12 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker)
return list(viewX, viewY)
/proc/in_view_range(mob/user, atom/A)
var/list/view_range = getviewsize(user.client.view)
var/turf/source = get_turf(user)
var/turf/target = get_turf(A)
return ISINRANGE(target.x, source.x - view_range[1], source.x + view_range[1]) && ISINRANGE(target.y, source.y - view_range[2], source.y + view_range[2])
//Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value.
/proc/create_random_mob(spawn_location, mob_class = HOSTILE_SPAWN)
var/static/list/mob_spawn_meancritters = list() // list of possible hostile mobs
+27 -18
View File
@@ -12,9 +12,12 @@
return default
/proc/sanitize_inlist(value, list/List, default)
if(value in List) return value
if(default) return default
if(length(List)) return pick(List)
if(value in List)
return value
if(default)
return default
if(length(List))
return pick(List)
/proc/sanitize_json(json_input)
if(length(json_input) && istext(json_input))
@@ -23,31 +26,37 @@
//more specialised stuff
/proc/sanitize_gender(gender,neuter=0,plural=0, default="male")
/proc/sanitize_gender(gender, neuter = FALSE, default = "male")
switch(gender)
if(MALE, FEMALE)return gender
if(MALE, FEMALE, PLURAL)
return gender
if(NEUTER)
if(neuter) return gender
else return default
if(PLURAL)
if(plural) return gender
else return default
if(neuter)
return gender
else
return default
return default
/proc/sanitize_hexcolor(color, default="#000000")
if(!istext(color)) return default
if(!istext(color))
return default
var/len = length(color)
if(len != 7 && len !=4) return default
if(text2ascii(color,1) != 35) return default //35 is the ascii code for "#"
if(len != 7 && len !=4)
return default
if(text2ascii(color, 1) != 35)
return default //35 is the ascii code for "#"
. = "#"
for(var/i=2,i<=len,i++)
var/ascii = text2ascii(color,i)
switch(ascii)
if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9
if(97 to 102) . += ascii2text(ascii) //letters a to f
if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase
else return default
return .
if(48 to 57)
. += ascii2text(ascii) //numbers 0 to 9
if(97 to 102)
. += ascii2text(ascii) //letters a to f
if(65 to 70)
. += ascii2text(ascii + 32) //letters A to F - translates to lowercase
else
return default
/proc/sanitize_ooccolor(color)
var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8)))
-5
View File
@@ -26,11 +26,6 @@
return TRUE
return FALSE
/proc/iscrowbar(O)
if(istype(O, /obj/item/crowbar))
return TRUE
return FALSE
/proc/iscoil(O)
if(istype(O, /obj/item/stack/cable_coil))
return TRUE
+8 -15
View File
@@ -70,20 +70,14 @@
return num_list
//Splits the text of a file at seperator and returns them in a list.
/proc/file2list(filename, seperator="\n")
return splittext(return_file_text(filename),seperator)
//Turns a direction into text
/proc/num2dir(direction)
switch(direction)
if(1.0) return NORTH
if(2.0) return SOUTH
if(4.0) return EAST
if(8.0) return WEST
else
stack_trace("UNKNOWN DIRECTION: [direction]")
/proc/file2list(filename, separator = "\n", no_empty = TRUE)
var/list/result = list()
for(var/line in splittext(return_file_text(filename), separator))
var/text = trim(line)
if(no_empty && !text)
continue
result += text
return result
/proc/dir2text(direction)
switch(direction)
@@ -193,7 +187,6 @@
if(rights & R_MENTOR) . += "[seperator]+MENTOR"
if(rights & R_VIEWRUNTIMES) . += "[seperator]+VIEWRUNTIMES"
if(rights & R_MAINTAINER) . += "[seperator]+MAINTAINER"
return .
/proc/ui_style2icon(ui_style)
switch(ui_style)
+22 -36
View File
@@ -262,40 +262,6 @@
/proc/format_frequency(f)
return "[round(f / 10)].[f % 10]"
/obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src)
var/obj/icon = target
if(isliving(user))
user.visible_message("<span class='notice'>[user] uses the analyzer on [target].</span>", "<span class='notice'>You use the analyzer on [target].</span>")
var/pressure = air_contents.return_pressure()
var/total_moles = air_contents.total_moles()
var/volume = air_contents.return_volume()
user.show_message("<span class='notice'>Results of analysis of [bicon(icon)] [target].</span>", 1)
if(total_moles>0)
var/o2_concentration = air_contents.oxygen/total_moles
var/n2_concentration = air_contents.nitrogen/total_moles
var/co2_concentration = air_contents.carbon_dioxide/total_moles
var/plasma_concentration = air_contents.toxins/total_moles
var/n2o_concentration = air_contents.sleeping_agent/total_moles
var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration+n2o_concentration)
user.show_message("<span class='notice'>Pressure: [round(pressure,0.1)] kPa</span>", 1)
user.show_message("<span class='notice'>Nitrogen: [round(n2_concentration*100)] % ([round(air_contents.nitrogen,0.01)] moles)</span>", 1)
user.show_message("<span class='notice'>Oxygen: [round(o2_concentration*100)] % ([round(air_contents.oxygen,0.01)] moles)</span>", 1)
user.show_message("<span class='notice'>CO2: [round(co2_concentration*100)] % ([round(air_contents.carbon_dioxide,0.01)] moles)</span>", 1)
user.show_message("<span class='notice'>Plasma: [round(plasma_concentration*100)] % ([round(air_contents.toxins,0.01)] moles)</span>", 1)
user.show_message("<span class='notice'>Nitrous Oxide: [round(n2o_concentration*100)] % ([round(air_contents.sleeping_agent,0.01)] moles)</span>", 1)
if(unknown_concentration>0.01)
user.show_message("<span class='danger'>Unknown: [round(unknown_concentration*100)] % ([round(unknown_concentration*total_moles,0.01)] moles)</span>", 1)
user.show_message("<span class='notice'>Total: [round(total_moles,0.01)] moles</span>", 1)
user.show_message("<span class='notice'>Temperature: [round(air_contents.temperature-T0C)] &deg;C</span>", 1)
user.show_message("<span class='notice'>Volume: [round(volume)] Liters</span>", 1)
else
user.show_message("<span class='notice'>[target] is empty!</span>", 1)
user.show_message("<span class='notice'>Volume: [round(volume)] Liters</span>", 1)
return
//Picks a string of symbols to display as the law number for hacked or ion laws
/proc/ionnum()
return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]"
@@ -323,7 +289,6 @@
if(A.control_disabled)
continue
. += A
return .
//Find an active ai with the least borgs. VERBOSE PROCNAME HUH!
/proc/select_active_ai_with_fewest_borgs()
@@ -1207,7 +1172,7 @@ GLOBAL_LIST_INIT(wall_items, typecacheof(list(/obj/machinery/power/apc, /obj/mac
/obj/machinery/computer/security/telescreen, /obj/machinery/airlock_controller,
/obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth,
/obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment,
/obj/structure/sign)))
/obj/structure/sign, /obj/machinery/barsign)))
/proc/gotwallitem(loc, dir)
for(var/obj/O in loc)
@@ -1951,6 +1916,27 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
pixel_x = initialpixelx
pixel_y = initialpixely
/// Returns a turf based on text inputs, original turf and viewing client
/proc/parse_caught_click_modifiers(list/modifiers, turf/origin, client/viewing_client)
if(!modifiers)
return
var/screen_loc = splittext(modifiers["screen-loc"], ",")
var/list/actual_view = getviewsize(viewing_client ? viewing_client.view : world.view)
var/click_turf_x = splittext(screen_loc[1], ":")
var/click_turf_y = splittext(screen_loc[2], ":")
var/click_turf_z = origin.z
var/click_turf_px = text2num(click_turf_x[2])
var/click_turf_py = text2num(click_turf_y[2])
click_turf_x = origin.x + text2num(click_turf_x[1]) - round(actual_view[1] / 2) - 1
click_turf_y = origin.y + text2num(click_turf_y[1]) - round(actual_view[2] / 2) - 1
var/turf/click_turf = locate(clamp(click_turf_x, 1, world.maxx), clamp(click_turf_y, 1, world.maxy), click_turf_z)
LAZYSET(modifiers, "icon-x", "[(click_turf_px - click_turf.pixel_x) + ((click_turf_x - click_turf.x) * world.icon_size)]")
LAZYSET(modifiers, "icon-y", "[(click_turf_py - click_turf.pixel_y) + ((click_turf_y - click_turf.y) * world.icon_size)]")
return click_turf
/proc/params2turf(scr_loc, turf/origin, client/C)
if(!scr_loc)
return null
@@ -0,0 +1,8 @@
GLOBAL_LIST_EMPTY(preference_toggles)
GLOBAL_LIST_INIT(preference_toggle_groups, list(
"General Preferences" = PREFTOGGLE_CATEGORY_GENERAL,
"In-Round Preferences" = PREFTOGGLE_CATEGORY_LIVING,
"Ghost Preferences" = PREFTOGGLE_CATEGORY_GHOST,
"Admin Preferences" = PREFTOGGLE_CATEGORY_ADMIN,
))
+68 -1
View File
@@ -47,4 +47,71 @@ actually if you do something in that proc like changing user location or whateve
to inform the game this action was expected and its fine
*/
/atom/proc/MouseDrop_T(atom/dropping, mob/user, params) // return TRUE if you want to prevent us click the object after it
return
return FALSE
/client/MouseDown(datum/object, location, control, params)
if(QDELETED(object)) // Yep, you can click on qdeleted things before they have time to nullspace. Fun.
return
SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDOWN, object, location, control, params)
if(mouse_down_icon)
mouse_pointer_icon = mouse_down_icon
var/delay = mob.CanMobAutoclick(object, location, params)
if(delay)
selected_target[1] = object
selected_target[2] = params
while(selected_target[1])
Click(selected_target[1], location, control, selected_target[2])
sleep(delay)
/client/MouseUp(object, location, control, params)
if(SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEUP, object, location, control, params) & COMPONENT_CLIENT_MOUSEUP_INTERCEPT)
click_intercept_time = world.time
if(mouse_up_icon)
mouse_pointer_icon = mouse_up_icon
selected_target[1] = null
/mob/proc/CanMobAutoclick(object, location, params)
return FALSE
/mob/living/carbon/CanMobAutoclick(atom/object, location, params)
if(!object.IsAutoclickable())
return FALSE
var/obj/item/active_item = get_active_hand()
return active_item?.CanItemAutoclick(object, location, params)
/obj/item/proc/CanItemAutoclick(object, location, params)
return FALSE
/atom/proc/IsAutoclickable()
return TRUE
/obj/screen/IsAutoclickable()
return FALSE
/obj/screen/click_catcher/IsAutoclickable()
return TRUE
// The actual arguments of this:
// MouseDrag(src_object as null|atom in usr.client,
// over_object as null|atom in usr.client,
// src_location as null|turf|text in usr.client,
// over_location as null|turf|text in usr.client,
// src_control as text, over_control as text, params as text)
/client/MouseDrag(src_object, atom/over_object, src_location, turf/over_location, src_control, over_control, params)
var/list/modifiers = params2list(params)
if(!drag_start) // If we're just starting to drag
drag_start = world.time
drag_details = modifiers.Copy()
mouseParams = params
mouse_location_UID = isturf(over_location) ? over_location.UID() : over_location
mouse_object_UID = over_object?.UID()
if(selected_target[1] && over_object?.IsAutoclickable())
selected_target[1] = over_object
selected_target[2] = params
SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDRAG, src_object, over_object, src_location, over_location, src_control, over_control, params)
return ..()
/client/MouseDrop(atom/src_object, atom/over_object, atom/src_location, atom/over_location, src_control, over_control, params)
..()
drag_start = 0
drag_details = null
+3 -13
View File
@@ -329,6 +329,9 @@
mymob.healths = new /atom/movable/screen/healths()
infodisplay += mymob.healths
mymob.staminas = new /atom/movable/screen/healths/stamina()
infodisplay += mymob.staminas
mymob.healthdoll = new()
infodisplay += mymob.healthdoll
@@ -483,16 +486,3 @@
H.r_hand.screen_loc = null
if(H.l_hand)
H.l_hand.screen_loc = null
/mob/living/carbon/human/verb/toggle_hotkey_verbs()
set category = "OOC"
set name = "Toggle Hotkey Buttons"
set desc = "This disables or enables the user interface buttons which can be used with hotkeys."
if(hud_used.hotkey_ui_hidden)
client.screen += hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = FALSE
else
client.screen -= hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = TRUE
+2 -1
View File
@@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/datum/radial_menu/parent
/atom/movable/screen/radial/Destroy()
parent.current_user.screen -= src
parent = null
return ..()
@@ -245,7 +246,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
QDEL_LIST_CONTENTS(elements)
QDEL_NULL(close_button)
anchor = null
. = ..()
return ..()
/*
Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen)
+6 -2
View File
@@ -486,9 +486,9 @@
var/mob/M = usr
switch(name)
if("right hand", "r_hand")
M.activate_hand("r")
M.activate_hand(HAND_BOOL_RIGHT)
if("left hand", "l_hand")
M.activate_hand("l")
M.activate_hand(HAND_BOOL_LEFT)
return TRUE
/atom/movable/screen/swap_hand
@@ -562,3 +562,7 @@
/atom/movable/screen/component_button/Click(params)
if(parent)
parent.component_click(src, params)
/atom/movable/screen/healths/stamina
icon_state = "stamina_0"
screen_loc = ui_stamina
+4 -12
View File
@@ -77,9 +77,12 @@
/mob/dead/observer/MiddleShiftControlClickOn(atom/A)
return
/atom/proc/attack_ghost(mob/user)
/atom/proc/attack_ghost(mob/dead/observer/user)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
if(user.client)
if(user.gas_scan && atmos_scan(user=user, target=src, silent=TRUE))
return TRUE
// health + machine analyzer for ghosts
/mob/living/attack_ghost(mob/dead/observer/user)
@@ -106,14 +109,3 @@
/obj/effect/portal/attack_ghost(mob/user as mob)
if(target)
user.forceMove(get_turf(target))
/obj/machinery/atmospherics/attack_ghost(mob/dead/observer/user)
if(!istype(user)) // Make sure user is actually an observer. Revenents also use attack_ghost, but do not have the toggle gas analyzer var.
return
if(user.gas_analyzer)
if(istype(src, /obj/machinery/atmospherics/pipe))
var/obj/machinery/atmospherics/pipe/T = src
atmosanalyzer_scan(T.parent.air, user, T)
else if(istype(src, /obj/machinery/atmospherics/unary))
var/obj/machinery/atmospherics/unary/T = src
atmosanalyzer_scan(T.air_contents, user, T)
@@ -18,7 +18,7 @@
var/allow_antag_hud = TRUE
/// Forbid players from rejoining if they use AntagHUD?
var/restrict_antag_hud_rejoin = TRUE
/// Enable respanws by default?
/// Enable respawns by default?
var/respawn_enabled = FALSE
/// Enable CID randomiser buster?
var/enabled_cid_randomiser_buster = FALSE
@@ -93,8 +93,8 @@
CONFIG_LOAD_BOOL(guest_ban, data["guest_ban"])
CONFIG_LOAD_BOOL(allow_antag_hud, data["allow_antag_hud"])
CONFIG_LOAD_BOOL(restrict_antag_hud_rejoin, data["restrict_antag_hud_rejoin"])
CONFIG_LOAD_BOOL(respawn_enabled, data["respawn_enabled"])
CONFIG_LOAD_BOOL(enabled_cid_randomiser_buster, data["enable_cid_randomiser_buster"])
CONFIG_LOAD_BOOL(respawn_enabled, data["respawn_enabled"])
CONFIG_LOAD_BOOL(forbid_singulo_possession, data["prevent_admin_singlo_possession"])
CONFIG_LOAD_BOOL(popup_admin_pm, data["popup_admin_pm"])
CONFIG_LOAD_BOOL(allow_holidays, data["allow_holidays"])
@@ -13,6 +13,8 @@ PROCESSING_SUBSYSTEM_DEF(radiation)
var/rad_cache_update_interval = 5 SECONDS
var/list/turf_rad_cache = list()
var/list/prev_rad_cache = list()
/// Lazy list of all radioactive components
var/list/all_radiations
/datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive/contamination)
+4 -7
View File
@@ -81,9 +81,9 @@ SUBSYSTEM_DEF(ticker)
switch(current_state)
if(GAME_STATE_STARTUP)
// This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails
round_start_time = world.time + (GLOB.configuration.general.lobby_time SECONDS)
pregame_timeleft = GLOB.configuration.general.lobby_time SECONDS
to_chat(world, "<b><span class='darkmblue'>Welcome to the pre-game lobby!</span></b>")
round_start_time = world.time + pregame_timeleft
to_chat(world, "<B><span class='darkmblue'>Welcome to the pre-game lobby!</span></B>")
to_chat(world, "Please, setup your character and select ready. Game will start in [GLOB.configuration.general.lobby_time] seconds")
current_state = GAME_STATE_PREGAME
fire() // TG says this is a good idea
@@ -95,12 +95,9 @@ SUBSYSTEM_DEF(ticker)
return
// This is so we dont have sleeps in controllers, because that is a bad, bad thing
if(!delay_end)
pregame_timeleft = max(0, round_start_time - world.time) // Normal lobby countdown when roundstart was not delayed
else
pregame_timeleft = max(0, pregame_timeleft - wait) // If roundstart was delayed, we should resume the countdown where it left off
pregame_timeleft = max(0, round_start_time - world.time)
if(pregame_timeleft <= 600 && !tipped) // 60 seconds
if(pregame_timeleft <= 1 MINUTES && !tipped)
send_tip_of_the_round()
tipped = TRUE
+7 -7
View File
@@ -341,7 +341,7 @@ SUBSYSTEM_DEF(timer)
return
// Sort it first
var/list/sorted = sortTim(GLOB.timers_by_type, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE)
var/list/sorted = sortTim(GLOB.timers_by_proc, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE)
// DOOMP EET
var/timer_json_file = file("[GLOB.log_directory]/timers.json")
@@ -571,14 +571,14 @@ SUBSYSTEM_DEF(timer)
CRASH("this timer is attached to no object, the attempted proc to call was [callBack.delegate]")
. = "[callBack.object.type]"
GLOBAL_LIST_EMPTY(timers_by_type)
GLOBAL_LIST_EMPTY(timers_by_proc)
// Allows us to track what types generate the most timers. Just invokes the global addtimer
/datum/proc/addtimer(datum/callback/callback, wait = 0, flags = 0)
var/tt = "[type]"
if(tt in GLOB.timers_by_type)
GLOB.timers_by_type[tt]++
var/timer_function = "[type][callback.delegate]"
if(timer_function in GLOB.timers_by_proc)
GLOB.timers_by_proc[timer_function]++
else
GLOB.timers_by_type[tt] = 1
GLOB.timers_by_proc[timer_function] = 1
return global.addtimer(callback, wait, flags)
/**
@@ -594,7 +594,7 @@ GLOBAL_LIST_EMPTY(timers_by_type)
if(!check_rights(R_DEBUG | R_VIEWRUNTIMES))
return
var/list/sorted = sortTim(GLOB.timers_by_type, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE)
var/list/sorted = sortTim(GLOB.timers_by_proc, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE)
var/list/text = list("<h1>Timer Log</h1>", "<ul>")
for(var/key in sorted)
text += "<li>[key] - [sorted[key]]</li>"
@@ -97,7 +97,7 @@ SUBSYSTEM_DEF(changelog)
/client/verb/changes()
set name = "Changelog"
set desc = "View the changelog."
set category = "OOC"
set category = null
// Just invoke the actual CL thing
SSchangelog.OpenChangelog(src)
@@ -49,6 +49,7 @@ SUBSYSTEM_DEF(mapping)
log_startup_progress("We feel like [cave_theme] today...")
// Load all Z level templates
preloadTemplates()
preloadTemplates(path = "code/modules/unit_tests/atmos/")
// Load the station
loadStation()
+4 -3
View File
@@ -120,7 +120,8 @@
return
if(!status_only)
button.name = name
button.desc = desc
if(desc)
button.desc = "[desc] [initial(button.desc)]"
if(owner?.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND)
var/list/settings = owner.hud_used.get_action_buttons_icons()
if(button.icon != settings["bg_icon"])
@@ -679,7 +680,7 @@
var/datum/spell/spell = target
if(owner)
return spell.can_cast(owner)
return spell.can_cast(owner, show_message = TRUE)
return FALSE
/datum/action/spell_action/apply_unavailable_effect(atom/movable/screen/movable/action_button/button)
@@ -698,7 +699,7 @@
// Make a holder for the charge text
var/image/count_down_holder = image('icons/effects/effects.dmi', icon_state = "nothing")
count_down_holder.plane = FLOAT_PLANE + 1.1
var/text = S.cooldown_handler.statpanel_info()
var/text = S.cooldown_handler.cooldown_info()
count_down_holder.maptext = "<div style=\"font-size:6pt;color:[recharge_text_color];font:'Small Fonts';text-align:center;\" valign=\"bottom\">[text]</div>"
button.add_overlay(count_down_holder)
+76
View File
@@ -0,0 +1,76 @@
/**
* A component for tracking and manipulating bodies held inside constructs/shades
* Will drop the body/brain when the parent dies or is deleted.
*/
/datum/component/construct_held_body
dupe_mode = COMPONENT_DUPE_ALLOWED
/// A reference to either a mob, or a brain organ that is held inside our parent. Will drop when parent dies/is deleted
var/atom/movable/held_body
/datum/component/construct_held_body/Initialize(atom/movable/new_body)
. = ..()
add_body(new_body)
/datum/component/construct_held_body/Destroy(force, silent)
if(held_body)
stack_trace("/datum/component/construct_held_body had a held body still despite being destroyed. Body is [held_body] ([held_body.type])")
held_body = null
return ..()
/datum/component/construct_held_body/PostTransfer()
held_body.forceMove(parent) // forcemove them to the new parent
/datum/component/construct_held_body/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOB_DEATH, PROC_REF(drop_body))
RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(drop_body))
RegisterSignal(parent, COMSIG_SHADE_TO_CONSTRUCT_TRANSFER, PROC_REF(transfer_held_body))
/datum/component/construct_held_body/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_MOB_DEATH)
UnregisterSignal(parent, COMSIG_PARENT_QDELETING)
UnregisterSignal(parent, COMSIG_SHADE_TO_CONSTRUCT_TRANSFER)
/datum/component/construct_held_body/proc/add_body(atom/movable/new_body)
held_body = new_body
RegisterSignal(new_body, COMSIG_PARENT_QDELETING, PROC_REF(_null_held_body))
new_body.forceMove(parent)
/datum/component/construct_held_body/proc/_null_held_body()
SIGNAL_HANDLER // COMSIG_PARENT_QDELETING
UnregisterSignal(held_body, COMSIG_PARENT_QDELETING)
held_body = null
/datum/component/construct_held_body/proc/transfer_held_body(mob/living/current_parent, mob/living/new_body_holder)
SIGNAL_HANDLER // COMSIG_SHADE_TO_CONSTRUCT_TRANSFER
new_body_holder.TakeComponent(src)
/datum/component/construct_held_body/proc/drop_body()
SIGNAL_HANDLER // COMSIG_MOB_DEATH + COMSIG_PARENT_QDELETING
INVOKE_ASYNC(src, PROC_REF(_drop_body))
/datum/component/construct_held_body/proc/_drop_body() // call me lazy ig
if(!held_body) // Null check for empty bodies
return
var/mob/living/parent_mob = parent
held_body.forceMove(get_turf(parent))
SSticker.mode?.cult_team?.add_cult_immunity(held_body)
var/mob/living/held_mob = held_body
if(ismob(held_body)) // Check if the held_body is a mob
held_mob.key = parent_mob.key
held_mob.cancel_camera()
else if(istype(held_body, /obj/item/organ/internal/brain)) // Check if the held_body is a brain
var/obj/item/organ/internal/brain/brain = held_body
if(brain.brainmob) // Check if the brain has a brainmob
brain.brainmob.key = parent_mob.key // Set the key to the brainmob
held_mob = brain.brainmob
if(!istype(held_mob) || QDELETED(held_mob))
CRASH("/datum/component/construct_held_body/proc/_drop_body attempted to drop a body despite having no body, or a qdeleted body")
parent_mob.mind.transfer_to(held_mob) // Transfer the mind to the original mob
// goodbye construct antag datums!
held_mob.mind.remove_antag_datum(/datum/antagonist/cultist, silent_removal = TRUE)
held_mob.mind.remove_antag_datum(/datum/antagonist/wizard/construct, silent_removal = TRUE)
held_body = null
qdel(src) // our job here is done
+325
View File
@@ -0,0 +1,325 @@
#define AUTOFIRE_MOUSEUP 0
#define AUTOFIRE_MOUSEDOWN 1
/datum/component/automatic_fire
var/client/clicker
var/mob/living/shooter
var/atom/target
var/turf/target_loc // For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/autofire_stat = AUTOFIRE_STAT_IDLE
var/mouse_parameters
/// Time between individual shots.
var/autofire_shot_delay = 0.3 SECONDS
/// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
var/mouse_status = AUTOFIRE_MOUSEUP
/// Should dual wielding be allowed?
var/allow_akimbo
/// windup autofire vars
/// Whether the delay between shots increases over time, simulating a spooling weapon
var/windup_autofire = FALSE
/// the reduction to shot delay for windup
var/current_windup_reduction = 0
/// the percentage of autfire_shot_delay that is added to current_windup_reduction
var/windup_autofire_reduction_multiplier = 0.3
/// How high of a reduction that current_windup_reduction can reach
var/windup_autofire_cap = 0.3
/// How long it takes for weapons that have spooled-up to reset back to the original firing speed
var/windup_spindown = 3 SECONDS
/// Timer for tracking the spindown reset timings
var/timerid
COOLDOWN_DECLARE(next_shot_cd)
/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown, allow_akimbo = TRUE)
. = ..()
if(!isgun(parent))
return COMPONENT_INCOMPATIBLE
var/obj/item/gun = parent
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up))
if(autofire_shot_delay)
src.autofire_shot_delay = autofire_shot_delay
src.allow_akimbo = allow_akimbo
if(windup_autofire)
src.windup_autofire = windup_autofire
src.windup_autofire_reduction_multiplier = windup_autofire_reduction_multiplier
src.windup_autofire_cap = windup_autofire_cap
src.windup_spindown = windup_spindown
if(autofire_stat == AUTOFIRE_STAT_IDLE && ismob(gun.loc))
var/mob/user = gun.loc
wake_up(src, user)
/datum/component/automatic_fire/Destroy()
autofire_off()
return ..()
/datum/component/automatic_fire/process(seconds_per_tick)
if(autofire_stat != AUTOFIRE_STAT_FIRING)
STOP_PROCESSING(SSprojectiles, src)
return
process_shot()
/datum/component/automatic_fire/proc/wake_up(datum/source, mob/user, slot)
SIGNAL_HANDLER // COMSIG_ITEM_EQUIPPED
if(autofire_stat == AUTOFIRE_STAT_ALERT)
return // We've updated the firemode. No need for more.
if(autofire_stat == AUTOFIRE_STAT_FIRING)
stop_autofiring() // Let's stop shooting to avoid issues.
return
if(user.is_holding(parent))
autofire_on(user.client)
// There is a gun and there is a user wielding it. The component now waits for the mouse click.
/datum/component/automatic_fire/proc/autofire_on(client/user_client)
if(autofire_stat != AUTOFIRE_STAT_IDLE)
return
autofire_stat = AUTOFIRE_STAT_ALERT
if(!QDELETED(user_client))
clicker = user_client
shooter = user_client.mob
RegisterSignal(user_client, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down))
if(!QDELETED(shooter))
RegisterSignal(shooter, COMSIG_MOB_LOGOUT, PROC_REF(autofire_off))
UnregisterSignal(shooter, COMSIG_MOB_LOGIN)
RegisterSignal(parent, list(COMSIG_PARENT_QDELETING, COMSIG_ITEM_DROPPED), PROC_REF(autofire_off))
parent.RegisterSignal(src, COMSIG_AUTOFIRE_ONMOUSEDOWN, TYPE_PROC_REF(/obj/item/gun, autofire_bypass_check))
parent.RegisterSignal(parent, COMSIG_AUTOFIRE_SHOT, TYPE_PROC_REF(/obj/item/gun, do_autofire))
/datum/component/automatic_fire/proc/autofire_off(datum/source)
SIGNAL_HANDLER // COMSIG_MOB_LOGOUT
if(autofire_stat == AUTOFIRE_STAT_IDLE)
return
if(autofire_stat == AUTOFIRE_STAT_FIRING)
stop_autofiring()
autofire_stat = AUTOFIRE_STAT_IDLE
if(!QDELETED(clicker))
UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG))
mouse_status = AUTOFIRE_MOUSEUP // In regards to the component there's no click anymore to care about.
clicker = null
if(!QDELETED(shooter))
RegisterSignal(shooter, COMSIG_MOB_LOGIN, PROC_REF(on_client_login))
UnregisterSignal(shooter, COMSIG_MOB_LOGOUT)
UnregisterSignal(parent, list(COMSIG_PARENT_QDELETING, COMSIG_ITEM_DROPPED))
shooter = null
parent.UnregisterSignal(parent, COMSIG_AUTOFIRE_SHOT)
parent.UnregisterSignal(src, COMSIG_AUTOFIRE_ONMOUSEDOWN)
/datum/component/automatic_fire/proc/on_client_login(mob/source)
SIGNAL_HANDLER // COMSIG_MOB_LOGIN
if(!source.client)
return
if(source.is_holding(parent))
autofire_on(source.client)
/datum/component/automatic_fire/proc/on_mouse_down(client/source, atom/_target, turf/location, control, params)
SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEDOWN
var/list/modifiers = params2list(params) // If they're shift+clicking, for example, let's not have them accidentally shoot.
if(modifiers["shift"])
return
if(modifiers["ctrl"])
return
if(modifiers["middle"])
return
if(modifiers["right"])
return
if(modifiers["alt"])
return
if(source.mob.in_throw_mode)
return
if(!isturf(source.mob.loc)) // No firing inside lockers and stuff.
return
if(get_dist(source.mob, _target) < 2) // Adjacent clicking.
return
if(isnull(location) || istype(_target, /obj/screen)) // Clicking on a screen object.
if(_target.plane != CLICKCATCHER_PLANE) // The clickcatcher is a special case. We want the click to trigger then, under it.
return // If we click and drag on our worn backpack, for example, we want it to open instead.
_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)
params = list2params(modifiers)
if(!_target)
CRASH("Failed to get the turf under clickcatcher")
if(SEND_SIGNAL(src, COMSIG_AUTOFIRE_ONMOUSEDOWN, source, _target, location, control, params) & COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS)
return
source.click_intercept_time = world.time // From this point onwards Click() will no longer be triggered.
if(autofire_stat == AUTOFIRE_STAT_IDLE)
CRASH("on_mouse_down() called with [autofire_stat] autofire_stat")
if(autofire_stat == AUTOFIRE_STAT_FIRING)
stop_autofiring() // This can happen if we click and hold and then alt+tab, printscreen or other such action. MouseUp won't be called then and it will keep autofiring.
target = _target
target_loc = get_turf(target)
mouse_parameters = params
INVOKE_ASYNC(src, PROC_REF(start_autofiring))
/datum/component/automatic_fire/proc/start_autofiring()
if(autofire_stat == AUTOFIRE_STAT_FIRING)
return
autofire_stat = AUTOFIRE_STAT_FIRING
clicker.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi'
clicker.mouse_pointer_icon = clicker.mouse_override_icon
if(mouse_status == AUTOFIRE_MOUSEUP) // See mouse_status definition for the reason for this.
RegisterSignal(clicker, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up))
mouse_status = AUTOFIRE_MOUSEDOWN
RegisterSignal(shooter, COMSIG_MOB_SWAPPED_HANDS, PROC_REF(stop_autofiring))
if(isgun(parent))
var/obj/item/gun/shoota = parent
if(!shoota.on_autofire_start(shooter)) // This is needed because the minigun has a do_after before firing and signals are async.
stop_autofiring()
return
if(autofire_stat != AUTOFIRE_STAT_FIRING)
return // Things may have changed while on_autofire_start() was being processed, due to do_after's sleep.
if(!process_shot()) // First shot is processed instantly.
return // If it fails, such as when the gun is empty, then there's no need to schedule a second shot.
START_PROCESSING(SSprojectiles, src)
RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag))
/datum/component/automatic_fire/proc/on_mouse_up(datum/source, atom/object, turf/location, control, params)
SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEUP
UnregisterSignal(clicker, COMSIG_CLIENT_MOUSEUP)
mouse_status = AUTOFIRE_MOUSEUP
if(autofire_stat == AUTOFIRE_STAT_FIRING)
stop_autofiring()
return COMPONENT_CLIENT_MOUSEUP_INTERCEPT
/datum/component/automatic_fire/proc/stop_autofiring(datum/source, atom/object, turf/location, control, params)
SIGNAL_HANDLER // COMSIG_MOB_SWAPPED_HANDS
if(autofire_stat != AUTOFIRE_STAT_FIRING)
return
STOP_PROCESSING(SSprojectiles, src)
autofire_stat = AUTOFIRE_STAT_ALERT
if(clicker)
clicker.mouse_override_icon = null
clicker.mouse_pointer_icon = clicker.mouse_override_icon
UnregisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG)
if(!QDELETED(shooter))
UnregisterSignal(shooter, COMSIG_MOB_SWAPPED_HANDS)
target = null
target_loc = null
mouse_parameters = null
/datum/component/automatic_fire/proc/on_mouse_drag(client/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params)
SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEDRAG
if(isnull(over_location)) // This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example.
var/list/modifiers = params2list(params)
var/new_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)
params = list2params(modifiers)
mouse_parameters = params
if(!new_target)
if(QDELETED(target)) // No new target acquired, and old one was deleted, get us out of here.
stop_autofiring()
CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]. Old target was incidentally QDELETED.")
target = get_turf(target) // If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target.
target_loc = target
CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]")
target = new_target
target_loc = new_target
return
target = over_object
target_loc = get_turf(over_object)
mouse_parameters = params
/datum/component/automatic_fire/proc/process_shot()
if(autofire_stat != AUTOFIRE_STAT_FIRING)
return FALSE
if(!COOLDOWN_FINISHED(src, next_shot_cd))
return TRUE
if(QDELETED(target) || get_turf(target) != target_loc) // Target moved or got destroyed since we last aimed.
target = target_loc // So we keep firing on the emptied tile until we move our mouse and find a new target.
if(get_dist(shooter, target) <= 0)
target = get_step(shooter, shooter.dir) // Shoot in the direction faced if the mouse is on the same tile as we are.
target_loc = target
else if(!in_view_range(shooter, target))
stop_autofiring() // Elvis has left the building.
return FALSE
shooter.face_atom(target)
var/next_delay = autofire_shot_delay
if(windup_autofire)
next_delay = clamp(next_delay - current_windup_reduction, round(autofire_shot_delay * windup_autofire_cap), autofire_shot_delay)
current_windup_reduction = (current_windup_reduction + round(autofire_shot_delay * windup_autofire_reduction_multiplier))
timerid = addtimer(CALLBACK(src, PROC_REF(windup_reset), FALSE), windup_spindown, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
COOLDOWN_START(src, next_shot_cd, next_delay)
if(SEND_SIGNAL(parent, COMSIG_AUTOFIRE_SHOT, target, shooter, allow_akimbo, mouse_parameters) & COMPONENT_AUTOFIRE_SHOT_SUCCESS)
return TRUE
stop_autofiring()
return FALSE
/// Reset for our windup, resetting everything back to initial values after a variable set amount of time (determined by var/windup_spindown).
/datum/component/automatic_fire/proc/windup_reset(deltimer)
current_windup_reduction = initial(current_windup_reduction)
if(deltimer && timerid)
deltimer(timerid)
// Gun procs.
/obj/item/gun/proc/on_autofire_start(mob/living/shooter)
if(semicd || shooter.incapacitated() || !can_trigger_gun(shooter))
return FALSE
if(!can_shoot())
shoot_with_empty_chamber(shooter)
return FALSE
var/other_hand = shooter.get_organ(shooter.hand ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND)
if(weapon_weight == WEAPON_HEAVY && (shooter.get_inactive_hand() || !other_hand))
to_chat(shooter, "<span class='warning'>You need to use both hands!</span>")
return FALSE
return TRUE
/obj/item/gun/proc/autofire_bypass_check(datum/source, client/clicker, atom/target, turf/location, control, params)
SIGNAL_HANDLER // COMSIG_AUTOFIRE_ONMOUSEDOWN
if(clicker.mob.get_active_hand() != src)
return COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS
/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
SIGNAL_HANDLER // COMSIG_AUTOFIRE_SHOT
if(semicd || shooter.incapacitated())
return NONE
if(!can_shoot())
shoot_with_empty_chamber(shooter)
return NONE
INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, allow_akimbo, params)
return COMPONENT_AUTOFIRE_SHOT_SUCCESS // All is well, we can continue shooting.
/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
var/obj/item/gun/akimbo_gun = shooter.get_inactive_hand()
var/bonus_spread = 0
if(isgun(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo)
if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter))
bonus_spread = dual_wield_spread
addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1)
process_fire(target, shooter, TRUE, params, null, bonus_spread)
#undef AUTOFIRE_MOUSEUP
#undef AUTOFIRE_MOUSEDOWN
+20 -7
View File
@@ -13,17 +13,17 @@
var/can_contaminate
/datum/component/radioactive/Initialize(_strength = 0, _source, _half_life = RAD_HALF_LIFE, _can_contaminate = TRUE)
if(!istype(parent, /atom))
return COMPONENT_INCOMPATIBLE
strength = _strength
source = _source
hl3_release_date = _half_life
can_contaminate = _can_contaminate
if(istype(parent, /atom))
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(rad_examine))
if(isitem(parent))
RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(rad_attack))
RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(rad_attack))
else
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(rad_examine))
RegisterSignal(parent, COMSIG_ADMIN_DECONTAMINATE, PROC_REF(admin_decontaminate))
if(isitem(parent))
RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(rad_attack))
RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(rad_attack))
if(strength > RAD_MINIMUM_CONTAMINATION)
SSradiation.warn(src)
//Let's make er glow
@@ -31,10 +31,12 @@
var/atom/movable/master = parent
master.add_filter("rad_glow", 2, list("type" = "outline", "color" = "#39ff1430", "size" = 2))
addtimer(CALLBACK(src, PROC_REF(glow_loop), master), rand(1, 19)) //Things should look uneven
LAZYADD(SSradiation.all_radiations, src)
START_PROCESSING(SSradiation, src)
/datum/component/radioactive/Destroy()
STOP_PROCESSING(SSradiation, src)
LAZYREMOVE(SSradiation.all_radiations, src)
var/atom/movable/master = parent
master.remove_filter("rad_glow")
return ..()
@@ -99,6 +101,17 @@
return
strength -= strength / hl3_release_date
/datum/component/radioactive/proc/admin_decontaminate()
SIGNAL_HANDLER
. = TRUE
if(ismob(parent))
var/mob/M = parent
M.radiation = 0
if(ismob(source))
var/mob/M = source
M.radiation = 0
qdel(src)
#undef RAD_AMOUNT_LOW
#undef RAD_AMOUNT_MEDIUM
#undef RAD_AMOUNT_HIGH
+1 -1
View File
@@ -158,7 +158,7 @@
var/charge_loss = 1 // how many charges do we lose
if(istype(hitby, /obj/item/projectile))
if(isprojectile(hitby))
var/obj/item/projectile/P = hitby
if(P.shield_buster)
charge_loss = 3
+1 -1
View File
@@ -76,7 +76,7 @@
var/obj/item/I = AM
if(I.flags & ABSTRACT)
return
else if(istype(AM, /obj/item/projectile))
else if(isprojectile(AM))
var/obj/item/projectile/P = AM
if(P.original != parent)
return
+4 -1
View File
@@ -537,7 +537,10 @@
/client/proc/view_var_Topic(href, href_list, hsrc)
//This should all be moved over to datum/admins/Topic() or something ~Carn
if(!check_rights(R_ADMIN|R_MOD, FALSE) && !((href_list["datumrefresh"] || href_list["Vars"] || href_list["VarsList"]) && check_rights(R_VIEWRUNTIMES, FALSE)))
if(!check_rights(R_ADMIN|R_MOD, FALSE) \
&& !((href_list["datumrefresh"] || href_list["Vars"] || href_list["VarsList"]) && check_rights(R_VIEWRUNTIMES, FALSE)) \
&& !((href_list["proc_call"]) && check_rights(R_PROCCALL, FALSE)) \
)
return // clients with R_VIEWRUNTIMES can still refresh the window/view references/view lists. they cannot edit anything else however.
if(view_var_Topic_list(href, href_list, hsrc)) // done because you can't use UIDs with lists and I don't want to snowflake into the below check to supress warnings
+5 -5
View File
@@ -209,11 +209,11 @@
if(!ghost.client)
continue
if((ghost.client.prefs.toggles & PREFTOGGLE_CHAT_GHOSTSIGHT) && !(ghost in viewers(user_turf, null)))
ghost.show_message("<span class='emote'>[user] ([ghost_follow_link(user, ghost)]) [msg]</span>")
ghost.show_message("<span class='emote'>[user] ([ghost_follow_link(user, ghost)]) [msg]</span>", chat_message_type = MESSAGE_TYPE_LOCALCHAT)
if(isobserver(user))
for(var/mob/dead/observer/ghost in viewers(user))
ghost.show_message("<span class=deadsay>[displayed_msg]</span>", EMOTE_VISIBLE)
ghost.show_message("<span class=deadsay>[displayed_msg]</span>", EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT)
else if((emote_type & EMOTE_AUDIBLE) && !user.mind?.miming)
user.audible_message(displayed_msg, deaf_message = "<span class='emote'>You see how <b>[user]</b> [msg]</span>")
@@ -283,10 +283,10 @@
for(var/mob/O as anything in can_see)
if(O.status_flags & PASSEMOTES)
for(var/obj/item/holder/H in O.contents)
H.show_message(text, EMOTE_VISIBLE)
H.show_message(text, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT)
for(var/mob/living/M in O.contents)
M.show_message(text, EMOTE_VISIBLE)
M.show_message(text, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT)
if(O.client?.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT)
O.create_chat_message(user, runechat_text, symbol = RUNECHAT_SYMBOL_EMOTE)
@@ -636,7 +636,7 @@
if(!ghost.client)
continue
if(ghost.client.prefs.toggles & PREFTOGGLE_CHAT_GHOSTSIGHT && !(ghost in viewers(origin_turf, null)))
ghost.show_message("[ghost_follow_link(src, ghost)] [ghost_text]")
ghost.show_message("[ghost_follow_link(src, ghost)] [ghost_text]", chat_message_type = MESSAGE_TYPE_LOCALCHAT)
visible_message(text)
+11 -10
View File
@@ -23,9 +23,7 @@
effect_in = effect
if(isnull(effect_out))
effect_out = effect
if(D.start(atom_to_teleport, destination, variance_range, force_teleport, effect_in, effect_out, sound_in, sound_out, bypass_area_flag, safe_turf_pick, do_effect))
return TRUE
return FALSE
return D.start(atom_to_teleport, destination, variance_range, force_teleport, effect_in, effect_out, sound_in, sound_out, bypass_area_flag, safe_turf_pick, do_effect)
/datum/teleport
var/atom/movable/teleatom //atom to teleport
@@ -166,6 +164,16 @@
playSpecials(curturf,effectin,soundin)
if(isliving(teleatom))
var/mob/living/target_mob = teleatom
if(target_mob.buckled)
target_mob.buckled.unbuckle_mob(target_mob, force = TRUE)
if(target_mob.has_buckled_mobs())
target_mob.unbuckle_all_mobs(force = TRUE)
if(ismachinery(target_mob.loc) || istype(target_mob.loc, /obj/item/mecha_parts/mecha_equipment/medical/sleeper))
var/obj/location = target_mob.loc
location.force_eject_occupant(target_mob)
if(force_teleport)
teleatom.forceMove(destturf)
playSpecials(destturf,effectout,soundout)
@@ -173,13 +181,6 @@
if(teleatom.Move(destturf))
playSpecials(destturf,effectout,soundout)
if(isliving(teleatom))
var/mob/living/L = teleatom
if(L.buckled)
L.buckled.unbuckle_mob(L, force = TRUE)
if(L.has_buckled_mobs())
L.unbuckle_all_mobs(force = TRUE)
destarea.Entered(teleatom)
return TRUE
+1 -1
View File
@@ -4,7 +4,7 @@
var/rights
/datum/keybinding/admin/can_use(client/C, mob/M)
if(rights && !check_rights(rights, FALSE))
if(rights && !check_rights(rights, FALSE, M))
return FALSE
return !isnull(C.holder) && ..()

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