diff --git a/_maps/bubber/automapper/templates/Birdshot/birdshot_armory.dmm b/_maps/bubber/automapper/templates/Birdshot/birdshot_armory.dmm index fd9cce4c295..cfb27ed463f 100644 --- a/_maps/bubber/automapper/templates/Birdshot/birdshot_armory.dmm +++ b/_maps/bubber/automapper/templates/Birdshot/birdshot_armory.dmm @@ -234,7 +234,7 @@ }, /area/station/security/armory) "V" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ diff --git a/_maps/bubber/automapper/templates/Deltastation/deltastation_armory.dmm b/_maps/bubber/automapper/templates/Deltastation/deltastation_armory.dmm index de46faf7e50..2a6248ad320 100644 --- a/_maps/bubber/automapper/templates/Deltastation/deltastation_armory.dmm +++ b/_maps/bubber/automapper/templates/Deltastation/deltastation_armory.dmm @@ -109,7 +109,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/security/armory) "n" = ( diff --git a/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_armory.dmm b/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_armory.dmm index 50f9263feba..8e6805f1aba 100644 --- a/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_armory.dmm +++ b/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_armory.dmm @@ -68,7 +68,7 @@ /turf/open/floor/iron/dark/textured, /area/station/security/armory) "B" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark/textured, /area/station/security/armory) "C" = ( diff --git a/_maps/bubber/automapper/templates/MetaStation/metastation_armory.dmm b/_maps/bubber/automapper/templates/MetaStation/metastation_armory.dmm index 9550d4ea1f7..a59df42266a 100644 --- a/_maps/bubber/automapper/templates/MetaStation/metastation_armory.dmm +++ b/_maps/bubber/automapper/templates/MetaStation/metastation_armory.dmm @@ -17,7 +17,7 @@ /area/station/security/armory) "e" = ( /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/security/armory) "f" = ( diff --git a/_maps/bubber/automapper/templates/tramstation/tramstation_armory.dmm b/_maps/bubber/automapper/templates/tramstation/tramstation_armory.dmm index 527087e3085..e2a990e44ce 100644 --- a/_maps/bubber/automapper/templates/tramstation/tramstation_armory.dmm +++ b/_maps/bubber/automapper/templates/tramstation/tramstation_armory.dmm @@ -37,7 +37,7 @@ "g" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron, /area/station/security/armory) "l" = ( diff --git a/_maps/custom/wawastation.dmm b/_maps/custom/wawastation.dmm index 1ba68dc0e27..fc5c3217cef 100644 --- a/_maps/custom/wawastation.dmm +++ b/_maps/custom/wawastation.dmm @@ -818,7 +818,7 @@ dir = 5 }, /obj/machinery/camera/autoname/directional/east, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, @@ -5765,7 +5765,7 @@ /area/station/service/lawoffice) "bZI" = ( /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/textured_large, /area/station/security/armory) @@ -51283,7 +51283,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /turf/open/floor/iron, /area/station/hallway/primary/central) "rFX" = ( @@ -67602,7 +67602,7 @@ /area/station/maintenance/port/lesser) "xkc" = ( /obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/dark, /area/station/ai/satellite/foyer) "xkI" = ( diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm index 691c8da0ab0..3d15b18f8fd 100644 --- a/_maps/map_files/Blueshift/Blueshift.dmm +++ b/_maps/map_files/Blueshift/Blueshift.dmm @@ -43199,7 +43199,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47871,7 +47871,7 @@ "jhL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/bot/secbot/beepsky/jr, +/mob/living/basic/bot/secbot/beepsky/jr, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -81136,7 +81136,7 @@ "pzw" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/machinery/holopad/secure, /turf/open/floor/iron, /area/station/security/armory) @@ -85157,7 +85157,7 @@ }, /area/station/hallway/secondary/command) "qnM" = ( -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 5d858ab2e26..548ee150b4a 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -23189,7 +23189,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/dark, /area/station/ai/satellite/interior) "cuT" = ( @@ -24473,7 +24473,7 @@ /area/station/service/chapel/office) "cCh" = ( /obj/item/bedsheet/red, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) @@ -55038,7 +55038,7 @@ /turf/closed/wall/r_wall, /area/station/engineering/circuit_workshop) "nvX" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 94183643c8a..642672524c5 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -39762,7 +39762,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/interior) @@ -48289,7 +48289,7 @@ dir = 4 }, /obj/structure/cable, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, @@ -69051,7 +69051,7 @@ /area/station/service/bar/atrium) "vYs" = ( /obj/structure/chair, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm index 4680ce807cb..aab200d19d6 100644 --- a/_maps/map_files/biodome/biodome.dmm +++ b/_maps/map_files/biodome/biodome.dmm @@ -12519,7 +12519,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron, /area/station/science/lower) "euM" = ( @@ -47257,7 +47257,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/machinery/ai_slipper{ uses = 10 }, diff --git a/code/__DEFINES/spaceman_dmm.dm b/code/__DEFINES/spaceman_dmm.dm index cabb02fd49c..a3b3d2b8b5b 100644 --- a/code/__DEFINES/spaceman_dmm.dm +++ b/code/__DEFINES/spaceman_dmm.dm @@ -24,14 +24,14 @@ * where a signal or other important handling in the parent proc is being skipped. * Child procs may set this setting to `0` instead to override the check. */ - #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X + #define SHOULD_CALL_PARENT(X) set _call_parent = X /** * If set, raise a warning for any child procs that override this one, * regardless of if it calls parent or not. * This functions in a similar way to the `final` keyword in some languages. * This cannot be disabled by child overrides. */ - #define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X + #define SHOULD_NOT_OVERRIDE(X) set _not_override = X /** * If set, raise a warning if the proc or one of the sub-procs it calls * uses a blocking call, such as `sleep()` or `input()` without using `set waitfor = 0` diff --git a/code/__DEFINES/~skyrat_defines/span.dm b/code/__DEFINES/~skyrat_defines/span.dm index 42eea1aaf0b..4cb83a64a61 100644 --- a/code/__DEFINES/~skyrat_defines/span.dm +++ b/code/__DEFINES/~skyrat_defines/span.dm @@ -10,7 +10,6 @@ #define span_crossasay(str) ("" + str + "") #define span_doyourjobidiot(str) ("" + str + "") #define span_brown(str) ("" + str + "") -#define span_cyan(str) ("" + str + "") #define span_orange(str) ("" + str + "") #define span_yellow(str) ("" + str + "") #define span_gangradio(str) ("" + str + "") diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm index 69cd36502a1..5a47ae3c3f7 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm @@ -87,8 +87,8 @@ target.penis = null - client.mob.hud_used.hidden_inventory_update(client.mob) - client.mob.hud_used.persistent_inventory_update(client.mob) + client.mob.hud_used.inventory_update(client.mob) + client.mob.hud_used.inventory_update(client.mob) /datum/preference/toggle/erp/sex_toy_sounds savefile_key = "sextoy_sounds_pref" @@ -155,6 +155,7 @@ "Ask (L)OOC", "No", "Yes", + "Free Use", ) /datum/preference/choiced/erp_status/create_default_value() @@ -185,7 +186,14 @@ savefile_key = "erp_status_pref_nc" /datum/preference/choiced/erp_status_nc/init_possible_values() - return list("Yes - Switch", "Yes - Dom", "Yes - Sub", "Yes", "Ask (L)OOC", "Check OOC Notes", "No") + return list( + "No", + "Ask (L)OOC", + "Check OOC Notes", + "Yes", + "Yes - Dom", + "Yes - Switch", + ) /datum/preference/choiced/erp_status_nc/create_default_value() return "No" @@ -215,7 +223,15 @@ savefile_key = "erp_status_pref_v" /datum/preference/choiced/erp_status_v/init_possible_values() - return list("Yes - Switch", "Yes - Prey", "Yes - Pred", "Check OOC Notes", "Ask (L)OOC", "No", "Yes") + return list( + "No", + "Ask (L)OOC", + "Check OOC Notes", + "Yes", + "Yes - Pred", + "Yes - Prey", + "Yes - Switch", + ) /datum/preference/choiced/erp_status_v/create_default_value() return "No" @@ -245,7 +261,12 @@ savefile_key = "erp_status_pref_mechanics" /datum/preference/choiced/erp_status_mechanics/init_possible_values() - return list("Roleplay only", "Mechanical only", "Mechanical and Roleplay", "None") + return list( + "None", + "Roleplay only", + "Mechanical only", + "Mechanical and Roleplay", + ) /datum/preference/choiced/erp_status_mechanics/create_default_value() return "None" diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm index ddc3e457ed8..e7b94c05a20 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm +++ b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm @@ -101,7 +101,7 @@ /obj/item/crusher_trophy/watcher_wing, ) ritual_success_items = list( - /obj/item/tendril_seed, + /obj/item/ash_seed/tendril, ) /datum/ash_ritual/incite_megafauna @@ -109,13 +109,13 @@ desc = "Causes a horrible, unrecognizable sound that will attract the large fauna from around the planet." required_components = list( "north" = /mob/living/carbon/human, - "south" = /obj/item/tendril_seed, + "south" = /obj/item/ash_seed/tendril, "east" = /mob/living/carbon/human, "west" = /mob/living/carbon/human, ) consumed_components = list( /mob/living/carbon/human, - /obj/item/tendril_seed, + /obj/item/ash_seed/tendril, ) /datum/ash_ritual/incite_megafauna/ritual_success(obj/effect/ash_rune/success_rune) diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm index d01c24bbcfd..73dd9457184 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm @@ -3,15 +3,14 @@ name = "primitive screwdriver" icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "screwdriver" - post_init_icon_state = null - random_color = FALSE custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT) greyscale_colors = null greyscale_config = null greyscale_config_inhand_left = null greyscale_config_inhand_right = null - greyscale_config_belt = null + greyscale_config_worn = null + post_init_icon_state = null /datum/crafting_recipe/ash_recipe/ash_screwdriver name = "Ash Screwdriver" @@ -21,14 +20,14 @@ name = "primitive wirecutters" icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "cutters" - random_color = FALSE custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT) greyscale_colors = null greyscale_config = null greyscale_config_inhand_left = null greyscale_config_inhand_right = null - greyscale_config_belt = null + greyscale_config_worn = null + post_init_icon_state = null /datum/crafting_recipe/ash_recipe/ash_cutters name = "Ash Wirecutters" @@ -45,11 +44,28 @@ greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + post_init_icon_state = null /datum/crafting_recipe/ash_recipe/ash_wrench name = "Ash Wrench" result = /obj/item/wrench/ashwalker +/obj/item/secateurs/ashwalker + name = "primitive secateurs" + icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon_state = "secateurs" + custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT) + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/ash_secateur + name = "Ash Secateur" + result = /obj/item/secateurs/ashwalker + /obj/item/crowbar/ashwalker name = "primitive crowbar" icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' @@ -61,11 +77,31 @@ greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + post_init_icon_state = null /datum/crafting_recipe/ash_recipe/ash_crowbar name = "Ash Crowbar" result = /obj/item/crowbar/ashwalker +/obj/item/chisel/ashwalker + name = "primitive chisel" + desc = "Where there is a will there is a way; the tool head of this chisel is fashioned from bone shaped when it was fresh and then left to calcify in iron rich water, to make a strong head for all your carving needs." + icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon_state = "chisel" + custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT) + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + post_init_icon_state = null + toolspeed = 4 + +/datum/crafting_recipe/ash_recipe/ash_chisel + name = "Ash Chisel" + result = /obj/item/chisel/ashwalker + /obj/item/cursed_dagger name = "cursed ash dagger" desc = "A blunted dagger that seems to cause the shadows near it to tremble." @@ -79,37 +115,61 @@ . = ..() . += span_notice("To be used on tendrils. It will visually change the tendril to indicate whether it has been cursed or not.") -/obj/item/tendril_seed - name = "tendril seed" - desc = "A horrible fleshy mass that pulse with a dark energy." +/obj/item/ash_seed icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' - icon_state = "tendril_seed" -/obj/item/tendril_seed/examine(mob/user) + ///list of things the ash seed can spawn + var/list/spawn_list + +/obj/item/ash_seed/examine(mob/user) . = ..() . += span_notice("In order to be planted, it is required to be on the mining level as well as on basalt.") -/obj/item/tendril_seed/attack_self(mob/user, modifiers) +/obj/item/ash_seed/proc/harm_user(mob/living/user, sent_message, damage_amount) + to_chat(user, span_warning(sent_message)) + user.adjust_brute_loss(damage_amount) + if(!do_after(user, 4 SECONDS, target = src)) + to_chat(user, span_warning("You stop the process of planting [src]!")) + return FALSE + + return TRUE + +/obj/item/ash_seed/attack_self(mob/user, modifiers) . = ..() + if(isnull(spawn_list)) + return + var/turf/src_turf = get_turf(src) if(!is_mining_level(src_turf.z) || !istype(src_turf, /turf/open/misc/asteroid/basalt)) return + if(!isliving(user)) return + var/mob/living/living_user = user - to_chat(living_user, span_warning("You begin to squeeze [src]...")) - if(!do_after(living_user, 4 SECONDS, target = src)) + if(!harm_user(user, "You begin to squeeze [src]...", 20)) return - to_chat(living_user, span_warning("[src] begins to crawl between your hand's appendages, crawling up your arm...")) - living_user.adjust_brute_loss(35) - if(!do_after(living_user, 4 SECONDS, target = src)) + + if(!harm_user(user, "[src] begins to crawl between your hand's appendages, crawling up your arm...", 20)) return - to_chat(living_user, span_warning("[src] wraps around your chest and begins to tighten, causing an odd needling sensation...")) - living_user.adjust_brute_loss(35) - if(!do_after(living_user, 4 SECONDS, target = src)) + + if(!harm_user(user, "[src] wraps around your chest and begins to tighten, causing an odd needling sensation...", 20)) return + to_chat(living_user, span_warning("[src] leaps from you satisfied and begins to grossly assemble itself!")) - var/type = pick(/obj/structure/spawner/lavaland, /obj/structure/spawner/lavaland/goliath, /obj/structure/spawner/lavaland/legion) + var/type = pick(spawn_list) new type(user.loc) playsound(get_turf(src), 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) qdel(src) + +/obj/item/ash_seed/tendril + name = "tendril seed" + desc = "A horrible fleshy mass that pulse with a dark energy." + icon_state = "tendril_seed" + spawn_list = list(/mob/living/basic/mining/tendril) + +/obj/item/ash_seed/vent + name = "ore seed" + desc = "A horrible fleshy mass covers a boulder. It seems to slowly pulse, reacting to you near it" + icon_state = "vent_seed" + spawn_list = list(/obj/structure/ore_vent/random) diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi b/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi index a39621f0d1d..7566a439a87 100644 Binary files a/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi and b/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi differ diff --git a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm index d427c433522..32e83fb119c 100644 --- a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm +++ b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm @@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) /obj/item/nullrod/Initialize(mapload) . = ..() - AddElement(/datum/element/bane, /mob/living/basic/clockwork_marauder, 1, 15, FALSE) + AddComponent(/datum/component/bane, /mob/living/basic/clockwork_marauder, 1, 15, FALSE) #undef MARAUDER_SHIELD_MAX #undef WELDER_REPAIR_AMOUNT diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm index 0baf3450881..95c445096d3 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm @@ -42,6 +42,10 @@ var/color_layer_names /// If this sprite accessory will be inaccessable if ERP config is disabled var/erp_accessory = FALSE + // If this sprite accessory should use something other than the feature_key to decide its sprite key + // For example, if TG has it different in their icon files (e.g. "_fish_tail_" instead of "_tail_") + // This should hopefully prevent the need to copy paste TG icons into tails.dmi + var/feature_key_override /datum/sprite_accessory/blank factual = FALSE diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm index f9c36e115dc..d0b393e82d7 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm @@ -29,8 +29,8 @@ always_customizable = FALSE -/datum/species/pod/podweak/spec_life(mob/living/carbon/human/H, seconds_per_tick, times_fired) - . = ..() +/datum/species/pod/podweak/proc/on_life(mob/living/carbon/human/H, seconds_per_tick) + SIGNAL_HANDLER if(H.stat != CONSCIOUS) return diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm index e9c722e1f22..cabec5734d7 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm +++ b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm @@ -1,5 +1,5 @@ /obj/item/organ/tail - mutantpart_key = "tail" + mutantpart_key = "FEATURE_TAIL" mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) var/can_wag = TRUE var/wagging = FALSE diff --git a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm index 30b0e2c4199..b2cc36ba926 100644 --- a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm +++ b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm @@ -94,7 +94,7 @@ /obj/machinery/atmospherics/components/unary/delam_scram/proc/panic_time(source, trigger_reason) SIGNAL_HANDLER - if(!prereq_check(source, trigger_reason)) + if(!prereq_check()) return send_warning(source, trigger_reason) @@ -156,7 +156,8 @@ use_reverb = TRUE, falloff_distance = 10, ) - power_fail(duration_min = 27, duration_max = 33) + ASYNC + power_fail(40, 50) /// Stop the delamination. Let the fireworks begin /obj/machinery/atmospherics/components/unary/delam_scram/proc/put_on_a_show() diff --git a/modular_skyrat/modules/indicators/code/ssd_indicator.dm b/modular_skyrat/modules/indicators/code/ssd_indicator.dm index d84edb1d569..73cb6e855bf 100644 --- a/modular_skyrat/modules/indicators/code/ssd_indicator.dm +++ b/modular_skyrat/modules/indicators/code/ssd_indicator.dm @@ -25,7 +25,7 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/module . = ..() //Temporary, look below for the reason -/mob/living/ghostize(can_reenter_corpse = TRUE) +/mob/living/ghostize(can_reenter_corpse = TRUE, forced = FALSE) . = ..() set_ssd_indicator(FALSE) diff --git a/modular_skyrat/modules/liquids/code/ocean_biomes.dm b/modular_skyrat/modules/liquids/code/ocean_biomes.dm index d49698f6caf..0ceebb75689 100644 --- a/modular_skyrat/modules/liquids/code/ocean_biomes.dm +++ b/modular_skyrat/modules/liquids/code/ocean_biomes.dm @@ -1,37 +1,37 @@ /datum/biome/ocean_sand - turf_type = /turf/open/misc/ocean + open_turf_type = /turf/open/misc/ocean flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed) flora_density = 10 /datum/biome/ocean_sand_flora - turf_type = /turf/open/misc/ocean + open_turf_type = /turf/open/misc/ocean flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed, /obj/structure/flora/ocean/coral) flora_density = 25 fauna_density = 0.03 fauna_types = list(/mob/living/basic/carp) /datum/biome/ocean_redsand - turf_type = /turf/open/misc/ironsand/ocean + open_turf_type = /turf/open/misc/ironsand/ocean flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed, /obj/structure/flora/ocean/coral) flora_density = 40 fauna_density = 0.06 fauna_types = list(/mob/living/basic/carp) /datum/biome/ocean_rocklight - turf_type = /turf/open/misc/ocean/rock + open_turf_type = /turf/open/misc/ocean/rock flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile) flora_density = 3 /datum/biome/ocean_rockmed - turf_type = /turf/open/misc/ocean/rock/medium + open_turf_type = /turf/open/misc/ocean/rock/medium flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile) flora_density = 5 /datum/biome/ocean_rockheavy - turf_type = /turf/open/misc/ocean/rock/heavy + open_turf_type = /turf/open/misc/ocean/rock/heavy flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile) flora_density = 7 /datum/biome/ocean_wall - turf_type = /turf/closed/mineral/random/stationside/ocean + closed_turf_type = /turf/closed/mineral/random/stationside/ocean flora_density = 0 diff --git a/modular_skyrat/modules/liquids/code/ocean_turfs.dm b/modular_skyrat/modules/liquids/code/ocean_turfs.dm index e0b94156f50..cb21831a432 100644 --- a/modular_skyrat/modules/liquids/code/ocean_turfs.dm +++ b/modular_skyrat/modules/liquids/code/ocean_turfs.dm @@ -21,7 +21,7 @@ if(!ismineralturf(T)) return var/turf/closed/mineral/M = T - M.mineralAmt = 0 + M.mineral_amt = 0 M.gets_drilled() baseturfs = /turf/open/openspace/ocean //This is to ensure that IF random turf generation produces a openturf, there won't be other turfs assigned other than openspace. diff --git a/modular_skyrat/modules/mapping/code/planet_turfs.dm b/modular_skyrat/modules/mapping/code/planet_turfs.dm index 92ec1ce8d7a..750fbe92613 100644 --- a/modular_skyrat/modules/mapping/code/planet_turfs.dm +++ b/modular_skyrat/modules/mapping/code/planet_turfs.dm @@ -84,15 +84,15 @@ /turf/closed/mineral/random/asteroid/rockplanet //A version that can be used on the mining planet without destroying atmos - starts with Low_Pressure, along with the rest of the planet. name = "iron rock" - icon = MAP_SWITCH('icons/turf/walls/red_wall.dmi', 'icons/turf/mining.dmi') - icon = 'icons/turf/mining.dmi' + icon = MAP_SWITCH('modular_zubbers/icons/turf/walls/red_wall.dmi', 'icons/turf/mining.dmi') + icon = 'modular_zubbers/icons/turf/walls/red_wall.dmi' icon_state = "redrock" base_icon_state = "red_wall" turf_type = /turf/open/misc/asteroid/lowpressure baseturfs = /turf/open/misc/asteroid/lowpressure initial_gas_mix = OPENTURF_LOW_PRESSURE defer_change = TRUE - mineralChance = 25 //Higher mineral chance than normal + mineral_chance = 25 //Higher mineral chance than normal /turf/closed/mineral/random/asteroid/rockplanet/mineral_chances() return list( diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm index 093e9e566b7..4df966f82b4 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm @@ -74,10 +74,10 @@ if(message["identifier"] == sender_identifier) message["sender_name"] = message_name message["message"] = received_message - message["timestamp"] = station_time_timestamp() + message["timestamp"] = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()]" return TRUE - message_list.Insert(1, list(list(identifier = sender_identifier, sender_name = received_name, message = received_message, timestamp = station_time_timestamp()))) + message_list.Insert(1, list(list(identifier = sender_identifier, sender_name = received_name, message = received_message, timestamp = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()]"))) return TRUE /// Removes the message_to_remove from the message_list, If the message cannot be found the proc will return FALSE, otherwise it will delete the message_to_remove and return TRUE. diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index ead1d76e3bb..c7d79ad4a3c 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -247,7 +247,6 @@ update_mob_action_buttons() //some of our action buttons might be unusable when we're handcuffed. update_worn_handcuffs() - update_hud_handcuffed() /obj/item/restraints/handcuffs/milker name = "chair cuffs" diff --git a/modular_skyrat/modules/mutants/code/mutant_species.dm b/modular_skyrat/modules/mutants/code/mutant_species.dm index 74a6d678b27..20479bb0e59 100644 --- a/modular_skyrat/modules/mutants/code/mutant_species.dm +++ b/modular_skyrat/modules/mutants/code/mutant_species.dm @@ -151,8 +151,8 @@ if(COOLDOWN_FINISHED(src, regen_cooldown)) COOLDOWN_START(src, regen_cooldown, REGENERATION_DELAY) -/datum/species/mutant/infectious/spec_life(mob/living/carbon/carbon_mob, seconds_per_tick, times_fired) - . = ..() +/datum/species/mutant/infectious/proc/on_life(mob/living/carbon/carbon_mob, seconds_per_tick) + SIGNAL_HANDLER //mutants never actually die, they just fall down until they regenerate enough to rise back up. if(COOLDOWN_FINISHED(src, regen_cooldown)) var/heal_amt = heal_rate diff --git a/modular_skyrat/modules/officestuff/code/officestuff.dm b/modular_skyrat/modules/officestuff/code/officestuff.dm index 7b661b24fa5..7c0ae62a8cb 100644 --- a/modular_skyrat/modules/officestuff/code/officestuff.dm +++ b/modular_skyrat/modules/officestuff/code/officestuff.dm @@ -8,7 +8,7 @@ // stolen from the wall clock /obj/structure/grandfatherclock/examine(mob/user) . = ..() - . += span_info("The current CST (local) time is: [station_time_timestamp()].") + . += span_info("The current CST (local) time is: [round_timestamp()].") . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].") if(soundloop) . += span_notice("The hands of the clock are freely ticking away. They could be screwed down.") diff --git a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm index c5bb5aafa51..822179b32ec 100644 --- a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm +++ b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm @@ -182,10 +182,25 @@ /obj/projectile/bullet/shotgun_slug/hunter name = "12g hunter slug" damage = 20 + range = 12 + /// How much the damage is multiplied by when we hit a mob with the correct biotype + var/biotype_damage_multiplier = 5 + /// What biotype we look for + var/biotype_we_look_for = MOB_BEAST -/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload) - . = ..() - AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 6) +/obj/projectile/bullet/shotgun_slug/hunter/on_hit(atom/target, blocked, pierce_hit) + if(ismineralturf(target)) + var/turf/closed/mineral/mineral_turf = target + mineral_turf.gets_drilled(firer) + if(range > 0) + return BULLET_ACT_FORCE_PIERCE + return ..() + if(!isliving(target) || (damage > initial(damage))) + return ..() + var/mob/living/target_mob = target + if(target_mob.mob_biotypes & biotype_we_look_for || istype(target_mob, /mob/living/simple_animal/hostile/megafauna)) + damage *= biotype_damage_multiplier + return ..() /obj/item/ammo_casing/shotgun/honkshot name = "confetti shell" diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_skyrat/modules/synths/code/species/synthetic.dm index 230cd002fd8..0926103490e 100644 --- a/modular_skyrat/modules/synths/code/species/synthetic.dm +++ b/modular_skyrat/modules/synths/code/species/synthetic.dm @@ -69,8 +69,8 @@ MUTANT_SYNTH_HEAD = list("Default Head", FALSE), ) -/datum/species/synthetic/spec_life(mob/living/carbon/human/human) - . = ..() +/datum/species/synthetic/proc/on_life(mob/living/carbon/human/human) + SIGNAL_HANDLER if(human.stat == SOFT_CRIT || human.stat == HARD_CRIT) human.adjust_fire_loss(1) //Still deal some damage in case a cold environment would be preventing us from the sweet release to robot heaven diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm index 6077f63e0e7..401b4456ad7 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm @@ -197,10 +197,10 @@ //turfs /turf/closed/mineral/strange_rock - mineralAmt = 1 + mineral_amt = 1 icon = MAP_SWITCH('modular_zubbers/icons/turf/walls/smoothrocks.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi') scan_state = "rock_Strange" - mineralType = /obj/item/xenoarch/strange_rock + mineral_type = /obj/item/xenoarch/strange_rock /turf/closed/mineral/strange_rock/volcanic turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface @@ -213,7 +213,7 @@ baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = TRUE - mineralChance = 10 + mineral_chance = 7 /turf/closed/mineral/random/volcanic/mineral_chances() return list( @@ -261,7 +261,7 @@ /turf/closed/mineral/random/snow/underground baseturfs = /turf/open/misc/asteroid/snow/icemoon // abundant ore - mineralChance = 20 + mineral_chance = 16 /turf/closed/mineral/random/snow/underground/mineral_chances() return list( @@ -302,7 +302,7 @@ /turf/closed/mineral/random/stationside/asteroid/rockplanet initial_gas_mix = OPENTURF_DEFAULT_ATMOS turf_type = /turf/open/misc/asteroid - mineralChance = 30 + mineral_chance = 25 /turf/closed/mineral/random/stationside/asteroid/rockplanet/mineral_chances() return list( diff --git a/modular_zubbers/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/modular_zubbers/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm index 8e3a9d7ba49..5bd5e4ece37 100644 --- a/modular_zubbers/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm +++ b/modular_zubbers/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm @@ -27,7 +27,7 @@ * * Arguments: * * dna - The `/datum/dna` datum from which we're going to be extracting the data to set the - * * accessory_name - instead of using the name from mutant_bodyparts[feature_key][MUTANT_INDEX_NAME] you can optionally pass one explicitly + * * accessory_name - instead of using the name from mutant_bodyparts[feature_key] you can optionally pass one explicitly * * feature_key - same as with accessory_key, you can optionally pass a feature_key explicitly * appearance. */ @@ -40,7 +40,6 @@ sprite_datum = fetch_sprite_datum_from_name(accessory_name ? accessory_name : mutantparts_list[feature_key][MUTANT_INDEX_NAME]) modsuit_affected = sprite_datum.use_custom_mod_icon draw_color = mutantparts_list[feature_key][MUTANT_INDEX_COLOR_LIST] - build_emissive_eligibility(mutantparts_list[feature_key][MUTANT_INDEX_EMISSIVE_LIST]) cache_key = jointext(generate_icon_cache(), "_") return TRUE @@ -54,12 +53,12 @@ /// Generate a unique key based on our sprites. So that if we've aleady drawn these sprites, /// they can be found in the cache and wont have to be drawn again (blessing and curse, but mostly curse) -/datum/bodypart_overlay/mutant/generate_icon_cache() +/datum/bodypart_overlay/mutant/generate_icon_cache(obj/item/bodypart/limb) . = list() . += "[get_base_icon_state()]" . += "[get_feature_key_for_overlay()]" - - . += cache_key_extra_information // We can do it like this because it's meant to be a list of strings anyway. BYOND list operations actually being useful for once. + if(LAZYLEN(cache_key_extra_information)) + . += cache_key_extra_information // We can do it like this because it's meant to be a list of strings anyway. BYOND list operations actually being useful for once. if(islist(draw_color)) for(var/sub_color in draw_color) @@ -72,8 +71,8 @@ . += "[alpha]" if(emissive_eligibility_by_color_index) - for(var/index in emissive_eligibility_by_color_index) - . += "[emissive_eligibility_by_color_index[index]]" + for(var/emissive_boolean in emissive_eligibility_by_color_index) + . += emissive_boolean return . @@ -83,11 +82,11 @@ * overriden in the cases where `feature_key` is not what we want to use here. */ /datum/bodypart_overlay/mutant/proc/get_feature_key_for_overlay() - return feature_key + return sprite_datum?.feature_key_override || feature_key /datum/bodypart_overlay/mutant/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - if(!..(bodypart_owner)) + if(!..()) return FALSE var/mob/living/carbon/human/human = bodypart_owner.owner if(!istype(human)) @@ -113,19 +112,19 @@ var/mutable_appearance/mod_overlay var/icon/custom_mod_icon = sprite_datum.get_custom_mod_icon(owner) - cache_key_extra_information = list() last_built_icon_states = list() + LAZYCLEARLIST(cache_key_extra_information) if(custom_mod_icon) - mod_overlay = get_singular_image(image_layer = image_layer, owner = owner, icon_override = custom_mod_icon) + mod_overlay = get_singular_image(image_layer = image_layer, owner = owner, icon_override = custom_mod_icon, limb = limb) switch(sprite_datum.color_src) if(USE_MATRIXED_COLORS) - var/list/color_layer_names = get_color_layer_names(build_icon_state(gender, image_layer)) + var/list/color_layer_names = get_color_layer_names(build_icon_state_bubber(gender, image_layer)) for (var/color_index in color_layer_names) - var/mutable_appearance/color_layer_image = get_singular_image(build_icon_state(gender, image_layer, color_layer_names[color_index]), image_layer, owner) + var/mutable_appearance/color_layer_image = get_singular_image(build_icon_state_bubber(gender, image_layer, color_layer_names[color_index]), image_layer, owner, limb = limb) returned_images += color_layer_image overlay_indexes_to_color += index @@ -135,7 +134,7 @@ mod_overlay.add_overlay(sprite_datum.get_custom_mod_icon(owner, color_layer_image)) else - var/mutable_appearance/image_to_return = get_singular_image(build_icon_state(gender, image_layer), image_layer, owner) + var/mutable_appearance/image_to_return = get_singular_image(build_icon_state_bubber(gender, image_layer), image_layer, owner, limb = limb) returned_images = list(image_to_return) overlay_indexes_to_color += index @@ -143,16 +142,22 @@ mod_overlay.add_overlay(sprite_datum.get_custom_mod_icon(owner, image_to_return)) if(sprite_datum.has_inner) - returned_images += get_singular_image(build_icon_state(gender, image_layer, feature_key_suffix = "inner"), image_layer, owner) + returned_images += get_singular_image(build_icon_state_bubber(gender, image_layer, feature_key_suffix = "inner"), image_layer, owner, limb = limb) // Gets the icon_state of a single or matrix colored accessory and overlays it with a texture if(mod_overlay) returned_images += mod_overlay - cache_key_extra_information += "MOD" + LAZYADD(cache_key_extra_information, "MOD") return returned_images +// Cybernetic cat ears - special case - need a unique version for each inner color. +/datum/bodypart_overlay/mutant/cat_ears/cybernetic/generate_icon_cache(obj/item/bodypart/limb) + . = ..() + . += inner_color + + /** * Returns the color_layer_names of the sprite_datum associated with our datum. * Mainly here so that it can be overriden elsewhere to have other effects. @@ -211,7 +216,7 @@ * * feature_key_suffix - A string that will be directly appended to the result * of `get_feature_key_for_overlay()`. Defaults to `null`. */ -/datum/bodypart_overlay/mutant/proc/build_icon_state(gender, image_layer, color_layer = null, feature_key_suffix = null) +/datum/bodypart_overlay/mutant/proc/build_icon_state_bubber(gender, image_layer, color_layer = null, feature_key_suffix = null) var/list/icon_state_builder = list() icon_state_builder += sprite_datum.gender_specific ? gender : "m" //Male is default because sprite accessories are so ancient they predate the concept of not hardcoding gender @@ -241,7 +246,7 @@ * `sprite_datum.icon`. Default is `null`, and its value will be used if it's * anything else. */ -/datum/bodypart_overlay/mutant/proc/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null) +/datum/bodypart_overlay/mutant/proc/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null, obj/item/bodypart/limb) // We get from icon_override if it is filled, and from sprite_datum.icon if not. var/mutable_appearance/appearance = mutable_appearance(icon_override || sprite_datum.get_special_icon(owner), image_icon_state, layer = image_layer) @@ -251,6 +256,17 @@ return appearance +// Special case - fish tail +/datum/bodypart_overlay/mutant/tail/fish/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null, obj/item/bodypart/limb) + var/mutable_appearance/appearance = ..() + // We add all appearances the parent bodypart has to the tail to inherit scales and fancy effects + // but most other organs don't want to inherit those so we do it here and not on parent + for (var/datum/bodypart_overlay/texture/texture in limb.bodypart_overlays) + if(texture.can_draw_on_bodypart(limb, limb.owner, limb.is_husked)) + texture.modify_bodypart_appearance(appearance) + return appearance + + /** * Helper proc to add the appropriate emissives to the overlays, based on the preferences. * @@ -264,33 +280,13 @@ if(!limb || !length(emissive_eligibility_by_color_index)) return overlays - var/index = 1 - var/list/image/emissives = list() - - for(var/image/overlay in overlays) - if(emissive_eligibility_by_color_index[num2text(index)]) - emissives += emissive_appearance_copy(overlay, limb) - - index++ - - return overlays + emissives - - -/** - * Builds `emissive_eligibility_by_layer` from the input list of three booleans. - * Will not do anything if the given argument is `null`. - */ -/datum/bodypart_overlay/mutant/proc/build_emissive_eligibility(list/emissive_eligibility) - if(!emissive_eligibility || !islist(emissive_eligibility)) - return - - emissive_eligibility_by_color_index = list() - var/i = 1 - - for(var/eligibility in emissive_eligibility) - emissive_eligibility_by_color_index[num2text(i)] = eligibility - i++ + var/list/image/emissives + var/max = min(3, length(overlays)) // only care about the first 3 indexes + for(var/index = 1 to max) + if(emissive_eligibility_by_color_index[index]) + LAZYADD(emissives, emissive_appearance_copy(overlays[index], limb)) + return emissives ? (overlays + emissives) : overlays /** * Helper to set the MOD-related info on the overlay, useful for MODsuit overlays. diff --git a/modular_zubbers/code/datums/materials/basemats.dm b/modular_zubbers/code/datums/materials/basemats.dm index 8ff9f118f7d..006d428f81e 100644 --- a/modular_zubbers/code/datums/materials/basemats.dm +++ b/modular_zubbers/code/datums/materials/basemats.dm @@ -1,7 +1,10 @@ /datum/material/silver/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() - source.AddElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) + source.AddComponent(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) -/datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot) +/* /datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() - source.RemoveElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) + source.RemoveComponentSource(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) + +//this component should be removed when silver is naturally removed, it should be possible for silver to be removed without this proc being called. + */ diff --git a/modular_zubbers/code/game/objects/items/holy_weapons.dm b/modular_zubbers/code/game/objects/items/holy_weapons.dm index 9e46de49bb0..6811635edef 100644 --- a/modular_zubbers/code/game/objects/items/holy_weapons.dm +++ b/modular_zubbers/code/game/objects/items/holy_weapons.dm @@ -88,7 +88,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune, /obj/effect/cosmic_rune), \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) + AddComponent(/datum/component/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) /obj/item/dualsaber/chaplain/proc/on_cult_rune_removed(obj/effect/target, mob/living/user) if(!istype(target, /obj/effect/rune)) diff --git a/modular_zubbers/code/game/objects/items/more_pkas.dm b/modular_zubbers/code/game/objects/items/more_pkas.dm index 1d57117c914..883e0b3d952 100644 --- a/modular_zubbers/code/game/objects/items/more_pkas.dm +++ b/modular_zubbers/code/game/objects/items/more_pkas.dm @@ -56,7 +56,7 @@ obj_flags = UNIQUE_RENAME weapon_weight = WEAPON_HEAVY max_mod_capacity = 60 - disabled_modkits = list(/obj/item/borg/upgrade/modkit/aoe) // Should cover all AOE variants + disabled_modkits = list(/obj/item/borg/upgrade/modkit/cooldown/aoe/) // Should cover all AOE variants /obj/item/gun/energy/recharge/kinetic_accelerator/glock name = "proto-kinetic pistol" @@ -90,7 +90,7 @@ obj_flags = UNIQUE_RENAME weapon_weight = WEAPON_LIGHT max_mod_capacity = 75 - disabled_modkits = list(/obj/item/borg/upgrade/modkit/aoe) // Should cover all AOE variants + disabled_modkits = list(/obj/item/borg/upgrade/modkit/cooldown/aoe/) // Should cover all AOE variants /obj/item/gun/energy/recharge/kinetic_accelerator/shockwave/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) target = get_edge_target_turf(user, user.dir) @@ -154,7 +154,7 @@ fire_sound = 'sound/items/weapons/gun/general/cannon.ogg' /obj/item/ammo_casing/energy/kinetic/m79 - projectile_type = /obj/projectile/bullet/mining_bomb //uses the mining bomb projectile from the mining modsuit + projectile_type = /obj/projectile/bullet/mining_missile //uses the mining bomb projectile from the mining modsuit select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' diff --git a/modular_zubbers/code/game/objects/structures/lewd_portals.dm b/modular_zubbers/code/game/objects/structures/lewd_portals.dm index cf90dea5442..f8343caf4a3 100644 --- a/modular_zubbers/code/game/objects/structures/lewd_portals.dm +++ b/modular_zubbers/code/game/objects/structures/lewd_portals.dm @@ -179,7 +179,7 @@ /obj/structure/lewd_portal/proc/head_only() SIGNAL_HANDLER current_mob.cut_overlays() - current_mob.update_body_parts_head_only() + current_mob.update_body_parts() var/obj/item/clothing/glasses = current_mob.glasses if(glasses) current_mob.update_worn_glasses() diff --git a/modular_zubbers/code/game/turfs/closed/lunar_cave.dm b/modular_zubbers/code/game/turfs/closed/lunar_cave.dm index f537aa25eff..9dfe12f278e 100644 --- a/modular_zubbers/code/game/turfs/closed/lunar_cave.dm +++ b/modular_zubbers/code/game/turfs/closed/lunar_cave.dm @@ -56,7 +56,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/lunar_cave/mineral_chances() return list( @@ -81,7 +81,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/labormineral/lunar_cave/mineral_chances() return list( @@ -98,7 +98,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/high_chance/lunar_cave/mineral_chances() return list( @@ -121,7 +121,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/low_chance/lunar_cave/mineral_chances() return list( diff --git a/modular_zubbers/code/game/turfs/closed/lunar_surface.dm b/modular_zubbers/code/game/turfs/closed/lunar_surface.dm index c98cd1ca730..87d9c2f46ad 100644 --- a/modular_zubbers/code/game/turfs/closed/lunar_surface.dm +++ b/modular_zubbers/code/game/turfs/closed/lunar_surface.dm @@ -56,7 +56,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/lunar/mineral_chances() return list( @@ -76,7 +76,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/labormineral/lunar/mineral_chances() return list( @@ -93,7 +93,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/high_chance/lunar/mineral_chances() return list( @@ -116,7 +116,7 @@ baseturfs = /turf/open/misc/moonstation_rock defer_change = TRUE initial_gas_mix = MOONSTATION_ATMOS - proximity_based = FALSE + exposure_based = FALSE /turf/closed/mineral/random/low_chance/lunar/mineral_chances() return list( diff --git a/modular_zubbers/code/modules/client/ssd.dm b/modular_zubbers/code/modules/client/ssd.dm index 286bb22adce..4bcd17b491c 100644 --- a/modular_zubbers/code/modules/client/ssd.dm +++ b/modular_zubbers/code/modules/client/ssd.dm @@ -24,7 +24,7 @@ var/datum/timedevent/logout_timer // Handles fresh ghosts. This includes cryo chambers -/mob/living/ghostize(can_reenter_corpse) +/mob/living/ghostize(can_reenter_corpse = TRUE, forced = FALSE) . = ..() var/mob/dead/observer/ghost = . if(!istype(ghost)) diff --git a/modular_zubbers/code/modules/client/verbs/character_directory.dm b/modular_zubbers/code/modules/client/verbs/character_directory.dm index 57b6da350ec..573b3587946 100644 --- a/modular_zubbers/code/modules/client/verbs/character_directory.dm +++ b/modular_zubbers/code/modules/client/verbs/character_directory.dm @@ -29,7 +29,21 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) savefile_identifier = PREFERENCE_CHARACTER /datum/preference/choiced/attraction/init_possible_values() - return list("Gay", "Lesbian", "Straight", "Skolio", "Bi", "Pan", "Poly", "Omni", "Ace", "Aro", "Aro/Ace", "Unset", "Check OOC") + return list( + "Unset", + "Check OOC", + "Straight", + "Lesbian", + "Gay", + "Bisexual", + "Pansexual", + "Polysexual", + "Asexual", + "Aromantic", + "Aro/Ace", + "Skoliosexual", + "Omnisexual", + ) /datum/preference/choiced/attraction/create_default_value() return "Unset" @@ -43,7 +57,20 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) savefile_identifier = PREFERENCE_CHARACTER /datum/preference/choiced/display_gender/init_possible_values() - return list("Male", "Female", "Null", "Plural", "Nonbinary", "Omni", "Trans", "Transmasc", "Transfem", "Andro", "Gyno", "Fluid", "Unset", "Check OOC") + return list( + "Unset", + "Check OOC", + "Male", + "Female", + "Nonbinary", + "Genderfluid", + "Trans", + "Andromorph", + "Gynomorph", + "Agender", + "Plural", + "Omnigender", + ) /datum/preference/choiced/display_gender/create_default_value() return "Unset" diff --git a/modular_zubbers/code/modules/clothing/accessory/accessory.dm b/modular_zubbers/code/modules/clothing/accessory/accessory.dm index caf7a98a74c..a30d5b62129 100644 --- a/modular_zubbers/code/modules/clothing/accessory/accessory.dm +++ b/modular_zubbers/code/modules/clothing/accessory/accessory.dm @@ -23,7 +23,7 @@ /obj/item/clothing/accessory/pocketwatch/examine(mob/user) . = ..() - . += span_info("The current CST (local) time is: [station_time_timestamp()].") + . += span_info("The current CST (local) time is: [round_timestamp()].") . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].") /obj/item/storage/backpack/kanken //Donor item for LT3 diff --git a/modular_zubbers/code/modules/customization/eyes_opacity/eyes_opacity.dm b/modular_zubbers/code/modules/customization/eyes_opacity/eyes_opacity.dm index 0cb60af228d..9f008359f1e 100644 --- a/modular_zubbers/code/modules/customization/eyes_opacity/eyes_opacity.dm +++ b/modular_zubbers/code/modules/customization/eyes_opacity/eyes_opacity.dm @@ -1,3 +1,5 @@ +var/eyes_opacity = 255 + /datum/preference/numeric/eyes_opacity category = PREFERENCE_CATEGORY_SECONDARY_FEATURES savefile_identifier = PREFERENCE_CHARACTER diff --git a/modular_zubbers/code/modules/customization/species/lycans/materials.dm b/modular_zubbers/code/modules/customization/species/lycans/materials.dm index ac207b5c8b4..496fa285491 100644 --- a/modular_zubbers/code/modules/customization/species/lycans/materials.dm +++ b/modular_zubbers/code/modules/customization/species/lycans/materials.dm @@ -2,9 +2,12 @@ . = ..() if (isitem(source)) - source.AddElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) + source.AddComponent(/datum/component/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) -/datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot) +/* /datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() - source.RemoveElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) + source.RemoveElementSource(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) + +//this component should be removed when silver is naturally removed, it should be possible for silver to be removed without this proc being called. + */ diff --git a/modular_zubbers/code/modules/jobs/job_types/chaplain.dm b/modular_zubbers/code/modules/jobs/job_types/chaplain.dm index 9844b018b9d..16024399d7e 100644 --- a/modular_zubbers/code/modules/jobs/job_types/chaplain.dm +++ b/modular_zubbers/code/modules/jobs/job_types/chaplain.dm @@ -23,5 +23,5 @@ /obj/item/nullrod/whip/Initialize(mapload) . = ..() // 1.3 * 18 = 23.4 per hit - AddElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.3) + AddComponent(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.3) diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/human_update_icons.dm b/modular_zubbers/code/modules/mob/living/carbon/human/human_update_icons.dm index fba20f5ae56..11896d171a7 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/update_underwear() +/mob/living/carbon/human/get_underwear_overlays() remove_overlay(BODY_LAYER) if(HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) return diff --git a/modular_zubbers/modules/ammo_workbench/code/ammo_workbench.dm b/modular_zubbers/modules/ammo_workbench/code/ammo_workbench.dm index 9678a23bb82..6f84d9bc1ba 100644 --- a/modular_zubbers/modules/ammo_workbench/code/ammo_workbench.dm +++ b/modular_zubbers/modules/ammo_workbench/code/ammo_workbench.dm @@ -98,7 +98,7 @@ return var/obj/item/ammo_casing/ammo_type = loaded_magazine.ammo_type var/ammo_caliber = initial(ammo_type.caliber) - var/obj/item/ammo_casing/ammo_parent_type = type2parent(ammo_type) + var/obj/item/ammo_casing/ammo_parent_type = ammo_type::parent_type if(loaded_magazine.multitype) if(ammo_caliber == initial(ammo_parent_type.caliber) && ammo_caliber != null)