diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 1e53ca8ef43..2c0e2d5a59f 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -135,22 +135,8 @@ //default attack_self behaviour /obj/item/clothing/accessory/attack_self(mob/user as mob) if(flippable) - if(!flipped) - if(!overlay_state) - icon_state = "[initial(icon_state)]_flip" - item_state = "[initial(item_state)]_flip" - flipped = 1 - else - overlay_state = "[overlay_state]_flip" - flipped = 1 - else - if(!overlay_state) - icon_state = initial(icon_state) - item_state = initial(item_state) - flipped = 0 - else - overlay_state = initial(overlay_state) - flipped = 0 + flipped = !flipped + update_icon() flip_message(user) update_clothing_icon() inv_overlay = null @@ -158,6 +144,24 @@ return ..() +/obj/item/clothing/accessory/update_icon() + . = ..() + flip_sprite() + +/obj/item/clothing/accessory/proc/flip_sprite() + if(flipped) + if(!overlay_state) + icon_state = "[initial(icon_state)]_flip" + item_state = "[initial(item_state)]_flip" + else + overlay_state = "[overlay_state]_flip" + else + if(!overlay_state) + icon_state = initial(icon_state) + item_state = initial(item_state) + else + overlay_state = initial(overlay_state) + /obj/item/clothing/accessory/proc/flip_message(mob/user) to_chat(user, "You change \the [src] to be on your [src.flipped ? "right" : "left"] side.") diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 6d48eebd17b..703b048814d 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -15,6 +15,10 @@ var/sound_out = 'sound/weapons/holster/holsterout.ogg' flippable = 1 w_class = WEIGHT_CLASS_NORMAL + var/holster_message = "holster" + var/draw_peace = "pointing it at the ground." + var/draw_hostile = "ready to shoot!" + var/filled_sprite = FALSE /obj/item/clothing/accessory/holster/Initialize() . = ..() @@ -45,9 +49,10 @@ user.drop_from_inventory(holstered, src) holstered.add_fingerprint(user) w_class = max(w_class, holstered.w_class) - user.visible_message(SPAN_NOTICE("[user] holsters \the [holstered]."), - SPAN_NOTICE("You holster \the [holstered].")) + user.visible_message(SPAN_NOTICE("[user] [holster_message] \the [holstered]."), + SPAN_NOTICE("You [holster_message] \the [holstered].")) update_name() + update_icon() /obj/item/clothing/accessory/holster/proc/clear_holster() holstered = null @@ -66,13 +71,13 @@ if(user.a_intent == I_HURT) sound_vol = 50 user.visible_message( - SPAN_DANGER("[user] draws \the [holstered], ready to shoot!"), - SPAN_WARNING("You draw \the [holstered], ready to shoot!") + SPAN_DANGER("[user] draws \the [holstered], [draw_hostile]"), + SPAN_WARNING("You draw \the [holstered], [draw_hostile]") ) else user.visible_message( - SPAN_NOTICE("[user] draws \the [holstered], pointing it at the ground."), - SPAN_NOTICE("You draw \the [holstered], pointing it at the ground.") + SPAN_NOTICE("[user] draws \the [holstered], [draw_peace]"), + SPAN_NOTICE("You draw \the [holstered], [draw_peace]") ) if(sound_out) @@ -82,6 +87,16 @@ holstered.add_fingerprint(user) w_class = initial(w_class) clear_holster() + update_icon() + +/obj/item/clothing/accessory/holster/flip_sprite() + . = ..() + if(filled_sprite && holstered) + icon_state = "[icon_state]_filled" + item_state = "[item_state]_filled" + else + icon_state = "[icon_state]" + item_state = "[item_state]" /obj/item/clothing/accessory/holster/attack_hand(mob/user) if (!ishuman(user)) @@ -260,6 +275,9 @@ icon_state = "holster_machete" item_state = "holster_machete" icon = 'icons/obj/item/clothing/accessory/holster.dmi' + holster_message = "sheath" + draw_peace = "holding it low." + draw_hostile = "ready to fight!" allowed_items = list( /obj/item/material/hatchet/machete, /obj/item/material/hatchet/machete/deluxe, diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 9e7d2e2a830..677f9192ff1 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -2188,3 +2188,168 @@ All custom items with worn sprites must follow the contained sprite system: http icon_state = "shepherd_coat" item_state = "shepherd_coat" contained_sprite = TRUE + +/obj/item/material/knife/raskariim/fluff/tulkir_knife // amohdan ritual dagger - Tulkir Zarkiirran - TheGreyWolf + name = "amohdan ritual dagger" + desc = "An old amohdan heirloom dagger. The handle appears to have been repaired with parts from a mrrazhak pistol grip and the edge of the dagger has been dulled to comply with regulations, though the broken tip remains sharp, if useless for fighting." + desc_extended = "As hunters, priests of Mata'ke often carry daggers with them to skin their kills. These daggers are typically made of silver to emulate Mata'ke's spear and his strength. Older and more valuable daggers have been known to be shipped off-planet during the wars by opportunistic smugglers, with Zephyr Shipping Company having been accused of selling them since its establishment, despite the company vehemently opposing such accusations." + icon = 'icons/obj/custom_items/tulkir_knife.dmi' + icon_override = 'icons/obj/custom_items/tulkir_knife.dmi' + icon_state = "tulkir_knife" + item_state = "tulkir_knife" + slot_flags = SLOT_BELT|SLOT_HOLSTER + thrown_force_divisor = 0.02 + force_divisor = 0.02 // 1.2 when wielded with hardness 60 (steel) + contained_sprite = TRUE + applies_material_colour = FALSE + use_material_name = FALSE + unbreakable = TRUE + +/obj/item/material/knife/raskariim/fluff/tulkir_knife/attack(mob/living/target_mob, mob/living/user, target_zone) + . = ..() + if(target_mob != user || !(target_zone == BP_L_HAND || target_zone == BP_R_HAND)) + return + + ritualslice(user, target_mob, target_zone) + +/obj/item/material/knife/raskariim/fluff/tulkir_knife/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended) + . = ..() + if(!ishuman(user)) + return + + var/mob/living/carbon/human/U = user + if(!(U.religion == RELIGION_RASKARA || U.religion == RELIGION_RASKARA_ALT)) + return + + var/raskara_text = SPAN_CULT("\The [src] is drawn from the depths of the Maggot's hoard.") + if(blood_overlay) + raskara_text += SPAN_DANGER(" The debts are being drawn.") + . += raskara_text + +/obj/item/material/knife/raskariim/fluff/tulkir_knife/proc/ritualslice(mob/living/user, mob/living/carbon/human/target, target_zone) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(affected.is_stump()) + to_chat(user, SPAN_WARNING("You can't cut open the palm of a hand that is gone.")) + return + if(target.gloves) + to_chat(user, SPAN_WARNING("You can't cut through the gloves.")) + return + + if(istype(target) && (target.species.flags & NO_BLOOD)) + to_chat(user, SPAN_WARNING("You are unable to sacrifice blood.")) + return + + user.visible_message(SPAN_WARNING("[user] begins slicing open their palm with \the [src]!")) + if(!do_after(user, 4 SECOND, src)) + user.visible_message(SPAN_WARNING("[user] stops slicing open their palm.")) + return + user.visible_message(SPAN_WARNING("[user] slices open their palm with \the [src]!")) + + affected.status |= ORGAN_BLEEDING + + target.apply_damage(6, DAMAGE_BRUTE, target_zone, src, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE) + add_blood(target) + playsound(target.loc, 'sound/weapons/bloodyslice.ogg', 15, 1) + +/obj/item/material/knife/raskariim/fluff/tulkir_knife/attack_self(mob/user, modifiers) + . = ..() + if(!ishuman(user)) + return + + var/mob/living/carbon/human/U = user + if(!(U.religion == RELIGION_RASKARA || U.religion == RELIGION_RASKARA_ALT)) + return + + if(blood_overlay) + var/alist/l = alist("invite" = "2", "claim" = "3", "bind" = "4", "transform" = "5", "witness" = "6") + var/runetype = tgui_input_list(user, "What kind of ritual is to be done?", "Ritual", l) + if(runetype) + runetype = l[runetype] + create_raskariim_rune(user, runetype, get_turf(user)) + else + to_chat(user, SPAN_INFO("The knife is not blooded enough to draw with.")) + +/obj/effect/decal/cleanable/fluff/rune + name = "rune" + desc = "A strange collection of symbols drawn in blood." + icon = 'icons/obj/rune.dmi' + icon_state = "1" + color = COLOR_HUMAN_BLOOD + anchored = TRUE + unacidable = TRUE + layer = RUNE_LAYER + mouse_opacity = MOUSE_OPACITY_OPAQUE + +/obj/effect/decal/cleanable/fluff/rune/feedback_hints(mob/user, distance, is_adjacent) + . = ..() + if(iscultist(user) || isobserver(user)) + . += "This rune belongs to The Stranger." + else + . += SPAN_WARNING("A heavy smell of blood permeates the area around the arcane drawings.") + if(!ishuman(user)) + return + + var/mob/living/carbon/human/U = user + if(!(U.religion == RELIGION_RASKARA || U.religion == RELIGION_RASKARA_ALT))\ + return + + . += SPAN_CULT("\The [src] pays a debt to the King of Maggots.") + +/obj/item/material/knife/raskariim/fluff/tulkir_knife/proc/create_raskariim_rune(var/mob/living/carbon/human/user, var/chosen_rune, var/turf/target_turf) + if(user.stat || user.incapacitated()) + to_chat(user, SPAN_WARNING("You are in no shape to do this.")) + return + + if(locate(/obj/effect/decal/cleanable/fluff/rune) in get_turf(user)) + to_chat(user, SPAN_WARNING("There is already a rune in this location.")) + return + + if(!target_turf) + target_turf = get_turf(user) + + user.visible_message(SPAN_WARNING("[user] begins drawing on the floor with the blood from \the [src]!")) + if(!do_after(user, 4 SECOND, src)) + user.visible_message(SPAN_WARNING("[user] stops drawing on the floor.")) + return + + // Crates a cleanable rune that looks like a cult rune to people who are neither cultists or raskariim + var/obj/effect/decal/cleanable/fluff/rune/R = new(target_turf) + user.visible_message(SPAN_CULT("[user] finishes drawing \the [R] on the floor!"), + SPAN_CULT("You finish drawing the markings of the King of Maggots.")) + + R.blood_DNA = list() + R.blood_DNA = src.blood_DNA + R.color = src.blood_color + R.filters = filter(type="drop_shadow", x = 1, y = 1, size = 4, color = src.blood_color) + + R.icon_state = chosen_rune + +/obj/item/clothing/accessory/holster/utility/fluff/tulkir_sheath // amohdan dagger sheath - Tulkir Zarkiirran - TheGreyWolf + name = "amohdan dagger sheath" + desc = "A leather sheath for an amohdan dagger." + desc_extended = "As hunters, priests of Mata'ke often carry daggers with them to skin their kills. These daggers are typically made of silver to emulate Mata'ke's spear and his strength. Older and more valuable daggers have been known to be shipped off-planet during the wars by opportunistic smugglers, with Zephyr Shipping Company having been accused of selling them since its establishment, despite the company vehemently opposing such accusations." + icon = 'icons/obj/custom_items/tulkir_sheath.dmi' + icon_override = 'icons/obj/custom_items/tulkir_sheath.dmi' + icon_state = "tulkir_holster_alt" + item_state = "tulkir_holster_alt" + holster_message = "sheath" + draw_peace = "holding it low." + draw_hostile = "ready to draw blood!" + filled_sprite = TRUE + allowed_items = list( + /obj/item/material/knife/raskariim, + /obj/item/material/knife/raskariim/fluff/tulkir_knife + ) + +/obj/item/clothing/accessory/holster/utility/fluff/tulkir_sheath/get_examine_text(mob/user, distance, is_adjacent, infix, suffix) + . = ..() + if(!ishuman(user)) + return + + var/mob/living/carbon/human/U = user + if(!(U.religion == RELIGION_RASKARA || U.religion == RELIGION_RASKARA_ALT) || !holstered) + return + + var/raskara_text = SPAN_CULT("\The [src] holds a treasure from the depths of the Maggot's hoard.") + . += raskara_text diff --git a/html/changelogs/SheathLog.yml b/html/changelogs/SheathLog.yml new file mode 100644 index 00000000000..e98d54ac0be --- /dev/null +++ b/html/changelogs/SheathLog.yml @@ -0,0 +1,7 @@ +author: TheGreyWolf + +delete-after: True + +changes: + - rscadd: "It is now possible for holsters to have a filled sprite. This is currently not implemented anywhere." + - rscadd: "Holsters can now have their draw descriptions modified. Currently only the machete holster does it differently from ordinary holsters." diff --git a/icons/obj/custom_items/tulkir_knife.dmi b/icons/obj/custom_items/tulkir_knife.dmi new file mode 100644 index 00000000000..e310e266c07 Binary files /dev/null and b/icons/obj/custom_items/tulkir_knife.dmi differ diff --git a/icons/obj/custom_items/tulkir_sheath.dmi b/icons/obj/custom_items/tulkir_sheath.dmi new file mode 100644 index 00000000000..5a97cdde56f Binary files /dev/null and b/icons/obj/custom_items/tulkir_sheath.dmi differ