diff --git a/_maps/map_files/rift/rift-03-underground1.dmm b/_maps/map_files/rift/rift-03-underground1.dmm index ac4297dc4bd..bfc1f845478 100644 --- a/_maps/map_files/rift/rift-03-underground1.dmm +++ b/_maps/map_files/rift/rift-03-underground1.dmm @@ -31,6 +31,12 @@ }, /turf/simulated/floor/plating, /area/storage/tech) +"ad" = ( +/obj/random/cigarettes, +/obj/structure/catwalk, +/mob/living/simple_mob/vore/aggressive/rat/maurice, +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "ae" = ( /turf/simulated/wall, /area/rift/station/stairs_two) @@ -43,6 +49,13 @@ "ag" = ( /turf/simulated/open, /area/rift/station/stairs_two) +"ah" = ( +/obj/machinery/vending/tool/adherent, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/crystal, +/area/rift/station/adherent_maintenance) "ai" = ( /turf/simulated/shuttle/wall/voidcraft, /area/turbolift/runder/level1) @@ -9726,12 +9739,6 @@ /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/maintenance/engineering) -"MG" = ( -/obj/random/cigarettes, -/mob/living/simple_mob/vore/aggressive/rat/maurice, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/lower/trash_pit) "MH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -23396,7 +23403,7 @@ Cl eg rT zz -Am +ah PH PH Yt @@ -24926,7 +24933,7 @@ aa aa aa Ol -MG +ad UE Zc BN diff --git a/code/__DEFINES/species/species_flags.dm b/code/__DEFINES/species/species_flags.dm index c9fd08f404c..3f1e8730a41 100644 --- a/code/__DEFINES/species/species_flags.dm +++ b/code/__DEFINES/species/species_flags.dm @@ -26,6 +26,8 @@ #define NO_DEFIB (1<<11) ///(Phoron) Contamination doesnt affect them. #define CONTAMINATION_IMMUNE (1<<12) +/// Cannot be ignited +#define NO_IGNITE (1<<13) DEFINE_BITFIELD(species_flags, list( BITFIELD(NO_MINOR_CUT), diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d2f49c67b30..7f511fa11d1 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -2458,3 +2458,26 @@ /obj/item/reagent_containers/hypospray/glukoz/pyrholidon = 50, /obj/item/reagent_containers/hypospray/glukoz/viraplus = 25, ) + +/obj/machinery/vending/tool/adherent + name = "\improper Adherent Tool Dispenser" + desc = "This looks like a heavily modified vending machine. It contains technology that doesn't appear to be human in origin." + product_ads = "\[C#\]\[Cb\]\[Db\]. \[Ab\]\[A#\]\[Bb\]. \[E\]\[C\]\[Gb\]\[B#\]. \[C#\].;\[Cb\]\[A\]\[F\]\[Cb\]\[C\]\[E\]\[Cb\]\[E\]\[Fb\]. \[G#\]\[C\]\[Ab\]\[A\]\[C#\]\[B\]. \[Eb\]\[choral\]. \[E#\]\[C#\]\[Ab\]\[E\]\[C#\]\[Fb\]\[Cb\]\[F#\]\[C#\]\[Gb\]." + icon_state = "adh-tool" + icon_deny = "adh-tool-deny" + icon_vend = "adh-tool-vend" + vend_delay = 5 + products = list(/obj/item/weldingtool/electric/crystal = 5, + /obj/item/tool/wirecutters/crystal = 5, + /obj/item/tool/screwdriver/crystal = 5, + /obj/item/tool/crowbar/crystal = 5, + /obj/item/tool/wrench/crystal = 5, + /obj/item/multitool/crystal = 5, + /obj/item/storage/belt/utility/crystal = 5, + /obj/item/storage/toolbox/crystal = 5) + +/obj/machinery/vending/tool/adherent/vend(datum/stored_item/vending_product/, mob/living/carbon/user) + if (emagged || istype(user) && user.species.name == SPECIES_ADHERENT) + return ..() + to_chat(user, SPAN_WARNING("\The [src] emits a discordant chime.")) + diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index c38d6c2476d..f1b6fb3d3fb 100755 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -119,3 +119,16 @@ /obj/item/multitool/green color_overlay = "multi_g" + +/obj/item/multitool/crystal + name = "crystalline multitool" + desc = "A crystalline energy patterning tool of an alien make." + icon_state = "crystal_multitool" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + +/obj/item/multitool/crystal/Initialize() + . = ..() + icon_state = initial(icon_state) + item_state = initial(item_state) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 68cf0d58d93..578faeda4f9 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -618,3 +618,19 @@ starts_with = list( /obj/item/ammo_casing/arrow/ash = 15 ) + +/obj/item/storage/belt/utility/crystal + name = "crystalline tool harness" + desc = "A segmented belt of strange crystalline material." + icon_state = "utilitybelt_crystal" + item_state = "utilitybelt_crystal" + +/obj/item/storage/belt/utility/crystal/Initialize() + new /obj/item/multitool/crystal(src) + new /obj/item/tool/wrench/crystal(src) + new /obj/item/tool/crowbar/crystal(src) + new /obj/item/tool/screwdriver/crystal(src) + new /obj/item/tool/wirecutters/crystal(src) + new /obj/item/weldingtool/electric/crystal(src) + update_icon() + . = ..() diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index a0c9a5f16a2..4b2ebbc33a6 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -207,3 +207,20 @@ /obj/item/storage/toolbox/lunchbox/survival/zaddat starts_with = list(/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose = 6) + +/obj/item/storage/toolbox/crystal + name = "crystalline toolbox" + desc = "A translucent toolbox made out of an odd crystalline material that is surprisingly light." + icon_state = "toolbox_crystal" + item_state = "toolbox_crystal" + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 3) + +/obj/item/storage/toolbox/crystal/Initialize() + new /obj/item/multitool/crystal(src) + new /obj/item/tool/wrench/crystal(src) + new /obj/item/tool/crowbar/crystal(src) + new /obj/item/tool/screwdriver/crystal(src) + new /obj/item/tool/wirecutters/crystal(src) + new /obj/item/weldingtool/electric/crystal(src) + update_icon() + . = ..() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 997ffe8f4a0..ee4a6790cec 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -154,3 +154,17 @@ . = ..() if(random_color) icon_state = "prybar[pick("","_green","_aubergine","_blue")]" + +/obj/item/tool/crowbar/crystal + name = "crystalline prytool" + desc = "A crystalline prying tool of an alien make." + icon_state = "crystal_crowbar" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + tool_speed = 0.2 + +/obj/item/tool/crowbar/crystal/Initialize() + . = ..() + icon_state = initial(icon_state) + item_state = initial(item_state) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index fbe17d5533f..99d3c4725f8 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -176,3 +176,18 @@ counterpart.forceMove(get_turf(src)) forceMove(counterpart) to_chat(user, "You attach the bolt driver bit to [src].") + + +/obj/item/tool/screwdriver/crystal + name = "crystalline screwdriver" + desc = "A crystalline screwdriving tool of an alien make." + icon_state = "crystal_screwdriver" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + tool_speed = 0.2 + +/obj/item/tool/screwdriver/crystal/Initialize() + . = ..() + icon_state = initial(icon_state) + item_state = initial(item_state) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index a42ff17351f..db0fef02bfb 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -700,3 +700,62 @@ setWelding(FALSE, M.occupant) #undef WELDER_FUEL_BURN_INTERVAL + +/obj/item/weldingtool/electric/crystal + name = "crystalline arc welder" + desc = "A crystalline welding tool of an alien make." + icon_state = "crystal_welder" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + cell_type = null + charge_cost = null + tool_speed = 0.2 + use_external_power = 1 + +/obj/item/weldingtool/electric/crystal/attackby(var/obj/item/W, var/mob/user) + return + +/obj/item/weldingtool/electric/crystal/update_icon() + icon_state = welding ? "crystal_welder_on" : "crystal_welder" + item_state = welding ? "crystal_tool_lit" : "crystal_tool" + var/mob/M = loc + if(istype(M)) + M.update_inv_l_hand() + M.update_inv_r_hand() + +/obj/item/weldingtool/electric/crystal/attack_self(var/mob/living/carbon/human/user) + if(user.species.name == SPECIES_ADHERENT) + if(user.nutrition >= 40) + setWelding(!welding, user) + else + to_chat(user, "You need more charge to activate your arc welder.") + else + to_chat(user, "This tool is beyond your understanding.") + +/obj/item/weldingtool/electric/crystal/get_fuel() + if(ishuman(src.loc)) + var/mob/living/carbon/human/R = src.loc + if(R.species.name == SPECIES_ADHERENT) + return R.nutrition + else + return + +/obj/item/weldingtool/electric/crystal/get_external_power_supply() + return get_fuel() + +/obj/item/weldingtool/electric/crystal/get_max_fuel() + return get_fuel() + +/obj/item/weldingtool/electric/crystal/remove_fuel(var/amount = 1, var/mob/M = null) + if(ishuman(src.loc)) + var/mob/living/carbon/human/R = src.loc + if(R.species.name == SPECIES_ADHERENT) + if(R.nutrition >= amount) + R.nutrition = R.nutrition - amount + return 1 + else + if(M) + to_chat(M, "You need more energy to complete this task.") + update_icon() + return 0 diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index a508c4d3c88..2e07741c339 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -150,3 +150,17 @@ counterpart.forceMove(get_turf(user)) forceMove(counterpart) to_chat(user, "You attach the pry jaws to [src].") + +/obj/item/tool/wirecutters/crystal + name = "crystalline shears" + desc = "A crystalline shearing tool of an alien make." + icon_state = "crystal_wirecutter" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + tool_speed = 0.2 + +/obj/item/tool/wirecutters/crystal/Initialize() + . = ..() + icon_state = initial(icon_state) + item_state = initial(item_state) diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 571829630ab..cf062eae6de 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -153,3 +153,17 @@ counterpart.forceMove(get_turf(user)) forceMove(counterpart) to_chat(user, "You attach the screw driver bit to [src].") + +/obj/item/tool/wrench/crystal + name = "crystalline wrench" + desc = "A crystalline wrenching tool of an alien make." + icon_state = "crystal_wrench" + item_state = "crystal_tool" + icon = 'icons/obj/crystal_tools.dmi' + matter = list(MATERIAL_CRYSTAL = 1250) + tool_speed = 0.2 + +/obj/item/tool/wrench/crystal/Initialize() + . = ..() + icon_state = initial(icon_state) + item_state = initial(item_state) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index cb6c52525ff..4fc196ad5aa 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -373,6 +373,11 @@ handle_light() update_fire() +/mob/living/carbon/human/IgniteMob() + if(!(species.species_flags & NO_IGNITE)) + return ..() + + /mob/living/proc/ExtinguishMob() if(on_fire) on_fire = 0 diff --git a/code/modules/organs/external/species/adherent.dm b/code/modules/organs/external/species/adherent.dm index 5992069da8d..3f128a3a814 100644 --- a/code/modules/organs/external/species/adherent.dm +++ b/code/modules/organs/external/species/adherent.dm @@ -38,6 +38,7 @@ eye_icon_location = 'icons/mob/species/adherent/eyes.dmi' eye_icon = "eyes" robotic = ORGAN_CRYSTAL +// can_intake_reagents = FALSE //! DO NOT UNCOMMENT THIS LINE UNTIL ADHERENTS CAN PASS IsSynthetic() // limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK /obj/item/organ/external/arm/crystal diff --git a/code/modules/species/station/adherent.dm b/code/modules/species/station/adherent.dm index aba14e2ee6a..385279c9e49 100644 --- a/code/modules/species/station/adherent.dm +++ b/code/modules/species/station/adherent.dm @@ -32,12 +32,23 @@ min_age = 10000 max_age = 12000 // antaghud_offset_y = 14 - warning_low_pressure = 50 - hazard_low_pressure = -1 mob_size = MOB_LARGE // strength = STR_HIGH has_glowing_eyes = TRUE + warning_low_pressure = 50 + hazard_low_pressure = -1 + hazard_high_pressure = INFINITY + radiation_mod = 0 + toxins_mod = 0 + breath_type = null + poison_type = null + brute_mod = 2 + burn_mod = 0.1 + total_health = 75 + + hunger_factor = 0.04 + speech_sounds = list('sound/voice/chime.ogg') speech_chance = 25 @@ -49,7 +60,7 @@ heat_level_2 = 1000 heat_level_3 = 2000 - species_flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_PAIN + species_flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_PAIN | NO_POISON | NO_IGNITE species_spawn_flags = SPECIES_SPAWN_WHITELISTED | SPECIES_SPAWN_NO_FBP_CONSTRUCT | SPECIES_SPAWN_NO_FBP_SETUP | SPECIES_SPAWN_CHARACTER species_appearance_flags = HAS_EYE_COLOR | HAS_BASE_SKIN_COLOR @@ -120,6 +131,9 @@ wikilink = "N/A" +/datum/species/adherent/equip_survival_gear(mob/living/carbon/human/H, extendedtank = FALSE, comprehensive = FALSE) + H.equip_to_slot_or_del(new /obj/item/storage/belt/utility/crystal, /datum/inventory_slot_meta/abstract/put_in_backpack) + /datum/species/adherent/New() /*equip_adjust = list( "[SLOT_ID_LEFT_HAND]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 399b85c1d93..4fa992e892c 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/crystal_tools.dmi b/icons/obj/crystal_tools.dmi new file mode 100644 index 00000000000..033176cd04d Binary files /dev/null and b/icons/obj/crystal_tools.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 37535225d20..b366c78e226 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index a4700654036..fa155e49173 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ