diff --git a/_maps/RandomRuins/IceRuins/bubberstation/icemoon_persistence.dmm b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_persistence.dmm
index 89716ee92e4..7687e1d6b1e 100644
--- a/_maps/RandomRuins/IceRuins/bubberstation/icemoon_persistence.dmm
+++ b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_persistence.dmm
@@ -12852,7 +12852,6 @@
/obj/item/paper/crumpled/retired_designs,
/obj/item/paper/crumpled/rbmk2,
/obj/item/paper/requisition,
-/obj/item/paper/dark_matteor_summoning,
/obj/item/paper/default_lawset_list,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/bubbers/persistance/sci/rnd)
@@ -15106,7 +15105,6 @@
},
/obj/structure/noticeboard/directional/north,
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/paper/dark_matteor_summoning,
/obj/item/paper/crumpled/muddy/fluff/cannon_instructions,
/obj/item/paper/crumpled/retired_designs,
/obj/item/paper/crumpled/plap,
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm
index 8a3b8d7a004..195c9677f6d 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm
@@ -245,9 +245,6 @@
/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/syndielab)
-"oA" = (
-/turf/open/floor/iron/dark/textured,
-/area/ruin/syndielab)
"oY" = (
/obj/effect/mapping_helpers/apc/syndicate_access,
/obj/effect/mapping_helpers/apc/full_charge,
@@ -1082,7 +1079,7 @@ Xt
Xt
AR
Jc
-oA
+ey
FJ
AR
qC
diff --git a/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_persistence.dmm b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_persistence.dmm
index c1100d3271a..d9266152d90 100644
--- a/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_persistence.dmm
+++ b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_persistence.dmm
@@ -7676,7 +7676,6 @@
/obj/item/paper/crumpled/retired_designs,
/obj/item/paper/crumpled/rbmk2,
/obj/item/paper/requisition,
-/obj/item/paper/dark_matteor_summoning,
/obj/item/paper/default_lawset_list,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/bubbers/persistance/sci/rnd)
@@ -11524,7 +11523,6 @@
},
/obj/structure/noticeboard/directional/north,
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/paper/dark_matteor_summoning,
/obj/item/paper/crumpled/muddy/fluff/cannon_instructions,
/obj/item/paper/crumpled/retired_designs,
/obj/item/paper/crumpled/plap,
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm
index 0742ae85d7b..ae368666c28 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm
@@ -89,23 +89,23 @@
/area/ruin/space/has_grav/powered/prison_shuttle)
"is" = (
/obj/structure/rack,
-/obj/item/gun/ballistic/automatic/surplus,
-/obj/item/gun/ballistic/automatic/surplus{
+/obj/item/gun/ballistic/rifle/sks,
+/obj/item/gun/ballistic/rifle/sks{
pixel_y = -7
},
-/obj/item/ammo_box/magazine/sr10mm{
+/obj/item/ammo_box/strilka310{
pixel_x = 6;
pixel_y = 9
},
-/obj/item/ammo_box/magazine/sr10mm{
+/obj/item/ammo_box/strilka310{
pixel_x = 1;
pixel_y = 9
},
-/obj/item/ammo_box/magazine/sr10mm{
+/obj/item/ammo_box/strilka310{
pixel_x = -4;
pixel_y = 9
},
-/obj/item/ammo_box/magazine/sr10mm{
+/obj/item/ammo_box/strilka310{
pixel_x = -9;
pixel_y = 9
},
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm
index 8333af89361..d6c152af69d 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm
@@ -371,10 +371,6 @@
/obj/item/card/id/away/old/salvagepod,
/turf/template_noop,
/area/template_noop)
-"rM" = (
-/obj/effect/decal/cleanable/glass,
-/turf/template_noop,
-/area/template_noop)
"rP" = (
/obj/machinery/power/shuttle_engine/large{
dir = 4
@@ -395,10 +391,6 @@
/obj/item/stack/sheet/iron/five,
/turf/open/floor/plating/airless,
/area/template_noop)
-"se" = (
-/obj/effect/decal/cleanable/generic,
-/turf/template_noop,
-/area/template_noop)
"ss" = (
/obj/structure/lattice/catwalk,
/turf/template_noop,
@@ -974,10 +966,6 @@
"Uz" = (
/turf/closed/wall,
/area/ruin/powered)
-"Vf" = (
-/obj/effect/decal/cleanable/generic,
-/turf/open/floor/plating/airless,
-/area/template_noop)
"VF" = (
/obj/item/stack/sheet/mineral/titanium{
amount = 5
@@ -2258,7 +2246,7 @@ Eu
PD
LR
yQ
-se
+Eu
Eu
QC
PD
@@ -2358,7 +2346,7 @@ Eu
Eu
Eu
Eu
-se
+Eu
Eu
Eu
Eu
@@ -2512,7 +2500,7 @@ oW
Eu
Eu
Eu
-rM
+Eu
Eu
uc
Eu
@@ -2569,12 +2557,12 @@ Eu
Eu
mV
mm
-se
-Vf
+Eu
+vn
vn
vn
sc
-Vf
+vn
PD
Eu
Eu
@@ -2615,7 +2603,7 @@ oW
oW
Eu
Eu
-rM
+Eu
PD
Eu
Eu
@@ -2723,7 +2711,7 @@ rR
PD
PD
Eu
-se
+Eu
Eu
ZF
PB
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 1420c399bee..0a04910dc77 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -46339,12 +46339,6 @@
/obj/structure/chair/sofa/bench/left,
/turf/open/floor/iron/smooth_large,
/area/station/hallway/secondary/service)
-"kPj" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/station/engineering/supermatter)
"kPm" = (
/obj/machinery/airalarm/directional/north,
/obj/effect/mapping_helpers/airalarm/tlv_no_checks,
@@ -96833,7 +96827,7 @@ cqj
cSG
crb
cru
-kPj
+cEx
cEx
cEx
cAP
diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm
index c2f9cd5f82b..36ea4ad4802 100644
--- a/_maps/map_files/biodome/biodome.dmm
+++ b/_maps/map_files/biodome/biodome.dmm
@@ -44714,16 +44714,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/smooth_half,
/area/station/security/brig)
-"plF" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/yellow/line,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/aft)
"plG" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -48734,16 +48724,6 @@
/obj/structure/sign/poster/contraband/random/directional/north,
/turf/open/misc/asteroid,
/area/station/cargo/miningdock)
-"qIG" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/yellow/arrow_cw,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/aft)
"qIL" = (
/obj/machinery/firealarm/directional/south,
/obj/effect/turf_decal/siding/dark/end{
@@ -53728,7 +53708,6 @@
/turf/open/floor/stone,
/area/station/biodome)
"sps" = (
-/obj/item/paper/calling_card,
/turf/open/misc/asteroid/airless,
/area/station/asteroid)
"sqa" = (
@@ -63183,12 +63162,6 @@
"vJH" = (
/turf/closed/wall,
/area/station/command/heads_quarters/qm)
-"vJN" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/station/engineering/supermatter)
"vJS" = (
/obj/structure/closet/secure_closet/personal{
anchored = 1
@@ -108422,7 +108395,7 @@ ppF
tIT
hiO
aiH
-vJN
+qvF
piZ
esB
pSY
@@ -171868,7 +171841,7 @@ fQs
ctJ
sXp
lnK
-plF
+fWN
xPs
jAa
yhy
@@ -172125,7 +172098,7 @@ fQs
ctJ
sXp
lnK
-plF
+fWN
uCA
jAa
qEN
@@ -172382,7 +172355,7 @@ fQs
ctJ
sXp
lnK
-plF
+fWN
pPI
jAa
tfv
@@ -172896,7 +172869,7 @@ fQs
ctJ
sXp
lnK
-plF
+fWN
igV
jAa
nPx
@@ -173410,7 +173383,7 @@ fQs
pEf
jpN
lnK
-plF
+fWN
lBt
jAa
eZE
@@ -174952,7 +174925,7 @@ lQM
fKP
hMD
jnx
-qIG
+nrz
dCe
jAa
vFw
diff --git a/_maps/map_files/moonstation/moonstation.dmm b/_maps/map_files/moonstation/moonstation.dmm
index 27d21c110e4..0def9ca31dd 100644
--- a/_maps/map_files/moonstation/moonstation.dmm
+++ b/_maps/map_files/moonstation/moonstation.dmm
@@ -56244,15 +56244,6 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/carpet,
/area/station/security/detectives_office)
-"pwc" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/terminal/lobby)
"pwe" = (
/obj/machinery/pipedispenser/disposal/transit_tube,
/obj/effect/turf_decal/tile/yellow/fourcorners,
@@ -221691,7 +221682,7 @@ dzW
twx
vPx
rAt
-pwc
+goy
iNo
iNo
fHZ
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 97fbbb6dffb..1a4c6ab100c 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -258,8 +258,9 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
if(length(CONFIG_GET(keyed_list/cross_server)))
send_news_report()
*/
- send2chat("The current round has ended. Please standby for your shift interlude Nanotrasen News Network's report!", CONFIG_GET(string/channel_announce_end_game))
- send2chat(send_news_report(), CONFIG_GET(string/channel_announce_end_game))
+ for(var/channel_tag in CONFIG_GET(str_list/channel_announce_end_game))
+ send2chat("The current round has ended. Please standby for your shift interlude Nanotrasen News Network's report!", channel_tag)
+ send2chat(send_news_report(), channel_tag)
//SKYRAT EDIT - END
CHECK_TICK
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 13b41ad9586..3df4e086265 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -103,8 +103,10 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
if(initial(quirk_type.erp_quirk) && CONFIG_GET(flag/disable_erp_preferences))
continue
// Hidden quirks aren't visible to TGUI or the player
+ #if !defined(UNIT_TESTS)
if (initial(quirk_type.hidden_quirk))
continue
+ #endif
// SKYRAT EDIT ADDITION END
quirks[initial(quirk_type.name)] = quirk_type
diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm
index 57a7aa1d041..20cc2e7aaac 100644
--- a/code/controllers/subsystem/sprite_accessories.dm
+++ b/code/controllers/subsystem/sprite_accessories.dm
@@ -67,6 +67,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
// SKYRAT EDIT ADDITION START - Customization
var/list/lizard_markings_list
var/list/tails_list_monkey
+ var/list/tails_list_xeno
var/list/tails_list_fish
var/list/caps_list
var/list/moth_wings_list
diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm
index 23e70cf7a6d..fb88b97606d 100644
--- a/code/datums/components/riding/riding_mob.dm
+++ b/code/datums/components/riding/riding_mob.dm
@@ -271,6 +271,7 @@
/datum/component/riding/creature/human/get_rider_offsets_and_layers(pass_index, mob/offsetter)
var/mob/living/carbon/human/seat = parent
+/* BUBBER EDIT CHANGE BEGIN - Oversized Overhaul, Taur riding
// fireman carry
if(seat.buckle_lying)
return list(
@@ -286,6 +287,36 @@
TEXT_EAST = list(-6, 8, MOB_BELOW_PIGGYBACK_LAYER),
TEXT_WEST = list( 6, 8, MOB_BELOW_PIGGYBACK_LAYER),
)
+*/
+ // fireman carry
+ if(seat.buckle_lying)
+ return HAS_TRAIT(seat, TRAIT_OVERSIZED) ? list(
+ TEXT_NORTH = list(0, OVERSIZED_OFFSET),
+ TEXT_SOUTH = list(0, OVERSIZED_OFFSET),
+ TEXT_EAST = list(0, OVERSIZED_OFFSET),
+ TEXT_WEST = list(0, OVERSIZED_OFFSET),
+ ) : list(
+ TEXT_NORTH = list(0, REGULAR_OFFSET),
+ TEXT_SOUTH = list(0, REGULAR_OFFSET),
+ TEXT_EAST = list(0, REGULAR_OFFSET),
+ TEXT_WEST = list(0, REGULAR_OFFSET),
+ )
+ else if(!(ride_check_flags & RIDING_TAUR)) // piggyback
+ return HAS_TRAIT(seat, TRAIT_OVERSIZED) ? list(
+ TEXT_NORTH = list(0, OVERSIZED_OFFSET),
+ TEXT_SOUTH = list(0, OVERSIZED_OFFSET),
+ TEXT_EAST = list(-OVERSIZED_SIDE_OFFSET, OVERSIZED_OFFSET),
+ TEXT_WEST = list(OVERSIZED_SIDE_OFFSET, OVERSIZED_OFFSET),
+ ) : list(
+ TEXT_NORTH = list(0, REGULAR_OFFSET),
+ TEXT_SOUTH = list(0, REGULAR_OFFSET),
+ TEXT_EAST = list(-REGULAR_OFFSET, REGULAR_SIDE_OFFSET),
+ TEXT_WEST = list(REGULAR_OFFSET, REGULAR_SIDE_OFFSET)
+ )
+ if(ride_check_flags & RIDING_TAUR) // riding a taur
+ var/obj/item/organ/taur_body/taur_body = seat.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)
+ return taur_body.get_riding_offset(oversized = HAS_TRAIT(seat, TRAIT_OVERSIZED))
+// BUBBER EDIT CHANGE END - Oversized Overhaul, Taur riding
/datum/component/riding/creature/human/get_parent_offsets_and_layers()
return list(
diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm
index c18a027aacd..85fd0fb806d 100644
--- a/code/datums/quirks/_quirk.dm
+++ b/code/datums/quirks/_quirk.dm
@@ -125,7 +125,7 @@
if(!quirk_transfer && lose_text)
to_chat(quirk_holder, lose_text)
- if(mob_trait)
+ if(mob_trait && !QDELETED(quirk_holder)) // BUBBER EDIT CHANGE - Original: if(mob_trait) - Temp fix until https://github.com/tgstation/tgstation/pull/90044
REMOVE_TRAIT(quirk_holder, mob_trait, QUIRK_TRAIT)
if(quirk_flags & QUIRK_PROCESSES)
diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm
index 5902ae9f9fe..f77b882f605 100644
--- a/code/modules/client/preferences/glasses.dm
+++ b/code/modules/client/preferences/glasses.dm
@@ -14,7 +14,10 @@
if (value == "Random")
return uni_icon('icons/effects/random_spawners.dmi', "questionmark")
else
- return uni_icon('icons/obj/clothing/glasses.dmi', "glasses_[LOWER_TEXT(value)]")
+ // BUBBER EDIT CHANGE BEGIN - Handle glasses not in the base tg file
+ var/obj/item/clothing/glasses/glasses_type = GLOB.nearsighted_glasses[value]
+ return uni_icon(initial(glasses_type.icon), initial(glasses_type.icon_state))
+ // BUBBER EDIT CHANGE END - Handle glasses not in the base tg file
/datum/preference/choiced/glasses/is_accessible(datum/preferences/preferences)
if (!..(preferences))
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index f5893108fa6..14c1b828760 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -253,7 +253,7 @@
dna.species.pre_equip_species_outfit(equipping, src, visual_only)
equip_outfit_and_loadout(equipping.get_outfit(consistent), player_client?.prefs, visual_only, equipping) // SKYRAT EDIT CHANGE - Add equipping param
-/datum/job/proc/announce_head(mob/living/carbon/human/human, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. // BUBBER EDIT CHANGE - ALTERNATIVE_JOB_TITLES
+/datum/job/proc/announce_head(mob/living/carbon/human/human, channels, job_title) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. // BUBBER EDIT CHANGE - ALTERNATIVE_JOB_TITLES
if(human)
//timer because these should come after the captain announcement
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(aas_config_announce), /datum/aas_config_entry/newhead, list("PERSON" = human.real_name, "RANK" = job_title), null, channels, null, TRUE), 1)) // BUBBER EDIT CHANGE - ALTERNATIVE_JOB_TITLES
diff --git a/code/modules/loadout/categories/neck.dm b/code/modules/loadout/categories/neck.dm
index 9a98870975c..ab28537f20c 100644
--- a/code/modules/loadout/categories/neck.dm
+++ b/code/modules/loadout/categories/neck.dm
@@ -39,6 +39,8 @@
name = "Necktie (Loose)"
item_path = /obj/item/clothing/neck/tie/detective
+/* BUBBER EDIT REMOVAL - duplicate of /datum/loadout_item/neck/bowtie_black
/datum/loadout_item/neck/bowtie
name = "Bowtie"
item_path = /obj/item/clothing/neck/bowtie
+BUBBER EDIT END */
diff --git a/code/modules/loadout/categories/pocket.dm b/code/modules/loadout/categories/pocket.dm
index f94cc740d53..8f4348f5921 100644
--- a/code/modules/loadout/categories/pocket.dm
+++ b/code/modules/loadout/categories/pocket.dm
@@ -197,9 +197,11 @@
item_path = /obj/item/dice/d00
*/
+/* BUBBER EDIT REMOVAL BEGIN - duplicate of /datum/loadout_item/pocket_items/zippolighter
/datum/loadout_item/pocket_items/lighter
name = "Zippo Lighter"
item_path = /obj/item/lighter
+BUBBER EDIT REMOVAL END */
/datum/loadout_item/pocket_items/flask
name = "Pocket Flask"
@@ -221,6 +223,8 @@
name = "Poster (Pinup)"
item_path = /obj/item/poster/random_contraband/pinup
+/* BUBBER EDIT REMOVAL BEGIN - duplicate of /datum/loadout_item/accessory/wallet
/datum/loadout_item/pocket_items/wallet
name = "Wallet"
item_path = /obj/item/storage/wallet
+BUBBER EDIT REMOVAL END */
diff --git a/code/modules/loadout/categories/shoes.dm b/code/modules/loadout/categories/shoes.dm
index 8e58dac0aa6..e4601ce3e00 100644
--- a/code/modules/loadout/categories/shoes.dm
+++ b/code/modules/loadout/categories/shoes.dm
@@ -11,9 +11,11 @@
/datum/loadout_item/shoes/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE)
outfit.shoes = item_path
+/* BUBBER EDIT REMOVAL BEGIN - duplicate of /datum/loadout_item/shoes/greyscale_sneakers
/datum/loadout_item/shoes/sneakers
name = "Sneakers (Colourable)"
item_path = /obj/item/clothing/shoes/sneakers
+BUBBER EDIT REMOVAL END */
/datum/loadout_item/shoes/sandals_laced
name = "Sandals (Velcro)"
@@ -39,6 +41,8 @@
name = "Boots (Cowboy, Black)"
item_path = /obj/item/clothing/shoes/cowboy/black/laced
+/* BUBBER EDIT REMOVAL BEGIN - duplicate of /datum/loadout_item/shoes/glow
/datum/loadout_item/shoes/glow_shoes
name = "Shoes (Glowing, Colourable)"
item_path = /obj/item/clothing/shoes/glow
+BUBBER EDIT REMOVAL END */
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 00069117544..db1aa1ec754 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -224,6 +224,7 @@
name = "\improper Liberator"
desc = "A poorly made 3D printed \"gun\", only capable of firing a single shot. Well-known throughout the Spinward Sector \
after an incident where 3 assistants were killed by shrapnel from such a device exploding while attempting to shoot a mouse."
+ icon = 'icons/obj/weapons/guns/ballistic.dmi' // BUBBER EDIT ADDITION - We don't have an override sprite for this one
icon_state = "doorhickey"
custom_materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 2)
bolt_type = BOLT_TYPE_NO_BOLT
diff --git a/code/modules/unit_tests/quirks.dm b/code/modules/unit_tests/quirks.dm
index 69630f66291..8816d6aec53 100644
--- a/code/modules/unit_tests/quirks.dm
+++ b/code/modules/unit_tests/quirks.dm
@@ -95,6 +95,11 @@
var/mob/living/carbon/human/new_character = allocate(/mob/living/carbon/human/consistent)
new_character.mind_initialize()
abstract_player.new_character = new_character
+ // BUBBER EDIT ADDITION BEGIN - Code to support testing our species-locked quirks
+ var/datum/quirk/quirk_instance = allocate(quirk_type)
+ if(length(quirk_instance.species_whitelist))
+ new_character.set_species(GLOB.species_list[quirk_instance.species_whitelist[1]])
+ // BUBBER EDIT ADDITION END - Code to support testing our species-locked quirks
if (!new_character.add_quirk(quirk_type, roundstart_mock_client))
TEST_FAIL("Failed to initialize quirk [quirk_type] on a roundstart character!")
@@ -103,6 +108,10 @@
latejoin_mock_client.prefs = new(latejoin_mock_client)
latejoin_character.mock_client = latejoin_mock_client
latejoin_character.mind_initialize()
+ // BUBBER EDIT ADDITION BEGIN - Code to support testing our species-locked quirks
+ if(length(quirk_instance.species_whitelist))
+ latejoin_character.set_species(GLOB.species_list[quirk_instance.species_whitelist[1]])
+ // BUBBER EDIT ADDITION END - Code to support testing our species-locked quirks
if (!latejoin_character.add_quirk(quirk_type, latejoin_mock_client))
TEST_FAIL("Failed to initialize quirk [quirk_type] on a latejoin character!")
diff --git a/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
index 54d06537b3c..e3dc784f853 100644
--- a/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
+++ b/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
@@ -85,7 +85,10 @@
return feature_key
-/datum/bodypart_overlay/mutant/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
diff --git a/modular_skyrat/master_files/code/game/objects/items/RCD.dm b/modular_skyrat/master_files/code/game/objects/items/RCD.dm
index 3450c7a0fd2..468eb483bdc 100644
--- a/modular_skyrat/master_files/code/game/objects/items/RCD.dm
+++ b/modular_skyrat/master_files/code/game/objects/items/RCD.dm
@@ -9,7 +9,7 @@
max_matter = 500
matter = 500
canRturf = TRUE
- upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS | RCD_UPGRADE_FURNISHING
+ construction_upgrades = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS | RCD_UPGRADE_FURNISHING
// Check for drains - we only want one per tile
/obj/item/construction/plumbing/canPlace(turf/destination)
diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm b/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm
deleted file mode 100644
index ad886fccd6d..00000000000
--- a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-// This is a modular hook on the kill_pet.dm, the `possible_heads` variable needs to be upkept according to the upstream file, or they will not occur.
-/datum/traitor_objective/kill_pet
- possible_heads = list(
- JOB_HEAD_OF_PERSONNEL = list(
- /mob/living/basic/pet/dog/corgi/ian,
- /mob/living/basic/pet/dog/corgi/puppy/ian
- ),
- JOB_CAPTAIN = /mob/living/basic/pet/fox/renault,
- JOB_CHIEF_MEDICAL_OFFICER = /mob/living/basic/pet/cat/runtime,
- JOB_CHIEF_ENGINEER = /mob/living/basic/parrot/poly,
- JOB_QUARTERMASTER = list(
- /mob/living/basic/sloth/citrus,
- /mob/living/basic/sloth/paperwork,
- /mob/living/basic/gorilla/cargorilla,
- ),
- // Non-heads like the warden, these are automatically medium-risk at minimum
- // They are also the only two modular additions so far
- JOB_ROBOTICIST = /mob/living/basic/pet/dog/corgi/borgi,
- JOB_STATION_ENGINEER = /mob/living/basic/pet/poppy,
- )
-
- // This variable is for the emag E-N objective. The obj details are below the next block
- var/obj/item/card/emag/one_shot/one_shot_emag
-
-// Objective overwrites
-/datum/traitor_objective/kill_pet/generate_objective(datum/mind/generating_for, list/possible_duplicates)
- . = ..()
- if(!.)
- return FALSE
-
- // Dust Poppy the safety inspector
- if(istype(target_pet, /mob/living/basic/pet/poppy))
- name = "Dust the engineering department's esteemed safety inspector and beloved pet, Poppy"
- description = "A couple of troublemakers in the engineering department have spilled the milk, make them and their colleagues pay for the consequences by throwing Poppy the Safety Inspector into the supermatter engine "
- telecrystal_reward = 4
-
- // Cleaning up the original success_signals which are `list(COMSIG_QDELETING, COMSIG_LIVING_DEATH)`
- for(var/datum/component/traitor_objective_register/old_objective as anything in GetComponents(/datum/component/traitor_objective_register))
- if(old_objective.target == target_pet)
- qdel(old_objective)
- // Adding our own signal component, targeting `target_pet`
- AddComponent(/datum/component/traitor_objective_register, target_pet, \
- succeed_signals = list(COMSIG_QDELETING)) // Until dusting gets its own component, this has to make do
-
- // Emag E-N so it overloads
- if(istype(target_pet, /mob/living/basic/pet/dog/corgi/borgi))
- name = "Emag the roboticist's most-prized borgi, E-N"
- description = "We received an untracable contract from someone addressed 'ianfan2489@terragov.nt', they want the robotic clone of Ian dead- and it has to be dramatic. We will supply you with a cryptographic sequencer from our basic loadout options to shortcircuit E-N's safety, it will give you a single attempt to use it. Oh, and remember to run like hell when you do... "
- telecrystal_reward = 3 // Because these are more complicated than 'kill the pet', the reward is bigger
- telecrystal_penalty = 3 // Same cost as an emag on sale
-
- for(var/datum/component/traitor_objective_register/old_objective as anything in GetComponents(/datum/component/traitor_objective_register))
- if(old_objective.target == target_pet)
- qdel(old_objective)
-
- AddComponent(/datum/component/traitor_objective_register, target_pet, \
- succeed_signals = list(COMSIG_ATOM_EMAG_ACT))
-
-// Objective item (for emagging E-N)
-/obj/item/card/emag/one_shot
- name = "cryptographic sequencer"
- special_desc_requirement = EXAMINE_CHECK_JOB
- special_desc_jobs = list(JOB_DETECTIVE, JOB_HEAD_OF_SECURITY)
- special_desc = "Upon inspection you can instantly tell this is a real cryptographic sequencer commonly traded in bulk for cheap at countless blackmarkets. They are known for their unreliability and breaking after just one use from their shoddy construction."
- /// How many uses does it have left?
- var/charges = 1
- /// Who summoned this?
- var/caller
-
-/obj/item/card/emag/one_shot/examine(mob/user)
- . = ..()
- if(user == caller)
- . += span_notice("It looks cheapo, they did say it gives just one shot...")
- else
- . += span_notice("It looks flimsy and identical to the \"Donk Co.\" toy.")
-
-/obj/item/card/emag/one_shot/can_emag(atom/target, mob/user)
- if(charges <= 0)
- balloon_alert(user, "unresponsive!")
- return FALSE
- use_charge(user)
- return TRUE
-
-/obj/item/card/emag/one_shot/proc/use_charge(mob/user)
- balloon_alert(user, "out of charges!")
- charges --
-
-// Handle the UI button, this is currently just generated by a modular objective
-/datum/traitor_objective/kill_pet/generate_ui_buttons(mob/user)
- var/list/buttons = list()
- if(istype(target_pet, /mob/living/basic/pet/dog/corgi/borgi)) // Target has to be E-N
- if(!one_shot_emag)
- buttons += add_ui_button("", "Pressing this will materialize a single-use cryptographic sequencer in your hand, which you can use to shortcircuit E-N.", "bolt", "summon_emag")
- return buttons
-
-/datum/traitor_objective/kill_pet/ui_perform_action(mob/living/user, action)
- . = ..()
- switch(action)
- if("summon_emag")
- if(one_shot_emag)
- return
- one_shot_emag = new(user.drop_location())
- one_shot_emag.caller = user
- user.put_in_hands(one_shot_emag)
- one_shot_emag.balloon_alert(user, "the card materializes in your hand")
- // No penalty for losing this objective item, it is up to the traitor if this is the emag they use or another
diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm b/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm
deleted file mode 100644
index be50435480c..00000000000
--- a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm
+++ /dev/null
@@ -1,108 +0,0 @@
-/datum/traitor_objective_category/smuggle
- name = "Smuggling"
- objectives = list(
- /datum/traitor_objective/smuggle = 1,
- )
-
-/// smuggle! bring a traitor item from its arrival area to the cargo shuttle, where the objective completes on selling the item
-/datum/traitor_objective/smuggle
- name = "Smuggle %CONTRABAND% from %AREA% off the station via cargo shuttle"
- description = "Go to a designated area, pick up syndicate contraband, and get it off the station via the cargo shuttle. \
- You will instantly fail this objective if anyone else picks up your contraband. If you fail, you are liable for the costs \
- of the smuggling item."
-
- progression_minimum = 0
-
- progression_reward = list(5 MINUTES, 9 MINUTES)
- telecrystal_reward = list(0, 1)
-
- /// area type the objective owner must be in to receive the contraband
- var/area/smuggle_spawn_type
- /// the contraband that must be exported on the shuttle
- var/obj/item/contraband
- /// type of contraband to spawn
- var/obj/item/contraband_type
- /// possible objective items. Mapped by item type = penalty cost for failing
- var/list/possible_contrabands = list(
- /obj/item/pen/edagger/prototype = 2,
- /obj/item/gun/syringe/syndicate/prototype = 4,
- /obj/item/reagent_containers/cup/bottle/ritual_wine = 6, // poison kit price
- )
-
-/datum/traitor_objective/smuggle/can_generate_objective(datum/mind/generating_for, list/possible_duplicates)
- for(var/datum/traitor_objective/smuggle/objective_to_compare as anything in possible_duplicates)
- if(objective_to_compare.contraband_type == contraband_type)
- return FALSE
- // it's too similar if its from the same area
- if(objective_to_compare.smuggle_spawn_type == smuggle_spawn_type)
- return FALSE
- return TRUE
-
-/datum/traitor_objective/smuggle/generate_ui_buttons(mob/user)
- var/list/buttons = list()
- if(!contraband)
- buttons += add_ui_button("", "Pressing this will materialize the contraband you need to deliver. You must be in [initial(smuggle_spawn_type.name)] to receive it!", "box", "summon_contraband")
- return buttons
-
-/datum/traitor_objective/smuggle/ui_perform_action(mob/living/user, action)
- . = ..()
- switch(action)
- if("summon_contraband")
- if(contraband)
- return
- var/area/player_area = get_area(user)
- if(!istype(player_area, smuggle_spawn_type))
- user.balloon_alert(user, "you can't materialize this here!")
- return
- contraband = new contraband_type(user.drop_location())
- user.put_in_hands(contraband)
- user.balloon_alert(user, "[contraband] materializes in your hand")
- RegisterSignal(contraband, COMSIG_ITEM_PICKUP, PROC_REF(on_contraband_pickup))
- AddComponent(/datum/component/traitor_objective_register, contraband, \
- succeed_signals = list(COMSIG_ITEM_EXPORTED), \
- fail_signals = list(COMSIG_QDELETING), \
- penalty = telecrystal_penalty \
- )
- if(contraband.reagents)
- AddComponent(/datum/component/traitor_objective_register, contraband.reagents, \
- fail_signals = COMSIG_REAGENTS_HOLDER_UPDATED, \
- penalty = telecrystal_penalty)
-
-/datum/traitor_objective/smuggle/generate_objective(datum/mind/generating_for, list/possible_duplicates)
- // anyone working cargo should not get almost free objectives by having direct access to the cargo shuttle
- if(generating_for.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_CARGO)
- return FALSE
-
- // choose starting area to receive contraband
- var/list/possible_areas = GLOB.the_station_areas.Copy()
- for(var/area/possible_area as anything in possible_areas)
- // remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
- if(istype(possible_area, /area/station/cargo) || istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security))
- possible_areas -= possible_area
- for(var/datum/traitor_objective/smuggle/smuggle_objective as anything in possible_duplicates)
- possible_areas -= smuggle_objective.smuggle_spawn_type
- possible_contrabands -= smuggle_objective.contraband_type
- if(smuggle_objective.objective_state == OBJECTIVE_STATE_INACTIVE || smuggle_objective.objective_state == OBJECTIVE_STATE_ACTIVE)
- return FALSE // You can only have 1 objective of this type active and inactive at a time.
- if(!length(possible_contrabands))
- return FALSE
- if(!length(possible_areas))
- return FALSE
- smuggle_spawn_type = pick(possible_areas)
- // choose contraband type to spawn when reaching starting area
- contraband_type = pick(possible_contrabands)
- telecrystal_penalty = possible_contrabands[contraband_type]
- replace_in_name("%CONTRABAND%", initial(contraband_type.name))
- replace_in_name("%AREA%", initial(smuggle_spawn_type.name))
- return TRUE
-
-/datum/traitor_objective/smuggle/ungenerate_objective()
- . = ..()
- if(contraband)
- UnregisterSignal(contraband, COMSIG_ITEM_PICKUP)
- contraband = null
-
-/datum/traitor_objective/smuggle/proc/on_contraband_pickup(datum/source, mob/taker)
- SIGNAL_HANDLER
- if(taker != handler.owner?.current)
- fail_objective(penalty_cost = telecrystal_penalty)
diff --git a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm b/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm
index 5e04d6c1401..538731616bd 100644
--- a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm
+++ b/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm
@@ -1,7 +1,7 @@
/// add modular plumbing sprites to spritesheet so that they will show up in the plumbing RCD menu etc
-/datum/asset/spritesheet/plumbing/create_spritesheets()
+/datum/asset/spritesheet_batched/plumbing/create_spritesheets()
. = ..()
-
+
//load only what we need from the icon files,format is icon_file_name = list of icon_states we need from this file
var/list/essentials = list(
'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi' = list(
@@ -13,5 +13,5 @@
for(var/icon_file as anything in essentials)
for(var/icon_state as anything in essentials[icon_file])
- Insert(sprite_name = icon_state, I = icon_file, icon_state = icon_state)
+ insert_icon(icon_state, uni_icon(icon_file, icon_state))
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm b/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm
index db947e2190e..8e97cc24aa4 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm
@@ -135,8 +135,7 @@
// because of the way the unit tests are set up, we need this to crash here
CRASH("`icon_for()` was not implemented for [type], even though should_generate_icons = TRUE!")
- var/list/cached_icons = get_choices()
- return cached_icons[value]
+ return generate_icon(SSaccessories.sprite_accessories[relevant_mutant_bodypart][value])
/// Allows for dynamic assigning of icon states.
/datum/preference/choiced/mutant_choice/proc/generate_icon_state(datum/sprite_accessory/sprite_accessory, original_icon_state)
@@ -145,34 +144,26 @@
/// Generates and allows for post-processing on icons, such as greyscaling and cropping. This is cached.
/datum/preference/choiced/mutant_choice/proc/generate_icon(datum/sprite_accessory/sprite_accessory)
if(!sprite_accessory.icon_state)
- return icon('icons/mob/landmarks.dmi', "x")
+ return uni_icon('icons/mob/landmarks.dmi', "x")
- var/icon/icon_to_process = icon(sprite_accessory.icon, generate_icon_state(sprite_accessory, sprite_accessory.icon_state), SOUTH, 1)
+ var/datum/universal_icon/icon_to_process = uni_icon(sprite_accessory.icon, generate_icon_state(sprite_accessory, sprite_accessory.icon_state), SOUTH, 1)
if(islist(crop_area) && crop_area.len == REQUIRED_CROP_LIST_SIZE)
- icon_to_process.Crop(crop_area[1], crop_area[2], crop_area[3], crop_area[4])
- icon_to_process.Scale(32, 32)
+ icon_to_process.crop(crop_area[1], crop_area[2], crop_area[3], crop_area[4])
+ icon_to_process.scale(32, 32)
else if(crop_area)
stack_trace("Invalid crop paramater! The provided crop area list is not four entries long, or is not a list!")
var/color = sanitize_hexcolor(greyscale_color)
if(color && sprite_accessory.color_src)
// This isn't perfect, but I don't want to add the significant overhead to make it be.
- icon_to_process.ColorTone(color)
+ icon_to_process.blend_color(color, ICON_MULTIPLY)
return icon_to_process
/datum/preference/choiced/mutant_choice/init_possible_values()
- if(!initial(generate_icons))
return assoc_to_keys_features(SSaccessories.sprite_accessories[relevant_mutant_bodypart])
- var/list/list_of_accessories = list()
- for(var/sprite_accessory_name as anything in SSaccessories.sprite_accessories[relevant_mutant_bodypart])
- var/datum/sprite_accessory/sprite_accessory = SSaccessories.sprite_accessories[relevant_mutant_bodypart][sprite_accessory_name]
- list_of_accessories += list("[sprite_accessory.name]" = generate_icon(sprite_accessory))
-
- return list_of_accessories
-
/datum/preference/choiced/mutant_choice/create_default_value()
return initial(default_accessory_type.name)
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm b/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm
index 0f525313f00..cdbfd187969 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm
@@ -47,22 +47,22 @@
return assoc_to_keys_features(SSaccessories.bra_list)
/datum/preference/choiced/bra/icon_for(value)
- var/static/icon/body
+ var/static/datum/universal_icon/body
if (isnull(body))
- body = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm")
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
+ body = uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm")
+ body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY)
+ body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY)
+ body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY)
+ body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
- var/icon/icon_with_bra = icon(body)
+ var/datum/universal_icon/icon_with_bra = body.copy()
if (value != "Nude")
var/datum/sprite_accessory/accessory = SSaccessories.bra_list[value]
- icon_with_bra.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY)
+ icon_with_bra.blend_icon(uni_icon(accessory.icon, accessory.icon_state), ICON_OVERLAY)
- icon_with_bra.Crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
- icon_with_bra.Scale(32, 32)
+ icon_with_bra.crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
+ icon_with_bra.scale(32, 32)
return icon_with_bra
/datum/preference/choiced/bra/apply_to_human(mob/living/carbon/human/target, value)
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
index 177dfc0351f..979978a7873 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
@@ -478,6 +478,15 @@
/datum/preference/choiced/mutant_choice/ipc_screen/is_part_enabled(datum/preferences/preferences)
return TRUE
+/datum/preference/choiced/mutant_choice/ipc_screen/is_accessible(datum/preferences/preferences)
+ var/datum/species/species = preferences.read_preference(/datum/preference/choiced/species)
+ species = new species
+
+ if(savefile_key in species.get_features())
+ return ..()
+ else
+ return FALSE
+
/datum/preference/choiced/mutant_choice/ipc_screen/generate_icon_state(datum/sprite_accessory/sprite_accessory, original_icon_state)
return "m_ipc_screen_[original_icon_state]_FRONT_UNDER"
@@ -557,6 +566,15 @@
/datum/preference/choiced/mutant_choice/synth_chassis/is_part_enabled(datum/preferences/preferences)
return TRUE
+/datum/preference/choiced/mutant_choice/synth_chassis/is_accessible(datum/preferences/preferences)
+ var/datum/species/species = preferences.read_preference(/datum/preference/choiced/species)
+ species = new species
+
+ if(savefile_key in species.get_features())
+ return ..()
+ else
+ return FALSE
+
/datum/preference/choiced/mutant_choice/synth_chassis/compile_constant_data()
var/list/data = ..()
@@ -591,6 +609,15 @@
/datum/preference/choiced/mutant_choice/synth_head/is_part_enabled(datum/preferences/preferences)
return TRUE
+/datum/preference/choiced/mutant_choice/synth_head/is_accessible(datum/preferences/preferences)
+ var/datum/species/species = preferences.read_preference(/datum/preference/choiced/species)
+ species = new species
+
+ if(savefile_key in species.get_features())
+ return ..()
+ else
+ return FALSE
+
/datum/preference/choiced/mutant_choice/synth_head/compile_constant_data()
var/list/data = ..()
@@ -828,34 +855,36 @@
should_generate_icons = TRUE
generate_icons = TRUE
-/datum/preference/choiced/mutant_choice/pod_hair/init_possible_values()
- var/list/values = list()
+/datum/preference/choiced/mutant_choice/pod_hair/icon_for(value)
+ var/datum/sprite_accessory/pod_hair/pod_hair = SSaccessories.sprite_accessories[relevant_mutant_bodypart][value]
+ if(!pod_hair.icon_state || LOWER_TEXT(pod_hair.icon_state) == "none")
+ return uni_icon('icons/mob/landmarks.dmi', "x")
- var/icon/pod_head = icon('icons/mob/human/bodyparts_greyscale.dmi', "pod_head_m")
- pod_head.Blend(COLOR_GREEN, ICON_MULTIPLY)
+ var/datum/universal_icon/pod_head = uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "pod_head_m")
+ pod_head.blend_color(COLOR_GREEN, ICON_MULTIPLY)
- for (var/pod_name in SSaccessories.pod_hair_list)
- var/datum/sprite_accessory/pod_hair/pod_hair = SSaccessories.pod_hair_list[pod_name]
- if(pod_hair.locked)
- continue
-
- var/icon/icon_with_hair = new(pod_head)
- var/icon/icon_adj = icon(pod_hair.icon, "m_pod_hair_[pod_hair.icon_state]_ADJ")
- var/icon/icon_front = icon(pod_hair.icon, "m_pod_hair_[pod_hair.icon_state]_FRONT_OVER")
- icon_front.Blend(COLOR_MAGENTA, ICON_MULTIPLY)
- icon_adj.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
- icon_adj.Blend(icon_front, ICON_OVERLAY)
- icon_with_hair.Blend(icon_adj, ICON_OVERLAY)
- icon_with_hair.Scale(64, 64)
- icon_with_hair.Crop(15, 64, 15 + 31, 64 - 31)
-
- values[pod_hair.name] = icon_with_hair
-
- return values
+ var/datum/universal_icon/icon_adj = uni_icon(pod_hair.icon, "m_pod_hair_[pod_hair.icon_state]_FRONT_OVER_HAIR")
+ var/datum/universal_icon/icon_front = uni_icon(pod_hair.icon, "m_pod_hair_[pod_hair.icon_state]_FRONT_OVER")
+ icon_front.blend_color(COLOR_MAGENTA, ICON_MULTIPLY)
+ icon_adj.blend_color(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
+ icon_adj.blend_icon(icon_front, ICON_OVERLAY)
+ pod_head.blend_icon(icon_adj, ICON_OVERLAY)
+ pod_head.scale(64, 64)
+ pod_head.crop(15, 64 - 31, 15 + 31, 64)
+ return pod_head
/datum/preference/choiced/mutant_choice/pod_hair/is_part_enabled(datum/preferences/preferences)
return TRUE
+/datum/preference/choiced/mutant_choice/pod_hair/is_accessible(datum/preferences/preferences)
+ var/datum/species/species = preferences.read_preference(/datum/preference/choiced/species)
+ species = new species
+
+ if(savefile_key in species.get_features())
+ return ..()
+ else
+ return FALSE
+
/datum/preference/choiced/mutant_choice/pod_hair/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
var/species_path = preferences?.read_preference(/datum/preference/choiced/species)
if(!ispath(species_path, /datum/species/pod)) // This is what we do so it doesn't show up on non-podpeople.
diff --git a/modular_skyrat/master_files/code/modules/mob/living/living.dm b/modular_skyrat/master_files/code/modules/mob/living/living.dm
index 04aea1e3642..7a4045ed25d 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/living.dm
+++ b/modular_skyrat/master_files/code/modules/mob/living/living.dm
@@ -1,4 +1,4 @@
-/mob/living/set_pull_offsets(mob/living/pull_target, grab_state)
+/mob/living/set_pull_offsets(mob/living/pull_target, grab_state, animate = TRUE)
. = ..()
SEND_SIGNAL(pull_target, COMSIG_LIVING_SET_PULL_OFFSET)
diff --git a/modular_skyrat/master_files/code/modules/mod/mod_theme.dm b/modular_skyrat/master_files/code/modules/mod/mod_theme.dm
index c037d99f0d5..e5548d068a8 100644
--- a/modular_skyrat/master_files/code/modules/mod/mod_theme.dm
+++ b/modular_skyrat/master_files/code/modules/mod/mod_theme.dm
@@ -340,8 +340,7 @@
atom_flags = PREVENT_CONTENTS_EXPLOSION_1
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
- slowdown_inactive = 0.5
- slowdown_active = 0
+ slowdown_deployed = 0
allowed_suit_storage = list(
/obj/item/ammo_box,
/obj/item/ammo_casing,
diff --git a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm b/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm
index d8ac947cf64..b8d34b955d8 100644
--- a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm
+++ b/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm
@@ -31,7 +31,7 @@
if(hearing_mob?.client)
var/dist = get_dist(hearing_mob.loc, distant_source.loc)
var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) // Every tile decreases sound volume by 5
- var/volume_multiplier = hearing_mob.client?.prefs.read_preference(/datum/preference/numeric/sound_ambience_volume)
+ var/volume_multiplier = hearing_mob.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_ambience_volume)
if(!volume_multiplier)
return
if(takeoff)
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi
index 84296272b10..f9da1b563de 100644
Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi differ
diff --git a/modular_skyrat/modules/admin/code/localsound.dm b/modular_skyrat/modules/admin/code/localsound.dm
index 81aca95c6ef..2dec55f4d84 100644
--- a/modular_skyrat/modules/admin/code/localsound.dm
+++ b/modular_skyrat/modules/admin/code/localsound.dm
@@ -97,7 +97,7 @@
if (listening_mob.client)
players += listening_mob
for(var/mob/player_mob as anything in players)
- if(player_mob.client.prefs.read_preference(/datum/preference/toggle/sound_midi))
+ if(player_mob.client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) > 0)
if(!stop_localweb_sounds)
player_mob.client.tgui_panel?.play_music(localweb_sound_url, music_extra_data)
else
diff --git a/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi b/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi
index b7ac018b8b3..aa6f2bb57db 100644
Binary files a/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi and b/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi differ
diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm
index 0cc6e4dd7a0..9c201aa0228 100644
--- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm
+++ b/modular_skyrat/modules/aesthetics/guns/code/guns.dm
@@ -243,11 +243,6 @@
inhand_icon_state = "arg"
can_suppress = FALSE
-/obj/item/gun/ballistic/automatic/surplus
- name = "\improper Type-69 surplus rifle"
- desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
// GUBMAN3 - FULL BULLET RENAME
// i loathe the above
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm b/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm
index 50dec900cf1..196a9ab4aea 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm
+++ b/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm
@@ -148,10 +148,10 @@
vehicle_move_delay = 0.5
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
-/datum/component/riding/vehicle/rail_cart/handle_specials()
- . = ..()
- set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 13), TEXT_SOUTH = list(0, 13), TEXT_EAST = list(0, 13), TEXT_WEST = list(0, 13)))
- set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
- set_vehicle_dir_layer(NORTH, OBJ_LAYER)
- set_vehicle_dir_layer(EAST, OBJ_LAYER)
- set_vehicle_dir_layer(WEST, OBJ_LAYER)
+/datum/component/riding/vehicle/rail_cart/get_rider_offsets_and_layers(pass_index, mob/offsetter)
+ return list(
+ TEXT_NORTH = list(0, 13, OBJ_LAYER),
+ TEXT_SOUTH = list(0, 13, OBJ_LAYER),
+ TEXT_EAST = list(0, 13, OBJ_LAYER),
+ TEXT_WEST = list(0, 13, OBJ_LAYER),
+ )
diff --git a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm b/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm
index bc29586cd54..83529551c5a 100644
--- a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm
+++ b/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm
@@ -15,8 +15,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
siemens_coefficient = 0
complexity_max = DEFAULT_MAX_COMPLEXITY + 5
- slowdown_inactive = 0
- slowdown_active = 0
+ slowdown_deployed = 0
ui_theme = "hackerman"
slot_flags = ITEM_SLOT_BELT
inbuilt_modules = list(
diff --git a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm b/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm
index 8bce3a4028b..662f0be0b3d 100644
--- a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm
+++ b/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm
@@ -16,8 +16,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
complexity_max = DEFAULT_MAX_COMPLEXITY
- slowdown_inactive = 0.75
- slowdown_active = 0.25
+ slowdown_deployed = 0.25
allowed_suit_storage = list(
/obj/item/ammo_box,
/obj/item/ammo_casing,
diff --git a/modular_skyrat/modules/cargo/code/items/improvedRCD.dm b/modular_skyrat/modules/cargo/code/items/improvedRCD.dm
index ff21156ad76..86958e90c9d 100644
--- a/modular_skyrat/modules/cargo/code/items/improvedRCD.dm
+++ b/modular_skyrat/modules/cargo/code/items/improvedRCD.dm
@@ -7,4 +7,4 @@
max_matter = 220
matter = 220
delay_mod = 1.3
- upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS
+ construction_upgrades = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS
diff --git a/modular_skyrat/modules/carriers/code/carrier_component.dm b/modular_skyrat/modules/carriers/code/carrier_component.dm
index ecd2ed7e439..95383aaf31c 100644
--- a/modular_skyrat/modules/carriers/code/carrier_component.dm
+++ b/modular_skyrat/modules/carriers/code/carrier_component.dm
@@ -325,7 +325,7 @@ GLOBAL_LIST_EMPTY(soulcatchers)
if(!message_to_send) //Why say nothing?
return FALSE
- var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat)
+ var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
var/master_resolved = master_carrier.resolve()
if(!master_resolved)
master_carrier = null
diff --git a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm b/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm
index 3ae305036ba..09b45cd8ca0 100644
--- a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm
+++ b/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm
@@ -2,7 +2,7 @@
// Well, for some *absurd* reason, any time i tried to add sprites to a new spritesheet, they would always have a *gray* background covering the full 32x32, apart from what my sprite did. After multiple hours of debugging,
// I settled on this, since it's not-really-harmful to have other things in an unrelated spritesheet.
// To see my suffering, look at the convo starting at https://discord.com/channels/326822144233439242/326831214667235328/1098753337698029590
-/datum/asset/spritesheet/research_designs/create_spritesheets()
+/datum/asset/spritesheet_batched/research_designs/create_spritesheets()
. = ..()
var/list/id_list = list()
@@ -30,7 +30,7 @@
id_list += id
- Insert(id, icon_file, icon_state)
+ insert_icon(id, uni_icon(icon_file, icon_state))
// And now scripture icons
for(var/datum/scripture/unlocked_scripture as anything in new_research.unlocked_scriptures)
@@ -43,6 +43,6 @@
id_list += id
- Insert(id, icon_file, icon_state)
+ insert_icon(id, uni_icon(icon_file, icon_state))
qdel(new_research)
diff --git a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm b/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm
index e04d5564d9d..725064cfa88 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm
+++ b/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm
@@ -124,7 +124,7 @@
/obj/structure/destructible/clockwork/gear_base/technologists_lectern/ui_assets(mob/user)
return list(
- get_asset_datum(/datum/asset/spritesheet/research_designs),
+ get_asset_datum(/datum/asset/spritesheet_batched/research_designs),
)
/obj/structure/destructible/clockwork/gear_base/technologists_lectern/ui_data(mob/user)
diff --git a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm b/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm
index b7584a65652..5e226715d95 100644
--- a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm
+++ b/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm
@@ -2,10 +2,6 @@
. = ..()
AddComponent(/datum/component/armament/company_imports, subtypesof(/datum/armament_entry/company_import), 0)
-/// Proc for speaking over radio without needing to reuse a bunch of code
-/obj/machinery/computer/cargo/proc/radio_wrapper(atom/movable/speaker, message, channel)
- radio.talk_into(speaker, message, channel)
-
/obj/item/storage/lockbox/order
/// Bool if this was departmentally ordered or not
var/department_purchase
diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm b/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm
index 6e90636603d..a59b2301861 100644
--- a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm
+++ b/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm
@@ -15,8 +15,7 @@
atom_flags = PREVENT_CONTENTS_EXPLOSION_1
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
siemens_coefficient = 0
- slowdown_inactive = 0.5
- slowdown_active = 0
+ slowdown_deployed = 0
ui_theme = "syndicate"
inbuilt_modules = list(/obj/item/mod/module/armor_booster/contractor, /obj/item/mod/module/chameleon/contractor)
allowed_suit_storage = list(
diff --git a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm
index a1e34cd6fdf..e2d5c42ce69 100644
--- a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm
+++ b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm
@@ -161,7 +161,7 @@
//Modular overide to give jackboots laces
/obj/item/clothing/shoes/jackboots
- can_be_tied = TRUE
+ fastening_type = SHOES_LACED
/obj/item/clothing/shoes/colorable_laceups
name = "laceup shoes"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
index a3ce4d055c8..a5730cb6273 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
@@ -26,7 +26,10 @@
/datum/bodypart_overlay/mutant/snout/override_color(rgb_value)
return draw_color
-/datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
index 9cbfd06213d..18a72f85d24 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -34,7 +34,10 @@
return FALSE
-/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(mob/living/carbon/human/wearer, ignore_suit = FALSE)
+/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, ignore_suit = FALSE)
+ var/mob/living/carbon/human/wearer = bodypart_owner.owner
+ if(!wearer)
+ return TRUE
if(!wearer.w_uniform && !wearer.wear_suit)
return ..()
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 97bdd205ff1..16498b0bf2a 100644
--- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -711,7 +711,7 @@
cube.color = COLOR_CYAN
cube.set_anchored(TRUE)
drinker.forceMove(cube)
- cryostylane_alert = drinker.throw_alert("cryostylane_alert", /atom/movable/screen/alert/status_effect/freon/cryostylane)
+ cryostylane_alert = drinker.throw_alert("cryostylane_alert", /atom/movable/screen/alert/status_effect/freon/stasis)
cryostylane_alert.attached_effect = src //so the alert can reference us, if it needs to
/datum/reagent/consumable/ethanol/blizzard_brew/on_mob_delete(mob/living/carbon/drinker, amount)
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm b/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm
index af2dcd698b7..ebe5710204d 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm
@@ -29,5 +29,8 @@
/datum/bodypart_overlay/mutant/mushroom_cap/get_global_feature_list()
return SSaccessories.sprite_accessories["caps"]
-/datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm b/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm
index 185e688e779..e2d381a9b82 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm
@@ -9,7 +9,10 @@
/datum/bodypart_overlay/mutant/frills/override_color(rgb_value)
return draw_color
-/datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
/datum/bodypart_overlay/mutant/frills/get_global_feature_list()
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm b/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm
index efb22c9f971..b218546ed1f 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm
@@ -12,5 +12,8 @@
/datum/bodypart_overlay/mutant/horns/override_color(rgb_value)
return draw_color
-/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm b/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm
index 4eb3bc15caf..93f74180042 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm
@@ -9,7 +9,10 @@
/datum/bodypart_overlay/mutant/spines/override_color(rgb_value)
return draw_color
-/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
/// We overwrite this just because we need to change the layer to be ever so slightly above the tails.
@@ -29,7 +32,10 @@
/datum/bodypart_overlay/mutant/tail_spines/override_color(rgb_value)
return draw_color
-/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(mob/living/carbon/human/human)
+/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/human = bodypart_owner.owner
+ if(!human)
+ return TRUE
return !sprite_datum.is_hidden(human)
/datum/bodypart_overlay/mutant/tail_spines/get_images(image_layer, obj/item/bodypart/limb)
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm
index cd3f7396a47..8dd55cc9754 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm
@@ -16,7 +16,10 @@
/datum/bodypart_overlay/mutant/tail/get_base_icon_state()
return sprite_datum.icon_state
-/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/wearer)
+/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+ var/mob/living/carbon/human/wearer = bodypart_owner.owner
+ if(!wearer)
+ return TRUE
var/list/used_in_turf = list("tail")
// Emote exception
if(wearer.owned_turf?.name in used_in_turf)
diff --git a/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm b/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm
index f03c01210d9..cf9545bca78 100644
--- a/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm
+++ b/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm
@@ -33,7 +33,7 @@
var/treatment_sound = 'sound/items/duct_tape/duct_tape_rip.ogg'
// This is only relevant for the types of wounds defined, we can't work if there are none
-/obj/item/stack/medical/wound_recovery/try_heal(mob/living/patient, mob/user, silent = FALSE, looping = FALSE, auto_change_zone = TRUE)
+/obj/item/stack/medical/wound_recovery/try_heal(mob/living/patient, mob/user, silent = FALSE, looping = FALSE, auto_change_zone = TRUE, continuous = FALSE)
if(patient.has_status_effect(/datum/status_effect/vulnerable_to_damage))
patient.balloon_alert(user, "still recovering from last use!")
diff --git a/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm b/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm
index cc94bfbf761..aab2154bce3 100644
--- a/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm
+++ b/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm
@@ -110,8 +110,8 @@
inhand_icon_state = "frontier"
worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
+ drop_sound = SFX_CLOTH_DROP
slot_flags = ITEM_SLOT_BELT
/obj/item/storage/medkit/frontier/stocked
@@ -140,8 +140,8 @@
worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
worn_icon_state = "frontier"
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
+ drop_sound = SFX_CLOTH_DROP
/obj/item/storage/medkit/combat_surgeon/Initialize(mapload)
. = ..()
@@ -173,8 +173,8 @@
worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
+ drop_sound = SFX_CLOTH_DROP
slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
storage_type = /datum/storage/duffel/deforest_medkit
zip_slowdown = 0.25 // Most won't notice normally but it'll hurt you if you're a paramedic or in combat
@@ -270,8 +270,8 @@
worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
+ drop_sound = SFX_CLOTH_DROP
slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
storage_type = /datum/storage/duffel/deforest_big_surgery
zip_slowdown = 0.5 // Its a bulkier bag and thus slows you down a little more when unzipped
@@ -379,8 +379,8 @@
worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
+ drop_sound = SFX_CLOTH_DROP
slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
storage_type = /datum/storage/duffel/deforest_paramedic
zip_slowdown = 0.3 // Midrange between the other two bags
diff --git a/modular_skyrat/modules/digitigrade_cybernetics/code/robot_bodyparts.dm b/modular_skyrat/modules/digitigrade_cybernetics/code/robot_bodyparts.dm
index c9930581517..f0715de1702 100644
--- a/modular_skyrat/modules/digitigrade_cybernetics/code/robot_bodyparts.dm
+++ b/modular_skyrat/modules/digitigrade_cybernetics/code/robot_bodyparts.dm
@@ -42,9 +42,11 @@
icon_static = 'modular_skyrat/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi'
icon = 'modular_skyrat/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi'
bodyshape = parent_type::bodyshape | BODYSHAPE_DIGITIGRADE
+ is_emissive = FALSE
/obj/item/bodypart/leg/left/robot/advanced/digi
name = "advanced digitigrade right leg"
icon_static = 'modular_skyrat/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi'
icon = 'modular_skyrat/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi'
bodyshape = parent_type::bodyshape | BODYSHAPE_DIGITIGRADE
+ is_emissive = FALSE
diff --git a/modular_skyrat/modules/implants/code/augments_eyes.dm b/modular_skyrat/modules/implants/code/augments_eyes.dm
index 761fa72ec9e..8146d7f4387 100644
--- a/modular_skyrat/modules/implants/code/augments_eyes.dm
+++ b/modular_skyrat/modules/implants/code/augments_eyes.dm
@@ -1,22 +1,3 @@
-/obj/item/organ/eyes/robotic
- icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //So I had to fucking include the eye sprites
- icon_state = "cybernetic_eyeballs"
-
-/obj/item/organ/eyes/robotic/xray
- eye_color_left = "#00ffe5"
- eye_color_right = "#00ffe5"
- icon_state = "xray_eyes"
-
-/obj/item/organ/eyes/robotic/thermals
- eye_color_left = "#FC0"
- eye_color_right = "#FC0"
- icon_state = "thermal_eyes"
-
-/obj/item/organ/eyes/robotic/shield
- eye_color_left = "#ff2700"
- eye_color_right = "#ff2700"
- icon_state = "shielded_eyes"
-
/obj/item/organ/eyes/night_vision/cyber
name = "nightvision eyes"
icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //All in the chest implants .dmi
diff --git a/modular_skyrat/modules/kahraman_equipment/code/clothing/mod.dm b/modular_skyrat/modules/kahraman_equipment/code/clothing/mod.dm
index 1ea20cffe8d..56601610b8c 100644
--- a/modular_skyrat/modules/kahraman_equipment/code/clothing/mod.dm
+++ b/modular_skyrat/modules/kahraman_equipment/code/clothing/mod.dm
@@ -18,8 +18,7 @@
siemens_coefficient = 0
complexity_max = DEFAULT_MAX_COMPLEXITY - 7
charge_drain = DEFAULT_CHARGE_DRAIN * 2
- slowdown_inactive = 1.5
- slowdown_active = 1
+ slowdown_deployed = 1
inbuilt_modules = list(
/obj/item/mod/module/plate_compression/permanent,
/obj/item/mod/module/joint_torsion/permanent
diff --git a/modular_skyrat/modules/lorecaster/code/story_manager.dm b/modular_skyrat/modules/lorecaster/code/story_manager.dm
index faf24ba726d..4b6560e13b6 100644
--- a/modular_skyrat/modules/lorecaster/code/story_manager.dm
+++ b/modular_skyrat/modules/lorecaster/code/story_manager.dm
@@ -68,7 +68,7 @@ ADMIN_VERB(lorecaster_story_manager, R_ADMIN, "Lorecaster Stories", "Open the Lo
/datum/story_manager_interface/ui_state(mob/user)
- return GLOB.admin_state
+ return ADMIN_STATE(R_ADMIN)
/datum/story_manager_interface/ui_static_data(mob/user)
diff --git a/modular_skyrat/modules/marines/code/mod.dm b/modular_skyrat/modules/marines/code/mod.dm
index 310955ea168..4f65004686b 100644
--- a/modular_skyrat/modules/marines/code/mod.dm
+++ b/modular_skyrat/modules/marines/code/mod.dm
@@ -14,8 +14,7 @@
resistance_flags = FIRE_PROOF|ACID_PROOF
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
- slowdown_inactive = 0.5
- slowdown_active = 0
+ slowdown_deployed = 0
complexity_max = DEFAULT_MAX_COMPLEXITY + 10 //drr drr drr
allowed_suit_storage = list(
/obj/item/flashlight,
diff --git a/modular_skyrat/modules/modular_implants/code/nifs.dm b/modular_skyrat/modules/modular_implants/code/nifs.dm
index 77167e25158..6ef68155321 100644
--- a/modular_skyrat/modules/modular_implants/code/nifs.dm
+++ b/modular_skyrat/modules/modular_implants/code/nifs.dm
@@ -373,7 +373,7 @@
///Sends a message to the owner of the NIF. Typically used for messages from the NIF itself or from NIFSofts.
/obj/item/organ/cyberimp/brain/nif/proc/send_message(message_to_send, alert = FALSE)
- var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat)
+ var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
var/tag = sheet.icon_tag("nif-[chat_icon]")
var/nif_icon = ""
@@ -484,10 +484,9 @@
return FALSE
-/datum/asset/spritesheet/chat/create_spritesheets()
+/datum/asset/spritesheet_batched/chat/create_spritesheets()
. = ..()
-
- InsertAll("nif", 'modular_skyrat/modules/modular_implants/icons/chat.dmi')
+ insert_all_icons("nif", 'modular_skyrat/modules/modular_implants/icons/chat.dmi')
/obj/item/autosurgeon/organ/nif
starting_organ = /obj/item/organ/cyberimp/brain/nif/standard
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm
index 1397db05d44..93d794d3202 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm
+++ b/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm
@@ -285,7 +285,7 @@ GLOBAL_LIST_EMPTY(hivemind_users)
to_chat(user, span_warning("The link seems to have been severed."))
return
- var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat)
+ var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
var/tag = sheet.icon_tag("nif-phone")
var/hivemind_icon = ""
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
index d7963c9b48a..8a2bb564eb1 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
@@ -20,7 +20,7 @@
/obj/item/clothing/suit/corset/click_alt(mob/user)
laced_tight = !laced_tight
to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe."))
- conditional_pref_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE)
+ conditional_pref_sound(user, laced_tight ? get_sfx(SFX_CLOTH_PICKUP) : get_sfx(SFX_CLOTH_DROP), 40, TRUE)
. = CLICK_ACTION_SUCCESS
if(laced_tight)
slowdown = TIGHT_SLOWDOWN
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
index 8bdbf5fb5a0..6b0c8bc41ca 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
@@ -4,7 +4,7 @@
worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
equip_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg'
drop_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg'
- pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
+ pickup_sound = SFX_CLOTH_PICKUP
/// This is used to decide what lewd slot a toy should be able to be inserted into.
/// The currently accepted defines are all prefixes with LEWD_SLOT_, and there is one for each lewd organ.
/// See code/__DEFINES/~skyrat_defines/inventory.dm for the full list.
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm
index c4fa1b7a322..82bad408306 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm
@@ -83,9 +83,9 @@
user.visible_message(span_purple("[user] [message]!"))
conditional_pref_sound(loc, \
pick(
- 'sound/items/handling/cloth_drop.ogg', // I duplicate this part of code because im useless shitcoder that can't make it work properly without tons of repeating code blocks
- 'sound/items/handling/cloth_pickup.ogg', // If you can make it better - go ahead, modify it, please.
- 'sound/items/handling/cloth_pickup.ogg',
+ get_sfx(SFX_CLOTH_DROP), // I duplicate this part of code because im useless shitcoder that can't make it work properly without tons of repeating code blocks
+ get_sfx(SFX_CLOTH_PICKUP), // If you can make it better - go ahead, modify it, please.
+ get_sfx(SFX_CLOTH_PICKUP),
), 70, 1, -1)
//Mood boost
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
index 626b636b894..a1167ef07ea 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
@@ -47,12 +47,13 @@
/obj/structure/bed/bdsm_bed/post_buckle_mob(mob/living/affected_mob)
density = TRUE
//Push them up from the normal lying position
- affected_mob.pixel_y = affected_mob.base_pixel_y
+ var/y_offset = -1 * PIXEL_Y_OFFSET_LYING
+ affected_mob.add_offsets(type, y_add = y_offset)
/obj/structure/bed/bdsm_bed/post_unbuckle_mob(mob/living/affected_mob)
density = FALSE
//Set them back down to the normal lying position
- affected_mob.pixel_y = affected_mob.base_pixel_y + affected_mob.body_position_pixel_y_offset
+ affected_mob.remove_offsets(type)
/obj/structure/bed/bdsm_bed/click_ctrl_shift(mob/user)
add_fingerprint(user)
@@ -240,8 +241,6 @@
//Place the mob in the desired position after buckling
/obj/structure/chair/x_stand/post_buckle_mob(mob/living/affected_mob)
- affected_mob.pixel_y = affected_mob.base_pixel_y
- affected_mob.pixel_x = affected_mob.base_pixel_x
affected_mob.layer = BELOW_MOB_LAYER
if(LAZYLEN(buckled_mobs))
@@ -264,8 +263,6 @@
//Restore the position of the mob after unbuckling.
/obj/structure/chair/x_stand/post_unbuckle_mob(mob/living/affected_mob)
- affected_mob.pixel_x = affected_mob.base_pixel_x + affected_mob.body_position_pixel_x_offset
- affected_mob.pixel_y = affected_mob.base_pixel_y + affected_mob.body_position_pixel_y_offset
affected_mob.layer = initial(affected_mob.layer)
if(!current_mob)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
index e9c0a2ad3aa..401d3aeba55 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
@@ -139,8 +139,7 @@
add_overlay(shibari_rope_overlay_behind)
/obj/structure/chair/shibari_stand/post_buckle_mob(mob/living/buckled)
- buckled.pixel_y = buckled.base_pixel_y + 4
- buckled.pixel_x = buckled.base_pixel_x
+ buckled.add_offsets(type, y_add = 4)
buckled.layer = BELOW_MOB_LAYER
if(LAZYLEN(buckled_mobs))
@@ -163,8 +162,7 @@
//Restore the position of the mob after unbuckling.
/obj/structure/chair/shibari_stand/post_unbuckle_mob(mob/living/buckled)
- buckled.pixel_x = buckled.base_pixel_x + buckled.body_position_pixel_x_offset
- buckled.pixel_y = buckled.base_pixel_y + buckled.body_position_pixel_y_offset - 4
+ buckled.remove_offsets(type)
buckled.layer = initial(buckled.layer)
cut_overlay(shibari_shadow_overlay)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
index cf0b9433f5f..97a2ac05d61 100644
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
+++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
@@ -9,7 +9,7 @@
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi'
icon_state = "rengo"
worn_icon_state = "enchanted_rifle" // Not actually magical looking, just looks closest to this one
- inhand_icon_state = "enchanted_rifle"
+ inhand_icon_state = "sakhno"
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba
can_be_sawn_off = FALSE
diff --git a/modular_skyrat/modules/morefermentplants/code/misc.dm b/modular_skyrat/modules/morefermentplants/code/misc.dm
index c71a1fad834..520bdc7ded5 100644
--- a/modular_skyrat/modules/morefermentplants/code/misc.dm
+++ b/modular_skyrat/modules/morefermentplants/code/misc.dm
@@ -4,7 +4,7 @@
/obj/item/food/grown/cabbage
distill_reagent = /datum/reagent/consumable/ethanol/coldscales
-/obj/item/food/grown/shell/gatfruit
+/obj/item/food/grown/gatfruit
distill_reagent = /datum/reagent/consumable/ethanol/hellfire
/obj/item/food/grown/cherry_bomb
diff --git a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm b/modular_skyrat/modules/novaya_ert/code/mod_suit.dm
index e85125c1728..471175317e7 100644
--- a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm
+++ b/modular_skyrat/modules/novaya_ert/code/mod_suit.dm
@@ -107,8 +107,7 @@
armor_type = /datum/armor/mod_theme_policing
complexity_max = DEFAULT_MAX_COMPLEXITY - 1
charge_drain = DEFAULT_CHARGE_DRAIN * 1.25
- slowdown_inactive = 1.5
- slowdown_active = 0.5
+ slowdown_deployed = 0.5
allowed_suit_storage = list(
/obj/item/flashlight,
/obj/item/tank/internals,
diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm b/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm
index a66e188a336..b5ec1f09761 100644
--- a/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm
+++ b/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm
@@ -14,6 +14,10 @@
var/maximum_pixel_shift = 16
//If we are shifted
var/is_shifted = FALSE
+ //Amount of shift in the X axis
+ var/shift_x = 0
+ //Amount of shift in the Y axis
+ var/shift_y = 0
//Allows atoms entering Parent's turf to pass through freely from given directions
var/passthroughable = NONE
//Amount of shifting necessary to make the parent passthroughable
@@ -103,8 +107,7 @@
passthroughable = NONE
if(is_shifted)
var/mob/living/owner = parent
- owner.pixel_x = owner.body_position_pixel_x_offset + owner.base_pixel_x
- owner.pixel_y = owner.body_position_pixel_y_offset + owner.base_pixel_y
+ owner.remove_offsets(type)
owner.transform = turn(owner.transform, -how_tilted)
qdel(src)
@@ -134,20 +137,24 @@
if(SHIFTING_PARENT)
switch(direct)
if(NORTH)
- if(owner.pixel_y <= maximum_pixel_shift + owner.base_pixel_y)
- owner.pixel_y++
+ if(shift_y <= maximum_pixel_shift + owner.base_pixel_y)
+ shift_y++
+ owner.add_offsets(type, y_add = shift_y)
is_shifted = TRUE
if(EAST)
- if(owner.pixel_x <= maximum_pixel_shift + owner.base_pixel_x)
- owner.pixel_x++
+ if(shift_x <= maximum_pixel_shift + owner.base_pixel_x)
+ shift_x++
+ owner.add_offsets(type, x_add = shift_x)
is_shifted = TRUE
if(SOUTH)
- if(owner.pixel_y >= -maximum_pixel_shift + owner.base_pixel_y)
- owner.pixel_y--
+ if(shift_y >= -maximum_pixel_shift + owner.base_pixel_y)
+ shift_y--
+ owner.add_offsets(type, y_add = shift_y)
is_shifted = TRUE
if(WEST)
- if(owner.pixel_x >= -maximum_pixel_shift + owner.base_pixel_x)
- owner.pixel_x--
+ if(shift_x >= -maximum_pixel_shift + owner.base_pixel_x)
+ shift_x--
+ owner.add_offsets(type, x_add = shift_x)
is_shifted = TRUE
if(TILTING_PARENT)
switch(direct)
@@ -164,13 +171,13 @@
// Yes, I know this sets it to true for everything if more than one is matched.
// Movement doesn't check diagonals, and instead just checks EAST or WEST, depending on where you are for those.
- if(owner.pixel_y > passthrough_threshold)
+ if(shift_y > passthrough_threshold)
passthroughable |= EAST | SOUTH | WEST
- else if(owner.pixel_y < -passthrough_threshold)
+ else if(shift_y < -passthrough_threshold)
passthroughable |= NORTH | EAST | WEST
- if(owner.pixel_x > passthrough_threshold)
+ if(shift_x > passthrough_threshold)
passthroughable |= NORTH | SOUTH | WEST
- else if(owner.pixel_x < -passthrough_threshold)
+ else if(shift_x < -passthrough_threshold)
passthroughable |= NORTH | EAST | SOUTH
#undef SHIFTING_ITEMS
diff --git a/modular_skyrat/modules/quirks/negative.dm b/modular_skyrat/modules/quirks/negative.dm
index 5387f215df5..0c52088c2ba 100644
--- a/modular_skyrat/modules/quirks/negative.dm
+++ b/modular_skyrat/modules/quirks/negative.dm
@@ -58,6 +58,8 @@
/datum/quirk/fragile/remove()
. = ..()
+ if(QDELETED(quirk_holder))
+ return
var/mob/living/carbon/human/user = quirk_holder
var/datum/preferences/prefs = user.client.prefs
var/brutemod = prefs.read_preference(/datum/preference/numeric/fragile_customization/brute)
diff --git a/modular_skyrat/modules/reagent_forging/code/anvil.dm b/modular_skyrat/modules/reagent_forging/code/anvil.dm
index 8b2b00dcc43..d6cca513a39 100644
--- a/modular_skyrat/modules/reagent_forging/code/anvil.dm
+++ b/modular_skyrat/modules/reagent_forging/code/anvil.dm
@@ -79,7 +79,7 @@
return ITEM_INTERACT_SUCCESS
/obj/structure/reagent_anvil/hammer_act(mob/living/user, obj/item/tool)
- conditional_pref_sound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, pref_to_check = /datum/preference/numeric/sound_ambience_volume)
+ conditional_pref_sound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, pref_to_check = /datum/preference/numeric/volume/sound_ambience_volume)
//do we have an incomplete item to hammer out? if so, here is our block of code
var/obj/item/forging/incomplete/locate_incomplete = locate() in contents
diff --git a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm
index 3533c197125..781ca88788a 100644
--- a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm
+++ b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm
@@ -101,7 +101,7 @@
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR
resistance_flags = FIRE_PROOF
skyrat_obj_flags = ANVIL_REPAIR
- can_be_tied = FALSE
+ fastening_type = SHOES_SLIPON
/datum/armor/shoes_forging_plate_boots
melee = 20
diff --git a/modular_skyrat/modules/simple_research/cloaks.dmi b/modular_skyrat/modules/simple_research/icons/cloaks.dmi
similarity index 100%
rename from modular_skyrat/modules/simple_research/cloaks.dmi
rename to modular_skyrat/modules/simple_research/icons/cloaks.dmi
diff --git a/modular_skyrat/modules/simple_research/neck.dmi b/modular_skyrat/modules/simple_research/icons/neck.dmi
similarity index 100%
rename from modular_skyrat/modules/simple_research/neck.dmi
rename to modular_skyrat/modules/simple_research/icons/neck.dmi
diff --git a/modular_skyrat/modules/simple_research/researching.dmi b/modular_skyrat/modules/simple_research/icons/researching.dmi
similarity index 100%
rename from modular_skyrat/modules/simple_research/researching.dmi
rename to modular_skyrat/modules/simple_research/icons/researching.dmi
diff --git a/modular_skyrat/modules/simple_research/research_document.dm b/modular_skyrat/modules/simple_research/research_document.dm
index bf3b14e2a74..59c5ce563bc 100644
--- a/modular_skyrat/modules/simple_research/research_document.dm
+++ b/modular_skyrat/modules/simple_research/research_document.dm
@@ -11,7 +11,7 @@
/obj/item/research_paper
name = "research paper"
desc = "Some people want to return to simpler technology, and some want to only begin researching those simple technologies."
- icon = 'modular_skyrat/modules/simple_research/researching.dmi'
+ icon = 'modular_skyrat/modules/simple_research/icons/researching.dmi'
icon_state = "scroll"
///the list of discovered items
var/list/discovered_items = list()
@@ -39,9 +39,9 @@
GLOB.simple_research += list("[shape_pattern]" = datum_path)
radial_icons_cache = list(
- "pyramid" = image(icon = 'modular_skyrat/modules/simple_research/researching.dmi', icon_state = "pyramid"),
- "cube" = image(icon = 'modular_skyrat/modules/simple_research/researching.dmi', icon_state = "cube"),
- "sphere" = image(icon = 'modular_skyrat/modules/simple_research/researching.dmi', icon_state = "sphere"),
+ "pyramid" = image(icon = 'modular_skyrat/modules/simple_research/icons/researching.dmi', icon_state = "pyramid"),
+ "cube" = image(icon = 'modular_skyrat/modules/simple_research/icons/researching.dmi', icon_state = "cube"),
+ "sphere" = image(icon = 'modular_skyrat/modules/simple_research/icons/researching.dmi', icon_state = "sphere"),
)
/obj/item/research_paper/attack_self(mob/user, modifiers)
@@ -105,7 +105,7 @@
/obj/item/research_scrap
name = "research scrap"
desc = "Small sketches of an item are drawn on the scrap-- if you use the materials, you might be able to craft the item on the scrap!"
- icon = 'modular_skyrat/modules/simple_research/researching.dmi'
+ icon = 'modular_skyrat/modules/simple_research/icons/researching.dmi'
icon_state = "scrap"
///what will be spawned
var/obj/spawning_item
diff --git a/modular_skyrat/modules/simple_research/research_skill.dm b/modular_skyrat/modules/simple_research/research_skill.dm
index 3bfaa4689dd..fa7211f40d4 100644
--- a/modular_skyrat/modules/simple_research/research_skill.dm
+++ b/modular_skyrat/modules/simple_research/research_skill.dm
@@ -12,7 +12,7 @@
name = "legendary researcher's cloak"
desc = "This legendary cloak is awarded only to those who have created a large stir within the scientific community with their contributions. \
Those who wear this cloak create the scientific foundations, and have the ability to discern the truth of the universe even from the most mundane things."
- icon = 'modular_skyrat/modules/simple_research/cloaks.dmi'
- worn_icon = 'modular_skyrat/modules/simple_research/neck.dmi'
+ icon = 'modular_skyrat/modules/simple_research/icons/cloaks.dmi'
+ worn_icon = 'modular_skyrat/modules/simple_research/icons/neck.dmi'
icon_state = "researchcloak"
associated_skill_path = /datum/skill/research
diff --git a/modular_skyrat/modules/space_vines/back.dmi b/modular_skyrat/modules/space_vines/icons/back.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/back.dmi
rename to modular_skyrat/modules/space_vines/icons/back.dmi
diff --git a/modular_skyrat/modules/space_vines/items_and_weapons.dmi b/modular_skyrat/modules/space_vines/icons/items_and_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/items_and_weapons.dmi
rename to modular_skyrat/modules/space_vines/icons/items_and_weapons.dmi
diff --git a/modular_skyrat/modules/space_vines/polearms_lefthand.dmi b/modular_skyrat/modules/space_vines/icons/polearms_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/polearms_lefthand.dmi
rename to modular_skyrat/modules/space_vines/icons/polearms_lefthand.dmi
diff --git a/modular_skyrat/modules/space_vines/polearms_righthand.dmi b/modular_skyrat/modules/space_vines/icons/polearms_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/polearms_righthand.dmi
rename to modular_skyrat/modules/space_vines/icons/polearms_righthand.dmi
diff --git a/modular_skyrat/modules/space_vines/scythes.dm b/modular_skyrat/modules/space_vines/scythes.dm
index 272f3cdede8..4f346613001 100644
--- a/modular_skyrat/modules/space_vines/scythes.dm
+++ b/modular_skyrat/modules/space_vines/scythes.dm
@@ -1,11 +1,11 @@
/obj/item/scythe
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
- icon = 'modular_skyrat/modules/space_vines/items_and_weapons.dmi'
+ icon = 'modular_skyrat/modules/space_vines/icons/items_and_weapons.dmi'
icon_state = "scythe_t1"
- worn_icon = 'modular_skyrat/modules/space_vines/back.dmi'
- lefthand_file = 'modular_skyrat/modules/space_vines/polearms_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/space_vines/polearms_righthand.dmi'
+ worn_icon = 'modular_skyrat/modules/space_vines/icons/back.dmi'
+ lefthand_file = 'modular_skyrat/modules/space_vines/icons/polearms_lefthand.dmi'
+ righthand_file = 'modular_skyrat/modules/space_vines/icons/polearms_righthand.dmi'
force = 13
throwforce = 5
throw_speed = 2
diff --git a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm b/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm
index 938dc421bb3..3b32af4c214 100644
--- a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm
+++ b/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm
@@ -24,7 +24,7 @@
strip_delay = 30
equip_delay_other = 50
resistance_flags = NONE
- can_be_tied = FALSE
+ fastening_type = SHOES_SLIPON
supports_variations_flags = NONE
/obj/item/clothing/gloves/combat/peacekeeper/stormtrooper
diff --git a/modular_skyrat/modules/synths/code/bodyparts/eyes.dm b/modular_skyrat/modules/synths/code/bodyparts/eyes.dm
index eebc19d8697..190e5023926 100644
--- a/modular_skyrat/modules/synths/code/bodyparts/eyes.dm
+++ b/modular_skyrat/modules/synths/code/bodyparts/eyes.dm
@@ -1,6 +1,6 @@
/obj/item/organ/eyes/synth
name = "optical sensors"
- icon_state = "cybernetic_eyeballs"
+ icon_state = "eyes_cyber"
desc = "A very basic set of optical sensors with no extra vision modes or functions."
maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
organ_flags = ORGAN_ROBOTIC
diff --git a/modular_skyrat/modules/tarkon/code/clothing/mod.dm b/modular_skyrat/modules/tarkon/code/clothing/mod.dm
index 4de47e732a6..dbbef180318 100644
--- a/modular_skyrat/modules/tarkon/code/clothing/mod.dm
+++ b/modular_skyrat/modules/tarkon/code/clothing/mod.dm
@@ -101,7 +101,7 @@
inbuilt_modules = list()
charge_drain = DEFAULT_CHARGE_DRAIN * 3
siemens_coefficient = 0
- slowdown_active = 1
+ slowdown_deployed = 1
/obj/item/mod/control/pre_equipped/prototype/hauler
theme = /datum/mod_theme/prototype/hauler
diff --git a/modular_skyrat/modules/tarkon/code/misc-fluff/tools.dm b/modular_skyrat/modules/tarkon/code/misc-fluff/tools.dm
index 970d026536b..86a53f13656 100644
--- a/modular_skyrat/modules/tarkon/code/misc-fluff/tools.dm
+++ b/modular_skyrat/modules/tarkon/code/misc-fluff/tools.dm
@@ -7,4 +7,4 @@
canRturf = FALSE
max_matter = 300
matter = 300
- upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS
+ construction_upgrades = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS
diff --git a/modular_skyrat/modules/taur_mechanics/code/constrict.dm b/modular_skyrat/modules/taur_mechanics/code/constrict.dm
index 00ac67851ad..17a2bb4a7f1 100644
--- a/modular_skyrat/modules/taur_mechanics/code/constrict.dm
+++ b/modular_skyrat/modules/taur_mechanics/code/constrict.dm
@@ -8,7 +8,7 @@
desc = "Left click to coil/uncoil your powerful tail around something, right click to begin crushing."
check_flags = AB_CHECK_LYING|AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED|AB_CHECK_PHASED
- button_icon = 'modular_skyrat/modules/taur_mechanics/sprites/ability.dmi'
+ button_icon = 'modular_skyrat/modules/taur_mechanics/icons/ability.dmi'
button_icon_state = "constrict"
ranged_mousepointer = 'icons/effects/mouse_pointers/supplypod_pickturf.dmi'
@@ -125,7 +125,7 @@
name = "serpentine tail"
desc = "A scaley tail, currently coiled."
- icon = 'modular_skyrat/modules/taur_mechanics/sprites/tail.dmi'
+ icon = 'modular_skyrat/modules/taur_mechanics/icons/tail.dmi'
icon_state = "naga"
pixel_x = -16
@@ -190,7 +190,7 @@
if (tail_overlay)
return tail_overlay // we already have it
- tail_overlay = mutable_appearance('modular_skyrat/modules/taur_mechanics/sprites/tail.dmi', "naga_top", ABOVE_MOB_LAYER + 0.01, src)
+ tail_overlay = mutable_appearance('modular_skyrat/modules/taur_mechanics/icons/tail.dmi', "naga_top", ABOVE_MOB_LAYER + 0.01, src)
tail_overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
tail_overlay.setDir(owner.dir)
add_overlay(tail_overlay)
@@ -642,7 +642,7 @@
name = "Constricted"
desc = "You're being constricted by a giant tail! You can resist, attack the tail, or attack the constrictor to escape!"
- icon = 'modular_skyrat/modules/taur_mechanics/sprites/ability.dmi'
+ icon = 'modular_skyrat/modules/taur_mechanics/icons/ability.dmi'
icon_state = "constrict"
#undef CONSTRICT_BASE_PIXEL_SHIFT
diff --git a/modular_skyrat/modules/taur_mechanics/code/saddles.dm b/modular_skyrat/modules/taur_mechanics/code/saddles.dm
index 963053cddb3..759e0d0c151 100644
--- a/modular_skyrat/modules/taur_mechanics/code/saddles.dm
+++ b/modular_skyrat/modules/taur_mechanics/code/saddles.dm
@@ -3,9 +3,9 @@
desc = "someone spawned a basetype!"
slot_flags = ITEM_SLOT_BACK // no storage
- icon = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
- worn_icon = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
+ icon = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
+ worn_icon = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
+ worn_icon_taur_snake = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
supports_variations_flags = STYLE_TAUR_HOOF|STYLE_TAUR_PAW
/obj/item/riding_saddle/Initialize(mapload)
@@ -51,9 +51,9 @@
slot_flags = ITEM_SLOT_BACK
- icon = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
- worn_icon = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi'
+ icon = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
+ worn_icon = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
+ worn_icon_taur_snake = 'modular_skyrat/modules/taur_mechanics/icons/saddles.dmi'
supports_variations_flags = STYLE_TAUR_HOOF|STYLE_TAUR_PAW
storage_type = /datum/storage/saddlebags
diff --git a/modular_skyrat/modules/taur_mechanics/sprites/ability.dmi b/modular_skyrat/modules/taur_mechanics/icons/ability.dmi
similarity index 100%
rename from modular_skyrat/modules/taur_mechanics/sprites/ability.dmi
rename to modular_skyrat/modules/taur_mechanics/icons/ability.dmi
diff --git a/modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi b/modular_skyrat/modules/taur_mechanics/icons/saddles.dmi
similarity index 100%
rename from modular_skyrat/modules/taur_mechanics/sprites/saddles.dmi
rename to modular_skyrat/modules/taur_mechanics/icons/saddles.dmi
diff --git a/modular_skyrat/modules/taur_mechanics/sprites/tail.dmi b/modular_skyrat/modules/taur_mechanics/icons/tail.dmi
similarity index 100%
rename from modular_skyrat/modules/taur_mechanics/sprites/tail.dmi
rename to modular_skyrat/modules/taur_mechanics/icons/tail.dmi
diff --git a/modular_zubbers/code/_globalvars/lists/maintenance_loot_common.dm b/modular_zubbers/code/_globalvars/lists/maintenance_loot_common.dm
index 3e732c6236d..11287f9d5e6 100644
--- a/modular_zubbers/code/_globalvars/lists/maintenance_loot_common.dm
+++ b/modular_zubbers/code/_globalvars/lists/maintenance_loot_common.dm
@@ -852,7 +852,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/food/grown/rainbow_flower = 25,
/obj/item/food/grown/random = 100,
/obj/item/food/grown/rose = 25,
- /obj/item/food/grown/shell/eggy = 25,
+ /obj/item/food/grown/eggy = 25,
/obj/item/food/grown/tea/catnip = 25,
/obj/item/food/grown/tomato = 75
) = 75,
diff --git a/modular_zubbers/code/datums/quirks/neutral_quirks/entombed.dm b/modular_zubbers/code/datums/quirks/neutral_quirks/entombed.dm
index f0fadbabef7..5f6f2f26454 100644
--- a/modular_zubbers/code/datums/quirks/neutral_quirks/entombed.dm
+++ b/modular_zubbers/code/datums/quirks/neutral_quirks/entombed.dm
@@ -113,7 +113,7 @@
if (force_dropped_items)
var/obj/item/old_bag = locate() in force_dropped_items
if (old_bag.atom_storage)
- old_bag.atom_storage.dump_content_at(modsuit, human_holder)
+ old_bag.atom_storage.dump_content_at(modsuit, modsuit.get_dumping_location(), human_holder)
/datum/quirk/equipping/entombed/post_add()
. = ..()
diff --git a/modular_zubbers/code/datums/quirks/neutral_quirks/lungs.dm b/modular_zubbers/code/datums/quirks/neutral_quirks/lungs.dm
index f599482e668..f1c9aaf7421 100644
--- a/modular_zubbers/code/datums/quirks/neutral_quirks/lungs.dm
+++ b/modular_zubbers/code/datums/quirks/neutral_quirks/lungs.dm
@@ -41,6 +41,8 @@
return
var/obj/item/clothing/accessory/breathing/acc = equipped
acc.breath_type = breath_type
+ if(!human_holder?.w_uniform)
+ return
if (acc.can_attach_accessory(human_holder?.w_uniform, human_holder))
acc.attach(human_holder.w_uniform, human_holder)
diff --git a/modular_zubbers/code/datums/quirks/positive_quirks/life_savings.dm b/modular_zubbers/code/datums/quirks/positive_quirks/life_savings.dm
index 6e8893286c9..d513956eb85 100644
--- a/modular_zubbers/code/datums/quirks/positive_quirks/life_savings.dm
+++ b/modular_zubbers/code/datums/quirks/positive_quirks/life_savings.dm
@@ -34,4 +34,6 @@
/datum/quirk/life_savings/remove()
. = ..()
+ if(QDELETED(quirk_holder))
+ return
UnregisterSignal(owner_account, COMSIG_ON_BANK_ACCOUNT_PAYOUT)
diff --git a/modular_zubbers/code/datums/quirks/positive_quirks/venemous_bite/venomous_bite_quirk.dm b/modular_zubbers/code/datums/quirks/positive_quirks/venemous_bite/venomous_bite_quirk.dm
index 86d169e8ec4..cc5202f8583 100644
--- a/modular_zubbers/code/datums/quirks/positive_quirks/venemous_bite/venomous_bite_quirk.dm
+++ b/modular_zubbers/code/datums/quirks/positive_quirks/venemous_bite/venomous_bite_quirk.dm
@@ -15,6 +15,8 @@
action.Grant(human_holder)
/datum/quirk/venomous_bite/remove()
+ if(QDELETED(quirk_holder))
+ return ..()
var/datum/action/cooldown/mob_cooldown/venomous_bite/action = locate(/datum/action/cooldown/mob_cooldown/venomous_bite) in quirk_holder.actions
action.Remove()
diff --git a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm
index 222972419db..698fa296951 100644
--- a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm
+++ b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm
@@ -4,7 +4,7 @@
/datum/greyscale_config/collar/ringbell
name = "Ring Bell Collar"
- icon_file = 'modular_zubbers/code/modules/GAGS/icons/collar.dmi'
+ icon_file = 'modular_zubbers/icons/obj/clothing/GAGS/collar.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/ringbell.json'
/datum/greyscale_config/collar/ringbell/worn
@@ -13,7 +13,7 @@
/datum/greyscale_config/collar/gps
name = "GPS Collar"
- icon_file = 'modular_zubbers/code/modules/GAGS/icons/collar.dmi'
+ icon_file = 'modular_zubbers/icons/obj/clothing/GAGS/collar.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/gps.json'
/datum/greyscale_config/collar/gps/worn
@@ -95,12 +95,12 @@
/datum/greyscale_config/henchmen
name = "Henchmen"
- icon_file = 'modular_zubbers/code/modules/GAGS/icons/monkehenchmenobj.dmi'
+ icon_file = 'modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenobj.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/henchmen/henchmen.json'
/datum/greyscale_config/henchmen/worn
name = "Henchmen Worn"
- icon_file = 'modular_zubbers/code/modules/GAGS/icons/monkehenchmenmob.dmi'
+ icon_file = 'modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenmob.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/henchmen/henchmen.json'
/datum/greyscale_config/miniskirt
diff --git a/modular_zubbers/code/modules/antagonists/traitor/goal_overrides.dm b/modular_zubbers/code/modules/antagonists/traitor/goal_overrides.dm
deleted file mode 100644
index 8430c123f51..00000000000
--- a/modular_zubbers/code/modules/antagonists/traitor/goal_overrides.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/datum/traitor_objective/target_player/eyesnatching/generate_objective(datum/mind/generating_for, list/possible_duplicates)
- return FALSE
-
-/* /datum/traitor_objective/hack_comm_console/can_generate_objective(datum/mind/generating_for, list/possible_duplicates)
- return FALSE */
-
-/datum/traitor_objective/ultimate/can_generate_objective(generating_for, list/possible_duplicates)
- return FALSE
-
-/datum/traitor_objective/target_player/infect/can_generate_objective(datum/mind/generating_for, list/possible_duplicates)
- return FALSE
diff --git a/modular_zubbers/code/modules/antagonists/traitor/one_shot_emag.dm b/modular_zubbers/code/modules/antagonists/traitor/one_shot_emag.dm
new file mode 100644
index 00000000000..6bdad032df0
--- /dev/null
+++ b/modular_zubbers/code/modules/antagonists/traitor/one_shot_emag.dm
@@ -0,0 +1,27 @@
+/obj/item/card/emag/one_shot
+ name = "cryptographic sequencer"
+ special_desc_requirement = EXAMINE_CHECK_JOB
+ special_desc_jobs = list(JOB_DETECTIVE, JOB_HEAD_OF_SECURITY)
+ special_desc = "Upon inspection you can instantly tell this is a real cryptographic sequencer commonly traded in bulk for cheap at countless blackmarkets. They are known for their unreliability and breaking after just one use from their shoddy construction."
+ /// How many uses does it have left?
+ var/charges = 1
+ /// Who summoned this?
+ var/caller
+
+/obj/item/card/emag/one_shot/examine(mob/user)
+ . = ..()
+ if(user == caller)
+ . += span_notice("It looks cheapo, they did say it gives just one shot...")
+ else
+ . += span_notice("It looks flimsy and identical to the \"Donk Co.\" toy.")
+
+/obj/item/card/emag/one_shot/can_emag(atom/target, mob/user)
+ if(charges <= 0)
+ balloon_alert(user, "unresponsive!")
+ return FALSE
+ use_charge(user)
+ return TRUE
+
+/obj/item/card/emag/one_shot/proc/use_charge(mob/user)
+ balloon_alert(user, "out of charges!")
+ charges --
diff --git a/modular_zubbers/code/modules/clothing/neck/collars.dm b/modular_zubbers/code/modules/clothing/neck/collars.dm
index bba571915b5..1d0ffe7ad55 100644
--- a/modular_zubbers/code/modules/clothing/neck/collars.dm
+++ b/modular_zubbers/code/modules/clothing/neck/collars.dm
@@ -69,11 +69,11 @@
/obj/item/clothing/neck/kink_collar/locked/gps/update_overlays()
. = ..()
if(gps.tracking)
- . += mutable_appearance('modular_zubbers/code/modules/GAGS/icons/collar.dmi', "light")
- . += emissive_appearance('modular_zubbers/code/modules/GAGS/icons/collar.dmi', "light", src, alpha = src.alpha)
+ . += mutable_appearance('modular_zubbers/icons/obj/clothing/GAGS/collar.dmi', "light")
+ . += emissive_appearance('modular_zubbers/icons/obj/clothing/GAGS/collar.dmi', "light", src, alpha = src.alpha)
/obj/item/clothing/neck/kink_collar/locked/gps/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
. = ..()
if(gps.tracking && !isinhands)
- . += mutable_appearance('modular_zubbers/code/modules/GAGS/icons/collar.dmi', "collar_mob_tracker_light")
- . += emissive_appearance('modular_zubbers/code/modules/GAGS/icons/collar.dmi', "collar_mob_tracker_light", src, alpha = src.alpha)
+ . += mutable_appearance('modular_zubbers/icons/obj/clothing/GAGS/collar.dmi', "collar_mob_tracker_light")
+ . += emissive_appearance('modular_zubbers/icons/obj/clothing/GAGS/collar.dmi', "collar_mob_tracker_light", src, alpha = src.alpha)
diff --git a/modular_zubbers/code/modules/clothing/shoes/boots.dm b/modular_zubbers/code/modules/clothing/shoes/boots.dm
index 2f4d4ebf8ad..2486f8c55c9 100644
--- a/modular_zubbers/code/modules/clothing/shoes/boots.dm
+++ b/modular_zubbers/code/modules/clothing/shoes/boots.dm
@@ -205,7 +205,7 @@
desc = "Stylish banana shaped shoes that make it impossible to walk without slipping. Due to the slippery nature of them, removal will require the help of a friend!"
icon_state = "banana_slippers"
worn_icon_state = "banana_slippers"
- can_be_tied = FALSE
+ fastening_type = SHOES_SLIPON
strip_delay = 10 SECONDS
// Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them.
@@ -282,4 +282,4 @@
body_parts_covered = parent_type::body_parts_covered | LEGS
resistance_flags = FIRE_PROOF
- can_be_tied = FALSE
+ fastening_type = SHOES_SLIPON
diff --git a/modular_zubbers/code/modules/hydroponics/code/grown/rocks.dm b/modular_zubbers/code/modules/hydroponics/grown/rocks.dm
similarity index 77%
rename from modular_zubbers/code/modules/hydroponics/code/grown/rocks.dm
rename to modular_zubbers/code/modules/hydroponics/grown/rocks.dm
index 0e0236a2525..b8f5437f8ac 100644
--- a/modular_zubbers/code/modules/hydroponics/code/grown/rocks.dm
+++ b/modular_zubbers/code/modules/hydroponics/grown/rocks.dm
@@ -3,7 +3,7 @@
desc = "Small seedlings of the golem rockfruit plant. There's a warning label on its packaging: \n\
\"Remember: Legally speaking, rocking is more legal than stoning. \n \
We are not liable for any injury, death, or complete body evaporation caused by using or growing these plants\""
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-rockfruit"
species = "rock"
plantname = "Rockfruits"
@@ -21,7 +21,7 @@
growthstages = 2
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy,
/datum/plant_gene/trait/fire_resistance,
@@ -41,7 +41,7 @@
force = 5 // Comparatively shit considering a nettle is 15
throwforce = 10 // Less shit but hey, it is a rock
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "rockfruit"
var/product = /obj/item/food/grown/rockfruit
@@ -72,7 +72,7 @@
foodtypes = FRUIT
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "rockfruit-peeled"
tastes = list("mountains" = 1)
@@ -82,7 +82,7 @@
desc = "The peeled shell of a rockfruit, or as you may call it, \"Literal pile of rocks\". \
Probably not edible, but a golem will try to prove you otherwise"
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "rockfruit-trash"
foodtypes = STONE
@@ -99,11 +99,11 @@
/obj/item/seeds/sandfruit
name = "sandfruit seed pack"
desc = "These seeds grow to produce sandfruits."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-sandfruit"
species = "ore"
plantname = "Sandfruits"
- product = /obj/item/food/grown/shell/sand
+ product = /obj/item/food/grown/material_sand
mutatelist = list(/obj/item/seeds/uraniberry,
/obj/item/seeds/agbergine,
/obj/item/seeds/ferrotuber,
@@ -112,14 +112,14 @@
/datum/reagent/silicon = 0.1)
growthstages = 2
rarity = 20
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/sand
+/obj/item/food/grown/material_sand
seed = /obj/item/seeds/sandfruit
name = "sandfruit"
desc = "A mutated variant of rockfruits; rough, course and now available everywhere. Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/sandfruitcore
foodtypes = FRUIT
@@ -128,7 +128,7 @@
/obj/item/stack/sheet/mineral/sandfruitcore
name = "sandfruit core"
desc = "A very fragile sandfruit core, literally composed of dozens of particles of sand... don't store in pockets."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
singular_name = "sandfruit core"
icon_state = "sandfruit"
merge_type = /obj/item/stack/sheet/mineral/sandfruitcore
@@ -140,24 +140,24 @@
/obj/item/seeds/uraniberry
name = "uraniberry seed pack"
desc = "These seeds grow to produce 'berries' that god thinks probably shouldn't exist."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-uraniberry"
species = "ore"
plantname = "Uraniberry"
- product = /obj/item/food/grown/shell/uraniberry
+ product = /obj/item/food/grown/material_uraniberry
mutatelist = list(/obj/item/seeds/plasmaplum)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/uranium = 0.1)
growthstages = 2
rarity = 20
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/uraniberry
+/obj/item/food/grown/material_uraniberry
seed = /obj/item/seeds/uraniberry
name = "uraniberry"
desc = "A mutated variant of rockfruits; you might not want to hold it for long... also not actually a berry! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/uraniberrycore
foodtypes = FRUIT
@@ -167,7 +167,7 @@
name = "uraniberry core"
singular_name = "uraniberry core"
desc = "A very dense uraniberry core, don't store in pockets, unless you want extra limbs."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "uraniberry"
merge_type = /obj/item/stack/sheet/mineral/uraniberrycore
max_amount = 10
@@ -178,24 +178,24 @@
/obj/item/seeds/plasmaplum
name = "plasmaplum seed pack"
desc = "These seeds grow to produce extremely volatile 'plums'."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-plasmaplum"
species = "ore"
plantname = "Plasmaplum"
- product = /obj/item/food/grown/shell/plasmaplum
+ product = /obj/item/food/grown/material_plasmaplum
mutatelist = list(/obj/item/seeds/bluegemdrupe)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/toxin/plasma = 0.1)
growthstages = 2
rarity = 40
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/plasmaplum
+/obj/item/food/grown/material_plasmaplum
seed = /obj/item/seeds/plasmaplum
name = "plasmaplum"
desc = "A mutated variant of rockfruits; Incredibly volatile... also not actually a plum! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/plasmaplumcore
foodtypes = FRUIT
@@ -205,7 +205,7 @@
name = "plasmaplum core"
singular_name = "plasmaplum core"
desc = "A very dense plasmaplum core, store in a cold, fire and spark free place."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "plasmaplum"
merge_type = /obj/item/stack/sheet/mineral/plasmaplumcore
max_amount = 10
@@ -216,24 +216,24 @@
/obj/item/seeds/bluegemdrupe
name = "bluegem drupe seed pack"
desc = "These seeds grow to produce extremely volatile 'drupes'."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-bluegemdrupe"
species = "ore"
plantname = "Bluegem drupe"
- product = /obj/item/food/grown/shell/bluegemdrupe
+ product = /obj/item/food/grown/material_bluegemdrupe
mutatelist = null
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/bluespace = 0.1)
growthstages = 2
rarity = 60
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/bluegemdrupe
+/obj/item/food/grown/material_bluegemdrupe
seed = /obj/item/seeds/bluegemdrupe
name = "bluegem drupe"
desc = "A mutated variant of rockfruits; Incredibly fragile... also not actually a drupe! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/bluegemdrupecore
foodtypes = FRUIT
@@ -243,7 +243,7 @@
name = "bluegem drupe core"
singular_name = "bluegem drupe core"
desc = "A very dense bluegem drupe core, dropping may incur teleportation in rare cases."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "bluegemdrupe"
merge_type = /obj/item/stack/sheet/mineral/bluegemdrupecore
max_amount = 10
@@ -254,24 +254,24 @@
/obj/item/seeds/agbergine
name = "ag-bergine seed pack"
desc = "These seeds grow to produce fruits, with cores of solid silver."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-agbergine"
species = "ore"
plantname = "agbergine"
- product = /obj/item/food/grown/shell/agbergine
+ product = /obj/item/food/grown/material_agbergine
mutatelist = list(/obj/item/seeds/aubergine)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/silver = 0.1)
growthstages = 2
rarity = 20
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/agbergine
+/obj/item/food/grown/material_agbergine
seed = /obj/item/seeds/agbergine
name = "ag-bergine"
desc = "Ag-bergine, get it AG? It's hilarious and valuable! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/agberginecore
foodtypes = FRUIT
@@ -281,7 +281,7 @@
name = "ag-bergine core"
singular_name = "ag-bergine core"
desc = "A dense agbergine core of solid, sterling silver."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "agbergine"
merge_type = /obj/item/stack/sheet/mineral/agberginecore
max_amount = 10
@@ -292,24 +292,24 @@
/obj/item/seeds/aubergine
name = "au-bergine seed pack"
desc = "These seeds grow to golden cored fruits."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-aubergine"
species = "ore"
plantname = "aubergine"
- product = /obj/item/food/grown/shell/aubergine
+ product = /obj/item/food/grown/material_aubergine
mutatelist = list(/obj/item/seeds/dimantis)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/gold = 0.1)
growthstages = 2
rarity = 40
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/aubergine
+/obj/item/food/grown/material_aubergine
seed = /obj/item/seeds/aubergine
name = "aubergine"
desc = "An aubergine; AU? Get it?!... My talents are wasted here! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/auberginecore
foodtypes = FRUIT
@@ -319,7 +319,7 @@
name = "au-bergine core"
singular_name = "au-bergine core"
desc = "A very dense au-bergine core, solid 24 karat goodness."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "aubergine"
merge_type = /obj/item/stack/sheet/mineral/auberginecore
max_amount = 10
@@ -330,24 +330,24 @@
/obj/item/seeds/dimantis
name = "dimantis seed pack"
desc = "These seeds grow to produce extremely valuable dimatis fruits."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-dimantis"
species = "ore"
plantname = "Dimantis"
- product = /obj/item/food/grown/shell/dimantis
+ product = /obj/item/food/grown/material_dimantis
mutatelist = null
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/carbon = 0.1)
growthstages = 2
rarity = 60
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/dimantis
+/obj/item/food/grown/material_dimantis
seed = /obj/item/seeds/dimantis
name = "dimantis drupe"
desc = "A fleshy fruid with a diamond core, Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/dimantiscore
foodtypes = FRUIT
@@ -357,7 +357,7 @@
name = "dimantis core"
singular_name = "dimantis core"
desc = "A very dense dimantis core, the way to a woman's heart, it could probably get through her ribcage..."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "dimantis"
merge_type = /obj/item/stack/sheet/mineral/dimantiscore
max_amount = 10
@@ -368,24 +368,24 @@
/obj/item/seeds/ferrotuber
name = "ferrotuber seed pack"
desc = "These seeds grow to produce tubers, with cores of iron."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-ferrotuber"
species = "ore"
plantname = "ferrotuber"
- product = /obj/item/food/grown/shell/ferrotuber
+ product = /obj/item/food/grown/material_ferrotuber
mutatelist = list(/obj/item/seeds/titanituber)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/iron = 0.1)
growthstages = 2
rarity = 20
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/ferrotuber
+/obj/item/food/grown/material_ferrotuber
seed = /obj/item/seeds/ferrotuber
name = "ferrotuber"
desc = "Ferrotubers, fleshy shells with iron fillings! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/ferrotubercore
foodtypes = FRUIT
@@ -395,7 +395,7 @@
name = "ferrotuber core"
singular_name = "ferrotuber core"
desc = "A dense ferrotuber core of solid iron, slightly magnetic."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "ferrotuber"
merge_type = /obj/item/stack/sheet/mineral/ferrotubercore
max_amount = 10
@@ -406,23 +406,23 @@
/obj/item/seeds/titanituber
name = "titanituber seed pack"
desc = "These seeds grow to titanium tubers."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-titanituber"
species = "ore"
plantname = "titanituber"
- product = /obj/item/food/grown/shell/titanituber
+ product = /obj/item/food/grown/material_titanituber
mutatelist = null
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
growthstages = 2
rarity = 40
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/titanituber
+/obj/item/food/grown/material_titanituber
seed = /obj/item/seeds/titanituber
name = "titanituber"
desc = "soft fruits with incredibly sturdy cores, watch your teeth! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/titanitubercore
foodtypes = FRUIT
@@ -431,7 +431,7 @@
name = "titanituber core"
singular_name = "titanituber core"
desc = "A very dense titanituber core, let's hope you didn't bite it!"
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "titanituber"
merge_type = /obj/item/stack/sheet/mineral/titanitubercore
max_amount = 10
@@ -442,23 +442,23 @@
/obj/item/seeds/adamapple
name = "adam's apple seed pack"
desc = "These seeds grow to produce fruits, with cores of adamantine."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-adamapple"
species = "ore"
plantname = "adamapple"
- product = /obj/item/food/grown/shell/adamapple
+ product = /obj/item/food/grown/material_adamapple
mutatelist = list(/obj/item/seeds/runescooper)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
growthstages = 2
rarity = 60
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/adamapple
+/obj/item/food/grown/material_adamapple
seed = /obj/item/seeds/adamapple
name = "Adam's apple"
desc = "Adam's apples, The garden Eden's bounty! Just peel it for a core."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/adamapplecore
foodtypes = FRUIT
@@ -467,7 +467,7 @@
name = "adam's apple core"
singular_name = "adam's apple core"
desc = "A dense adam's apple core of solid adamantine."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "adamapple"
merge_type = /obj/item/stack/sheet/mineral/adamapplecore
max_amount = 10
@@ -478,23 +478,23 @@
/obj/item/seeds/runescooper
name = "runescooper seed pack"
desc = "These seeds grow to rare, wildy fruits."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-runescooper"
species = "ore"
plantname = "runescooper"
- product = /obj/item/food/grown/shell/runescooper
+ product = /obj/item/food/grown/material_runescooper
mutatelist = list(/obj/item/seeds/bananiumberry)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
growthstages = 2
rarity = 60
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/runescooper
+/obj/item/food/grown/material_runescooper
seed = /obj/item/seeds/runescooper
name = "runescooper"
desc = "A fruit, usually grown in wild places where men would kill each other for gain."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/runescoopercore
foodtypes = FRUIT
@@ -503,7 +503,7 @@
name = "runescooper core"
singular_name = "runescooper core"
desc = "A very dense runite core, a few more of these and you might be able to make a scimitar to defeat your foes..."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "runescooper"
merge_type = /obj/item/stack/sheet/mineral/runescoopercore
max_amount = 10
@@ -514,24 +514,24 @@
/obj/item/seeds/bananiumberry
name = "bananium berry seed pack"
desc = "These seeds grow to produce unholy abominations."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/seeds.dmi'
+ icon = 'modular_zubbers/icons/obj/seeds.dmi'
icon_state = "seed-bananiumberry"
species = "ore"
plantname = "bananiumberry"
- product = /obj/item/food/grown/shell/bananiumberry
+ product = /obj/item/food/grown/material_bananiumberry
mutatelist = null
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1,
/datum/reagent/consumable/nutriment/soup/clown_tears = 0.1)
growthstages = 2
rarity = 60
- growing_icon = 'modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi'
+ growing_icon = 'modular_zubbers/icons/obj/growing_fruits.dmi'
genes = list(/datum/plant_gene/trait/chem_cooling)
-/obj/item/food/grown/shell/bananiumberry
+/obj/item/food/grown/material_bananiumberry
seed = /obj/item/seeds/bananiumberry
name = "bananiumberry"
desc = "holy honkmother... This fruit got a core of bananium, Just peel it!"
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "orefruit"
trash_type = /obj/item/stack/sheet/mineral/bananiumberrycore
foodtypes = FRUIT
@@ -541,7 +541,7 @@
name = "bananiumberry core"
singular_name = "bananiumberry core"
desc = "A very dense bananium core, the way to a clown's heart, it could probably get through their ribcage..."
- icon = 'modular_zubbers/code/modules/hydroponics/icons/harvest.dmi'
+ icon = 'modular_zubbers/icons/obj/harvest.dmi'
icon_state = "bananiumberry"
merge_type = /obj/item/stack/sheet/mineral/bananiumberrycore
max_amount = 10
diff --git a/modular_zubbers/code/modules/hydroponics/code/plantgenes/hydroponics.dm b/modular_zubbers/code/modules/hydroponics/plantgenes/hydroponics.dm
similarity index 100%
rename from modular_zubbers/code/modules/hydroponics/code/plantgenes/hydroponics.dm
rename to modular_zubbers/code/modules/hydroponics/plantgenes/hydroponics.dm
diff --git a/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm b/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm
index 645c6d5964c..90c65b71d4e 100644
--- a/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm
+++ b/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm
@@ -49,7 +49,7 @@
move_resist = MOVE_FORCE_WEAK
pull_force = MOVE_FORCE_WEAK
- ai_controller = /datum/ai_controller/basic_controller/simple_hostile
+ ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile
butcher_results = list(/obj/item/reagent_containers/cup/tube/cazador_venom = 1)
guaranteed_butcher_results = list(/obj/item/food/meat/slab/bugmeat = 2)
diff --git a/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm b/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm
index 372d49cccbb..48c31dd8e50 100644
--- a/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm
+++ b/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm
@@ -49,7 +49,7 @@
move_resist = MOVE_FORCE_STRONG
pull_force = MOVE_FORCE_STRONG
- ai_controller = /datum/ai_controller/basic_controller/simple_hostile
+ ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile
butcher_results = list(/obj/item/reagent_containers/cup/tube/scorpion_venom = 1)
guaranteed_butcher_results = list(/obj/item/food/meat/slab/bugmeat = 4)
diff --git a/modular_zubbers/code/modules/mob/living/basic/pets/cat/cat.dm b/modular_zubbers/code/modules/mob/living/basic/pets/cat/cat.dm
index ab394ac159b..a0e77617ce3 100644
--- a/modular_zubbers/code/modules/mob/living/basic/pets/cat/cat.dm
+++ b/modular_zubbers/code/modules/mob/living/basic/pets/cat/cat.dm
@@ -20,7 +20,7 @@
melee_damage_lower = 20
melee_damage_upper = 35
mobility_flags = MOBILITY_FLAGS_DEFAULT
- ai_controller = /datum/ai_controller/basic_controller/simple_hostile
+ ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile
faction = list(FACTION_CAT, ROLE_SYNDICATE)
gold_core_spawnable = NO_SPAWN
// it's clad in blood-red armor
diff --git a/modular_zubbers/code/modules/mob/living/basic/pets/cat/super_cat.dm b/modular_zubbers/code/modules/mob/living/basic/pets/cat/super_cat.dm
index 50e20419ec7..b7d5a88afdc 100644
--- a/modular_zubbers/code/modules/mob/living/basic/pets/cat/super_cat.dm
+++ b/modular_zubbers/code/modules/mob/living/basic/pets/cat/super_cat.dm
@@ -15,7 +15,7 @@
gold_core_spawnable = HOSTILE_SPAWN
melee_damage_lower = 7
melee_damage_upper = 15
- ai_controller = /datum/ai_controller/basic_controller/simple_hostile
+ ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile
faction = list(FACTION_HOSTILE)
diff --git a/modular_zubbers/code/modules/mod/mod_theme.dm b/modular_zubbers/code/modules/mod/mod_theme.dm
index c6b52087577..3bba9eafa8f 100644
--- a/modular_zubbers/code/modules/mod/mod_theme.dm
+++ b/modular_zubbers/code/modules/mod/mod_theme.dm
@@ -8,8 +8,7 @@
atom_flags = PREVENT_CONTENTS_EXPLOSION_1
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
- slowdown_inactive = 0.5
- slowdown_active = 0
+ slowdown_deployed = 0
allowed_suit_storage = list(
/obj/item/ammo_box,
/obj/item/ammo_casing,
diff --git a/modular_zubbers/code/modules/quote_of_the_round/ticker.dm b/modular_zubbers/code/modules/quote_of_the_round/ticker.dm
index 1ca377cc8a4..8c15be5a7e7 100644
--- a/modular_zubbers/code/modules/quote_of_the_round/ticker.dm
+++ b/modular_zubbers/code/modules/quote_of_the_round/ticker.dm
@@ -15,10 +15,11 @@
/datum/controller/subsystem/ticker/declare_completion(force_ending)
if(quote_of_the_round_text)
- send2chat(
- new /datum/tgs_message_content(generate_quote_of_the_round()),
- CONFIG_GET(string/channel_announce_new_game)
- )
+ for(var/channel_tag in CONFIG_GET(str_list/channel_announce_end_game))
+ send2chat(
+ new /datum/tgs_message_content(generate_quote_of_the_round()),
+ channel_tag
+ )
to_chat(world, span_notice("A quote of the round was found, and should have been sent to discord."))
log_runtime("A quote of the round was found, and should have been sent to discord.")
diff --git a/modular_zubbers/code/modules/storyteller/gamemode_ui.dm b/modular_zubbers/code/modules/storyteller/gamemode_ui.dm
index f2046658aeb..e8027f4ac3d 100644
--- a/modular_zubbers/code/modules/storyteller/gamemode_ui.dm
+++ b/modular_zubbers/code/modules/storyteller/gamemode_ui.dm
@@ -77,7 +77,7 @@
return static_data
/datum/controller/subsystem/gamemode/ui_state(mob/user)
- return GLOB.admin_state
+ return ADMIN_STATE(R_ADMIN)
/datum/controller/subsystem/gamemode/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
diff --git a/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm b/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm
index 76714cb39e9..9d516882e96 100644
--- a/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm
+++ b/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm
@@ -2,7 +2,7 @@
name = "shadekin eyes"
desc = "These eyes are massive, and feel warm to the touch. The shadekin that's missing these is probably feeling very queasy."
eye_icon_state = "shadekin_eyes"
- icon_state = "eyeballs-moth" //i'm too lazy to give them their own sprite
+ icon_state = "eyes_moth" //i'm too lazy to give them their own sprite
flash_protect = FLASH_PROTECTION_SENSITIVE
blink_animation = FALSE
- iris_overlays = FALSE
+ iris_overlay = null
diff --git a/modular_zubbers/maps/biodome/pride_flags.dmi b/modular_zubbers/icons/maps/biodome/pride_flags.dmi
similarity index 100%
rename from modular_zubbers/maps/biodome/pride_flags.dmi
rename to modular_zubbers/icons/maps/biodome/pride_flags.dmi
diff --git a/modular_zubbers/code/modules/GAGS/icons/collar.dmi b/modular_zubbers/icons/obj/clothing/GAGS/collar.dmi
similarity index 100%
rename from modular_zubbers/code/modules/GAGS/icons/collar.dmi
rename to modular_zubbers/icons/obj/clothing/GAGS/collar.dmi
diff --git a/modular_zubbers/code/modules/GAGS/icons/monkehenchmenmob.dmi b/modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenmob.dmi
similarity index 100%
rename from modular_zubbers/code/modules/GAGS/icons/monkehenchmenmob.dmi
rename to modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenmob.dmi
diff --git a/modular_zubbers/code/modules/GAGS/icons/monkehenchmenobj.dmi b/modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenobj.dmi
similarity index 100%
rename from modular_zubbers/code/modules/GAGS/icons/monkehenchmenobj.dmi
rename to modular_zubbers/icons/obj/clothing/GAGS/monkehenchmenobj.dmi
diff --git a/modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi b/modular_zubbers/icons/obj/growing_fruits.dmi
similarity index 100%
rename from modular_zubbers/code/modules/hydroponics/icons/growing_fruits.dmi
rename to modular_zubbers/icons/obj/growing_fruits.dmi
diff --git a/modular_zubbers/code/modules/hydroponics/icons/harvest.dmi b/modular_zubbers/icons/obj/harvest.dmi
similarity index 100%
rename from modular_zubbers/code/modules/hydroponics/icons/harvest.dmi
rename to modular_zubbers/icons/obj/harvest.dmi
diff --git a/modular_zubbers/code/modules/hydroponics/icons/seeds.dmi b/modular_zubbers/icons/obj/seeds.dmi
similarity index 100%
rename from modular_zubbers/code/modules/hydroponics/icons/seeds.dmi
rename to modular_zubbers/icons/obj/seeds.dmi
diff --git a/modular_zubbers/maps/biodome/pride_flags.dm b/modular_zubbers/maps/biodome/pride_flags.dm
index d4b118235c2..4740a49f20b 100644
--- a/modular_zubbers/maps/biodome/pride_flags.dm
+++ b/modular_zubbers/maps/biodome/pride_flags.dm
@@ -9,7 +9,7 @@
/obj/structure/sign/flag/pride
name = "coder pride flag"
desc = "You probably shouldn't be seeing this. Yell at the coders about it."
- icon = 'modular_zubbers/maps/biodome/pride_flags.dmi'
+ icon = 'modular_zubbers/icons/maps/biodome/pride_flags.dmi'
/obj/structure/sign/flag/pride/gay
name = "gay pride flag"
@@ -76,7 +76,7 @@
/obj/item/sign/flag/pride
name = "folded coder pride flag"
desc = "You probably shouldn't be seeing this. Yell at the coders about it."
- icon = 'modular_zubbers/maps/biodome/pride_flags.dmi'
+ icon = 'modular_zubbers/icons/maps/biodome/pride_flags.dmi'
/obj/item/sign/flag/pride/gay
name = "folded gay pride flag"
diff --git a/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm b/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm
index de3c6ca05f3..75f21179ac9 100644
--- a/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm
+++ b/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm
@@ -9,8 +9,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
complexity_max = DEFAULT_MAX_COMPLEXITY - 2 // Sets the modsuit complexity to a total of 13 (functionally 10 as the default storage module consumes 3. ) to keep it in line with the civilian modsuit.
charge_drain = DEFAULT_CHARGE_DRAIN
- slowdown_inactive = 2.5 // very slow because the quirk infers you rely on this to move/exist
- slowdown_active = 0.95
+ slowdown_deployed = 0.95
inbuilt_modules = list(
/obj/item/mod/module/joint_torsion/entombed
)
diff --git a/modular_zubbers/tools/deploy_bubber.sh b/modular_zubbers/tools/deploy_bubber.sh
new file mode 100644
index 00000000000..ebaab9bcd83
--- /dev/null
+++ b/modular_zubbers/tools/deploy_bubber.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# This script will deploy our modular icon assets so iconforge can use them in spritesheet generation
+# This includes modular_zubbers/icons, modular_zubbers/master_files/icons, modular_skyrat/master_files/icons
+# and a dynamically generated list of every module in modular_skyrat/modules that contains an icons folder
+# If there ever comes a day where the modular_skyrat folder is organized so all the sprites are together
+# instead of spread across modules, shed a tear of relief and remove the relevant code from here
+directories=( $(find modular_skyrat/modules/ -type d -name "icons") )
+
+mkdir -p \
+ $1/modular_zubbers/icons \
+ $1/modular_zubbers/master_files/icons \
+ $1/modular_skyrat/master_files/icons \
+ $1/modular_skyrat/modules/aesthetics # the aesthetics module doesnt use an icon folder but it does contain DMIs. God has abandoned us
+
+cp -r modular_zubbers/icons/* $1/modular_zubbers/icons/
+cp -r modular_zubbers/master_files/icons/* $1/modular_zubbers/master_files/icons/
+cp -r modular_skyrat/master_files/icons/* $1/modular_skyrat/master_files/icons/
+cp -r modular_skyrat/modules/aesthetics/* $1/modular_skyrat/modules/aesthetics/
+
+
+for icondir in ${directories[@]}
+do
+ mkdir -p $1/$icondir
+ cp -r $icondir/* $1/$icondir/
+done
diff --git a/tgstation.dme b/tgstation.dme
index e82a5382c9f..fb3ef863353 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6801,8 +6801,6 @@
#include "modular_skyrat\master_files\code\modules\antagonists\ert\ert.dm"
#include "modular_skyrat\master_files\code\modules\antagonists\pirate\pirate_outfits.dm"
#include "modular_skyrat\master_files\code\modules\antagonists\pirate\pirate_shuttle_equipment.dm"
-#include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\kill_pet.dm"
-#include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\smuggling.dm"
#include "modular_skyrat\master_files\code\modules\assembly\flash.dm"
#include "modular_skyrat\master_files\code\modules\asset_cache\assets\plumbing.dm"
#include "modular_skyrat\master_files\code\modules\atmospherics\machinery\pipes\pipes.dm"
@@ -8795,7 +8793,6 @@
#include "modular_zubbers\code\datums\components\crafting\utility.dm"
#include "modular_zubbers\code\datums\components\crafting\crafting\furniture.dm"
#include "modular_zubbers\code\datums\components\crafting\crafting\melee_weapon.dm"
-#include "modular_zubbers\code\datums\components\datums\riding_mob.dm"
#include "modular_zubbers\code\datums\components\vore\_defines.dm"
#include "modular_zubbers\code\datums\components\vore\absorb_control.dm"
#include "modular_zubbers\code\datums\components\vore\belly.dm"
@@ -8873,7 +8870,6 @@
#include "modular_zubbers\code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm"
#include "modular_zubbers\code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm"
#include "modular_zubbers\code\game\gamemodes\objectives\gimmick.dm"
-#include "modular_zubbers\code\game\gamemodes\objectives\overrides.dm"
#include "modular_zubbers\code\game\Items\big_bertha_shield.dm"
#include "modular_zubbers\code\game\Items\coins.dm"
#include "modular_zubbers\code\game\Items\lipstick.dm"
@@ -9027,7 +9023,7 @@
#include "modular_zubbers\code\modules\antagonists\malf\remove_malf.dm"
#include "modular_zubbers\code\modules\antagonists\nightmare\nightmare_species.dm"
#include "modular_zubbers\code\modules\antagonists\pirate\pirate_event.dm"
-#include "modular_zubbers\code\modules\antagonists\traitor\goal_overrides.dm"
+#include "modular_zubbers\code\modules\antagonists\traitor\one_shot_emag.dm"
#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplinkdatums.dm"
#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\bundle.dm"
#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\dangerous.dm"
@@ -9192,8 +9188,8 @@
#include "modular_zubbers\code\modules\goofsec\code\department_guards.dm"
#include "modular_zubbers\code\modules\hydroponics\gene_modder.dm"
#include "modular_zubbers\code\modules\hydroponics\plant_genes.dm"
-#include "modular_zubbers\code\modules\hydroponics\code\grown\rocks.dm"
-#include "modular_zubbers\code\modules\hydroponics\code\plantgenes\hydroponics.dm"
+#include "modular_zubbers\code\modules\hydroponics\grown\rocks.dm"
+#include "modular_zubbers\code\modules\hydroponics\plantgenes\hydroponics.dm"
#include "modular_zubbers\code\modules\item_reskins\plastic.dm"
#include "modular_zubbers\code\modules\job_estimation\code\dead.dm"
#include "modular_zubbers\code\modules\job_exempt\job_exempt.dm"
diff --git a/tools/deploy.sh b/tools/deploy.sh
index 8b2dba139f5..d29738df26c 100755
--- a/tools/deploy.sh
+++ b/tools/deploy.sh
@@ -40,3 +40,7 @@ cp -r tgui/packages/tgfont/dist/* $1/tgui/packages/tgfont/dist/
if [ "$(uname -o)" = "Msys" ]; then
cp ./*.dll $1/
fi
+
+# BUBBER EDIT ADDITION BEGIN - Call our deploy too
+source modular_zubbers/tools/deploy_bubber.sh
+# BUBBER EDIT ADDITION END - Call our deploy too