mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 04:26:03 +01:00
Cleans up + Improves bows, Sorts files, Adds the Divine Archer clothing, weapon, rite (#74811)
## About The Pull Request ### Divine Archer 🏹  Adds a new chaplain weapon and suit of armor, the divine archer. It's an orderable set of armor, but provides less armor than the rest, but you get more pieces of armor (boots, bracer, undersuit). The divine bow comes with a quiver that holds holy arrows. The holy arrows come with bane support, dealing critical damage to revenants. ### Bow Features ⭐ - arrows can now be dipped in poison ### Bow Improvements 🔧 - bows now drop their arrow when you put them on your back while nocking a bow - bows give feedback for trying to draw without a nocked arrow - codewise, bows support subtypes much better. They still have hard-sprited loaded arrows, but one day that'll change. ## Why It's Good For The Game Yeah, we could add null rod #2342 that does almost the same as the others, or we could have a unique bow weapon! Player Dev Project thread: https://discord.com/channels/326822144233439242/1093521091957370940/1093521091957370940 ## Changelog 🆑 tralezab code, Drag for the commission and player project, cre#0484 for their spritework add: Divine Archer Armor and Weapon qol: Bows give more feedback when you're doing something wrong, like trying to draw without a nocked arrow code: Sorted files, cleaned bow code up to allow subtypes /🆑
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
var/alternative_mode = FALSE
|
||||
///Whether the hood is flipped up
|
||||
var/hood_up = FALSE
|
||||
/// What should be added to the end of the icon state when the hood is up? Set to "" for the suit sprite to not change at all
|
||||
var/hood_up_affix = "_t"
|
||||
/// Are we zipped? Mostly relevant for wintercoats, leaving this here to simplify logic and so someone else can extend it if they ever wish to.
|
||||
var/zipped = FALSE
|
||||
|
||||
@@ -86,7 +88,7 @@
|
||||
RemoveHood()
|
||||
return
|
||||
hood_up = TRUE
|
||||
icon_state = "[initial(icon_state)]_t"
|
||||
icon_state = "[initial(icon_state)][hood_up_affix]"
|
||||
worn_icon_state = icon_state
|
||||
zipped = TRUE // Just to maintain the same behavior, and so we avoid any bugs that otherwise relied on this behavior of zipping the jacket when bringing up the hood
|
||||
H.update_worn_oversuit()
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
|
||||
// this costume has so many fugging parts 😭. fuck it, it's a file.
|
||||
//in fact, we should strive to make the chaplain kits of this quality, moreso than the other way around.
|
||||
|
||||
/// undersuit
|
||||
/obj/item/clothing/under/rank/civilian/chaplain/divine_archer
|
||||
name = "divine archer's garb"
|
||||
desc = "Inner garb for divine archers."
|
||||
icon_state = "archergarb"
|
||||
inhand_icon_state = "archergarb"
|
||||
can_adjust = TRUE
|
||||
|
||||
/// suit
|
||||
/obj/item/clothing/suit/hooded/chaplain_hoodie/divine_archer
|
||||
name = "divine archer coat"
|
||||
desc = "Outer coat for divine archers. Offers some protection."
|
||||
icon_state = "archercoat"
|
||||
inhand_icon_state = "archercoat"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
armor_type = /datum/armor/chaplainsuit_armor_weaker
|
||||
clothing_flags = BLOCKS_SHOVE_KNOCKDOWN
|
||||
strip_delay = 80
|
||||
equip_delay_other = 60
|
||||
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood/divine_archer
|
||||
hood_up_affix = ""
|
||||
|
||||
/datum/armor/chaplainsuit_armor_weaker
|
||||
melee = 40
|
||||
bullet = 5
|
||||
laser = 5
|
||||
energy = 5
|
||||
fire = 60
|
||||
acid = 60
|
||||
wound = 10
|
||||
|
||||
/// hood
|
||||
/obj/item/clothing/head/hooded/chaplain_hood/divine_archer
|
||||
name = "divine archer hood"
|
||||
desc = "A divine hood included, because have you ever got the sun in your eyes during archery? Oh, it's just the worst."
|
||||
icon_state = "archerhood"
|
||||
|
||||
/// gloves
|
||||
/obj/item/clothing/gloves/divine_archer
|
||||
name = "divine archer bracers"
|
||||
desc = "Bracers, a wise choice for archers who do not want their outfit to get in the way of drawing and firing their weapon."
|
||||
icon_state = "archerbracers"
|
||||
inhand_icon_state = "archerbracers"
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
resistance_flags = NONE
|
||||
|
||||
/// boots
|
||||
/obj/item/clothing/shoes/divine_archer
|
||||
name = "divine archer boots"
|
||||
desc = "Boots, For steady footing while aiming."
|
||||
icon_state = "archerboots"
|
||||
inhand_icon_state = "archerboots"
|
||||
strip_delay = 30
|
||||
equip_delay_other = 50
|
||||
resistance_flags = NONE
|
||||
can_be_tied = FALSE
|
||||
@@ -0,0 +1,627 @@
|
||||
// CHAPLAIN NULLROD AND CUSTOM WEAPONS //
|
||||
|
||||
/obj/item/nullrod
|
||||
name = "null rod"
|
||||
desc = "A rod of pure obsidian; its very presence disrupts and dampens 'magical forces'. That's what the guidebook says, anyway."
|
||||
icon = 'icons/obj/weapons/staff.dmi'
|
||||
icon_state = "nullrod"
|
||||
inhand_icon_state = "nullrod"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
force = 18
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
obj_flags = UNIQUE_RENAME
|
||||
wound_bonus = -10
|
||||
/// boolean on whether it's allowed to be picked from the nullrod's transformation ability
|
||||
var/chaplain_spawnable = TRUE
|
||||
/// Short description of what this item is capable of, for radial menu uses.
|
||||
var/menu_description = "A standard chaplain's weapon. Fits in pockets. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY)
|
||||
AddComponent(/datum/component/effect_remover, \
|
||||
success_feedback = "You disrupt the magic of %THEEFFECT with %THEWEAPON.", \
|
||||
success_forcesay = "BEGONE FOUL MAGIKS!!", \
|
||||
tip_text = "Clear rune", \
|
||||
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/simple_animal/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE)
|
||||
|
||||
if(!GLOB.holy_weapon_type && type == /obj/item/nullrod)
|
||||
var/list/rods = list()
|
||||
for(var/obj/item/nullrod/nullrod_type as anything in typesof(/obj/item/nullrod))
|
||||
if(!initial(nullrod_type.chaplain_spawnable))
|
||||
continue
|
||||
rods[nullrod_type] = initial(nullrod_type.menu_description)
|
||||
//special non-nullrod subtyped shit
|
||||
rods[/obj/item/gun/ballistic/bow/divine/with_quiver] = "A divine bow and 10 quivered holy arrows."
|
||||
AddComponent(/datum/component/subtype_picker, rods, CALLBACK(src, PROC_REF(on_holy_weapon_picked)))
|
||||
|
||||
/obj/item/nullrod/proc/on_holy_weapon_picked(obj/item/nullrod/holy_weapon_type)
|
||||
GLOB.holy_weapon_type = holy_weapon_type
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NULLROD_PICKED)
|
||||
SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[initial(holy_weapon_type.name)]")
|
||||
|
||||
/obj/item/nullrod/proc/on_cult_rune_removed(obj/effect/target, mob/living/user)
|
||||
if(!istype(target, /obj/effect/rune))
|
||||
return
|
||||
|
||||
var/obj/effect/rune/target_rune = target
|
||||
if(target_rune.log_when_erased)
|
||||
user.log_message("erased [target_rune.cultist_name] rune using a null rod", LOG_GAME)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] erased a [target_rune.cultist_name] rune with a null rod.")
|
||||
SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_NARNAR] = TRUE
|
||||
|
||||
/obj/item/nullrod/suicide_act(mob/living/user)
|
||||
user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/nullrod/godhand
|
||||
name = "god hand"
|
||||
desc = "This hand of yours glows with an awesome power!"
|
||||
icon = 'icons/obj/weapons/hand.dmi'
|
||||
icon_state = "disintegrate"
|
||||
inhand_icon_state = "disintegrate"
|
||||
lefthand_file = 'icons/mob/inhands/items/touchspell_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi'
|
||||
slot_flags = null
|
||||
item_flags = ABSTRACT | DROPDEL
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
damtype = BURN
|
||||
attack_verb_continuous = list("punches", "cross counters", "pummels")
|
||||
attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel")
|
||||
menu_description = "An undroppable god hand dealing burn damage. Disappears if the arm holding it is cut off."
|
||||
|
||||
/obj/item/nullrod/godhand/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
|
||||
|
||||
/obj/item/nullrod/staff
|
||||
name = "red holy staff"
|
||||
desc = "It has a mysterious, protective aura."
|
||||
icon = 'icons/obj/weapons/staff.dmi'
|
||||
icon_state = "godstaff-red"
|
||||
inhand_icon_state = "godstaff-red"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 5
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
block_chance = 50
|
||||
menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back."
|
||||
/// The icon which appears over the mob holding the item
|
||||
var/shield_icon = "shield-red"
|
||||
|
||||
/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands)
|
||||
. = ..()
|
||||
if(isinhands)
|
||||
. += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER)
|
||||
|
||||
/obj/item/nullrod/staff/blue
|
||||
name = "blue holy staff"
|
||||
icon_state = "godstaff-blue"
|
||||
inhand_icon_state = "godstaff-blue"
|
||||
shield_icon = "shield-old"
|
||||
menu_description = "A blue staff which provides a medium chance of blocking incoming attacks via a protective blue aura around its user, but deals very low amount of damage. Can be worn only on the back."
|
||||
|
||||
/obj/item/nullrod/claymore
|
||||
name = "holy claymore"
|
||||
desc = "A weapon fit for a crusade!"
|
||||
icon = 'icons/obj/weapons/sword.dmi'
|
||||
icon_state = "claymore_gold"
|
||||
inhand_icon_state = "claymore_gold"
|
||||
worn_icon_state = "claymore_gold"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
|
||||
block_chance = 30
|
||||
sharpness = SHARP_EDGED
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
||||
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
||||
menu_description = "A sharp claymore which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt."
|
||||
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
return ..()
|
||||
|
||||
/obj/item/nullrod/claymore/darkblade
|
||||
name = "dark blade"
|
||||
desc = "Spread the glory of the dark gods!"
|
||||
icon = 'icons/obj/cult/items_and_weapons.dmi'
|
||||
icon_state = "cultblade"
|
||||
inhand_icon_state = "cultblade"
|
||||
worn_icon_state = "cultblade"
|
||||
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
|
||||
inhand_x_dimension = 64
|
||||
inhand_y_dimension = 64
|
||||
hitsound = 'sound/hallucinations/growl1.ogg'
|
||||
menu_description = "A sharp blade which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt."
|
||||
|
||||
/obj/item/nullrod/claymore/chainsaw_sword
|
||||
name = "sacred chainsaw sword"
|
||||
desc = "Suffer not a heretic to live."
|
||||
icon_state = "chainswordon"
|
||||
inhand_icon_state = "chainswordon"
|
||||
worn_icon_state = "chainswordon"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices")
|
||||
attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
tool_behaviour = TOOL_SAW
|
||||
toolspeed = 1.5 //slower than a real saw
|
||||
menu_description = "A sharp chainsaw sword which provides a low chance of blocking incoming melee attacks. Can be used as a slower saw tool. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/claymore/glowing
|
||||
name = "force weapon"
|
||||
desc = "The blade glows with the power of faith. Or possibly a battery."
|
||||
icon_state = "swordon"
|
||||
inhand_icon_state = "swordon"
|
||||
worn_icon_state = "swordon"
|
||||
menu_description = "A sharp weapon which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt."
|
||||
|
||||
/obj/item/nullrod/claymore/katana
|
||||
name = "\improper Hanzo steel"
|
||||
desc = "Capable of cutting clean through a holy claymore."
|
||||
icon_state = "katana"
|
||||
inhand_icon_state = "katana"
|
||||
worn_icon_state = "katana"
|
||||
menu_description = "A sharp katana which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt."
|
||||
|
||||
/obj/item/nullrod/claymore/multiverse
|
||||
name = "extradimensional blade"
|
||||
desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly."
|
||||
icon_state = "multiverse"
|
||||
inhand_icon_state = "multiverse"
|
||||
worn_icon_state = "multiverse"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
force = 15
|
||||
menu_description = "An odd sharp blade which provides a low chance of blocking incoming melee attacks and deals a random amount of damage, which can range from almost nothing to very high. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/claymore/multiverse/melee_attack_chain(mob/user, atom/target, params)
|
||||
var/old_force = force
|
||||
force += rand(-14, 15)
|
||||
. = ..()
|
||||
force = old_force
|
||||
|
||||
/obj/item/nullrod/claymore/saber
|
||||
name = "light energy sword"
|
||||
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
|
||||
icon = 'icons/obj/weapons/transforming_energy.dmi'
|
||||
icon_state = "e_sword_on_blue"
|
||||
inhand_icon_state = "e_sword_on_blue"
|
||||
worn_icon_state = "swordblue"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
menu_description = "A sharp energy sword which provides a low chance of blocking incoming melee attacks. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/claymore/saber/red
|
||||
name = "dark energy sword"
|
||||
desc = "Woefully ineffective when used on steep terrain."
|
||||
icon_state = "e_sword_on_red"
|
||||
inhand_icon_state = "e_sword_on_red"
|
||||
worn_icon_state = "swordred"
|
||||
|
||||
/obj/item/nullrod/claymore/saber/pirate
|
||||
name = "nautical energy sword"
|
||||
desc = "Convincing HR that your religion involved piracy was no mean feat."
|
||||
icon_state = "e_cutlass_on"
|
||||
inhand_icon_state = "e_cutlass_on"
|
||||
worn_icon_state = "swordred"
|
||||
|
||||
/obj/item/nullrod/sord
|
||||
name = "\improper UNREAL SORD"
|
||||
desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
|
||||
icon = 'icons/obj/weapons/sword.dmi'
|
||||
icon_state = "sord"
|
||||
inhand_icon_state = "sord"
|
||||
worn_icon_state = "sord"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
force = 4.13
|
||||
throwforce = 1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
||||
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
||||
menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/sord/suicide_act(mob/living/user) //a near-exact copy+paste of the actual sord suicide_act()
|
||||
user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so HOLY."), \
|
||||
span_suicide("You try to impale yourself with [src], but it's TOO HOLY..."))
|
||||
return SHAME
|
||||
|
||||
/obj/item/nullrod/scythe
|
||||
name = "reaper scythe"
|
||||
desc = "Ask not for whom the bell tolls..."
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "scythe1"
|
||||
inhand_icon_state = "scythe1"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
armour_penetration = 35
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
sharpness = SHARP_EDGED
|
||||
attack_verb_continuous = list("chops", "slices", "cuts", "reaps")
|
||||
attack_verb_simple = list("chop", "slice", "cut", "reap")
|
||||
menu_description = "A sharp scythe which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/scythe/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, \
|
||||
speed = 7 SECONDS, \
|
||||
effectiveness = 110, \
|
||||
)
|
||||
AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE)
|
||||
|
||||
/obj/item/nullrod/scythe/vibro
|
||||
name = "high frequency blade"
|
||||
desc = "Bad references are the DNA of the soul."
|
||||
icon = 'icons/obj/weapons/sword.dmi'
|
||||
icon_state = "hfrequency0"
|
||||
inhand_icon_state = "hfrequency1"
|
||||
worn_icon_state = "hfrequency0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
attack_verb_continuous = list("chops", "slices", "cuts", "zandatsu's")
|
||||
attack_verb_simple = list("chop", "slice", "cut", "zandatsu")
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/scythe/spellblade
|
||||
name = "dormant spellblade"
|
||||
desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is."
|
||||
icon = 'icons/obj/weapons/guns/magic.dmi'
|
||||
icon_state = "spellblade"
|
||||
inhand_icon_state = "spellblade"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
worn_icon_state = "spellblade"
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/scythe/talking
|
||||
name = "possessed blade"
|
||||
desc = "When the station falls into chaos, it's nice to have a friend by your side."
|
||||
icon = 'icons/obj/weapons/sword.dmi'
|
||||
icon_state = "talking_sword"
|
||||
inhand_icon_state = "talking_sword"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
worn_icon_state = "talking_sword"
|
||||
attack_verb_continuous = list("chops", "slices", "cuts")
|
||||
attack_verb_simple= list("chop", "slice", "cut")
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
menu_description = "A sharp blade which partially penetrates armor. Able to awaken a friendly spirit to provide guidance. Very effective at butchering bodies. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/scythe/talking/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/spirit_holding)
|
||||
|
||||
/obj/item/nullrod/scythe/talking/chainsword
|
||||
name = "possessed chainsaw sword"
|
||||
desc = "Suffer not a heretic to live."
|
||||
icon_state = "chainswordon"
|
||||
inhand_icon_state = "chainswordon"
|
||||
worn_icon_state = "chainswordon"
|
||||
force = 30
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices")
|
||||
attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
tool_behaviour = TOOL_SAW
|
||||
toolspeed = 0.5 //same speed as an active chainsaw
|
||||
chaplain_spawnable = FALSE //prevents being pickable as a chaplain weapon (it has 30 force)
|
||||
|
||||
/obj/item/nullrod/hammer
|
||||
name = "relic war hammer"
|
||||
desc = "This war hammer cost the chaplain forty thousand space dollars."
|
||||
icon = 'icons/obj/weapons/hammer.dmi'
|
||||
icon_state = "hammeron"
|
||||
inhand_icon_state = "hammeron"
|
||||
worn_icon_state = "hammeron"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb_continuous = list("smashes", "bashes", "hammers", "crunches")
|
||||
attack_verb_simple = list("smash", "bash", "hammer", "crunch")
|
||||
menu_description = "A war hammer. Capable of tapping knees to measure brain health. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/hammer/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/kneejerk)
|
||||
|
||||
/obj/item/nullrod/chainsaw
|
||||
name = "chainsaw hand"
|
||||
desc = "Good? Bad? You're the guy with the chainsaw hand."
|
||||
icon = 'icons/obj/weapons/chainsaw.dmi'
|
||||
icon_state = "chainsaw_on"
|
||||
inhand_icon_state = "mounted_chainsaw"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
slot_flags = null
|
||||
item_flags = ABSTRACT
|
||||
sharpness = SHARP_EDGED
|
||||
attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices")
|
||||
attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
tool_behaviour = TOOL_SAW
|
||||
toolspeed = 2 //slower than a real saw
|
||||
menu_description = "An undroppable sharp chainsaw hand. Can be used as a very slow saw tool. Capable of slowly butchering bodies. Disappears if the arm holding it is cut off."
|
||||
|
||||
/obj/item/nullrod/chainsaw/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
|
||||
AddComponent(/datum/component/butchering, \
|
||||
speed = 3 SECONDS, \
|
||||
effectiveness = 100, \
|
||||
bonus_modifier = 0, \
|
||||
butcher_sound = hitsound, \
|
||||
)
|
||||
|
||||
/obj/item/nullrod/clown
|
||||
name = "clown dagger"
|
||||
desc = "Used for absolutely hilarious sacrifices."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "clownrender"
|
||||
inhand_icon_state = "cultdagger"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
worn_icon_state = "render"
|
||||
hitsound = 'sound/items/bikehorn.ogg'
|
||||
sharpness = SHARP_EDGED
|
||||
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
||||
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
||||
menu_description = "A sharp dagger. Fits in pockets. Can be worn on the belt. Honk."
|
||||
|
||||
#define CHEMICAL_TRANSFER_CHANCE 30
|
||||
|
||||
/obj/item/nullrod/pride_hammer
|
||||
name = "Pride-struck Hammer"
|
||||
desc = "It resonates an aura of Pride."
|
||||
icon = 'icons/obj/weapons/hammer.dmi'
|
||||
icon_state = "pride"
|
||||
inhand_icon_state = "pride"
|
||||
worn_icon_state = "pride"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
|
||||
force = 16
|
||||
throwforce = 15
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
attack_verb_continuous = list("attacks", "smashes", "crushes", "splatters", "cracks")
|
||||
attack_verb_simple = list("attack", "smash", "crush", "splatter", "crack")
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
menu_description = "A hammer dealing a little less damage due to its user's pride. Has a low chance of transferring some of the user's reagents to the target. Capable of tapping knees to measure brain health. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/pride_hammer/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/kneejerk)
|
||||
AddElement(
|
||||
/datum/element/chemical_transfer,\
|
||||
span_notice("Your pride reflects on %VICTIM."),\
|
||||
span_userdanger("You feel insecure, taking on %ATTACKER's burden."),\
|
||||
CHEMICAL_TRANSFER_CHANCE\
|
||||
)
|
||||
|
||||
#undef CHEMICAL_TRANSFER_CHANCE
|
||||
|
||||
/obj/item/nullrod/whip
|
||||
name = "holy whip"
|
||||
desc = "What a terrible night to be on Space Station 13."
|
||||
icon = 'icons/obj/weapons/whip.dmi'
|
||||
icon_state = "chain"
|
||||
inhand_icon_state = "chain"
|
||||
worn_icon_state = "whip"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
attack_verb_continuous = list("whips", "lashes")
|
||||
attack_verb_simple = list("whip", "lash")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
menu_description = "A whip. Deals extra damage to vampires. Fits in pockets. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/fedora
|
||||
name = "atheist's fedora"
|
||||
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
|
||||
icon_state = "fedora"
|
||||
inhand_icon_state = "fedora"
|
||||
slot_flags = ITEM_SLOT_HEAD
|
||||
icon = 'icons/obj/clothing/head/hats.dmi'
|
||||
worn_icon = 'icons/mob/clothing/head/hats.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/clothing/hats_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/clothing/hats_righthand.dmi'
|
||||
force = 0
|
||||
throw_speed = 4
|
||||
throw_range = 7
|
||||
throwforce = 30
|
||||
sharpness = SHARP_EDGED
|
||||
attack_verb_continuous = list("enlightens", "redpills")
|
||||
attack_verb_simple = list("enlighten", "redpill")
|
||||
menu_description = "A sharp fedora dealing a very high amount of throw damage, but none of melee. Fits in pockets. Can be worn on the head, obviously."
|
||||
|
||||
/obj/item/nullrod/fedora/suicide_act(mob/living/user)
|
||||
user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get further from god!"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/nullrod/armblade
|
||||
name = "dark blessing"
|
||||
desc = "Particularly twisted deities grant gifts of dubious value."
|
||||
icon = 'icons/obj/weapons/changeling_items.dmi'
|
||||
icon_state = "arm_blade"
|
||||
inhand_icon_state = "arm_blade"
|
||||
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
|
||||
slot_flags = null
|
||||
item_flags = ABSTRACT
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = SHARP_EDGED
|
||||
wound_bonus = -20
|
||||
bare_wound_bonus = 25
|
||||
menu_description = "An undroppable sharp armblade capable of inflicting deep wounds. Capable of an ineffective butchering of bodies. Disappears if the arm holding it is cut off."
|
||||
|
||||
/obj/item/nullrod/armblade/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
|
||||
AddComponent(/datum/component/butchering, \
|
||||
speed = 8 SECONDS, \
|
||||
effectiveness = 70, \
|
||||
)
|
||||
|
||||
/obj/item/nullrod/armblade/tentacle
|
||||
name = "unholy blessing"
|
||||
icon_state = "tentacle"
|
||||
inhand_icon_state = "tentacle"
|
||||
menu_description = "An undroppable sharp tentacle capable of inflicting deep wounds. Capable of an ineffective butchering of bodies. Disappears if the arm holding it is cut off."
|
||||
|
||||
/obj/item/nullrod/carp
|
||||
name = "carp-sie plushie"
|
||||
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
|
||||
icon = 'icons/obj/toys/plushes.dmi'
|
||||
icon_state = "carpplush"
|
||||
inhand_icon_state = "carp_plushie"
|
||||
worn_icon_state = "nullrod"
|
||||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
force = 15
|
||||
attack_verb_continuous = list("bites", "eats", "fin slaps")
|
||||
attack_verb_simple = list("bite", "eat", "fin slap")
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
menu_description = "A plushie dealing a little less damage due to its cute form. Capable of blessing one person with the Carp-Sie favor, which grants friendship of all wild space carps. Fits in pockets. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/carp/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/faction_granter, FACTION_CARP, holy_role_required = HOLY_ROLE_PRIEST, grant_message = span_boldnotice("You are blessed by Carp-Sie. Wild space carp will no longer attack you."))
|
||||
|
||||
/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
|
||||
name = "monk's staff"
|
||||
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
|
||||
force = 15
|
||||
block_chance = 40
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
sharpness = NONE
|
||||
hitsound = SFX_SWING_HIT
|
||||
attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks")
|
||||
attack_verb_simple = list("smash", "slam", "whack", "thwack")
|
||||
icon = 'icons/obj/weapons/staff.dmi'
|
||||
icon_state = "bostaff0"
|
||||
inhand_icon_state = "bostaff0"
|
||||
worn_icon_state = "bostaff0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage due to being made of wood. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/tribal_knife
|
||||
name = "arrhythmic knife"
|
||||
desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn."
|
||||
icon = 'icons/obj/weapons/sword.dmi'
|
||||
icon_state = "crysknife"
|
||||
inhand_icon_state = "crysknife"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = SHARP_EDGED
|
||||
slot_flags = null
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
||||
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
menu_description = "A sharp knife. Randomly speeds or slows its user at a regular intervals. Capable of butchering bodies. Cannot be worn anywhere."
|
||||
|
||||
/obj/item/nullrod/tribal_knife/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
AddComponent(/datum/component/butchering, \
|
||||
speed = 5 SECONDS, \
|
||||
effectiveness = 100, \
|
||||
)
|
||||
|
||||
/obj/item/nullrod/tribal_knife/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/nullrod/tribal_knife/process()
|
||||
slowdown = rand(-10, 10)/10
|
||||
if(iscarbon(loc))
|
||||
var/mob/living/carbon/wielder = loc
|
||||
if(wielder.is_holding(src))
|
||||
wielder.update_equipment_speed_mods()
|
||||
|
||||
/obj/item/nullrod/pitchfork
|
||||
name = "unholy pitchfork"
|
||||
desc = "Holding this makes you look absolutely devilish."
|
||||
icon = 'icons/obj/weapons/spear.dmi'
|
||||
icon_state = "pitchfork0"
|
||||
inhand_icon_state = "pitchfork0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
|
||||
worn_icon_state = "pitchfork0"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
attack_verb_continuous = list("pokes", "impales", "pierces", "jabs")
|
||||
attack_verb_simple = list("poke", "impale", "pierce", "jab")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = SHARP_EDGED
|
||||
menu_description = "A sharp pitchfork. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/egyptian
|
||||
name = "egyptian staff"
|
||||
desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth."
|
||||
icon = 'icons/obj/weapons/guns/magic.dmi'
|
||||
icon_state = "pharoah_sceptre"
|
||||
inhand_icon_state = "pharoah_sceptre"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
worn_icon_state = "pharoah_sceptre"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
attack_verb_continuous = list("bashes", "smacks", "whacks")
|
||||
attack_verb_simple = list("bash", "smack", "whack")
|
||||
menu_description = "A staff. Can be used as a tool to craft exclusive egyptian items. Easily stored. Can be worn on the back."
|
||||
|
||||
/obj/item/nullrod/hypertool
|
||||
name = "hypertool"
|
||||
desc = "A tool so powerful even you cannot perfectly use it."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hypertool"
|
||||
inhand_icon_state = "hypertool"
|
||||
worn_icon_state = "hypertool"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
damtype = BRAIN
|
||||
armour_penetration = 35
|
||||
attack_verb_continuous = list("pulses", "mends", "cuts")
|
||||
attack_verb_simple = list("pulse", "mend", "cut")
|
||||
hitsound = 'sound/effects/sparks4.ogg'
|
||||
menu_description = "A tool dealing brain damage which partially penetrates armor. Fits in pockets. Can be worn on the belt."
|
||||
|
||||
/obj/item/nullrod/spear
|
||||
name = "ancient spear"
|
||||
desc = "An ancient spear made of brass, I mean gold, I mean bronze. It looks highly mechanical."
|
||||
icon = 'icons/obj/weapons/spear.dmi'
|
||||
icon_state = "ratvarian_spear"
|
||||
inhand_icon_state = "ratvarian_spear"
|
||||
lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
armour_penetration = 10
|
||||
sharpness = SHARP_POINTY
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
attack_verb_continuous = list("stabs", "pokes", "slashes", "clocks")
|
||||
attack_verb_simple = list("stab", "poke", "slash", "clock")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
menu_description = "A pointy spear which penetrates armor a little. Can be worn only on the belt."
|
||||
+18
-61
@@ -1,10 +1,11 @@
|
||||
|
||||
/obj/item/gun/ballistic/bow
|
||||
name = "longbow"
|
||||
desc = "While pretty finely crafted, surely you can find something better to use in the current year."
|
||||
icon = 'icons/obj/weapons/guns/ballistic.dmi'
|
||||
icon = 'icons/obj/weapons/guns/bows/bows.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/weapons/bows_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/bows_righthand.dmi'
|
||||
icon_state = "bow"
|
||||
inhand_icon_state = "bow"
|
||||
base_icon_state = "bow"
|
||||
load_sound = null
|
||||
fire_sound = null
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/bow
|
||||
@@ -16,11 +17,12 @@
|
||||
internal_magazine = TRUE
|
||||
cartridge_wording = "arrow"
|
||||
bolt_type = BOLT_TYPE_NO_BOLT
|
||||
/// whether the bow is drawn back
|
||||
var/drawn = FALSE
|
||||
|
||||
/obj/item/gun/ballistic/bow/update_icon_state()
|
||||
. = ..()
|
||||
icon_state = chambered ? "bow_[drawn]" : "bow"
|
||||
icon_state = chambered ? "[base_icon_state]_[drawn ? "drawn" : "nocked"]" : "[base_icon_state]"
|
||||
|
||||
/obj/item/gun/ballistic/bow/proc/drop_arrow()
|
||||
drawn = FALSE
|
||||
@@ -38,7 +40,9 @@
|
||||
chambered.forceMove(src)
|
||||
|
||||
/obj/item/gun/ballistic/bow/attack_self(mob/user)
|
||||
if(chambered)
|
||||
if(!chambered)
|
||||
balloon_alert(user, "no arrow nocked!")
|
||||
else
|
||||
balloon_alert(user, "[drawn ? "string released" : "string drawn"]")
|
||||
drawn = !drawn
|
||||
update_appearance()
|
||||
@@ -56,8 +60,16 @@
|
||||
. = ..() //fires, removing the arrow
|
||||
update_appearance()
|
||||
|
||||
/obj/item/gun/ballistic/bow/equipped(mob/user, slot, initial)
|
||||
. = ..()
|
||||
if(slot == ITEM_SLOT_BACK && chambered)
|
||||
balloon_alert(user, "the arrow falls out!")
|
||||
drop_arrow()
|
||||
drawn = FALSE
|
||||
update_appearance()
|
||||
|
||||
/obj/item/gun/ballistic/bow/shoot_with_empty_chamber(mob/living/user)
|
||||
return //so clicking sounds please
|
||||
return //no clicking sounds please
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/bow
|
||||
name = "bowstring"
|
||||
@@ -65,58 +77,3 @@
|
||||
max_ammo = 1
|
||||
start_empty = TRUE
|
||||
caliber = CALIBER_ARROW
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow
|
||||
name = "arrow"
|
||||
desc = "Stabby Stabman!"
|
||||
icon_state = "arrow"
|
||||
inhand_icon_state = "arrow"
|
||||
flags_1 = NONE
|
||||
throwforce = 1
|
||||
projectile_type = /obj/projectile/bullet/reusable/arrow
|
||||
firing_effect_type = null
|
||||
caliber = CALIBER_ARROW
|
||||
heavy_metal = FALSE
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/despawning/dropped()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, PROC_REF(floor_vanish)), 5 SECONDS)
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/despawning/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/obj/projectile/bullet/reusable/arrow
|
||||
name = "arrow"
|
||||
desc = "Ow! Get it out of me!"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
damage = 50
|
||||
speed = 1
|
||||
range = 25
|
||||
|
||||
|
||||
|
||||
/obj/item/storage/bag/quiver
|
||||
name = "quiver"
|
||||
desc = "Holds arrows for your bow. Good, because while pocketing arrows is possible, it surely can't be pleasant."
|
||||
icon_state = "quiver"
|
||||
inhand_icon_state = null
|
||||
worn_icon_state = "harpoon_quiver"
|
||||
var/arrow_path = /obj/item/ammo_casing/caseless/arrow
|
||||
|
||||
/obj/item/storage/bag/quiver/Initialize(mapload)
|
||||
. = ..()
|
||||
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
|
||||
atom_storage.max_slots = 40
|
||||
atom_storage.max_total_storage = 100
|
||||
atom_storage.set_holdable(list(
|
||||
/obj/item/ammo_casing/caseless/arrow
|
||||
))
|
||||
|
||||
/obj/item/storage/bag/quiver/PopulateContents()
|
||||
. = ..()
|
||||
for(var/i in 1 to 10)
|
||||
new arrow_path(src)
|
||||
|
||||
/obj/item/storage/bag/quiver/despawning
|
||||
arrow_path = /obj/item/ammo_casing/caseless/arrow/despawning
|
||||
@@ -0,0 +1,94 @@
|
||||
///base arrow
|
||||
/obj/item/ammo_casing/caseless/arrow
|
||||
name = "arrow"
|
||||
desc = "Stabby Stabman!"
|
||||
icon = 'icons/obj/weapons/guns/bows/arrows.dmi'
|
||||
icon_state = "arrow"
|
||||
inhand_icon_state = "arrow"
|
||||
projectile_type = /obj/projectile/bullet/reusable/arrow
|
||||
flags_1 = NONE
|
||||
throwforce = 1
|
||||
firing_effect_type = null
|
||||
caliber = CALIBER_ARROW
|
||||
heavy_metal = FALSE
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/element/envenomable_casing)
|
||||
|
||||
///base arrow projectile
|
||||
/obj/projectile/bullet/reusable/arrow
|
||||
name = "arrow"
|
||||
desc = "Ow! Get it out of me!"
|
||||
icon = 'icons/obj/weapons/guns/bows/arrows.dmi'
|
||||
icon_state = "arrow_projectile"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
damage = 50
|
||||
speed = 1
|
||||
range = 25
|
||||
|
||||
///*sigh* NON-REUSABLE base arrow projectile. In the future: let's componentize the reusable subtype, jesus
|
||||
/obj/projectile/bullet/arrow
|
||||
name = "arrow"
|
||||
desc = "Ow! Get it out of me!"
|
||||
icon = 'icons/obj/weapons/guns/bows/arrows.dmi'
|
||||
icon_state = "arrow_projectile"
|
||||
damage = 50
|
||||
speed = 1
|
||||
range = 25
|
||||
|
||||
/// despawning arrow type
|
||||
/obj/item/ammo_casing/caseless/arrow/despawning/dropped()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, PROC_REF(floor_vanish)), 5 SECONDS)
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/despawning/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/// holy arrows
|
||||
/obj/item/ammo_casing/caseless/arrow/holy
|
||||
name = "holy arrow"
|
||||
desc = "A holy diver seeking its target."
|
||||
icon_state = "holy_arrow"
|
||||
inhand_icon_state = "holy_arrow"
|
||||
projectile_type = /obj/projectile/bullet/reusable/arrow/holy
|
||||
|
||||
/// holy arrow projectile
|
||||
/obj/projectile/bullet/reusable/arrow/holy
|
||||
name = "holy arrow"
|
||||
desc = "Here it comes, cultist scum!"
|
||||
icon_state = "holy_arrow_projectile"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/holy
|
||||
damage = 20 //still a lot but this is roundstart gear so far less
|
||||
|
||||
/obj/projectile/bullet/reusable/arrow/holy/Initialize(mapload)
|
||||
. = ..()
|
||||
//50 damage to revenants
|
||||
AddElement(/datum/element/bane, target_type = /mob/living/simple_animal/revenant, damage_multiplier = 0, added_damage = 30)
|
||||
|
||||
/// special pyre sect arrow
|
||||
/// in the future, this needs a special sprite, but bows don't support non-hardcoded arrow sprites
|
||||
/obj/item/ammo_casing/caseless/arrow/holy/blazing
|
||||
name = "blazing star arrow"
|
||||
desc = "A holy diver seeking its target, blessed with fire. Will ignite on hit, destroying the arrow. But if you hit an already ignited target...?"
|
||||
projectile_type = /obj/projectile/bullet/arrow/blazing
|
||||
|
||||
/obj/projectile/bullet/arrow/blazing
|
||||
name = "blazing arrow"
|
||||
desc = "THE UNMATCHED POWER OF THE SUN"
|
||||
icon_state = "holy_arrow_projectile"
|
||||
damage = 20
|
||||
|
||||
/obj/projectile/bullet/arrow/blazing/on_hit(atom/target, blocked, pierce_hit)
|
||||
. = ..()
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
if(!human_target.on_fire)
|
||||
to_chat(human_target, span_danger("[src] explodes into flames which quickly envelop you!"))
|
||||
human_target.adjust_fire_stacks(2)
|
||||
human_target.ignite_mob()
|
||||
return
|
||||
to_chat(human_target, span_danger("[src] reacts with the flames on y-"))
|
||||
explosion(src, light_impact_range = 1, flame_range = 2) //ow
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
/obj/item/storage/bag/quiver
|
||||
name = "quiver"
|
||||
desc = "Holds arrows for your bow. Good, because while pocketing arrows is possible, it surely can't be pleasant."
|
||||
icon = 'icons/obj/weapons/guns/bows/quivers.dmi'
|
||||
icon_state = "quiver"
|
||||
inhand_icon_state = null
|
||||
worn_icon_state = "harpoon_quiver"
|
||||
/// type of arrow the quivel should hold
|
||||
var/arrow_path = /obj/item/ammo_casing/caseless/arrow
|
||||
|
||||
/obj/item/storage/bag/quiver/Initialize(mapload)
|
||||
. = ..()
|
||||
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
|
||||
atom_storage.max_slots = 40
|
||||
atom_storage.max_total_storage = 100
|
||||
atom_storage.set_holdable(list(
|
||||
/obj/item/ammo_casing/caseless/arrow,
|
||||
))
|
||||
|
||||
/obj/item/storage/bag/quiver/PopulateContents()
|
||||
. = ..()
|
||||
for(var/i in 1 to 10)
|
||||
new arrow_path(src)
|
||||
|
||||
/obj/item/storage/bag/quiver/despawning
|
||||
arrow_path = /obj/item/ammo_casing/caseless/arrow/despawning
|
||||
|
||||
/obj/item/storage/bag/quiver/holy
|
||||
name = "divine quiver"
|
||||
desc = "Holds arrows for your divine bow, where they wait to find their target."
|
||||
icon_state = "holyquiver"
|
||||
inhand_icon_state = "holyquiver"
|
||||
worn_icon_state = "holyquiver"
|
||||
arrow_path = /obj/item/ammo_casing/caseless/arrow/holy
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
///basic bow, used for medieval sim
|
||||
/obj/item/gun/ballistic/bow/longbow
|
||||
name = "longbow"
|
||||
desc = "While pretty finely crafted, surely you can find something better to use in the current year."
|
||||
|
||||
///chaplain's divine archer bow
|
||||
/obj/item/gun/ballistic/bow/divine
|
||||
name = "divine bow"
|
||||
desc = "Holy armament to pierce the souls of sinners."
|
||||
icon_state = "holybow"
|
||||
inhand_icon_state = "holybow"
|
||||
base_icon_state = "holybow"
|
||||
worn_icon_state = "holybow"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/bow/holy
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/bow/holy
|
||||
name = "divine bowstring"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/holy
|
||||
|
||||
/obj/item/gun/ballistic/bow/divine/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY)
|
||||
AddComponent(/datum/component/effect_remover, \
|
||||
success_feedback = "You disrupt the magic of %THEEFFECT with %THEWEAPON.", \
|
||||
success_forcesay = "BOW-GONE FOUL MAGIKS!!", \
|
||||
tip_text = "Clear rune", \
|
||||
on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \
|
||||
effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune) \
|
||||
)
|
||||
AddElement(/datum/element/bane, target_type = /mob/living/simple_animal/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE)
|
||||
|
||||
/obj/item/gun/ballistic/bow/divine/proc/on_cult_rune_removed(obj/effect/target, mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
if(!istype(target, /obj/effect/rune))
|
||||
return
|
||||
|
||||
var/obj/effect/rune/target_rune = target
|
||||
if(target_rune.log_when_erased)
|
||||
user.log_message("erased [target_rune.cultist_name] rune using a null rod", LOG_GAME)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] erased a [target_rune.cultist_name] rune with a null rod.")
|
||||
SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_NARNAR] = TRUE
|
||||
|
||||
/obj/item/gun/ballistic/bow/divine/with_quiver/Initialize(mapload)
|
||||
. = ..()
|
||||
new /obj/item/storage/bag/quiver/holy(loc)
|
||||
@@ -242,14 +242,14 @@
|
||||
* pierce_hit - are we piercing through or regular hitting
|
||||
*/
|
||||
/obj/projectile/proc/on_hit(atom/target, blocked = FALSE, pierce_hit)
|
||||
if(fired_from)
|
||||
SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle)
|
||||
// i know that this is probably more with wands and gun mods in mind, but it's a bit silly that the projectile on_hit signal doesn't ping the projectile itself.
|
||||
// maybe we care what the projectile thinks! See about combining these via args some time when it's not 5AM
|
||||
var/obj/item/bodypart/hit_limb
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
hit_limb = L.check_limb_hit(def_zone)
|
||||
if(fired_from)
|
||||
SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle, hit_limb)
|
||||
SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle, hit_limb)
|
||||
|
||||
if(QDELETED(src)) // in case one of the above signals deleted the projectile for whatever reason
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
var/obj/item/paper/autograph = writ_target
|
||||
var/turf/tool_turf = get_turf(religious_tool)
|
||||
writ_target = null
|
||||
if(QDELETED(autograph) || !(tool_turf == autograph.loc)) //check if the same food is still there
|
||||
if(QDELETED(autograph) || !(tool_turf == autograph.loc)) //check if the paper is still there
|
||||
to_chat(user, span_warning("Your target left the altar!"))
|
||||
return FALSE
|
||||
autograph.visible_message(span_notice("Words magically form on [autograph]!"))
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
|
||||
///apply a bunch of fire immunity effect to clothing
|
||||
/datum/religion_rites/fireproof/proc/apply_fireproof(obj/item/clothing/fireproofed)
|
||||
fireproofed.name = "unmelting [fireproofed.name]"
|
||||
fireproofed.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
fireproofed.heat_protection = chosen_clothing.body_parts_covered
|
||||
fireproofed.resistance_flags |= FIRE_PROOF
|
||||
|
||||
/datum/religion_rites/fireproof
|
||||
name = "Unmelting Protection"
|
||||
desc = "Grants fire immunity to any piece of clothing."
|
||||
ritual_length = 15 SECONDS
|
||||
ritual_invocations = list("And so to support the holder of the Ever-Burning candle...",
|
||||
"... allow this unworthy apparel to serve you ...",
|
||||
"... make it strong enough to burn a thousand time and more ...")
|
||||
invoke_msg = "... Come forth in your new form, and join the unmelting wax of the one true flame!"
|
||||
favor_cost = 1000
|
||||
///the piece of clothing that will be fireproofed, only one per rite
|
||||
var/obj/item/clothing/chosen_clothing
|
||||
|
||||
/datum/religion_rites/fireproof/perform_rite(mob/living/user, atom/religious_tool)
|
||||
for(var/obj/item/clothing/apparel in get_turf(religious_tool))
|
||||
if(apparel.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
|
||||
continue //we ignore anything that is already fireproof
|
||||
chosen_clothing = apparel //the apparel has been chosen by our lord and savior
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/datum/religion_rites/fireproof/invoke_effect(mob/living/user, atom/religious_tool)
|
||||
..()
|
||||
if(!QDELETED(chosen_clothing) && get_turf(religious_tool) == chosen_clothing.loc) //check if the same clothing is still there
|
||||
if(istype(chosen_clothing,/obj/item/clothing/suit/hooded))
|
||||
for(var/obj/item/clothing/head/integrated_helmet in chosen_clothing.contents) //check if the clothing has a hood/helmet integrated and fireproof it if there is one.
|
||||
apply_fireproof(integrated_helmet)
|
||||
apply_fireproof(chosen_clothing)
|
||||
playsound(get_turf(religious_tool), 'sound/magic/fireball.ogg', 50, TRUE)
|
||||
chosen_clothing = null //our lord and savior no longer cares about this apparel
|
||||
return TRUE
|
||||
chosen_clothing = null
|
||||
to_chat(user, span_warning("The clothing that was chosen for the rite is no longer on the altar!"))
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/religion_rites/burning_sacrifice
|
||||
name = "Burning Offering"
|
||||
desc = "Sacrifice a buckled burning corpse for favor, the more burn damage the corpse has the more favor you will receive."
|
||||
ritual_length = 20 SECONDS
|
||||
ritual_invocations = list("Burning body ...",
|
||||
"... cleansed by the flame ...",
|
||||
"... we were all created from fire ...",
|
||||
"... and to it ...")
|
||||
invoke_msg = "... WE RETURN! "
|
||||
///the burning corpse chosen for the sacrifice of the rite
|
||||
var/mob/living/carbon/chosen_sacrifice
|
||||
|
||||
/datum/religion_rites/burning_sacrifice/perform_rite(mob/living/user, atom/religious_tool)
|
||||
if(!ismovable(religious_tool))
|
||||
to_chat(user, span_warning("This rite requires a religious device that individuals can be buckled to."))
|
||||
return FALSE
|
||||
var/atom/movable/movable_reltool = religious_tool
|
||||
if(!movable_reltool)
|
||||
return FALSE
|
||||
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
||||
to_chat(user, span_warning("Nothing is buckled to the altar!"))
|
||||
return FALSE
|
||||
for(var/corpse in movable_reltool.buckled_mobs)
|
||||
if(!iscarbon(corpse))// only works with carbon corpse since most normal mobs can't be set on fire.
|
||||
to_chat(user, span_warning("Only carbon lifeforms can be properly burned for the sacrifice!"))
|
||||
return FALSE
|
||||
chosen_sacrifice = corpse
|
||||
if(chosen_sacrifice.stat != DEAD)
|
||||
to_chat(user, span_warning("You can only sacrifice dead bodies, this one is still alive!"))
|
||||
return FALSE
|
||||
if(!chosen_sacrifice.on_fire)
|
||||
to_chat(user, span_warning("This corpse needs to be on fire to be sacrificed!"))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/religion_rites/burning_sacrifice/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
||||
..()
|
||||
if(!(chosen_sacrifice in religious_tool.buckled_mobs)) //checks one last time if the right corpse is still buckled
|
||||
to_chat(user, span_warning("The right sacrifice is no longer on the altar!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
if(!chosen_sacrifice.on_fire)
|
||||
to_chat(user, span_warning("The sacrifice is no longer on fire, it needs to burn until the end of the rite!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
if(chosen_sacrifice.stat != DEAD)
|
||||
to_chat(user, span_warning("The sacrifice has to stay dead for the rite to work!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
var/favor_gained = 100 + round(chosen_sacrifice.getFireLoss())
|
||||
GLOB.religious_sect.adjust_favor(favor_gained, user)
|
||||
to_chat(user, span_notice("[GLOB.deity] absorbs the burning corpse and any trace of fire with it. [GLOB.deity] rewards you with [favor_gained] favor."))
|
||||
chosen_sacrifice.dust(force = TRUE)
|
||||
playsound(get_turf(religious_tool), 'sound/effects/supermatter.ogg', 50, TRUE)
|
||||
chosen_sacrifice = null
|
||||
return TRUE
|
||||
|
||||
/datum/religion_rites/infinite_candle
|
||||
name = "Immortal Candles"
|
||||
desc = "Creates 5 candles that never run out of wax."
|
||||
ritual_length = 10 SECONDS
|
||||
invoke_msg = "Burn bright, little candles, for you will only extinguish along with the universe."
|
||||
favor_cost = 200
|
||||
|
||||
/datum/religion_rites/infinite_candle/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
||||
..()
|
||||
var/altar_turf = get_turf(religious_tool)
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/flashlight/flare/candle/infinite(altar_turf)
|
||||
playsound(altar_turf, 'sound/magic/fireball.ogg', 50, TRUE)
|
||||
return TRUE
|
||||
|
||||
/datum/religion_rites/blazing_star
|
||||
name = "Blazing Star"
|
||||
desc = "Enchants a holy arrow to set someone on fire on hit, or if the victim is already on fire... note, this consumes the arrow."
|
||||
ritual_length = 15 SECONDS
|
||||
ritual_invocations = list(
|
||||
"And so to keep the Ever-Burning candle protected ...",
|
||||
"... grant this feeble bolt your blessing ...",
|
||||
"... make it burn bright ...",
|
||||
)
|
||||
invoke_msg = "... a blazing star is born!"
|
||||
favor_cost = 2000
|
||||
///arrow to enchant
|
||||
var/obj/item/ammo_casing/caseless/arrow/holy/enchant_target
|
||||
|
||||
/datum/religion_rites/blazing_star/perform_rite(mob/living/user, atom/religious_tool)
|
||||
for(var/obj/item/ammo_casing/caseless/arrow/holy/can_enchant in get_turf(religious_tool))
|
||||
if(istype(can_enchant, /obj/item/ammo_casing/caseless/arrow/holy/blazing))
|
||||
continue
|
||||
enchant_target = can_enchant
|
||||
return ..()
|
||||
to_chat(user, span_warning("You need to place a holy arrow on [religious_tool] to do this!"))
|
||||
return FALSE
|
||||
|
||||
/datum/religion_rites/blazing_star/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
||||
..()
|
||||
var/obj/item/ammo_casing/caseless/arrow/holy/enchanting = enchant_target
|
||||
var/turf/tool_turf = get_turf(religious_tool)
|
||||
enchant_target = null
|
||||
if(QDELETED(enchanting) || !(tool_turf == enchanting.loc)) //check if the arrow is still there
|
||||
to_chat(user, span_warning("Your target left the altar!"))
|
||||
return FALSE
|
||||
enchanting.visible_message(span_notice("[enchant_target] is blessed by holy fire!"))
|
||||
playsound(tool_turf, 'sound/effects/pray.ogg', 50, TRUE)
|
||||
new /obj/item/ammo_casing/caseless/arrow/holy/blazing(tool_turf)
|
||||
qdel(enchanting)
|
||||
return TRUE
|
||||
@@ -208,6 +208,14 @@
|
||||
rites_list = list(/datum/religion_rites/fireproof, /datum/religion_rites/burning_sacrifice, /datum/religion_rites/infinite_candle)
|
||||
altar_icon_state = "convertaltar-red"
|
||||
|
||||
/datum/religion_sect/pyre/on_select()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/sect_nullrod_bonus, list(
|
||||
/obj/item/gun/ballistic/bow/divine/with_quiver = list(
|
||||
/datum/religion_rites/blazing_star,
|
||||
),
|
||||
))
|
||||
|
||||
//candle sect bibles don't heal or do anything special apart from the standard holy water blessings
|
||||
/datum/religion_sect/pyre/sect_bless(mob/living/target, mob/living/chap)
|
||||
return TRUE
|
||||
|
||||
@@ -139,124 +139,6 @@
|
||||
new blessing(altar_turf)
|
||||
return TRUE
|
||||
|
||||
/**** Pyre God ****/
|
||||
|
||||
///apply a bunch of fire immunity effect to clothing
|
||||
/datum/religion_rites/fireproof/proc/apply_fireproof(obj/item/clothing/fireproofed)
|
||||
fireproofed.name = "unmelting [fireproofed.name]"
|
||||
fireproofed.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
fireproofed.heat_protection = chosen_clothing.body_parts_covered
|
||||
fireproofed.resistance_flags |= FIRE_PROOF
|
||||
|
||||
/datum/religion_rites/fireproof
|
||||
name = "Unmelting Protection"
|
||||
desc = "Grants fire immunity to any piece of clothing."
|
||||
ritual_length = 15 SECONDS
|
||||
ritual_invocations = list("And so to support the holder of the Ever-Burning candle...",
|
||||
"... allow this unworthy apparel to serve you ...",
|
||||
"... make it strong enough to burn a thousand time and more ...")
|
||||
invoke_msg = "... Come forth in your new form, and join the unmelting wax of the one true flame!"
|
||||
favor_cost = 1000
|
||||
///the piece of clothing that will be fireproofed, only one per rite
|
||||
var/obj/item/clothing/chosen_clothing
|
||||
|
||||
/datum/religion_rites/fireproof/perform_rite(mob/living/user, atom/religious_tool)
|
||||
for(var/obj/item/clothing/apparel in get_turf(religious_tool))
|
||||
if(apparel.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
|
||||
continue //we ignore anything that is already fireproof
|
||||
chosen_clothing = apparel //the apparel has been chosen by our lord and savior
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/datum/religion_rites/fireproof/invoke_effect(mob/living/user, atom/religious_tool)
|
||||
..()
|
||||
if(!QDELETED(chosen_clothing) && get_turf(religious_tool) == chosen_clothing.loc) //check if the same clothing is still there
|
||||
if(istype(chosen_clothing,/obj/item/clothing/suit/hooded))
|
||||
for(var/obj/item/clothing/head/integrated_helmet in chosen_clothing.contents) //check if the clothing has a hood/helmet integrated and fireproof it if there is one.
|
||||
apply_fireproof(integrated_helmet)
|
||||
apply_fireproof(chosen_clothing)
|
||||
playsound(get_turf(religious_tool), 'sound/magic/fireball.ogg', 50, TRUE)
|
||||
chosen_clothing = null //our lord and savior no longer cares about this apparel
|
||||
return TRUE
|
||||
chosen_clothing = null
|
||||
to_chat(user, span_warning("The clothing that was chosen for the rite is no longer on the altar!"))
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/religion_rites/burning_sacrifice
|
||||
name = "Burning Offering"
|
||||
desc = "Sacrifice a buckled burning corpse for favor, the more burn damage the corpse has the more favor you will receive."
|
||||
ritual_length = 20 SECONDS
|
||||
ritual_invocations = list("Burning body ...",
|
||||
"... cleansed by the flame ...",
|
||||
"... we were all created from fire ...",
|
||||
"... and to it ...")
|
||||
invoke_msg = "... WE RETURN! "
|
||||
///the burning corpse chosen for the sacrifice of the rite
|
||||
var/mob/living/carbon/chosen_sacrifice
|
||||
|
||||
/datum/religion_rites/burning_sacrifice/perform_rite(mob/living/user, atom/religious_tool)
|
||||
if(!ismovable(religious_tool))
|
||||
to_chat(user, span_warning("This rite requires a religious device that individuals can be buckled to."))
|
||||
return FALSE
|
||||
var/atom/movable/movable_reltool = religious_tool
|
||||
if(!movable_reltool)
|
||||
return FALSE
|
||||
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
||||
to_chat(user, span_warning("Nothing is buckled to the altar!"))
|
||||
return FALSE
|
||||
for(var/corpse in movable_reltool.buckled_mobs)
|
||||
if(!iscarbon(corpse))// only works with carbon corpse since most normal mobs can't be set on fire.
|
||||
to_chat(user, span_warning("Only carbon lifeforms can be properly burned for the sacrifice!"))
|
||||
return FALSE
|
||||
chosen_sacrifice = corpse
|
||||
if(chosen_sacrifice.stat != DEAD)
|
||||
to_chat(user, span_warning("You can only sacrifice dead bodies, this one is still alive!"))
|
||||
return FALSE
|
||||
if(!chosen_sacrifice.on_fire)
|
||||
to_chat(user, span_warning("This corpse needs to be on fire to be sacrificed!"))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/religion_rites/burning_sacrifice/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
||||
..()
|
||||
if(!(chosen_sacrifice in religious_tool.buckled_mobs)) //checks one last time if the right corpse is still buckled
|
||||
to_chat(user, span_warning("The right sacrifice is no longer on the altar!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
if(!chosen_sacrifice.on_fire)
|
||||
to_chat(user, span_warning("The sacrifice is no longer on fire, it needs to burn until the end of the rite!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
if(chosen_sacrifice.stat != DEAD)
|
||||
to_chat(user, span_warning("The sacrifice has to stay dead for the rite to work!"))
|
||||
chosen_sacrifice = null
|
||||
return FALSE
|
||||
var/favor_gained = 100 + round(chosen_sacrifice.getFireLoss())
|
||||
GLOB.religious_sect.adjust_favor(favor_gained, user)
|
||||
to_chat(user, span_notice("[GLOB.deity] absorbs the burning corpse and any trace of fire with it. [GLOB.deity] rewards you with [favor_gained] favor."))
|
||||
chosen_sacrifice.dust(force = TRUE)
|
||||
playsound(get_turf(religious_tool), 'sound/effects/supermatter.ogg', 50, TRUE)
|
||||
chosen_sacrifice = null
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
/datum/religion_rites/infinite_candle
|
||||
name = "Immortal Candles"
|
||||
desc = "Creates 5 candles that never run out of wax."
|
||||
ritual_length = 10 SECONDS
|
||||
invoke_msg = "Burn bright, little candles, for you will only extinguish along with the universe."
|
||||
favor_cost = 200
|
||||
|
||||
/datum/religion_rites/infinite_candle/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
||||
..()
|
||||
var/altar_turf = get_turf(religious_tool)
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/flashlight/flare/candle/infinite(altar_turf)
|
||||
playsound(altar_turf, 'sound/magic/fireball.ogg', 50, TRUE)
|
||||
return TRUE
|
||||
|
||||
/*********Greedy God**********/
|
||||
|
||||
///all greed rites cost money instead
|
||||
|
||||
Reference in New Issue
Block a user