Adds Tulkir's custom item and changes the machete draw/sheath message (#21725)

Implements Tulkir's custom item as per
https://forums.aurorastation.org/topic/22812-tulkir-zarkiirrans-amohdan-ritual-dagger/

As part of it, holsters were modified so that holstering and
unholstering messages can be defined per item, which is implemented for
machetes, and that there can be custom sprites for filled holsters,
currently only implemented for Tulkir's new item.

Sprites made by ElorgRHG.

---------

Signed-off-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
This commit is contained in:
Casper3667
2026-01-25 18:56:22 +00:00
committed by GitHub
co-authored by VMSolidus
parent 8664cbca68
commit 8c7464d0ba
6 changed files with 216 additions and 22 deletions
@@ -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.")
@@ -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,
+165
View File
@@ -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