diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~skyrat_helpers/is_helpers.dm index 6c46b9295b1..75aa3ca1001 100644 --- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm +++ b/code/__HELPERS/~skyrat_helpers/is_helpers.dm @@ -17,6 +17,7 @@ #define ishemophage(A) (is_species(A, /datum/species/hemophage)) #define issnail(A) (is_species(A, /datum/species/snail)) #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) +#define isprimitivedemihuman(A) (is_species(A, /datum/species/human/felinid/primitive)) //Antags #define ishorrorling(A) (istype(A, /mob/living/simple_animal/hostile/true_changeling)) #define iscorticalborer(A) (istype(A, /mob/living/basic/cortical_borer)) diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm index 4183396c931..5fc751d41d4 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm +++ b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm @@ -66,6 +66,25 @@ /obj/item/cursed_dagger, ) +/datum/ash_ritual/summon_cursed_carver + name = "Summon Cursed Ash Carver" + desc = "Summons a weapon that mimics the invader's tools, allowing us to collect trophies from the hunt." + required_components = list( + "north" = /obj/item/organ/internal/monster_core/regenerative_core, + "south" = /obj/item/cursed_dagger, + "east" = /obj/item/stack/sheet/bone, + "west" = /obj/item/stack/sheet/sinew, + ) + consumed_components = list( + /obj/item/organ/internal/monster_core/regenerative_core, + /obj/item/cursed_dagger, + /obj/item/stack/sheet/bone, + /obj/item/stack/sheet/sinew, + ) + ritual_success_items = list( + /obj/item/kinetic_crusher/cursed, + ) + /datum/ash_ritual/summon_tendril_seed name = "Summon Tendril Seed" desc = "Summons a seed that, when used in the hand, will cause a tendril to come through at your location." @@ -166,7 +185,6 @@ consumed_components = list( /obj/item/organ/internal/monster_core/regenerative_core, /mob/living/basic/mining/ice_whelp, - /obj/item/stack/ore/bluespace_crystal, ) /datum/ash_ritual/summon_lavaland_creature/ritual_success(obj/effect/ash_rune/success_rune) @@ -192,7 +210,6 @@ consumed_components = list( /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/food/grown/surik, - /obj/item/stack/ore/bluespace_crystal, ) /datum/ash_ritual/summon_icemoon_creature/ritual_success(obj/effect/ash_rune/success_rune) @@ -216,7 +233,6 @@ "west" = /obj/item/xenoarch/useless_relic, ) consumed_components = list( - /obj/item/stack/ore/bluespace_crystal, /obj/item/stack/sheet/animalhide/goliath_hide, /obj/item/xenoarch/useless_relic, ) diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm index 26051195cae..77a24c313db 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm @@ -3,6 +3,7 @@ desc = "A small cup that allows a person to slowly spin out liquids they do not desire." icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi' icon_state = "primitive_centrifuge" + volume = 100 material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR /obj/item/reagent_containers/cup/primitive_centrifuge/examine() diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm index ee5ebd017c5..74c1a5fae3d 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm @@ -88,3 +88,18 @@ /datum/crafting_recipe/ash_recipe/ash_hemostat name = "Ash Hemostat" result = /obj/item/hemostat/ashwalker + +/obj/item/bonesetter/ashwalker + name = "primitive bonesetter" + icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon_state = "bonesetter" + + 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_bonesetter + name = "Ash Bonesetter" + result = /obj/item/bonesetter/ashwalker diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm index 2435874ba0a..5dd1409c714 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm @@ -27,3 +27,8 @@ ) always_available = FALSE category = CAT_WEAPON_MELEE + +/obj/item/kinetic_crusher/cursed + name = "cursed ash carver" + desc = "A horrible, alive-looking weapon that pulses every so often. The tendril created this monstrosity to mimic and compete with those who invade the land." + icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' diff --git a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm b/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm index 8c051578689..670f8f72a3b 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm @@ -9,16 +9,16 @@ icon_state = "staffofanimation" inhand_icon_state = "staffofanimation" - ///If the world.time is above this, it wont work. Charging requires whacking the necropolis nest - var/staff_time = 0 - /obj/item/ash_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!proximity_flag) return ..() + if(!user.mind.has_antag_datum(/datum/antagonist/ashwalker)) return ..() + if(istype(target, /obj/structure/lavaland/ash_walker)) return + if(isopenturf(target)) var/turf/target_turf = target if(istype(target, /turf/open/misc/asteroid/basalt/lava_land_surface)) @@ -26,26 +26,18 @@ if(!do_after(user, 4 SECONDS, target = target_turf)) to_chat(user, span_warning("[src] had their casting cut short!")) return + target_turf.ChangeTurf(/turf/open/lava/smooth/lava_land_surface) to_chat(user, span_notice("[src] sparks, corrupting the area too far!")) return - if(world.time > staff_time) - to_chat(user, span_warning("[src] has had its permission expire from the necropolis!")) - return + if(!do_after(user, 2 SECONDS, target = target_turf)) to_chat(user, span_warning("[src] had their casting cut short!")) return + target_turf.ChangeTurf(/turf/open/misc/asteroid/basalt/lava_land_surface) return - return ..() -/obj/structure/lavaland/ash_walker/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/ash_staff) && user.mind.has_antag_datum(/datum/antagonist/ashwalker)) - var/obj/item/ash_staff/target_staff = I - target_staff.staff_time = world.time + 5 MINUTES - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) - to_chat(user, span_notice("The tendril permits you to have more time to corrupt the world with ashes.")) - return return ..() //generic ash item recipe diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi b/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi index aa1224aca1e..a39621f0d1d 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/primitive_cooking_additions/code/plant_bag.dm b/modular_skyrat/modules/primitive_cooking_additions/code/plant_bag.dm new file mode 100644 index 00000000000..d30273c4a5a --- /dev/null +++ b/modular_skyrat/modules/primitive_cooking_additions/code/plant_bag.dm @@ -0,0 +1,63 @@ +#define RESKIN_LINEN "Linen" + +/obj/item/storage/bag/plants + uses_advanced_reskins = TRUE + unique_reskin = list( + "Original" = list( + RESKIN_ICON = 'icons/obj/service/hydroponics/equipment.dmi', + RESKIN_ICON_STATE = "plantbag", + RESKIN_WORN_ICON = 'icons/mob/clothing/belt.dmi', + RESKIN_WORN_ICON_STATE = "plantbag", + ), + RESKIN_LINEN = list( + RESKIN_ICON = 'modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag.dmi', + RESKIN_ICON_STATE = "plantbag_primitive", + RESKIN_WORN_ICON = 'modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn.dmi', + RESKIN_WORN_ICON_STATE = "plantbag_primitive", + ), + ) + +// This is so the linen reskin shows properly in the suit storage. +/obj/item/storage/bag/plants/build_worn_icon(default_layer, default_icon_file, isinhands, female_uniform, override_state, override_file, use_height_offset, mutant_styles) + if(default_layer == SUIT_STORE_LAYER && current_skin == RESKIN_LINEN) + override_file = 'modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn_mirror.dmi' + + return ..() + +/// Simple helper to reskin this item into its primitive variant. +/obj/item/storage/bag/plants/proc/make_primitive() + current_skin = RESKIN_LINEN + + icon = unique_reskin[current_skin][RESKIN_ICON] + icon_state = unique_reskin[current_skin][RESKIN_ICON_STATE] + worn_icon = unique_reskin[current_skin][RESKIN_WORN_ICON] + worn_icon_state = unique_reskin[current_skin][RESKIN_WORN_ICON_STATE] + + update_appearance() + +/// A helper for the primitive variant, for mappers. +/obj/item/storage/bag/plants/primitive + current_skin = RESKIN_LINEN // Just so it displays properly when in suit storage + uses_advanced_reskins = FALSE + unique_reskin = null + icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag.dmi' + icon_state = "plantbag_primitive" + worn_icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn.dmi' + worn_icon_state = "plantbag_primitive" + +/obj/item/stack/sheet/cloth/on_item_crafted(mob/builder, atom/created) + if(!istype(created, /obj/item/storage/bag/plants)) + return + + if(!isprimitivedemihuman(builder) && !isashwalker(builder)) + return + + var/obj/item/storage/bag/plants/bag = created + + bag.make_primitive() + +/obj/item/storage/bag/plants/portaseeder + uses_advanced_reskins = FALSE + unique_reskin = null + +#undef RESKIN_LINEN diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag.dmi b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag.dmi new file mode 100644 index 00000000000..aa949961a41 Binary files /dev/null and b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag.dmi differ diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn.dmi b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn.dmi new file mode 100644 index 00000000000..5dc6e5fae29 Binary files /dev/null and b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn.dmi differ diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn_mirror.dmi b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn_mirror.dmi new file mode 100644 index 00000000000..5e3b03c8fe3 Binary files /dev/null and b/modular_skyrat/modules/primitive_cooking_additions/icons/plant_bag_worn_mirror.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 48819548895..18161ba6c6e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8030,6 +8030,7 @@ #include "modular_skyrat\modules\primitive_cooking_additions\code\cookware.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\cutting_board.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\millstone.dm" +#include "modular_skyrat\modules\primitive_cooking_additions\code\plant_bag.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\stone_griddle.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\stone_oven.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\stone_stove.dm"