From 1509d9d183cbfbea42431bbd21a1c5881ccd36d5 Mon Sep 17 00:00:00 2001
From: Fermi <>
Date: Sun, 24 Nov 2019 03:04:13 +0000
Subject: [PATCH] Revert "Merge remote-tracking branch 'upstream/master'"
This reverts commit 135608551fd36b39be5057bca9121732eaf24f47, reversing
changes made to ce7e9ac4527d210965891b53e6c8cdf74b817da0.
---
code/__DEFINES/_globals.dm | 6 -
code/__DEFINES/inventory.dm | 6 +-
code/__HELPERS/cmp.dm | 6 -
code/_globalvars/lists/flavor_misc.dm | 6 +-
code/_globalvars/lists/mapping.dm | 2 +-
code/_globalvars/lists/poll_ignore.dm | 4 -
code/controllers/subsystem/persistence.dm | 24 ----
code/controllers/subsystem/vis_overlays.dm | 9 +-
code/controllers/subsystem/vote.dm | 10 +-
code/datums/components/storage/storage.dm | 1 -
code/datums/martial.dm | 1 -
code/datums/martial/boxing.dm | 10 +-
code/datums/martial/cqc.dm | 2 -
code/datums/martial/krav_maga.dm | 11 +-
code/datums/martial/psychotic_brawl.dm | 1 -
code/datums/martial/sleeping_carp.dm | 2 -
code/datums/martial/wrestling.dm | 19 +--
code/datums/outfit.dm | 10 +-
code/game/gamemodes/clock_cult/clock_cult.dm | 4 +
code/game/gamemodes/clown_ops/clown_ops.dm | 2 +-
code/game/gamemodes/dynamic/dynamic.dm | 8 +-
.../dynamic/dynamic_rulesets_events.dm | 3 +-
.../dynamic/dynamic_rulesets_midround.dm | 10 +-
.../dynamic/dynamic_rulesets_roundstart.dm | 2 +-
code/game/gamemodes/nuclear/nuclear.dm | 2 +-
code/game/machinery/computer/camera.dm | 49 ++++---
code/game/objects/items/RCD.dm | 15 +-
code/game/objects/items/clown_items.dm | 10 +-
code/game/objects/items/devices/PDA/PDA.dm | 50 ++++---
code/game/objects/items/storage/backpack.dm | 2 +-
code/game/objects/items/storage/toolbox.dm | 4 +-
.../game/objects/items/storage/uplink_kits.dm | 10 --
code/game/objects/items/weaponry.dm | 6 +-
.../crates_lockers/closets/fitness.dm | 3 -
.../crates_lockers/closets/job_closets.dm | 1 -
.../crates_lockers/closets/secure/cargo.dm | 3 +-
.../closets/secure/engineering.dm | 1 -
.../crates_lockers/closets/secure/medical.dm | 3 +-
.../closets/secure/scientist.dm | 1 -
.../crates_lockers/closets/secure/security.dm | 2 -
.../crates_lockers/closets/wardrobe.dm | 37 +++--
.../objects/structures/ghost_role_spawners.dm | 2 +-
code/game/objects/structures/holosign.dm | 9 +-
code/game/objects/structures/plasticflaps.dm | 6 +-
.../antagonists/_common/antag_spawner.dm | 4 +-
.../abductor/equipment/abduction_outfits.dm | 4 +-
.../clock_structures/traps/brass_skewer.dm | 2 +-
code/modules/antagonists/wizard/wizard.dm | 2 +-
code/modules/awaymissions/capture_the_flag.dm | 6 +-
code/modules/awaymissions/corpse.dm | 2 +-
code/modules/client/preferences.dm | 4 +
code/modules/client/verbs/suicide.dm | 2 +-
code/modules/clothing/gloves/_gloves.dm | 2 +-
code/modules/clothing/outfits/ert.dm | 20 +--
code/modules/clothing/outfits/event.dm | 2 +-
code/modules/clothing/outfits/standard.dm | 22 +--
code/modules/clothing/outfits/vr.dm | 9 +-
code/modules/clothing/outfits/vv_outfit.dm | 4 +-
code/modules/clothing/shoes/_shoes.dm | 2 +-
code/modules/clothing/suits/miscellaneous.dm | 129 ------------------
.../crafting/recipes/recipes_clothing.dm | 28 ----
code/modules/events/_event.dm | 2 +-
code/modules/events/major_dust.dm | 1 -
code/modules/events/meteor_wave.dm | 1 -
code/modules/events/processor_overload.dm | 1 -
code/modules/holiday/holidays.dm | 7 -
code/modules/jobs/job_types/_job.dm | 15 +-
code/modules/jobs/job_types/assistant.dm | 7 +-
code/modules/jobs/job_types/clown.dm | 13 +-
code/modules/jobs/job_types/cook.dm | 4 +-
code/modules/jobs/job_types/curator.dm | 2 +-
code/modules/jobs/job_types/detective.dm | 2 +-
code/modules/jobs/job_types/lawyer.dm | 2 +-
code/modules/jobs/job_types/mime.dm | 8 +-
code/modules/jobs/job_types/shaft_miner.dm | 2 +-
code/modules/mining/aux_base_camera.dm | 10 +-
.../mining/equipment/regenerative_core.dm | 16 ---
code/modules/mining/mine_items.dm | 4 -
.../modules/mob/dead/new_player/new_player.dm | 5 +-
code/modules/mob/dead/observer/observer.dm | 1 -
code/modules/mob/living/carbon/carbon.dm | 1 -
.../modules/mob/living/carbon/damage_procs.dm | 2 +-
code/modules/mob/living/carbon/human/human.dm | 2 +-
.../mob/living/carbon/human/human_defense.dm | 4 +-
.../mob/living/carbon/human/human_defines.dm | 2 +
.../mob/living/carbon/human/inventory.dm | 4 +-
.../mob/living/carbon/human/species.dm | 11 +-
.../carbon/human/species_types/bugmen.dm | 71 ++++++----
code/modules/mob/living/living_defense.dm | 3 -
code/modules/mob/living/silicon/pai/pai.dm | 5 +-
.../mob/living/simple_animal/bot/bot.dm | 5 +-
.../mob/living/simple_animal/bot/honkbot.dm | 1 -
.../mob/living/simple_animal/bot/medbot.dm | 2 +-
code/modules/mob/mob_helpers.dm | 4 +-
code/modules/ninja/outfit.dm | 2 +-
code/modules/projectiles/projectile/beams.dm | 4 +-
.../chemistry/machinery/chem_dispenser.dm | 6 +-
.../chemistry/reagents/other_reagents.dm | 1 -
.../reagents/reagent_containers/spray.dm | 2 +-
.../machine_designs_service.dm | 8 --
.../modules/research/machinery/_production.dm | 5 +-
code/modules/research/techweb/all_nodes.dm | 6 +-
code/modules/ruins/lavaland_ruin_code.dm | 2 +-
code/modules/surgery/bodyparts/bodyparts.dm | 8 +-
.../surgery/experimental_dissection.dm | 2 +-
code/modules/surgery/organs/heart.dm | 1 +
code/modules/surgery/organs/organ_internal.dm | 3 +
code/modules/uplink/uplink_items.dm | 15 --
code/modules/vending/wardrobes.dm | 5 -
html/changelogs/AutoChangeLog-pr-9323.yml | 4 -
html/changelogs/AutoChangeLog-pr-9518.yml | 4 -
html/changelogs/AutoChangeLog-pr-9530.yml | 5 -
html/changelogs/AutoChangeLog-pr-9681.yml | 4 -
html/changelogs/AutoChangeLog-pr-9703.yml | 4 -
html/changelogs/AutoChangeLog-pr-9720.yml | 4 -
html/changelogs/AutoChangeLog-pr-9749.yml | 4 -
html/changelogs/AutoChangeLog-pr-9812.yml | 4 -
html/changelogs/AutoChangeLog-pr-9823.yml | 6 -
html/changelogs/AutoChangeLog-pr-9828.yml | 4 -
html/changelogs/AutoChangeLog-pr-9831.yml | 4 -
html/changelogs/AutoChangeLog-pr-9864.yml | 5 -
html/changelogs/AutoChangeLog-pr-9865.yml | 4 -
html/changelogs/AutoChangeLog-pr-9866.yml | 4 -
html/changelogs/AutoChangeLog-pr-9868.yml | 4 -
html/changelogs/AutoChangeLog-pr-9869.yml | 4 -
html/changelogs/AutoChangeLog-pr-9871.yml | 5 -
html/changelogs/AutoChangeLog-pr-9873.yml | 5 -
html/changelogs/AutoChangeLog-pr-9874.yml | 4 -
html/changelogs/AutoChangeLog-pr-9875.yml | 4 -
html/changelogs/AutoChangeLog-pr-9876.yml | 4 -
html/changelogs/AutoChangeLog-pr-9877.yml | 4 -
html/changelogs/AutoChangeLog-pr-9880.yml | 4 -
html/changelogs/AutoChangeLog-pr-9881.yml | 4 -
html/changelogs/AutoChangeLog-pr-9886.yml | 5 -
html/changelogs/AutoChangeLog-pr-9887.yml | 7 -
html/changelogs/AutoChangeLog-pr-9889.yml | 4 -
html/changelogs/AutoChangeLog-pr-9891.yml | 4 -
html/changelogs/AutoChangeLog-pr-9896.yml | 4 -
html/changelogs/AutoChangeLog-pr-9898.yml | 4 -
html/changelogs/AutoChangeLog-pr-9908.yml | 4 -
html/changelogs/AutoChangeLog-pr-9909.yml | 5 -
icons/mob/head.dmi | Bin 203857 -> 197892 bytes
icons/mob/pai.dmi | Bin 74491 -> 29273 bytes
icons/mob/suit.dmi | Bin 388475 -> 362740 bytes
icons/mob/wings.dmi | Bin 68434 -> 98722 bytes
icons/obj/clothing/hats.dmi | Bin 96522 -> 95104 bytes
icons/obj/clothing/suits.dmi | Bin 132273 -> 126176 bytes
icons/obj/guns/energy.dmi | Bin 38780 -> 38789 bytes
icons/obj/power.dmi | Bin 33308 -> 33196 bytes
icons/obj/storage.dmi | Bin 69489 -> 69491 bytes
icons/obj/tools.dmi | Bin 27040 -> 26077 bytes
.../crates_lockers/closets/fitness.dm | 5 +
.../closets/secure/citadel_lockers.dm | 7 +
.../crates_lockers/closets/wardrobe.dm | 37 +++++
modular_citadel/code/game/objects/tools.dm | 18 +++
.../code/modules/arousal/arousal.dm | 2 +-
.../living/silicon/robot/dogborg_equipment.dm | 4 +-
.../reagents/chemistry/reagents/MKUltra.dm | 6 +-
.../chemistry/reagents/eigentstasium.dm | 4 +-
.../reagents/chemistry/recipes/fermi.dm | 30 ++--
.../icons/mob/mutant_bodyparts.dmi | Bin 7023 -> 6734 bytes
modular_citadel/icons/mob/pai.dmi | Bin 0 -> 74491 bytes
modular_citadel/icons/mob/suit_digi.dmi | Bin 396555 -> 377958 bytes
modular_citadel/icons/obj/power.dmi | Bin 0 -> 1782 bytes
modular_citadel/icons/obj/tools.dmi | Bin 0 -> 18598 bytes
sound/weapons/Gunshot.ogg | Bin 16221 -> 13653 bytes
sound/weapons/Gunshot2.ogg | Bin 15961 -> 13967 bytes
sound/weapons/Gunshot3.ogg | Bin 14917 -> 12899 bytes
sound/weapons/Gunshot4.ogg | Bin 16197 -> 13876 bytes
sound/weapons/Gunshot_silenced.ogg | Bin 19687 -> 16205 bytes
sound/weapons/Gunshot_smg.ogg | Bin 18259 -> 8789 bytes
sound/weapons/IonRifle.ogg | Bin 22251 -> 10920 bytes
sound/weapons/Laser.ogg | Bin 24485 -> 17121 bytes
sound/weapons/LaserSlugv3.ogg | Bin 19680 -> 19168 bytes
sound/weapons/Taser.ogg | Bin 13094 -> 10230 bytes
sound/weapons/laser3.ogg | Bin 23269 -> 20077 bytes
sound/weapons/lasercannonfire.ogg | Bin 22227 -> 7642 bytes
sound/weapons/magpistol.ogg | Bin 24579 -> 20376 bytes
sound/weapons/magrifle.ogg | Bin 22118 -> 18877 bytes
sound/weapons/pulse.ogg | Bin 13446 -> 13752 bytes
sound/weapons/pulse2.ogg | Bin 19652 -> 15572 bytes
sound/weapons/pulse3.ogg | Bin 18902 -> 14560 bytes
sound/weapons/smg_empty_alarm.ogg | Bin 34988 -> 54294 bytes
sound/weapons/taser2.ogg | Bin 14915 -> 6558 bytes
strings/clockwork_cult_changelog.txt | 4 -
tgstation.dme | 4 +
186 files changed, 405 insertions(+), 764 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-9323.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9518.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9530.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9681.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9703.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9720.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9749.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9812.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9823.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9828.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9831.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9864.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9865.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9866.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9868.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9869.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9871.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9873.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9874.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9875.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9876.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9877.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9880.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9881.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9886.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9887.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9889.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9891.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9896.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9898.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9908.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-9909.yml
create mode 100644 modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm
create mode 100644 modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm
create mode 100644 modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
create mode 100644 modular_citadel/code/game/objects/tools.dm
create mode 100644 modular_citadel/icons/mob/pai.dmi
create mode 100644 modular_citadel/icons/obj/power.dmi
create mode 100644 modular_citadel/icons/obj/tools.dmi
diff --git a/code/__DEFINES/_globals.dm b/code/__DEFINES/_globals.dm
index cc3e385f9f..874223a612 100644
--- a/code/__DEFINES/_globals.dm
+++ b/code/__DEFINES/_globals.dm
@@ -41,12 +41,6 @@
//Create a list global that is initialized as an empty list
#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list())
-// Create a typed list global with an initializer expression
-#define GLOBAL_LIST_INIT_TYPED(X, Typepath, InitValue) GLOBAL_RAW(/list##Typepath/X); GLOBAL_MANAGED(X, InitValue)
-
-// Create a typed list global that is initialized as an empty list
-#define GLOBAL_LIST_EMPTY_TYPED(X, Typepath) GLOBAL_LIST_INIT_TYPED(X, Typepath, list())
-
//Create a typed global with an initializer expression
#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue)
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index f5ea8d835f..632e4adef9 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -4,9 +4,9 @@
#define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money
#define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device
#define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets
-#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits
-#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh
-#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh
+#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits
+#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons
+#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe
//Inventory depth: limits how many nested storage items you can access directly.
//1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index c0501b4e41..37f36a7e0d 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -84,9 +84,3 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_job_display_asc(datum/job/A, datum/job/B)
return A.display_order - B.display_order
-
-/proc/cmp_numbered_displays_name_asc(datum/numbered_display/A, datum/numbered_display/B)
- return sorttext(A.sample_object.name, B.sample_object.name)
-
-/proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B)
- return sorttext(B.sample_object.name, A.sample_object.name)
\ No newline at end of file
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 0ac8a61183..a2135b93b2 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -7,15 +7,15 @@ GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/faci
GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names
GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names
//Underwear
-GLOBAL_LIST_EMPTY_TYPED(underwear_list, /datum/sprite_accessory/underwear/bottom) //stores bottoms indexed by name
+GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear/bottom indexed by name
GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name
GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name
//Undershirts
-GLOBAL_LIST_EMPTY_TYPED(undershirt_list, /datum/sprite_accessory/underwear/top) //stores tops indexed by name
+GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/underwear/top indexed by name
GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name
GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name
//Socks
-GLOBAL_LIST_EMPTY_TYPED(socks_list, /datum/sprite_accessory/underwear/socks) //stores socks indexed by name
+GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/underwear/socks indexed by name
//Lizard Bits (all datum lists indexed by name)
GLOBAL_LIST_EMPTY(body_markings_list)
GLOBAL_LIST_EMPTY(tails_list_lizard)
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index 6b8d91acf9..f0479cd8aa 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -45,6 +45,6 @@ GLOBAL_LIST_EMPTY(vr_spawnpoints)
//used by jump-to-area etc. Updated by area/updateName()
GLOBAL_LIST_EMPTY(sortedAreas)
/// An association from typepath to area instance. Only includes areas with `unique` set.
-GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
+GLOBAL_LIST_EMPTY(areas_by_type)
GLOBAL_LIST_EMPTY(all_abstract_markers)
diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm
index 3a026d2aa5..626bba9fc3 100644
--- a/code/_globalvars/lists/poll_ignore.dm
+++ b/code/_globalvars/lists/poll_ignore.dm
@@ -13,8 +13,6 @@
#define POLL_IGNORE_GOLEM "golem"
#define POLL_IGNORE_SWARMER "swarmer"
#define POLL_IGNORE_DRONE "drone"
-#define POLL_IGNORE_DEMON "demon"
-#define POLL_IGNORE_WIZARD "wizard"
#define POLL_IGNORE_CLONE "clone"
GLOBAL_LIST_INIT(poll_ignore_desc, list(
@@ -31,8 +29,6 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_GOLEM = "Golems",
POLL_IGNORE_SWARMER = "Swarmer shells",
POLL_IGNORE_DRONE = "Drone shells",
- POLL_IGNORE_DEMON = "Demons",
- POLL_IGNORE_WIZARD = "Wizards",
POLL_IGNORE_CLONE = "Defective/SDGF clones"
))
GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore())
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index c3db8552c6..1b7cade71f 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -12,7 +12,6 @@ SUBSYSTEM_DEF(persistence)
var/list/obj/structure/chisel_message/chisel_messages = list()
var/list/saved_messages = list()
var/list/saved_modes = list(1,2,3)
- var/list/saved_threat_levels = list(1,1,1)
var/list/saved_maps
var/list/saved_trophies = list()
var/list/spawned_objects = list()
@@ -28,7 +27,6 @@ SUBSYSTEM_DEF(persistence)
LoadChiselMessages()
LoadTrophies()
LoadRecentModes()
- LoadRecentThreats()
LoadRecentMaps()
LoadPhotoPersistence()
if(CONFIG_GET(flag/use_antag_rep))
@@ -168,15 +166,6 @@ SUBSYSTEM_DEF(persistence)
return
saved_modes = json["data"]
-/datum/controller/subsystem/persistence/proc/LoadRecentThreats()
- var/json_file = file("data/RecentThreatLevels.json")
- if(!fexists(json_file))
- return
- var/list/json = json_decode(file2text(json_file))
- if(!json)
- return
- saved_threat_levels = json["data"]
-
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
var/json_file = file("data/RecentMaps.json")
if(!fexists(json_file))
@@ -227,7 +216,6 @@ SUBSYSTEM_DEF(persistence)
CollectSecretSatchels()
CollectTrophies()
CollectRoundtype()
- CollectThreatLevel()
RecordMaps()
SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
if(CONFIG_GET(flag/use_antag_rep))
@@ -384,18 +372,6 @@ SUBSYSTEM_DEF(persistence)
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
-/datum/controller/subsystem/persistence/proc/CollectThreatLevel()
- if(istype(SSticker.mode, /datum/game_mode/dynamic))
- var/datum/game_mode/dynamic/mode = SSticker.mode
- saved_threat_levels[3] = saved_threat_levels[2]
- saved_threat_levels[2] = saved_threat_levels [1]
- saved_threat_levels[1] = mode.threat_level
- var/json_file = file("data/RecentThreatLevels.json")
- var/list/file_data = list()
- file_data["data"] = saved_threat_levels
- fdel(json_file)
- WRITE_FILE(json_file, json_encode(file_data))
-
/datum/controller/subsystem/persistence/proc/RecordMaps()
saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]")
var/json_file = file("data/RecentMaps.json")
diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm
index 0635709074..107d65a558 100644
--- a/code/controllers/subsystem/vis_overlays.dm
+++ b/code/controllers/subsystem/vis_overlays.dm
@@ -29,8 +29,8 @@ SUBSYSTEM_DEF(vis_overlays)
return
//the "thing" var can be anything with vis_contents which includes images
-/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE)
- . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]"
+/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha=255)
+ . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]"
var/obj/effect/overlay/vis/overlay = vis_overlay_cache[.]
if(!overlay)
overlay = new
@@ -40,7 +40,6 @@ SUBSYSTEM_DEF(vis_overlays)
overlay.plane = plane
overlay.dir = dir
overlay.alpha = alpha
- overlay.appearance_flags |= add_appearance_flags
vis_overlay_cache[.] = overlay
else
overlay.unused = 0
@@ -65,12 +64,10 @@ SUBSYSTEM_DEF(vis_overlays)
UnregisterSignal(thing, COMSIG_ATOM_DIR_CHANGE)
/datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir)
- if(old_dir == new_dir)
- return
var/rotation = dir2angle(old_dir) - dir2angle(new_dir)
var/list/overlays_to_remove = list()
for(var/i in thing.managed_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
- add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags)
+ add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation))
overlays_to_remove += overlay
remove_vis_overlay(thing, overlays_to_remove)
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index dee10e4998..50be61f91d 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -153,10 +153,6 @@ SUBSYSTEM_DEF(vote)
if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started.
return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.")
GLOB.master_mode = "dynamic"
- if("extended" in choices)
- if(. == "extended")
- GLOB.dynamic_forced_extended = TRUE // we still do the rest of the stuff
- choices[PEACE] += choices["extended"]
var/mean = 0
var/voters = 0
for(var/client/c in GLOB.clients)
@@ -257,11 +253,7 @@ SUBSYSTEM_DEF(vote)
if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote
choices.Add("secret", "extended")
if("dynamic")
- var/saved_threats = SSpersistence.saved_threat_levels
- if((saved_threats[1]+saved_threats[2]+saved_threats[3])>150)
- choices.Add("extended",PEACE,CHAOS)
- else
- choices.Add(PEACE,CHAOS)
+ choices.Add(PEACE,CHAOS)
if("custom")
question = stripped_input(usr,"What is the vote for?")
if(!question)
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index dd189137a5..a92ae9e629 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -309,7 +309,6 @@
else
var/datum/numbered_display/ND = .[I.type]
ND.number++
- . = sortTim(., /proc/cmp_numbered_displays_name_asc, associative = TRUE)
//This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/datum/component/storage/proc/orient2hud(mob/user, maxcolumns)
diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index 26a709590c..d119759efc 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -11,7 +11,6 @@
var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not
var/help_verb
var/no_guns = FALSE
- var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist.
var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
/datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index b98bc4f951..7399528e1c 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -1,7 +1,6 @@
/datum/martial_art/boxing
name = "Boxing"
id = MARTIALART_BOXING
- pacifism_check = FALSE //Let's pretend pacifists can boxe the heck out of other people, it only deals stamina damage right now.
/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
to_chat(A, "Can't disarm while boxing! ")
@@ -17,15 +16,14 @@
var/atk_verb = pick("left hook","right hook","straight punch")
- var/damage = rand(10, 13)
- var/extra_damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
- if(extra_damage == A.dna.species.punchdamagelow)
+ var/damage = rand(5, 8) + A.dna.species.punchdamagelow
+ if(!damage)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
D.visible_message("[A] has attempted to [atk_verb] [D]! ", \
"[A] has attempted to [atk_verb] [D]! ", null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to hit", atk_verb)
- return TRUE
- damage += extra_damage
+ return 0
+
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee")
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 73173a4a9a..c7644997ee 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -124,8 +124,6 @@
add_to_streak("G",D)
if(check_streak(A,D))
return TRUE
- if(A == D) // no self grab.
- return FALSE
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1)
else
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 4e8dacaef9..6379d481ca 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -19,9 +19,6 @@
owner.visible_message("[owner] assumes a neutral stance. ", "Your next attack is cleared. ")
H.mind.martial_art.streak = ""
else
- if(HAS_TRAIT(H, TRAIT_PACIFISM))
- to_chat(H, "You don't want to harm other people! ")
- return
owner.visible_message("[owner] assumes the Neck Chop stance! ", "Your next attack will be a Neck Chop. ")
H.mind.martial_art.streak = "neck_chop"
@@ -39,9 +36,6 @@
owner.visible_message("[owner] assumes a neutral stance. ", "Your next attack is cleared. ")
H.mind.martial_art.streak = ""
else
- if(HAS_TRAIT(H, TRAIT_PACIFISM))
- to_chat(H, "You don't want to harm other people! ")
- return
owner.visible_message("[owner] assumes the Leg Sweep stance! ", "Your next attack will be a Leg Sweep. ")
H.mind.martial_art.streak = "leg_sweep"
@@ -59,9 +53,6 @@
owner.visible_message("[owner] assumes a neutral stance. ", "Your next attack is cleared. ")
H.mind.martial_art.streak = ""
else
- if(HAS_TRAIT(H, TRAIT_PACIFISM))
- to_chat(H, "You don't want to harm other people! ")
- return
owner.visible_message("[owner] assumes the Lung Punch stance! ", "Your next attack will be a Lung Punch. ")
H.mind.martial_art.streak = "quick_choke"//internal name for lung punch
@@ -154,6 +145,8 @@
return 1
/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(check_streak(A,D))
+ return 1
var/obj/item/I = null
if(prob(60))
I = D.get_active_held_item()
diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm
index 45d73353f9..34301516dc 100644
--- a/code/datums/martial/psychotic_brawl.dm
+++ b/code/datums/martial/psychotic_brawl.dm
@@ -1,7 +1,6 @@
/datum/martial_art/psychotic_brawling
name = "Psychotic Brawling"
id = MARTIALART_PSYCHOBRAWL
- pacifism_check = FALSE //Quite uncontrollable and unpredictable, people will still end up harming others with it.
/datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
return psycho_attack(A,D)
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index f89374dc2a..801e8c8c7a 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -105,8 +105,6 @@
add_to_streak("G",D)
if(check_streak(A,D))
return 1
- if(A == D) //no self grab stun
- return FALSE
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1)
else
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index c967779d03..81ec0bf977 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -49,9 +49,6 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT. ")
return
- if(HAS_TRAIT(owner, TRAIT_PACIFISM))
- to_chat(owner, "You are too HIPPIE to WRESTLE other living beings! ")
- return
owner.visible_message("[owner] prepares to BODY SLAM! ", "Your next attack will be a BODY SLAM. ")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "slam"
@@ -64,9 +61,6 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT. ")
return
- if(HAS_TRAIT(owner, TRAIT_PACIFISM))
- to_chat(owner, "You are too HIPPIE to WRESTLE other living beings! ")
- return
owner.visible_message("[owner] prepares to THROW! ", "Your next attack will be a THROW. ")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "throw"
@@ -79,9 +73,6 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT. ")
return
- if(HAS_TRAIT(owner, TRAIT_PACIFISM))
- to_chat(owner, "You are too HIPPIE to WRESTLE other living beings! ")
- return
owner.visible_message("[owner] prepares to KICK! ", "Your next attack will be a KICK. ")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "kick"
@@ -94,9 +85,6 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT. ")
return
- if(HAS_TRAIT(owner, TRAIT_PACIFISM))
- to_chat(owner, "You are too HIPPIE to WRESTLE other living beings! ")
- return
owner.visible_message("[owner] prepares to STRIKE! ", "Your next attack will be a STRIKE. ")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "strike"
@@ -109,9 +97,6 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT. ")
return
- if(HAS_TRAIT(owner, TRAIT_PACIFISM))
- to_chat(owner, "You are too HIPPIE to WRESTLE other living beings! ")
- return
owner.visible_message("[owner] prepares to LEG DROP! ", "Your next attack will be a LEG DROP. ")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "drop"
@@ -448,8 +433,8 @@
/datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(check_streak(A,D))
return 1
- if(A.pulling == D || A == D) // don't stun grab yoursel
- return FALSE
+ if(A.pulling == D)
+ return 1
A.start_pulling(D)
D.visible_message("[A] gets [D] in a cinch! ", \
"[A] gets [D] in a cinch! ")
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index da379b9851..8386b59d97 100755
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -28,16 +28,16 @@
var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters
var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns
-/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
//to be overridden for customization depending on client prefs,species etc
return
-/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
//to be overridden for toggling internals, id binding, access etc
return
-/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
- pre_equip(H, visualsOnly, preference_source)
+/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ pre_equip(H, visualsOnly)
//Start with uniform,suit,backpack for additional slots
if(uniform)
@@ -103,7 +103,7 @@
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
HS.ToggleHelmet()
- post_equip(H, visualsOnly, preference_source)
+ post_equip(H, visualsOnly)
if(!visualsOnly)
apply_fingerprints(H)
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 30e53cdee8..76e6268977 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -339,6 +339,10 @@ Credit where due:
CLOCKCULTCHANGELOG\
\
\
+ Zelus oil: A new reagent. It can be used to heal the faithful to Ratvar, or kill heretics and moreso stun blood cultists,\
+ or splashed onto metal sheets to make brass. This chemical can be found in minimal quantities by grinding brass sheets.\
+ Brass Flasks: Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! \
+ These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage.\
Good luck! "
/obj/item/paper/servant_primer/Initialize()
diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm
index 49a336e16a..66de72bad2 100644
--- a/code/game/gamemodes/clown_ops/clown_ops.dm
+++ b/code/game/gamemodes/clown_ops/clown_ops.dm
@@ -53,7 +53,7 @@
/datum/outfit/syndicate/clownop/no_crystals
tc = 0
-/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index 25edd0c68b..83a3debfdc 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -409,7 +409,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
message_admins("Drafting players for forced ruleset [rule.name].")
log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].")
rule.mode = src
- rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency
+ rule.acceptable(GLOB.player_list.len, threat_level) // Assigns some vars in the modes, running it here for consistency
rule.candidates = candidates.Copy()
rule.trim_candidates()
if (rule.ready(TRUE))
@@ -421,7 +421,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return TRUE
var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
- if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required
+ if (rule.acceptable(GLOB.player_list.len, threat_level) && threat >= rule.cost) // If we got the population and threat required
rule.candidates = candidates.Copy()
rule.trim_candidates()
if (rule.ready() && rule.candidates.len > 0)
@@ -429,12 +429,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(!drafted_rules.len)
message_admins("Not enough threat level for roundstart antags!")
log_game("DYNAMIC: Not enough threat level for roundstart antags!")
- var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1)
+ var/indice_pop = min(10,round(GLOB.player_list.len/pop_per_requirement)+1)
extra_rulesets_amount = 0
if (GLOB.dynamic_classic_secret)
extra_rulesets_amount = 0
else
- if (roundstart_pop_ready > GLOB.dynamic_high_pop_limit)
+ if (GLOB.player_list.len > GLOB.dynamic_high_pop_limit)
message_admins("High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.")
log_game("DYNAMIC: High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.")
if (threat_level > high_pop_second_rule_req)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
index 4ac8cc91d3..a20022cb71 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
@@ -143,6 +143,7 @@
repeatable_weight_decrease = 2
requirements = list(60,50,40,30,30,30,30,30,30,30)
high_population_requirement = 30
+ repeatable = TRUE
/datum/dynamic_ruleset/event/meteor_wave/ready()
if(mode.threat_level > 40 && mode.threat >= 25 && prob(20))
@@ -269,7 +270,7 @@
repeatable = TRUE
/datum/dynamic_ruleset/event/processor_overload
- name = "Processor Overload"
+ name = "Processer Overload"
config_tag = "processor_overload"
typepath = /datum/round_event/processor_overload
cost = 4
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 41de85f7ee..550ef043a0 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -107,11 +107,11 @@
candidates = pollGhostCandidates("The mode is looking for volunteers to become a [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300)
- if(!candidates || candidates.len <= required_candidates)
- message_admins("The ruleset [name] did not receive enough applications.")
- log_game("DYNAMIC: The ruleset [name] did not receive enough applications.")
+ if(!candidates || candidates.len <= 0)
+ message_admins("The ruleset [name] received no applications.")
+ log_game("DYNAMIC: The ruleset [name] received no applications.")
mode.refund_threat(cost)
- mode.log_threat("Rule [name] refunded [cost] (not receive enough applications)",verbose=TRUE)
+ mode.log_threat("Rule [name] refunded [cost] (no applications)",verbose=TRUE)
mode.executed_rules -= src
return
@@ -150,7 +150,7 @@
finish_setup(new_character, i)
assigned += applicant
- notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT)
+ notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!")
/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant)
var/mob/living/carbon/human/new_character = makeBody(applicant)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index 56b02a1364..16e48ada4a 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -281,7 +281,7 @@
requirements = list(100,90,80,70,60,50,50,50,50,50)
high_population_requirement = 50
flags = HIGHLANDER_RULESET
- antag_cap = list(1,1,2,3,4,5,5,5,5,5)
+ antag_cap = list(2,2,2,3,3,3,4,4,5,5)
var/datum/team/nuclear/nuke_team
/datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 632d59c84d..1767d468ec 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -144,7 +144,7 @@
/datum/outfit/syndicate/no_crystals
tc = 0
-/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H)
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_SYNDICATE)
R.freqlock = TRUE
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 1bafa73aaa..11935e2bfc 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -17,7 +17,13 @@
network += lowertext(i)
/obj/machinery/computer/security/check_eye(mob/user)
- if(!can_interact(user) || !(user in watchers) || !watchers[user])
+ if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
+ user.unset_machine()
+ return
+ if(!(user in watchers))
+ user.unset_machine()
+ return
+ if(!watchers[user])
user.unset_machine()
return
var/obj/machinery/camera/C = watchers[user]
@@ -35,50 +41,55 @@
M.unset_machine() //to properly reset the view of the users if the console is deleted.
return ..()
-/obj/machinery/computer/security/can_interact(mob/user)
- if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
- return FALSE
- return ..()
-
-/obj/machinery/computer/security/interact(mob/user, special_state)
+/obj/machinery/computer/security/attack_hand(mob/user)
. = ..()
- if (ismob(user) && !isliving(user)) // ghosts don't need cameras
+ if(.)
+ return
+ if(stat)
return
if (!network)
- CRASH("No camera network")
+ throw EXCEPTION("No camera network")
user.unset_machine()
- return FALSE
+ return
if (!(islist(network)))
- CRASH("Camera network is not a list")
+ throw EXCEPTION("Camera network is not a list")
user.unset_machine()
- return FALSE
+ return
+ if(..())
+ user.unset_machine()
+ return
var/list/camera_list = get_available_cameras()
if(!(user in watchers))
for(var/Num in camera_list)
var/obj/machinery/camera/CAM = camera_list[Num]
- if(istype(CAM) && CAM.can_use())
- watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
- break
+ if(istype(CAM))
+ if(CAM.can_use())
+ watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
+ break
if(!(user in watchers))
user.unset_machine() // no usable camera on the network, we disconnect the user from the computer.
- return FALSE
+ return
playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0)
use_camera_console(user)
/obj/machinery/computer/security/proc/use_camera_console(mob/user)
var/list/camera_list = get_available_cameras()
var/t = input(user, "Which camera should you change to?") as null|anything in camera_list
- if(!src || user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
+ if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
return
- if(!t || t == "Cancel")
+ if(!t)
user.unset_machine()
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
return
var/obj/machinery/camera/C = camera_list[t]
- if(!C || !C.can_use() || !can_interact(user))
+ if(t == "Cancel")
+ user.unset_machine()
+ playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
+ return
+ if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
user.unset_machine()
return FALSE
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 19cd5d66c4..8d02c98d24 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -163,6 +163,8 @@ RLD
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
var/delay_mod = 1
var/canRturf = FALSE //Variable for R walls to deconstruct them
+ var/adjacency_check = TRUE //Wheter it checks if the tool has to be in our hands or not. Wsed for the aux base construction drone's internal RCD
+
/obj/item/construction/rcd/suicide_act(mob/user)
user.visible_message("[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide.. ")
@@ -225,10 +227,11 @@ RLD
t1 += "Close
\n"
- var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500, src)
+ var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500)
popup.set_content(t1)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
+ onclose(user, "rcd_access")
/obj/item/construction/rcd/Topic(href, href_list)
..()
@@ -272,7 +275,7 @@ RLD
/obj/item/construction/rcd/proc/check_menu(mob/living/user)
if(!istype(user))
return FALSE
- if(user.incapacitated() || !user.Adjacent(src))
+ if(user.incapacitated() || (adjacency_check && !user.Adjacent(src)))
return FALSE
return TRUE
@@ -285,7 +288,7 @@ RLD
"SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
"WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
)
- var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+ var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check, tooltips = TRUE)
if(!check_menu(user))
return
switch(computerdirs)
@@ -344,13 +347,13 @@ RLD
"External Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/external/glass)
)
- var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
+ var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
if(!check_menu(user))
return
switch(airlockcat)
if("Solid")
if(advanced_airlock_setting == 1)
- var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
+ var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
if(!check_menu(user))
return
switch(airlockpaint)
@@ -395,7 +398,7 @@ RLD
if("Glass")
if(advanced_airlock_setting == 1)
- var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
+ var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
if(!check_menu(user))
return
switch(airlockpaint)
diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm
index 0ff54d884f..d86354f195 100644
--- a/code/game/objects/items/clown_items.dm
+++ b/code/game/objects/items/clown_items.dm
@@ -112,11 +112,11 @@
throw_range = 7
attack_verb = list("HONKED")
var/moodlet = "honk" //used to define which kind of moodlet is added to the honked target
- var/list/honksounds = list('sound/items/bikehorn.ogg' = 1)
+ var/honksound = 'sound/items/bikehorn.ogg'
-/obj/item/bikehorn/ComponentInitialize()
+/obj/item/bikehorn/Initialize()
. = ..()
- AddComponent(/datum/component/squeak, honksounds, 50)
+ AddComponent(/datum/component/squeak, list(honksound=1), 50)
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, moodlet, /datum/mood_event/honk)
@@ -124,7 +124,7 @@
/obj/item/bikehorn/suicide_act(mob/user)
user.visible_message("[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide! ")
- playsound(src, pickweight(honksounds), 50, 1)
+ playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
return (BRUTELOSS)
//air horn
@@ -132,7 +132,7 @@
name = "air horn"
desc = "Damn son, where'd you find this?"
icon_state = "air_horn"
- honksounds = list('sound/items/airhorn2.ogg' = 1)
+ honksound = 'sound/items/airhorn2.ogg'
//golden bikehorn
/obj/item/bikehorn/golden
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 246dba9cb9..0c9ac4bb60 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -162,33 +162,31 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/equipped(mob/user, slot)
. = ..()
- if(equipped || !user.client)
+ if(equipped)
return
- update_style(user.client)
-
-/obj/item/pda/proc/update_style(client/C)
- background_color = C.prefs.pda_color
- switch(C.prefs.pda_style)
- if(MONO)
- font_index = MODE_MONO
- font_mode = FONT_MONO
- if(SHARE)
- font_index = MODE_SHARE
- font_mode = FONT_SHARE
- if(ORBITRON)
- font_index = MODE_ORBITRON
- font_mode = FONT_ORBITRON
- if(VT)
- font_index = MODE_VT
- font_mode = FONT_VT
- else
- font_index = MODE_MONO
- font_mode = FONT_MONO
- var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]
- if(icon != pref_skin)
- icon = pref_skin
- update_icon(FALSE, TRUE)
- equipped = TRUE
+ if(user.client)
+ background_color = user.client.prefs.pda_color
+ switch(user.client.prefs.pda_style)
+ if(MONO)
+ font_index = MODE_MONO
+ font_mode = FONT_MONO
+ if(SHARE)
+ font_index = MODE_SHARE
+ font_mode = FONT_SHARE
+ if(ORBITRON)
+ font_index = MODE_ORBITRON
+ font_mode = FONT_ORBITRON
+ if(VT)
+ font_index = MODE_VT
+ font_mode = FONT_VT
+ else
+ font_index = MODE_MONO
+ font_mode = FONT_MONO
+ var/pref_skin = GLOB.pda_reskins[user.client.prefs.pda_skin]
+ if(icon != pref_skin)
+ icon = pref_skin
+ update_icon(FALSE, TRUE)
+ equipped = TRUE
/obj/item/pda/proc/update_label()
name = "PDA-[owner] ([ownjob])" //Name generalisation
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index f6e169a4d5..a79eb299da 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -60,7 +60,7 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.allow_big_nesting = TRUE
- STR.max_w_class = WEIGHT_CLASS_BULKY
+ STR.max_w_class = WEIGHT_CLASS_GIGANTIC
STR.max_combined_w_class = 35
/obj/item/storage/backpack/holding/suicide_act(mob/living/user)
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 1e37de2581..ca7f7fe31a 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -239,8 +239,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
/obj/item/storage/toolbox/gold_real
name = "golden toolbox"
desc = "A larger then normal toolbox made of gold plated plastitanium."
+ item_state = "gold"
icon_state = "gold"
- item_state = "toolbox_gold"
has_latches = FALSE
force = 16 // Less then a spear
throwforce = 14
@@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
name = "golden toolbox"
desc = "A gold plated toolbox, fancy and harmless due to the gold plating being on cardboard!"
icon_state = "gold"
- item_state = "toolbox_gold"
+ item_state = "gold"
has_latches = FALSE
force = 0
throwforce = 0
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 223c8e9cf6..84ebc28afa 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -381,13 +381,3 @@
new /obj/item/gun/ballistic/automatic/pistol/m1911/kitchengun(src)
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
-
-
-/obj/item/storage/box/strange_seeds_10pack
-
-/obj/item/storage/box/strange_seeds_10pack/PopulateContents()
- for(var/i in 1 to 10)
- new /obj/item/seeds/random(src)
-
- if(prob(50))
- new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box
\ No newline at end of file
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index d16453e02f..fec17cfa69 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -216,7 +216,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
force = 40
throwforce = 10
- w_class = WEIGHT_CLASS_BULKY
+ w_class = WEIGHT_CLASS_HUGE
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
@@ -427,7 +427,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
item_flags = ABSTRACT | DROPDEL
- w_class = WEIGHT_CLASS_BULKY
+ w_class = WEIGHT_CLASS_HUGE
force = 24
throwforce = 0
throw_range = 0
@@ -512,7 +512,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
force = 10
throwforce = 12
attack_verb = list("beat", "smacked")
- w_class = WEIGHT_CLASS_BULKY
+ w_class = WEIGHT_CLASS_HUGE
var/homerun_ready = 0
var/homerun_able = 0
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index 0adfe77853..ad493dd6f5 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -12,9 +12,6 @@
new /obj/item/clothing/under/shorts/blue(src)
new /obj/item/clothing/under/shorts/green(src)
new /obj/item/clothing/under/jabroni(src)
- new /obj/item/clothing/under/polychromic/shortpants(src)
- new /obj/item/clothing/under/polychromic/shortpants(src)
- new /obj/item/clothing/under/polychromic/shortpants(src)
/obj/structure/closet/boxinggloves
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 9deca71269..b49d0a77d5 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -352,7 +352,6 @@
icon_door = "black"
/obj/structure/closet/wardrobe/curator/PopulateContents()
- new /obj/item/clothing/accessory/pocketprotector/full(src)
new /obj/item/clothing/head/fedora/curator(src)
new /obj/item/clothing/suit/curator(src)
new /obj/item/clothing/under/rank/curator/treasure_hunter(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index b06073812a..18928424c0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -11,7 +11,7 @@
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/under/rank/cargo/skirt(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/radio/headset/heads/qm(src)
+ new /obj/item/radio/headset/headset_cargo(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/megaphone/cargo(src)
@@ -23,4 +23,3 @@
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
new /obj/item/storage/photo_album/QM(src)
new /obj/item/circuitboard/machine/ore_silo(src)
- new /obj/item/clothing/suit/hooded/wintercoat/qm(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 9abd81b787..f173ac0662 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -34,7 +34,6 @@
new /obj/item/storage/photo_album/CE(src)
new /obj/item/storage/lockbox/medal/engineering(src)
new /obj/item/construction/rcd/loaded/upgraded(src)
- new /obj/item/clothing/suit/hooded/wintercoat/ce(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 9c4b58cd20..0f810225b3 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -71,7 +71,7 @@
new /obj/item/storage/belt/medical(src)
new /obj/item/healthanalyzer/advanced(src)
new /obj/item/assembly/flash/handheld(src)
- new /obj/item/storage/hypospraykit/cmo(src)
+// new /obj/item/reagent_containers/hypospray/CMO(src) // CITADEL EDIT comments out the hypospray mk I. the MK II kit is modularized
new /obj/item/autosurgeon/cmo(src)
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
@@ -81,7 +81,6 @@
new /obj/item/circuitboard/machine/techfab/department/medical(src)
new /obj/item/storage/photo_album/CMO(src)
new /obj/item/storage/lockbox/medal/medical(src)
- new /obj/item/clothing/suit/hooded/wintercoat/cmo(src)
/obj/structure/closet/secure_closet/animal
name = "animal control"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 97c0c8f3e2..efcc2aa7ca 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -30,4 +30,3 @@
new /obj/item/door_remote/research_director(src)
new /obj/item/circuitboard/machine/techfab/department/science(src)
new /obj/item/storage/photo_album/RD(src)
- new /obj/item/clothing/suit/hooded/wintercoat/rd(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index e87cb22f31..3cb8ceb22b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -61,7 +61,6 @@
new /obj/item/door_remote/civillian(src)
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/HoP(src)
- new /obj/item/clothing/suit/hooded/wintercoat/hop(src)
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
req_access = list(ACCESS_HOS)
@@ -95,7 +94,6 @@
new /obj/item/pinpointer/nuke(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
new /obj/item/storage/photo_album/HoS(src)
- new /obj/item/clothing/suit/hooded/wintercoat/hos(src)
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
req_access = list(ACCESS_ARMORY)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 9d554181eb..d83922d708 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -142,21 +142,28 @@
new /obj/item/clothing/suit/jacket(src)
if(prob(40))
new /obj/item/clothing/suit/jacket(src)
- new /obj/item/clothing/under/polychromic/jumpsuit(src)
- new /obj/item/clothing/under/polychromic/jumpsuit(src)
- new /obj/item/clothing/under/polychromic/jumpsuit(src)
- new /obj/item/clothing/under/polychromic/shirt(src)
- new /obj/item/clothing/under/polychromic/shirt(src)
- new /obj/item/clothing/under/polychromic/shirt(src)
- new /obj/item/clothing/under/polychromic/kilt(src)
- new /obj/item/clothing/under/polychromic/kilt(src)
- new /obj/item/clothing/under/polychromic/kilt(src)
- new /obj/item/clothing/under/polychromic/skirt(src)
- new /obj/item/clothing/under/polychromic/skirt(src)
- new /obj/item/clothing/under/polychromic/skirt(src)
- new /obj/item/clothing/under/polychromic/shorts(src)
- new /obj/item/clothing/under/polychromic/shorts(src)
- new /obj/item/clothing/under/polychromic/shorts(src)
+ new /obj/item/clothing/under/color/white(src)
+ new /obj/item/clothing/under/skirt/color/white(src)
+ new /obj/item/clothing/under/color/blue(src)
+ new /obj/item/clothing/under/skirt/color/blue(src)
+ new /obj/item/clothing/under/color/yellow(src)
+ new /obj/item/clothing/under/skirt/color/yellow(src)
+ new /obj/item/clothing/under/color/green(src)
+ new /obj/item/clothing/under/skirt/color/green(src)
+ new /obj/item/clothing/under/color/orange(src)
+ new /obj/item/clothing/under/skirt/color/orange(src)
+ new /obj/item/clothing/under/color/pink(src)
+ new /obj/item/clothing/under/skirt/color/pink(src)
+ new /obj/item/clothing/under/color/red(src)
+ new /obj/item/clothing/under/skirt/color/red(src)
+ new /obj/item/clothing/under/color/darkblue(src)
+ new /obj/item/clothing/under/skirt/color/darkblue(src)
+ new /obj/item/clothing/under/color/teal(src)
+ new /obj/item/clothing/under/skirt/color/teal(src)
+ new /obj/item/clothing/under/color/lightpurple(src)
+ new /obj/item/clothing/under/skirt/color/lightpurple(src)
+ new /obj/item/clothing/under/color/green(src)
+ new /obj/item/clothing/under/skirt/color/green(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/blue(src)
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index e3585b601e..10f1f30e13 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -422,7 +422,7 @@
implants = list(/obj/item/implant/weapons_auth)
id = /obj/item/card/id/syndicate
-/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H)
H.faction |= ROLE_SYNDICATE
/obj/effect/mob_spawn/human/syndicate/battlecruiser
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 4d56b1ef6f..609384cdda 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -9,13 +9,11 @@
armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
var/obj/item/holosign_creator/projector
-/obj/structure/holosign/Initialize(mapload, source_projector)
- . = ..()
+/obj/structure/holosign/New(loc, source_projector)
if(source_projector)
projector = source_projector
projector.signs += src
- alpha = 0
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ ..()
/obj/structure/holosign/Destroy()
if(projector)
@@ -73,8 +71,10 @@
desc = "A holographic barrier resembling a firelock. Though it does not prevent solid objects from passing through, gas is kept out."
icon_state = "holo_firelock"
density = FALSE
+ layer = ABOVE_MOB_LAYER
anchored = TRUE
CanAtmosPass = ATMOS_PASS_NO
+ layer = ABOVE_MOB_LAYER
alpha = 150
/obj/structure/holosign/barrier/atmos/Initialize()
@@ -100,6 +100,7 @@
desc = "A holobarrier that uses biometrics to detect human viruses. Denies passing to personnel with easily-detected, malicious viruses. Good for quarantines."
icon_state = "holo_medical"
alpha = 125 //lazy :)
+ layer = ABOVE_MOB_LAYER
var/force_allaccess = FALSE
var/buzzcd = 0
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index fd4f3abf15..e3862ed924 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -6,16 +6,12 @@
armor = list("melee" = 100, "bullet" = 80, "laser" = 80, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
density = FALSE
anchored = TRUE
+ layer = ABOVE_MOB_LAYER
CanAtmosPass = ATMOS_PASS_NO
/obj/structure/plasticflaps/opaque
opacity = TRUE
-/obj/structure/plasticflaps/Initialize()
- . = ..()
- alpha = 0
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
-
/obj/structure/plasticflaps/examine(mob/user)
. = ..()
if(anchored)
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 3723b99f4e..6eaa4320ca 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -56,7 +56,7 @@
if(used)
to_chat(H, "You already used this contract!")
return
- var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src, ignore_category = POLL_IGNORE_WIZARD)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
if(LAZYLEN(candidates))
if(QDELETED(src))
return
@@ -241,7 +241,7 @@
return
if(used)
return
- var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src, ignore_category = POLL_IGNORE_DEMON)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src)
if(LAZYLEN(candidates))
if(used || QDELETED(src))
return
diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
index 7bfadf6f3b..7e03bbf57a 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
@@ -24,7 +24,7 @@
for(var/obj/item/abductor/gizmo/G in B.contents)
console.AddGizmo(G)
-/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(!visualsOnly)
link_to_console(H)
@@ -49,7 +49,7 @@
/obj/item/abductor/gizmo = 1
)
-/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(!visualsOnly)
var/obj/item/implant/abductor/beamplant = new
diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
index 2f0db73bfc..ebfb219c9a 100644
--- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
@@ -113,7 +113,7 @@
"You start tenderly lifting [skewee] off of [src]... ")
if(!do_after(user, 60, target = skewee))
skewee.visible_message("[skewee] painfully slides back down [src]. ")
- skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal")
+ skewee.emote("moan")
return
skewee.visible_message("[skewee] comes free of [src] with a squelching pop! ", \
"You come free of [src]! ")
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index 9b2532c71b..89324f0691 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -165,7 +165,7 @@
owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.")
if(APPRENTICE_BLUESPACE)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(null))
+ owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null))
to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.")
if(APPRENTICE_HEALING)
diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm
index bd4e716357..84f08197b4 100644
--- a/code/modules/awaymissions/capture_the_flag.dm
+++ b/code/modules/awaymissions/capture_the_flag.dm
@@ -487,7 +487,7 @@
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf
r_hand = /obj/item/gun/ballistic/automatic/laser/ctf
-/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE)
if(visualsOnly)
return
var/list/no_drops = list()
@@ -529,7 +529,7 @@
r_hand = /obj/item/gun/energy/laser/instakill/blue
shoes = /obj/item/clothing/shoes/jackboots/fast
-/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CTF_RED)
@@ -537,7 +537,7 @@
R.independent = TRUE
H.dna.species.stunmod = 0
-/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CTF_BLUE)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 0d5fa6bc8a..a0b917a87b 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -440,7 +440,7 @@
uniform = /obj/item/clothing/under/pants/youngfolksjeans
id = /obj/item/card/id
-/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e91d379ddd..5aaf589393 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -2299,6 +2299,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.shirt_color = shirt_color
character.socks_color = socks_color
+
+ character.backbag = backbag
+ character.jumpsuit_style = jumpsuit_style
+
var/datum/species/chosen_species
if(!roundstart_checks || (pref_species.id in GLOB.roundstart_races))
chosen_species = pref_species.type
diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm
index 2e643cc05d..90c692c60e 100644
--- a/code/modules/client/verbs/suicide.dm
+++ b/code/modules/client/verbs/suicide.dm
@@ -49,7 +49,7 @@
if(!(damagetype & (BRUTELOSS | FIRELOSS | TOXLOSS | OXYLOSS) ))
adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
- death(FALSE)
+ death(FALSE, penalize = TRUE)
return
diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm
index ac491c2bc5..6b674c8595 100644
--- a/code/modules/clothing/gloves/_gloves.dm
+++ b/code/modules/clothing/gloves/_gloves.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/gloves/ComponentInitialize()
. = ..()
- RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /atom.proc/clean_blood)
+ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/gloves/clean_blood)
/obj/item/clothing/gloves/clean_blood(datum/source, strength)
. = ..()
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index 1532f50808..88cc7123fd 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -6,7 +6,7 @@
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/radio/headset/headset_cent/alt
-/datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -35,7 +35,7 @@
/obj/item/gun/energy/e_gun=1)
l_pocket = /obj/item/switchblade
-/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -46,7 +46,7 @@
/datum/outfit/ert/commander/alert
name = "ERT Commander - Amber Alert"
-
+
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert
glasses = /obj/item/clothing/glasses/thermal/eyepatch
backpack_contents = list(/obj/item/storage/box/engineer=1,\
@@ -76,7 +76,7 @@
/obj/item/gun/energy/e_gun/stun=1,\
/obj/item/melee/baton/loaded=1)
-/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -88,7 +88,7 @@
/datum/outfit/ert/security/alert
name = "ERT Security - Amber Alert"
-
+
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec
backpack_contents = list(/obj/item/storage/box/engineer=1,\
/obj/item/storage/box/handcuffs=1,\
@@ -120,7 +120,7 @@
/obj/item/reagent_containers/hypospray/combat=1,\
/obj/item/gun/medbeam=1)
-/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -166,7 +166,7 @@
/obj/item/gun/energy/e_gun=1,\
/obj/item/construction/rcd/loaded=1)
-/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -214,7 +214,7 @@
l_hand = /obj/item/storage/toolbox/plastitanium
gloves = /obj/item/clothing/gloves/color/yellow
-/datum/outfit/ert/greybois/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/greybois/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/card/id/W = H.wear_id
@@ -238,7 +238,7 @@
l_hand = /obj/item/clipboard
id = /obj/item/card/id
-/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -288,7 +288,7 @@
/obj/item/reagent_containers/hypospray/combat/heresypurge=1,
/obj/item/gun/medbeam=1)
-/datum/outfit/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm
index 0ca2a11c50..347fc5c2d7 100644
--- a/code/modules/clothing/outfits/event.dm
+++ b/code/modules/clothing/outfits/event.dm
@@ -12,7 +12,7 @@
belt = /obj/item/tank/internals/emergency_oxygen/double
id = /obj/item/card/id/gold
-/datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
H.fully_replace_character_name(H.real_name, "Santa Claus")
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index 29fd06dcaf..6c961dc250 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -48,7 +48,7 @@
l_pocket = /obj/item/grenade/chem_grenade/cleaner
backpack_contents = list(/obj/item/stack/tile/plasteel=6)
-/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -97,7 +97,7 @@
/datum/outfit/pirate/space/captain
head = /obj/item/clothing/head/helmet/space/pirate
-/datum/outfit/pirate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/pirate/post_equip(mob/living/carbon/human/H)
H.faction |= "pirate"
var/obj/item/radio/R = H.ears
@@ -125,7 +125,7 @@
id = /obj/item/card/id
r_hand = /obj/item/twohanded/fireaxe
-/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -150,7 +150,7 @@
r_pocket = /obj/item/scalpel
r_hand = /obj/item/twohanded/fireaxe
-/datum/outfit/psycho/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/psycho/post_equip(mob/living/carbon/human/H)
for(var/obj/item/carried_item in H.get_equipped_items(TRUE))
carried_item.add_mob_blood(H)//Oh yes, there will be blood...
for(var/obj/item/I in H.held_items)
@@ -170,7 +170,7 @@
id = /obj/item/card/id/syndicate
belt = /obj/item/pda/heads
-/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
var/obj/item/clothing/under/U = H.w_uniform
U.attach_accessory(new /obj/item/clothing/accessory/waistcoat(H))
@@ -216,7 +216,7 @@
back = /obj/item/storage/backpack/satchel/leather
id = /obj/item/card/id
-/datum/outfit/centcom_commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/centcom_commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -244,7 +244,7 @@
back = /obj/item/storage/backpack/satchel/leather
id = /obj/item/card/id
-/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -283,7 +283,7 @@
back = /obj/item/storage/backpack
backpack_contents = list(/obj/item/storage/box=1)
-/datum/outfit/wizard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/wizard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -325,7 +325,7 @@
id = /obj/item/card/id
-/datum/outfit/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -349,7 +349,7 @@
r_hand = /obj/item/gun/ballistic/automatic/tommygun
id = /obj/item/card/id
-/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -391,7 +391,7 @@
/obj/item/flashlight=1,\
/obj/item/grenade/plastic/x4=1)
-/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm
index ee350e3891..cd8115ac7d 100644
--- a/code/modules/clothing/outfits/vr.dm
+++ b/code/modules/clothing/outfits/vr.dm
@@ -5,10 +5,10 @@
ears = /obj/item/radio/headset
id = /obj/item/card/id
-/datum/outfit/vr/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/vr/pre_equip(mob/living/carbon/human/H)
H.dna.species.before_equip_job(null, H)
-/datum/outfit/vr/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/vr/post_equip(mob/living/carbon/human/H)
var/obj/item/card/id/id = H.wear_id
if (istype(id))
id.access |= get_all_accesses()
@@ -25,10 +25,9 @@
backpack_contents = list(/obj/item/storage/box/syndie=1,\
/obj/item/kitchen/knife/combat/survival)
-/datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H)
. = ..()
- var/key = H.key ? H.key : preference_source ? preference_source.key : null
- var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, key, 80)
+ var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80)
H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK)
var/obj/item/implant/weapons_auth/W = new
W.implant(H)
diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm
index 0bc8c87a45..103a152ec8 100644
--- a/code/modules/clothing/outfits/vv_outfit.dm
+++ b/code/modules/clothing/outfits/vv_outfit.dm
@@ -4,7 +4,7 @@
var/list/vv_values
var/list/stored_access
-/datum/outfit/varedit/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/varedit/pre_equip(mob/living/carbon/human/H, visualsOnly)
H.delete_equipment() //Applying VV to wrong objects is not reccomended.
. = ..()
@@ -120,7 +120,7 @@
GLOB.custom_outfits += O
to_chat(usr,"Outfit registered, use select equipment to equip it.")
-/datum/outfit/varedit/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/varedit/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
//Apply VV
for(var/slot in vv_values)
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index 91d8d51801..37ab2b2bf4 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -23,7 +23,7 @@
/obj/item/clothing/shoes/ComponentInitialize()
. = ..()
- RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /atom.proc/clean_blood)
+ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/shoes/clean_blood)
/obj/item/clothing/shoes/suicide_act(mob/living/carbon/user)
if(rand(2)>1)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 53800615e9..2a8d762ec0 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -519,16 +519,6 @@
/obj/item/clothing/head/hooded/winterhood/captain
icon_state = "winterhood_captain"
-/obj/item/clothing/suit/hooded/wintercoat/hop
- name = "head of personnel's winter coat"
- icon_state = "coathop"
- item_state = "coathop"
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 5, "rad" = 0, "fire" = 0, "acid" = 5)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/hop
-
-/obj/item/clothing/head/hooded/winterhood/hop
- icon_state = "winterhood_hop"
-
/obj/item/clothing/suit/hooded/wintercoat/security
name = "security winter coat"
icon_state = "coatsecurity"
@@ -543,20 +533,6 @@
/obj/item/clothing/head/hooded/winterhood/security
icon_state = "winterhood_security"
-/obj/item/clothing/suit/hooded/wintercoat/hos
- name = "head of security's winter coat"
- icon_state = "coathos"
- item_state = "coathos"
- armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 15, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 55)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/hos
-
-/obj/item/clothing/suit/hooded/wintercoat/hos/Initialize()
- . = ..()
- allowed = GLOB.security_wintercoat_allowed
-
-/obj/item/clothing/head/hooded/winterhood/hos
- icon_state = "winterhood_hos"
-
/obj/item/clothing/suit/hooded/wintercoat/medical
name = "medical winter coat"
icon_state = "coatmedical"
@@ -568,39 +544,6 @@
/obj/item/clothing/head/hooded/winterhood/medical
icon_state = "winterhood_medical"
-/obj/item/clothing/suit/hooded/wintercoat/cmo
- name = "chief medical officer's winter coat"
- icon_state = "coatcmo"
- item_state = "coatcmo"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/cmo
-
-/obj/item/clothing/head/hooded/winterhood/cmo
- icon_state = "winterhood_cmo"
-
-/obj/item/clothing/suit/hooded/wintercoat/chemistry
- name = "chemistry winter coat"
- icon_state = "coatchemistry"
- item_state = "coatchemistry"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 30, "acid" = 45)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/chemistry
-
-/obj/item/clothing/head/hooded/winterhood/chemistry
- icon_state = "winterhood_chemistry"
-
-/obj/item/clothing/suit/hooded/wintercoat/viro
- name = "virology winter coat"
- icon_state = "coatviro"
- item_state = "coatviro"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/viro
-
-/obj/item/clothing/head/hooded/winterhood/viro
- icon_state = "winterhood_viro"
-
/obj/item/clothing/suit/hooded/wintercoat/science
name = "science winter coat"
icon_state = "coatscience"
@@ -612,49 +555,6 @@
/obj/item/clothing/head/hooded/winterhood/science
icon_state = "winterhood_science"
-/obj/item/clothing/suit/hooded/wintercoat/robotics
- name = "robotics winter coat"
- icon_state = "coatrobotics"
- item_state = "coatrobotics"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/screwdriver, /obj/item/crowbar, /obj/item/wrench, /obj/item/stack/cable_coil, /obj/item/weldingtool, /obj/item/multitool)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/robotics
-
-/obj/item/clothing/head/hooded/winterhood/robotics
- icon_state = "winterhood_robotics"
-
-/obj/item/clothing/suit/hooded/wintercoat/genetics
- name = "genetics winter coat"
- icon_state = "coatgenetics"
- item_state = "coatgenetics"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/genetics
-
-/obj/item/clothing/head/hooded/winterhood/genetics
- icon_state = "winterhood_genetics"
-
-/obj/item/clothing/suit/hooded/wintercoat/rd
- name = "research director's winter coat"
- icon_state = "coatrd"
- item_state = "coatrd"
- allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 5,"energy" = 0, "bomb" = 15, "bio" = 5, "rad" = 5, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/rd
-
-/obj/item/clothing/head/hooded/winterhood/rd
- icon_state = "winterhood_rd"
-
-/obj/item/clothing/suit/hooded/wintercoat/ce
- name = "chief engineer's winter coat"
- icon_state = "coatce"
- item_state = "coatce"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 30, "fire" = 35, "acid" = 45)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/ce
-
-/obj/item/clothing/head/hooded/winterhood/ce
- icon_state = "winterhood_ce"
-
/obj/item/clothing/suit/hooded/wintercoat/engineering
name = "engineering winter coat"
icon_state = "coatengineer"
@@ -685,26 +585,6 @@
/obj/item/clothing/head/hooded/winterhood/hydro
icon_state = "winterhood_hydro"
-/obj/item/clothing/suit/hooded/wintercoat/cosmic
- name = "cosmic winter coat"
- icon_state = "coatcosmic"
- item_state = "coatcosmic"
- allowed = list(/obj/item/flashlight)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/cosmic
-
-/obj/item/clothing/head/hooded/winterhood/cosmic
- icon_state = "winterhood_cosmic"
-
-/obj/item/clothing/suit/hooded/wintercoat/janitor
- name = "janitors winter coat"
- icon_state = "coatjanitor"
- item_state = "coatjanitor"
- allowed = list(/obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/grenade/chem_grenade,/obj/item/lightreplacer,/obj/item/flashlight,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/spray,/obj/item/soap,/obj/item/holosign_creator,/obj/item/key/janitor,/obj/item/melee/flyswatter,/obj/item/paint/paint_remover,/obj/item/storage/bag/trash,/obj/item/reagent_containers/glass/bucket)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/janitor
-
-/obj/item/clothing/head/hooded/winterhood/janitor
- icon_state = "winterhood_janitor"
-
/obj/item/clothing/suit/hooded/wintercoat/cargo
name = "cargo winter coat"
icon_state = "coatcargo"
@@ -714,15 +594,6 @@
/obj/item/clothing/head/hooded/winterhood/cargo
icon_state = "winterhood_cargo"
-/obj/item/clothing/suit/hooded/wintercoat/qm
- name = "quartermaster's winter coat"
- icon_state = "coatqm"
- item_state = "coatqm"
- hoodtype = /obj/item/clothing/head/hooded/winterhood/qm
-
-/obj/item/clothing/head/hooded/winterhood/qm
- icon_state = "winterhood_qm"
-
/obj/item/clothing/suit/hooded/wintercoat/miner
name = "mining winter coat"
icon_state = "coatminer"
diff --git a/code/modules/crafting/recipes/recipes_clothing.dm b/code/modules/crafting/recipes/recipes_clothing.dm
index 4f06a44811..f48ee87316 100644
--- a/code/modules/crafting/recipes/recipes_clothing.dm
+++ b/code/modules/crafting/recipes/recipes_clothing.dm
@@ -158,31 +158,3 @@
time = 50
always_availible = TRUE
category = CAT_CLOTHING
-
-/datum/crafting_recipe/wintercoat_cosmic
- name = "Cosmic Winter Coat"
- result = /obj/item/clothing/suit/hooded/wintercoat/cosmic
- reqs = list(/obj/item/clothing/suit/hooded/wintercoat = 1,
- /obj/item/clothing/suit/hooded/wintercoat/captain = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hop = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hos = 1,
- /obj/item/clothing/suit/hooded/wintercoat/rd = 1,
- /obj/item/clothing/suit/hooded/wintercoat/ce = 1,
- /obj/item/clothing/suit/hooded/wintercoat/cmo = 1,
- /obj/item/clothing/suit/hooded/wintercoat/qm = 1,
- /obj/item/clothing/suit/hooded/wintercoat/robotics = 1,
- /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 1,
- /obj/item/clothing/suit/hooded/wintercoat/engineering = 1,
- /obj/item/clothing/suit/hooded/wintercoat/science = 1,
- /obj/item/clothing/suit/hooded/wintercoat/genetics = 1,
- /obj/item/clothing/suit/hooded/wintercoat/chemistry = 1,
- /obj/item/clothing/suit/hooded/wintercoat/medical = 1,
- /obj/item/clothing/suit/hooded/wintercoat/viro = 1,
- /obj/item/clothing/suit/hooded/wintercoat/janitor = 1,
- /obj/item/clothing/suit/hooded/wintercoat/security = 1,
- /obj/item/clothing/suit/hooded/wintercoat/cargo = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hydro = 1,
- /obj/item/clothing/suit/hooded/wintercoat/miner = 1)
- time = 60
- always_availible = TRUE
- category = CAT_CLOTHING
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index e2125964e4..815f640fde 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -57,7 +57,7 @@
/datum/round_event_control/wizard/canSpawnEvent(var/players_amt, var/gamemode)
if(istype(SSticker.mode, /datum/game_mode/dynamic))
- var/datum/game_mode/dynamic/mode = SSticker.mode
+ var/var/datum/game_mode/dynamic/mode = SSticker.mode
if (locate(/datum/dynamic_ruleset/midround/from_ghosts/wizard) in mode.executed_rules)
return can_be_midround_wizard && ..()
return ..()
diff --git a/code/modules/events/major_dust.dm b/code/modules/events/major_dust.dm
index c594d7b3c0..d7d8f1aec8 100644
--- a/code/modules/events/major_dust.dm
+++ b/code/modules/events/major_dust.dm
@@ -2,7 +2,6 @@
name = "Major Space Dust"
typepath = /datum/round_event/meteor_wave/major_dust
weight = 8
- gamemode_blacklist = list("dynamic")
/datum/round_event/meteor_wave/major_dust
wave_name = "space dust"
diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm
index 26591547c0..31ea9dcb03 100644
--- a/code/modules/events/meteor_wave.dm
+++ b/code/modules/events/meteor_wave.dm
@@ -10,7 +10,6 @@
min_players = 15
max_occurrences = 3
earliest_start = 25 MINUTES
- gamemode_blacklist = list("dynamic")
/datum/round_event/meteor_wave
startWhen = 6
diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm
index 67848bf941..74d9bb273e 100644
--- a/code/modules/events/processor_overload.dm
+++ b/code/modules/events/processor_overload.dm
@@ -3,7 +3,6 @@
typepath = /datum/round_event/processor_overload
weight = 15
min_players = 20
- gamemode_blacklist = list("dynamic")
/datum/round_event/processor_overload
announceWhen = 1
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 9dd016c235..9d075857a7 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -546,10 +546,3 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and
/datum/holiday/easter/getStationPrefix()
return pick("Fluffy","Bunny","Easter","Egg")
-
-//Random citadel thing for halloween species
-/proc/force_enable_halloween_species()
- var/list/oldlist = SSevents.holidays
- SSevents.holidays = list(HALLOWEEN = new /datum/holiday/halloween)
- generate_selectable_species(FALSE)
- SSevents.holidays = oldlist
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 507c8a5026..a52b8589c3 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -101,9 +101,8 @@
//Equip the rest of the gear
H.dna.species.before_equip_job(src, H, visualsOnly)
- var/datum/outfit/job/O = outfit_override || outfit
- if(O)
- H.equipOutfit(O, visualsOnly, preference_source) //mob doesn't have a client yet.
+ if(outfit_override || outfit)
+ H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly)
H.dna.species.after_equip_job(src, H, visualsOnly)
@@ -178,8 +177,8 @@
var/pda_slot = SLOT_BELT
-/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
- switch(preference_source?.prefs.backbag)
+/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ switch(H.backbag)
if(GBACKPACK)
back = /obj/item/storage/backpack //Grey backpack
if(GSATCHEL)
@@ -197,7 +196,7 @@
//converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
var/holder
- if(preference_source && preference_source.prefs.jumpsuit_style == PREF_SKIRT)
+ if(H.jumpsuit_style == PREF_SKIRT)
holder = "[uniform]/skirt"
if(!text2path(holder))
holder = "[uniform]"
@@ -205,7 +204,7 @@
holder = "[uniform]"
uniform = text2path(holder)
-/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -233,8 +232,6 @@
PDA.owner = H.real_name
PDA.ownjob = J.title
PDA.update_label()
- if(preference_source && !PDA.equipped) //PDA's screen color, font style and look depend on client preferences.
- PDA.update_style(preference_source)
/datum/outfit/job/get_chameleon_disguise_info()
var/list/types = ..()
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index ce2dce9053..da8c2aa3b9 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -28,16 +28,15 @@ Assistant
name = "Assistant"
jobtype = /datum/job/assistant
-/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H)
..()
- var/suited = !preference_source || preference_source.prefs.jumpsuit_style == PREF_SUIT
if (CONFIG_GET(flag/grey_assistants))
- if(suited)
+ if(H.jumpsuit_style == PREF_SUIT)
uniform = /obj/item/clothing/under/color/grey
else
uniform = /obj/item/clothing/under/skirt/color/grey
else
- if(suited)
+ if(H.jumpsuit_style == PREF_SUIT)
uniform = /obj/item/clothing/under/color/random
else
uniform = /obj/item/clothing/under/skirt/color/random
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index 922b335a39..d8b88ae871 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -16,6 +16,11 @@
display_order = JOB_DISPLAY_ORDER_CLOWN
+
+/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
+ . = ..()
+ H.apply_pref_name("clown", M.client)
+
/datum/outfit/job/clown
name = "Clown"
jobtype = /datum/job/clown
@@ -43,15 +48,11 @@
chameleon_extras = /obj/item/stamp/clown
-/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
- var/client/C = H.client || preference_source
- if(C)
- H.apply_pref_name("clown", C) //rename the mob AFTER they're equipped so their ID gets updated properly.
- else
- H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names))
+ H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) //rename the mob AFTER they're equipped so their ID gets updated properly.
H.dna.add_mutation(CLOWNMUT)
H.dna.add_mutation(SMILE)
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
index b5def54061..c213d4dffc 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -29,7 +29,7 @@
mask = /obj/item/clothing/mask/fakemoustache/italian
backpack_contents = list(/obj/item/sharpener = 1)
-/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
var/datum/job/cook/J = SSjob.GetJobType(jobtype)
if(J) // Fix for runtime caused by invalid job being passed
@@ -39,7 +39,7 @@
if(!visualsOnly)
J.cooks++
-/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index 0c762637ac..35fa8483d5 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -34,7 +34,7 @@
/obj/item/barcodescanner = 1
)
-/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 13cb5e01e3..27a54fbd1f 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -46,7 +46,7 @@
chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses)
-/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
if(istype(cig)) //Some species specfic changes can mess this up (plasmamen)
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index 654af6a05d..0b8be52116 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -35,7 +35,7 @@
chameleon_extras = /obj/item/stamp/law
-/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index 4e6e982fb9..1347da7125 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -36,7 +36,7 @@
satchel = /obj/item/storage/backpack/mime
-/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -47,9 +47,3 @@
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
H.mind.miming = 1
- var/client/C = H.client || preference_source
- if(C)
- H.apply_pref_name("mime", C)
- else
- H.fully_replace_character_name(H.real_name, pick(GLOB.mime_names))
-
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 915e9d1cea..771fc02862 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -64,7 +64,7 @@
/obj/item/gun/energy/kinetic_accelerator=1,\
/obj/item/stack/marker_beacon/ten=1)
-/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm
index d461523744..d901e1eb0c 100644
--- a/code/modules/mining/aux_base_camera.dm
+++ b/code/modules/mining/aux_base_camera.dm
@@ -25,6 +25,7 @@
max_matter = 600 //Bigger container and faster speeds due to being specialized and stationary.
no_ammo_message = "Internal matter exhausted. Please add additional materials. "
delay_mod = 0.5
+ adjacency_check = FALSE
upgrade = TRUE
var/obj/machinery/computer/camera_advanced/base_construction/console
@@ -206,14 +207,19 @@
to_chat(owner, "Build mode is now [buildmode].")
/datum/action/innate/aux_base/airlock_type
- name = "Select Airlock Type"
+ name = "Change Airlock Settings"
button_icon_state = "airlock_select"
/datum/action/innate/aux_base/airlock_type/Activate()
if(..())
return
- B.RCD.change_airlock_access(usr)
+ var/mode = alert("Modify Type or Access?", "Airlock Settings", "Type", "Access", "None")
+ switch(mode)
+ if("Type")
+ B.RCD.change_airlock_setting(usr)
+ if("Access")
+ B.RCD.change_airlock_access(usr)
/datum/action/innate/aux_base/window_type
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 4429c8426f..d6e99f7361 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -59,7 +59,6 @@
to_chat(owner, "[src] breaks down as it tries to activate. ")
else
owner.revive(full_heal = 1)
- owner.log_message("[owner] used an implanted [src] to heal themselves! Keep fighting, it's just a flesh wound!", LOG_ATTACK, color="green") //Logging for implanted legion core use
qdel(src)
/obj/item/organ/regenerative_core/on_life()
@@ -86,21 +85,6 @@
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self"))
H.revive(full_heal = 1)
qdel(src)
- user.log_message("[user] used [src] to heal [H]! Wake the fuck up, Samurai!", LOG_ATTACK, color="green") //Logging for 'old' style legion core use, when clicking on a sprite of yourself or another.
-
-/obj/item/organ/regenerative_core/attack_self(mob/user) //Knouli's first hack! Allows for the use of the core in hand rather than needing to click on the target, yourself, to selfheal. Its a rip of the proc just above - but skips on distance check and only uses 'user' rather than 'target'
- if(ishuman(user)) //Check if user is human, no need for distance check as it's self heal
- var/mob/living/carbon/human/H = user //Set H to user rather than target
- if(inert) //Inert cores are useless
- to_chat(user, "[src] has decayed and can no longer be used to heal. ")
- return
- else //Skip on check if the target to be healed is dead as, if you are dead, you're not going to be able to use it on yourself!
- to_chat(user, "You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments. ")
- SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self"))
- H.revive(full_heal = 1)
- qdel(src)
- H.log_message("[H] used [src] to heal themselves! Making use of Knouli's sexy and intelligent use-in-hand proc!", LOG_ATTACK, color="green") //Logging for 'new' style legion core use, when using the core in-hand.
-
/obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
. = ..()
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 950ae7dda1..8de5f76a56 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -37,9 +37,6 @@
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/gloves/color/black(src)
- new /obj/item/clothing/suit/hooded/wintercoat/miner(src) //yes, even both mining locker types
- new /obj/item/clothing/suit/hooded/wintercoat/miner(src)
- new /obj/item/clothing/suit/hooded/wintercoat/miner(src)
/obj/structure/closet/secure_closet/miner
name = "miner's equipment"
@@ -64,7 +61,6 @@
new /obj/item/clothing/glasses/meson(src)
new /obj/item/survivalcapsule(src)
new /obj/item/assault_pod/mining(src)
- new /obj/item/clothing/suit/hooded/wintercoat/miner(src) //because you know you want it
/**********************Shuttle Computer**************************/
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index d789fc6f5a..4d253a4693 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -473,7 +473,10 @@
var/free_space = 0
for(var/list/category in list(GLOB.command_positions) + list(GLOB.supply_positions) + list(GLOB.engineering_positions) + list(GLOB.nonhuman_positions - "pAI") + list(GLOB.civilian_positions) + list(GLOB.medical_positions) + list(GLOB.science_positions) + list(GLOB.security_positions))
var/cat_color = "fff" //random default
- cat_color = SSjob.name_occupations[category[1]].selection_color //use the color of the first job in the category (the department head) as the category color
+ if(SSjob.name_occupations && SSjob.name_occupations[category[1]])
+ cat_color = SSjob.name_occupations[category[1]].selection_color //use the color of the first job in the category (the department head) as the category color
+ else
+ cat_color = SSjob.occupations[category[1]].selection_color
dat += ""
dat += "[SSjob.name_occupations[category[1]].exp_type_department] "
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 42277e925b..8ea295c6c4 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -264,7 +264,6 @@ Works together with spawning an observer, noted above.
*/
/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
- penalize = suiciding || penalize // suicide squad.
if(!key || cmptext(copytext(key,1,2),"@") || (!special && SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse) & COMPONENT_BLOCK_GHOSTING))
return //mob has no key, is an aghost or some component hijacked.
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 23ccc665b6..f2b02b81fb 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -170,7 +170,6 @@
stop_pulling()
if(HAS_TRAIT(src, TRAIT_PACIFISM))
to_chat(src, "You gently let go of [throwable_mob]. ")
- return
adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
var/turf/end_T = get_turf(target)
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index a8a69be0f1..7d1e5320fc 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -43,7 +43,7 @@
adjustStaminaLoss(damage_amount, forced = forced)
//citadel code
if(AROUSAL)
- adjustArousalLoss(damage_amount)
+ adjustArousalLoss(damage_amount, forced = forced)
return TRUE
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 9eab9054f5..d460482d6f 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -32,7 +32,7 @@
if(CONFIG_GET(flag/disable_stambuffer))
togglesprint()
- RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /atom.proc/clean_blood)
+ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /mob/living/carbon/human/clean_blood)
/mob/living/carbon/human/ComponentInitialize()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 327ad6760c..2ab7c6d404 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -339,10 +339,8 @@
apply_damage(damage, BRUTE, affecting, armor_block)
/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
+
if(M.occupant.a_intent == INTENT_HARM)
- if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM))
- to_chat(M.occupant, "You don't want to harm other living beings! ")
- return
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 9ffa994066..b1f11f6463 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -34,6 +34,8 @@
var/shirt_color = "FFFFFF"
var/socks = "Nude" //Which socks the player wants
var/socks_color = "FFFFFF"
+ var/backbag = DBACKPACK //Which backpack type the player has chosen.
+ var/jumpsuit_style = PREF_SUIT //suit/skirt
//Equipment slots
var/obj/item/wear_suit = null
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 26703977d2..084dbd83ef 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -251,7 +251,7 @@
sec_hud_set_security_status()
..()
-/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE, client/preference_source)
+/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
var/datum/outfit/O = null
if(ispath(outfit))
@@ -263,7 +263,7 @@
if(!O)
return 0
- return O.equip(src, visualsOnly, preference_source)
+ return O.equip(src, visualsOnly)
//delete all equipment without dropping anything
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 7ff4f355d5..49ae178d8c 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -118,14 +118,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
..()
-/proc/generate_selectable_species(clear = FALSE)
- if(clear)
- GLOB.roundstart_races = list()
- GLOB.roundstart_race_names = list()
+/proc/generate_selectable_species()
for(var/I in subtypesof(/datum/species))
var/datum/species/S = new I
if(S.check_roundstart_eligible())
- GLOB.roundstart_races |= S.id
+ GLOB.roundstart_races += S.id
GLOB.roundstart_race_names["[S.name]"] = S.id
qdel(S)
if(!GLOB.roundstart_races.len)
@@ -1479,7 +1476,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(!attacker_style && HAS_TRAIT(user, TRAIT_PACIFISM))
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "You don't want to harm [target]! ")
return FALSE
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) //CITADEL CHANGE - makes it impossible to punch while in stamina softcrit
@@ -1681,8 +1678,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return
if(M.mind)
attacker_style = M.mind.martial_art
- if(attacker_style?.pacifism_check && HAS_TRAIT(M, TRAIT_PACIFISM)) // most martial arts are quite harmful, alas.
- attacker_style = null
if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
log_combat(M, H, "attempted to touch")
H.visible_message("[M] attempted to touch [H]! ")
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index 02163eaaed..d264f11b73 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -1,8 +1,9 @@
/datum/species/insect
name = "Anthromorphic Insect"
id = "insect"
+ say_mod = "flutters"
default_color = "00FF00"
- species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
+ species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns")
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
@@ -11,36 +12,54 @@
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
- liked_food = MEAT | FRUIT
- disliked_food = TOXIC
+ liked_food = VEGETABLES | DAIRY
+ disliked_food = FRUIT | GROSS
+ toxic_food = MEAT | RAW
+ mutanteyes = /obj/item/organ/eyes/insect
should_draw_citadel = TRUE
+ exotic_bloodtype = "BUG"
-/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
+/datum/species/insect/on_species_gain(mob/living/carbon/C)
. = ..()
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ if(!H.dna.features["insect_wings"])
+ H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]"
+ handle_mutant_bodyparts(H)
-/datum/species/insect/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
+/datum/species/insect/random_name(gender,unique,lastname)
+ if(unique)
+ return random_unique_moth_name()
-/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
+ var/randname = moth_name()
-/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
+ if(lastname)
+ randname += " [lastname]"
-/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
+ return randname
-/datum/species/insect/qualifies_for_rank(rank, list/features)
- return TRUE
\ No newline at end of file
+/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
+ ..()
+ if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
+ to_chat(H, "Your precious wings burn to a crisp! ")
+ if(H.dna.features["insect_wings"] != "None")
+ H.dna.features["insect_wings"] = "Burnt Off"
+ handle_mutant_bodyparts(H)
+
+/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ . = ..()
+ if(chem.id == "pestkiller")
+ H.adjustToxLoss(3)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+
+/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker)
+ if(istype(weapon, /obj/item/melee/flyswatter))
+ return 9 //flyswatters deal 10x damage to insects
+ return 0
+
+/datum/species/insect/space_move(mob/living/carbon/human/H)
+ . = ..()
+ if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None"))
+ var/datum/gas_mixture/current = H.loc.return_air()
+ if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
+ return TRUE
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 722c984309..93e64fd4cc 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -92,9 +92,6 @@
/mob/living/mech_melee_attack(obj/mecha/M)
if(M.occupant.a_intent == INTENT_HARM)
- if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM))
- to_chat(M.occupant, "You don't want to harm other living beings! ")
- return
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 371e92413b..0f8687397d 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -58,10 +58,7 @@
var/canholo = TRUE
var/obj/item/card/id/access_card = null
var/chassis = "repairbot"
- var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE,
- "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "borgi" = FALSE ,
- "parrot" = FALSE, "bear" = FALSE , "mushroom" = FALSE, "crow" = FALSE ,
- "fairy" = FALSE , "spiderbot" = FALSE) //assoc value is whether it can be picked up.
+ var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE) //assoc value is whether it can be picked up.
var/static/item_head_icon = 'icons/mob/pai_item_head.dmi'
var/static/item_lh_icon = 'icons/mob/pai_item_lh.dmi'
var/static/item_rh_icon = 'icons/mob/pai_item_rh.dmi'
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 4f12250ef0..a5943aa0e6 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -37,7 +37,6 @@
var/obj/item/paicard/paicard // Inserted pai card.
var/allow_pai = 1 // Are we even allowed to insert a pai card.
var/bot_name
- var/oil_spill_type = /obj/effect/decal/cleanable/oil
var/list/player_access = list() //Additonal access the bots gets when player controlled
var/emagged = FALSE
@@ -217,9 +216,9 @@
to_chat(user, "[src] is in pristine condition.")
/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
+ if(amount>0 && prob(10))
+ new /obj/effect/decal/cleanable/oil(loc)
. = ..()
- if(. && prob(10))
- new oil_spill_type(loc)
/mob/living/simple_animal/bot/updatehealth()
..()
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index 724abea214..1c19cd82a1 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -16,7 +16,6 @@
bot_core_type = /obj/machinery/bot_core/honkbot
window_id = "autohonk"
window_name = "Honkomatic Bike Horn Unit v1.0.7"
- oil_spill_type = /obj/effect/decal/cleanable/oil/slippery //slip and slide fun for the whole family
data_hud_type = DATA_HUD_SECURITY_BASIC // show jobs
path_image_color = "#FF69B4"
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index fed770d0b0..50c331940a 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -440,7 +440,7 @@
var/reagent_id = null
if(emagged == 2) //Emagged! Time to poison everybody.
- reagent_id = HAS_TRAIT(C, TRAIT_TOXINLOVER)? "charcoal" : "toxin"
+ reagent_id = "toxin"
else
if(treat_virus)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index c18fc36e9a..550593e316 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -522,10 +522,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
//gets ID card object from special clothes slot or null.
/mob/proc/get_idcard(hand_first = TRUE)
var/obj/item/held_item = get_active_held_item()
- . = held_item ? held_item.GetID() : null
+ . = held_item?.GetID()
if(!.) //If so, then check the inactive hand
held_item = get_inactive_held_item()
- . = held_item ? held_item.GetID() : null
+ . = held_item?.GetID()
/mob/proc/get_id_in_hand()
var/obj/item/held_item = get_active_held_item()
diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm
index 7ee71db1f1..ad63f55b90 100644
--- a/code/modules/ninja/outfit.dm
+++ b/code/modules/ninja/outfit.dm
@@ -16,7 +16,7 @@
implants = list(/obj/item/implant/explosive)
-/datum/outfit/ninja/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/ninja/post_equip(mob/living/carbon/human/H)
if(istype(H.wear_suit, suit))
var/obj/item/clothing/suit/space/space_ninja/S = H.wear_suit
if(istype(H.belt, belt))
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index ceb9b7a0fc..e43eb5a3bc 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -69,12 +69,12 @@
/obj/item/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
- damage = 28 // Citadel change for balance from 36
+ damage = 24 // Citadel change for balance from 36
damage_type = STAMINA
flag = "energy"
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
- speed = 0.6
+ speed = 0.7
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
tracer_type = /obj/effect/projectile/tracer/disabler
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 3a20501832..1eb75e042b 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -382,10 +382,9 @@
/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
if(beaker)
- var/obj/item/reagent_containers/B = beaker
- B.forceMove(drop_location())
+ beaker.forceMove(drop_location())
if(user && Adjacent(user) && !issiliconoradminghost(user))
- user.put_in_hands(B)
+ user.put_in_hands(beaker)
if(new_beaker)
beaker = new_beaker
else
@@ -397,6 +396,7 @@
cell = null
if(beaker)
beaker.forceMove(drop_location())
+ beaker = null
return ..()
/obj/machinery/chem_dispenser/proc/get_macro_resolution()
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index e91719504e..30d432ce55 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -515,7 +515,6 @@
///Stronger kind of lube. Applies TURF_WET_SUPERLUBE.
/datum/reagent/lube/superlube
name = "Super Duper Lube"
- id = "superlube"
description = "This \[REDACTED\] has been outlawed after the incident on \[DATA EXPUNGED\]."
lube_kind = TURF_WET_SUPERLUBE
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index ddbc6cf92b..b3f9ef8202 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -230,7 +230,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "clownflower"
volume = 30
- list_reagents = list("superlube" = 30)
+ list_reagents = list(/datum/reagent/lube/superlube = 30)
/obj/item/reagent_containers/spray/waterflower/cyborg
reagent_flags = NONE
diff --git a/code/modules/research/designs/machine_desings/machine_designs_service.dm b/code/modules/research/designs/machine_desings/machine_designs_service.dm
index 5cbff1c66a..895ad032ba 100644
--- a/code/modules/research/designs/machine_desings/machine_designs_service.dm
+++ b/code/modules/research/designs/machine_desings/machine_designs_service.dm
@@ -41,14 +41,6 @@
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-/datum/design/board/ayyplantgenes
- name = "Machine Design (Alien Plant DNA Manipulator Board)"
- desc = "The circuit board for an advanced plant DNA manipulator, utilizing alien technologies."
- id = "ayyplantgenes"
- build_path = /obj/item/circuitboard/machine/plantgenes/vault
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
/datum/design/board/deepfryer
name = "Machine Design (Deep Fryer)"
desc = "The circuit board for a Deep Fryer."
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 836b574f86..5f457a3cd7 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -84,9 +84,8 @@
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
message_admins("[ADMIN_LOOKUPFLW(user)] has built [amount] of [path] at a [src]([type]).")
for(var/i in 1 to amount)
- var/obj/O = new path(get_turf(src))
- if(efficient_with(O.type) && isitem(O))
- var/obj/item/I = O
+ var/obj/item/I = new path(get_turf(src))
+ if(efficient_with(I.type))
I.materials = matlist.Copy()
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index a2482c49a8..5f286c4237 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -616,7 +616,7 @@
/datum/techweb_node/botany
id = "botany"
display_name = "Botanical Engineering"
- description = "Botanical tools."
+ description = "Botanical tools"
prereq_ids = list("adv_engi", "biotech")
design_ids = list("diskplantgene", "portaseeder", "plantgenes", "flora_gun", "hydro_tray", "biogenerator", "seed_extractor")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2750)
@@ -1047,14 +1047,14 @@
display_name = "Alien Biological Tools"
description = "Advanced biological tools."
prereq_ids = list("alientech", "advance_surgerytools")
- design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery", "ayyplantgenes")
+ design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 10000
/datum/techweb_node/alien_engi
id = "alien_engi"
display_name = "Alien Engineering"
- description = "Alien engineering tools."
+ description = "Alien engineering tools"
prereq_ids = list("alientech", "exp_tools")
design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm
index d12195cc52..92a637ce43 100644
--- a/code/modules/ruins/lavaland_ruin_code.dm
+++ b/code/modules/ruins/lavaland_ruin_code.dm
@@ -135,7 +135,7 @@
id = /obj/item/card/id/syndicate/anyone
implants = list(/obj/item/implant/weapons_auth)
-/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/H)
H.faction |= ROLE_SYNDICATE
/obj/effect/mob_spawn/human/lavaland_syndicate/comms
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 3fba237c23..9aa89dcaf5 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -354,7 +354,7 @@
if("legs" in S.default_features)
if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG)
if(DIGITIGRADE in S.species_traits)
- digitigrade_type = lowertext(H.dna.features["legs"])
+ digitigrade_type = lowertext(H.dna.features.["legs"])
else
digitigrade_type = null
@@ -363,9 +363,9 @@
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
if(Smark)
body_markings_icon = Smark.icon
- if(H.dna.features["mam_body_markings"] != "None")
- body_markings = lowertext(H.dna.features["mam_body_markings"])
- aux_marking = lowertext(H.dna.features["mam_body_markings"])
+ if(H.dna.features.["mam_body_markings"] != "None")
+ body_markings = lowertext(H.dna.features.["mam_body_markings"])
+ aux_marking = lowertext(H.dna.features.["mam_body_markings"])
else
body_markings = "plain"
aux_marking = "plain"
diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm
index 40fe90a829..3172496146 100644
--- a/code/modules/surgery/experimental_dissection.dm
+++ b/code/modules/surgery/experimental_dissection.dm
@@ -110,4 +110,4 @@
requires_tech = TRUE
replaced_by = null
-#undef BASE_HUMAN_REWARD
\ No newline at end of file
+#undef EXPDIS_FAIL_MSG
\ No newline at end of file
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 94512dc597..a9830f36df 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -212,6 +212,7 @@ obj/item/organ/heart/cybernetic/upgraded/on_life()
ramount += regen_amount
/obj/item/organ/heart/cybernetic/upgraded/proc/used_dose()
+ . = ..()
addtimer(VARSET_CALLBACK(src, dose_available, TRUE), 5 MINUTES)
ramount = 0
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 466f618cf3..194a10f4c4 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -1,3 +1,6 @@
+#define STANDARD_ORGAN_THRESHOLD 100
+#define STANDARD_ORGAN_HEALING 0.001
+
/obj/item/organ
name = "organ"
icon = 'icons/obj/surgery.dmi'
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index aef3b31895..01505a940f 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -1804,21 +1804,6 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
cost = 4
restricted_roles = list("Cook", "Botanist", "Clown", "Mime")
-/datum/uplink_item/role_restricted/strange_seeds
- name = "Pack of strange seeds"
- desc = "Mysterious seeds as strange as their name implies. Spooky."
- item = /obj/item/seeds/random
- cost = 2
- restricted_roles = list("Botanist")
- illegal_tech = FALSE
-
-/datum/uplink_item/role_restricted/strange_seeds_10pack
- name = "Pack of strange seeds x10"
- desc = "Mysterious seeds as strange as their name implies. Spooky. These come in bulk"
- item = /obj/item/storage/box/strange_seeds_10pack
- cost = 20
- restricted_roles = list("Botanist")
-
/datum/uplink_item/role_restricted/ez_clean_bundle
name = "EZ Clean Grenade Bundle"
desc = "A box with three cleaner grenades using the trademark Waffle Co. formula. Serves as a cleaner and causes acid damage to anyone standing nearby. \
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index adaa56fc6d..e64435accc 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -125,7 +125,6 @@
products = list(/obj/item/clothing/glasses/hud/diagnostic = 3,
/obj/item/clothing/under/rank/roboticist = 3,
/obj/item/clothing/under/rank/roboticist/skirt = 3,
- /obj/item/clothing/suit/hooded/wintercoat/robotics = 3,
/obj/item/clothing/suit/toggle/labcoat = 3,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/clothing/gloves/fingerless = 3,
@@ -259,7 +258,6 @@
vend_reply = "Thank you for using the JaniDrobe!"
products = list(/obj/item/clothing/under/rank/janitor = 2,
/obj/item/clothing/under/rank/janitor/skirt = 2,
- /obj/item/clothing/suit/hooded/wintercoat/janitor = 3,
/obj/item/cartridge/janitor = 3,
/obj/item/clothing/gloves/color/black = 2,
/obj/item/clothing/head/soft/purple = 2,
@@ -342,7 +340,6 @@
vend_reply = "Thank you for using the ChemDrobe!"
products = list(/obj/item/clothing/under/rank/chemist = 3,
/obj/item/clothing/under/rank/chemist/skirt = 3,
- /obj/item/clothing/suit/hooded/wintercoat/chemistry = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/chemist = 3,
/obj/item/storage/backpack/chemistry = 3,
@@ -362,7 +359,6 @@
vend_reply = "Thank you for using the GeneDrobe!"
products = list(/obj/item/clothing/under/rank/geneticist = 3,
/obj/item/clothing/under/rank/geneticist/skirt = 3,
- /obj/item/clothing/suit/hooded/wintercoat/genetics = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/genetics = 3,
/obj/item/storage/backpack/genetics = 3,
@@ -380,7 +376,6 @@
vend_reply = "Thank you for using the ViroDrobe"
products = list(/obj/item/clothing/under/rank/virologist = 3,
/obj/item/clothing/under/rank/virologist/skirt = 3,
- /obj/item/clothing/suit/hooded/wintercoat/viro = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/virologist = 3,
/obj/item/clothing/mask/surgical = 3,
diff --git a/html/changelogs/AutoChangeLog-pr-9323.yml b/html/changelogs/AutoChangeLog-pr-9323.yml
deleted file mode 100644
index 19e91deaf5..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9323.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "kevinz000"
-delete-after: True
-changes:
- - rscadd: "you can now choose never for this round for magical antags"
diff --git a/html/changelogs/AutoChangeLog-pr-9518.yml b/html/changelogs/AutoChangeLog-pr-9518.yml
deleted file mode 100644
index 67a2c25938..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9518.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie (original PR by nicbn and Menshin)"
-delete-after: True
-changes:
- - bugfix: "You can click on things that are under flaps or holo barriers."
diff --git a/html/changelogs/AutoChangeLog-pr-9530.yml b/html/changelogs/AutoChangeLog-pr-9530.yml
deleted file mode 100644
index ace41e9e97..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9530.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Fixed the little issue of PDA skins not updating on job equip."
- - tweak: "Anomaly Crystals of the clowning type will now rename the victim to their clown name preference when triggered, instead of giving them a random clown name."
diff --git a/html/changelogs/AutoChangeLog-pr-9681.yml b/html/changelogs/AutoChangeLog-pr-9681.yml
deleted file mode 100644
index c4c289425b..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9681.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "kevinz000"
-delete-after: True
-changes:
- - balance: "bluespace wizard apprentice now has blink instead of targeted area teleportation"
diff --git a/html/changelogs/AutoChangeLog-pr-9703.yml b/html/changelogs/AutoChangeLog-pr-9703.yml
deleted file mode 100644
index 312057c2c6..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9703.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "kevinz000"
-delete-after: True
-changes:
- - balance: "Emagged medibots now charcoal toxinlovers."
diff --git a/html/changelogs/AutoChangeLog-pr-9720.yml b/html/changelogs/AutoChangeLog-pr-9720.yml
deleted file mode 100644
index f4c4aade36..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9720.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "kevinz000"
-delete-after: True
-changes:
- - balance: "disablers buffed 0.7 --> 0.6 speed 24 --> 28 damage"
diff --git a/html/changelogs/AutoChangeLog-pr-9749.yml b/html/changelogs/AutoChangeLog-pr-9749.yml
deleted file mode 100644
index 3113fa08c3..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9749.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Trilbyspaceclone"
-delete-after: True
-changes:
- - balance: "Boh cant hold WEIGHT_CLASS_GIGANTIC, just Bulky. Makes katana, chainsaw and base ball bat into bulky items so they may fit"
diff --git a/html/changelogs/AutoChangeLog-pr-9812.yml b/html/changelogs/AutoChangeLog-pr-9812.yml
deleted file mode 100644
index d669d20343..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9812.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Fixed missing delivery packages sprites"
diff --git a/html/changelogs/AutoChangeLog-pr-9823.yml b/html/changelogs/AutoChangeLog-pr-9823.yml
deleted file mode 100644
index 3408f04171..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9823.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "Seris02"
-delete-after: True
-changes:
- - rscadd: "Added nine winter coats"
- - imageadd: "added images for the winter coats"
- - tweak: "adds the mining winter coat to mining wardrobes and mining lockers"
diff --git a/html/changelogs/AutoChangeLog-pr-9828.yml b/html/changelogs/AutoChangeLog-pr-9828.yml
deleted file mode 100644
index 53dbebba28..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9828.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam3145"
-delete-after: True
-changes:
- - tweak: "Meteor wave is no longer repeatable in dynamic."
diff --git a/html/changelogs/AutoChangeLog-pr-9831.yml b/html/changelogs/AutoChangeLog-pr-9831.yml
deleted file mode 100644
index 569fd14f69..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9831.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam3145"
-delete-after: True
-changes:
- - tweak: "tweaked nuke ops"
diff --git a/html/changelogs/AutoChangeLog-pr-9864.yml b/html/changelogs/AutoChangeLog-pr-9864.yml
deleted file mode 100644
index ff1f4f6508..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9864.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Knouli"
-delete-after: True
-changes:
- - rscadd: "attack_self proc for the legion core which triggers a self-heal al la the previous 'afterattack' proc, as if clicking on the character's own sprite to self-heal"
- - rscadd: "admin logging for all three use cases of legion core healing - afterattack, attack_self, and implanted ui_action_click"
diff --git a/html/changelogs/AutoChangeLog-pr-9865.yml b/html/changelogs/AutoChangeLog-pr-9865.yml
deleted file mode 100644
index 6bef9d6b5b..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9865.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Useroth"
-delete-after: True
-changes:
- - bugfix: "numbered storages now are sorted in a consistent way, instead of depending on ordering of their contents var"
diff --git a/html/changelogs/AutoChangeLog-pr-9866.yml b/html/changelogs/AutoChangeLog-pr-9866.yml
deleted file mode 100644
index 1e6e8d0e88..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9866.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Useroth"
-delete-after: True
-changes:
- - rscadd: "strange seeds as a buyable traitor botanist item"
diff --git a/html/changelogs/AutoChangeLog-pr-9868.yml b/html/changelogs/AutoChangeLog-pr-9868.yml
deleted file mode 100644
index 18c4388dcd..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9868.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "fixed superlube waterflower, my bad."
diff --git a/html/changelogs/AutoChangeLog-pr-9869.yml b/html/changelogs/AutoChangeLog-pr-9869.yml
deleted file mode 100644
index ecb3ac6cb7..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9869.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Hatterhat"
-delete-after: True
-changes:
- - rscadd: "The seedvault/alien plant DNA manipulator can now be printed off with Alien Biotechnology."
diff --git a/html/changelogs/AutoChangeLog-pr-9871.yml b/html/changelogs/AutoChangeLog-pr-9871.yml
deleted file mode 100644
index 3940d256c2..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9871.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "dzahlus"
-delete-after: True
-changes:
- - soundadd: "added a new gun sounds"
- - sounddel: "removed an old gun sounds"
diff --git a/html/changelogs/AutoChangeLog-pr-9873.yml b/html/changelogs/AutoChangeLog-pr-9873.yml
deleted file mode 100644
index b0568bad14..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9873.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Fixed closing the aux base construction RCD's door access settings window throwing you out of camera mode when closed."
- - rscdel: "Removed not functional aux base RCD's door type menu. Use airlock painters, maybe."
diff --git a/html/changelogs/AutoChangeLog-pr-9874.yml b/html/changelogs/AutoChangeLog-pr-9874.yml
deleted file mode 100644
index 2e932c458b..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9874.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - rscadd: "Honkbot oil spills are of the slippery kind now. Honk."
diff --git a/html/changelogs/AutoChangeLog-pr-9875.yml b/html/changelogs/AutoChangeLog-pr-9875.yml
deleted file mode 100644
index 4e14a561e7..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9875.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam"
-delete-after: True
-changes:
- - bugfix: "From-ghosts dynamic rulesets now actually listen to \"required candidates\""
diff --git a/html/changelogs/AutoChangeLog-pr-9876.yml b/html/changelogs/AutoChangeLog-pr-9876.yml
deleted file mode 100644
index 4bc0a19954..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9876.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - imageadd: "local code scavenger finds forgotten slighty improved apc sprites left buried in old dusty folders."
diff --git a/html/changelogs/AutoChangeLog-pr-9877.yml b/html/changelogs/AutoChangeLog-pr-9877.yml
deleted file mode 100644
index c84cb7aa92..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9877.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Seven old and otherwordly pAI holochassis icons have crawled their way out of the modular citadel catacombs."
diff --git a/html/changelogs/AutoChangeLog-pr-9880.yml b/html/changelogs/AutoChangeLog-pr-9880.yml
deleted file mode 100644
index 0f9dfa58f3..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9880.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam"
-delete-after: True
-changes:
- - bugfix: "Every dynamic-triggered event is now blacklisted from being triggered by the random events system when dynamic can trigger them."
diff --git a/html/changelogs/AutoChangeLog-pr-9881.yml b/html/changelogs/AutoChangeLog-pr-9881.yml
deleted file mode 100644
index 3ff9081e66..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9881.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam"
-delete-after: True
-changes:
- - rscadd: "Dynamic voting now features extended, if recent rounds have been chaotic."
diff --git a/html/changelogs/AutoChangeLog-pr-9886.yml b/html/changelogs/AutoChangeLog-pr-9886.yml
deleted file mode 100644
index 64c011e37c..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9886.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "chem dispenser beakers end up in your hand yet again."
- - bugfix: "Bikehorns squeak yet again, the world is safe."
diff --git a/html/changelogs/AutoChangeLog-pr-9887.yml b/html/changelogs/AutoChangeLog-pr-9887.yml
deleted file mode 100644
index c76016575b..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9887.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "Fox McCloud, Ghommie"
-delete-after: True
-changes:
- - bugfix: "Fixes being able to mech-punch other mobs, as a pacifist"
- - bugfix: "Fixes being able to hurt people, as a pacifist, by throwing them into a wall or other mob, or by using most martial arts (save for the unpredictable psychotic brawl, and the stamina-damage-only boxing)."
- - balance: "Buffs boxing to outdamage natural stamina regeneration. Made the chance of outright missing your opponent actually possible."
- - tweak: "Pacifists can now engage in the (laughably not harmful) sweet sweet art of boxing now."
diff --git a/html/changelogs/AutoChangeLog-pr-9889.yml b/html/changelogs/AutoChangeLog-pr-9889.yml
deleted file mode 100644
index 68094bd33d..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9889.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "GrayRachnid"
-delete-after: True
-changes:
- - bugfix: "Fixes golden toolbox missing inhand sprite"
diff --git a/html/changelogs/AutoChangeLog-pr-9891.yml b/html/changelogs/AutoChangeLog-pr-9891.yml
deleted file mode 100644
index 105749ea29..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9891.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Putnam"
-delete-after: True
-changes:
- - tweak: "Roundstart rulesets now scale on population ready rather than total population."
diff --git a/html/changelogs/AutoChangeLog-pr-9896.yml b/html/changelogs/AutoChangeLog-pr-9896.yml
deleted file mode 100644
index 378129d227..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9896.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Cyborgs can now actually use cameras from a distance."
diff --git a/html/changelogs/AutoChangeLog-pr-9898.yml b/html/changelogs/AutoChangeLog-pr-9898.yml
deleted file mode 100644
index 002e3b544d..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9898.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Suicides are yet again painful and instant and won't throw people in deep crit from full health."
diff --git a/html/changelogs/AutoChangeLog-pr-9908.yml b/html/changelogs/AutoChangeLog-pr-9908.yml
deleted file mode 100644
index fb0ae06238..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9908.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "fixed rogue pixels on the energy gu- ahem blaster carbine... and a few apc lights states being neigh-indistinguishable."
diff --git a/html/changelogs/AutoChangeLog-pr-9909.yml b/html/changelogs/AutoChangeLog-pr-9909.yml
deleted file mode 100644
index 7cfb6ce5b2..0000000000
--- a/html/changelogs/AutoChangeLog-pr-9909.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "kiwedespars"
-delete-after: True
-changes:
- - rscdel: "removed moth fluff coloring you like your wings"
- - balance: "made insect not so bad."
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index e9f32c428aad8d0d569b56bf5a844b15e433c9e9..69e75e7d2874d8f01b6c34807ae9f5d6070f8561 100644
GIT binary patch
literal 197892
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