mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-23 13:18:59 +01:00
Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into master
This commit is contained in:
@@ -174,7 +174,14 @@
|
||||
new reward(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
|
||||
|
||||
|
||||
/obj/structure/destructible/cult/forge/attackby(obj/item/I, mob/user)
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "<span class='warning'>The heat radiating from [src] pushes you back.</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/ingot))
|
||||
var/obj/item/ingot/notsword = I
|
||||
to_chat(user, "You heat the [notsword] in the [src].")
|
||||
notsword.workability = "shapeable"
|
||||
|
||||
/obj/structure/destructible/cult/pylon
|
||||
name = "pylon"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
name = "Spawn Sentient Disease"
|
||||
typepath = /datum/round_event/ghost_role/sentient_disease
|
||||
weight = 7
|
||||
gamemode_blacklist = list("dynamic")
|
||||
max_occurrences = 1
|
||||
min_players = 5
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
/datum/antagonist/heretic/on_gain()
|
||||
var/mob/living/current = owner.current
|
||||
owner.teach_crafting_recipe(/datum/crafting_recipe/heretic/codex)
|
||||
if(ishuman(current))
|
||||
forge_primary_objectives()
|
||||
gain_knowledge(/datum/eldritch_knowledge/spell/basic)
|
||||
@@ -41,7 +42,6 @@
|
||||
START_PROCESSING(SSprocessing,src)
|
||||
if(give_equipment)
|
||||
equip_cultist()
|
||||
owner.teach_crafting_recipe(/datum/crafting_recipe/heretic/codex)
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/heretic/on_removal()
|
||||
@@ -111,17 +111,12 @@
|
||||
P.find_target(owners,assasination)
|
||||
protection += P.target
|
||||
objectives += P
|
||||
|
||||
|
||||
var/datum/objective/sacrifice_ecult/SE = new
|
||||
SE.owner = owner
|
||||
SE.update_explanation_text()
|
||||
objectives += SE
|
||||
|
||||
var/datum/objective/escape/escape_objective = new
|
||||
escape_objective.owner = owner
|
||||
objectives += escape_objective
|
||||
|
||||
/datum/antagonist/heretic/apply_innate_effects(mob/living/mob_override)
|
||||
. = ..()
|
||||
var/mob/living/current = owner.current
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
if(!is_in_use)
|
||||
INVOKE_ASYNC(src, .proc/activate , user)
|
||||
|
||||
/obj/effect/eldritch/attacked_by(obj/item/I, mob/living/user)
|
||||
/obj/effect/eldritch/attackby(obj/item/I, mob/living/user)
|
||||
. = ..()
|
||||
if(istype(I,/obj/item/nullrod))
|
||||
if(istype(I, /obj/item/storage/book/bible) || istype(I, /obj/item/nullrod))
|
||||
user.say("BEGONE FOUL MAGICKS!!", forced = "bible")
|
||||
to_chat(user, "<span class='danger'>You disrupt the magic of [src] with [I].</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/eldritch/proc/activate(mob/living/user)
|
||||
|
||||
@@ -16,16 +16,19 @@
|
||||
return
|
||||
var/dist = get_dist(user.loc,target.loc)
|
||||
var/dir = get_dir(user.loc,target.loc)
|
||||
|
||||
switch(dist)
|
||||
if(0 to 15)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is near you. They are to the [dir2text(dir)] of you!</span>")
|
||||
if(16 to 31)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!</span>")
|
||||
if(32 to 127)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!</span>")
|
||||
else
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is beyond our reach.</span>")
|
||||
|
||||
if(user.z != target.z)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is beyond our reach.</span>")
|
||||
else
|
||||
switch(dist)
|
||||
if(0 to 15)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is near you. They are to the [dir2text(dir)] of you!</span>")
|
||||
if(16 to 31)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!</span>")
|
||||
if(32 to 127)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!</span>")
|
||||
else
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is beyond our reach.</span>")
|
||||
|
||||
if(target.stat == DEAD)
|
||||
to_chat(user,"<span class='warning'>[target.real_name] is dead. Bring them onto a transmutation rune!</span>")
|
||||
@@ -86,8 +89,8 @@
|
||||
desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the excruciations it has endured from dead origins."
|
||||
icon_state = "flesh_blade"
|
||||
item_state = "flesh_blade"
|
||||
wound_bonus = 5
|
||||
bare_wound_bonus = 15
|
||||
wound_bonus = 10
|
||||
bare_wound_bonus = 20
|
||||
|
||||
/obj/item/clothing/neck/eldritch_amulet
|
||||
name = "warm eldritch medallion"
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
name = "Break of Dawn"
|
||||
desc = "Starts your journey in the mansus. Allows you to select a target using a living heart on a transmutation rune."
|
||||
gain_text = "Gates of Mansus open up to your mind."
|
||||
next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh)
|
||||
next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/spell/silence)
|
||||
cost = 0
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mansus_grasp
|
||||
required_atoms = list(/obj/item/living_heart)
|
||||
@@ -301,3 +301,11 @@
|
||||
required_atoms = list(/obj/item/shard,/obj/item/stack/rods)
|
||||
result_atoms = list(/obj/item/melee/sickly_blade)
|
||||
route = "Start"
|
||||
|
||||
/datum/eldritch_knowledge/spell/silence
|
||||
name = "Silence"
|
||||
desc = "Allows you to use the power of the Mansus to force an individual's tongue to be held down for up to twenty seconds. They'll notice quickly, however."
|
||||
gain_text = "They must hold their tongues, for they do not understand."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/pointed/trigger/mute/eldritch
|
||||
route = PATH_SIDE
|
||||
|
||||
@@ -43,8 +43,9 @@
|
||||
/obj/item/melee/touch_attack/mansus_fist
|
||||
name = "Mansus Grasp"
|
||||
desc = "A sinister looking aura that distorts the flow of reality around it. Causes knockdown, major stamina damage aswell as some Brute. It gains additional beneficial effects with certain knowledges you can research."
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
icon = 'icons/obj/eldritch.dmi'
|
||||
icon_state = "mansus_grasp"
|
||||
item_state = "mansus"
|
||||
catchphrase = "T'IESA SIE'KTI VISATA"
|
||||
|
||||
/obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
@@ -118,6 +119,7 @@
|
||||
/obj/item/melee/touch_attack/blood_siphon
|
||||
name = "Blood Siphon"
|
||||
desc = "A sinister looking aura that distorts the flow of reality around it."
|
||||
color = RUNE_COLOR_RED
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
catchphrase = "SUN'AI'KINI'MAS"
|
||||
@@ -260,41 +262,82 @@
|
||||
/obj/effect/proc_holder/spell/pointed/cleave/long
|
||||
charge_max = 650
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/touch/mad_touch
|
||||
/obj/effect/proc_holder/spell/targeted/touch/mad_touch
|
||||
name = "Touch of Madness"
|
||||
desc = "Touch spell that drains your enemies sanity."
|
||||
school = "transmutation"
|
||||
charge_max = 150
|
||||
desc = "Touch spell that allows you to force the knowledge of the mansus upon your foes."
|
||||
hand_path = /obj/item/melee/touch_attack/mad_touch
|
||||
school = "evocation"
|
||||
charge_max = 1800
|
||||
clothes_req = FALSE
|
||||
invocation_type = "none"
|
||||
range = 2
|
||||
action_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
action_icon_state = "mad_touch"
|
||||
action_background_icon_state = "bg_ecult"
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/touch/mad_touch/can_target(atom/target, mob/user, silent)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(!istype(target,/mob/living/carbon/human))
|
||||
if(!silent)
|
||||
to_chat(user, "<span class='warning'>You are unable to touch [target]!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
/obj/item/melee/touch_attack/mad_touch
|
||||
name = "Touch of Madness"
|
||||
desc = "A sinister looking aura that shatters your enemies minds."
|
||||
icon = 'icons/obj/eldritch.dmi'
|
||||
icon_state = "mad_touch"
|
||||
item_state = "madness"
|
||||
catchphrase = "SUNA'IKINTI PROTA"
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/touch/mad_touch/cast(list/targets, mob/user)
|
||||
. = ..()
|
||||
for(var/mob/living/carbon/target in targets)
|
||||
if(ishuman(targets))
|
||||
var/mob/living/carbon/human/tar = target
|
||||
if(tar.anti_magic_check())
|
||||
tar.visible_message("<span class='danger'>Spell bounces off of [target]!</span>","<span class='danger'>The spell bounces off of you!</span>")
|
||||
return
|
||||
if(target.mind && !target.mind.has_antag_datum(/datum/antagonist/heretic))
|
||||
to_chat(user,"<span class='warning'>[target.name] has been cursed!</span>")
|
||||
SEND_SIGNAL(target, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
|
||||
/obj/item/melee/touch_attack/mad_touch/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/ash_final
|
||||
if(!proximity_flag || target == user)
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/tar = target
|
||||
if(tar.anti_magic_check())
|
||||
tar.visible_message("<span class='danger'>Spell bounces off of [target]!</span>","<span class='danger'>The spell bounces off of you!</span>")
|
||||
return ..()
|
||||
|
||||
if(iscarbon(target))
|
||||
playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE)
|
||||
var/mob/living/carbon/C = target
|
||||
C.adjustOrganLoss(ORGAN_SLOT_BRAIN,35)
|
||||
C.DefaultCombatKnockdown(50, override_stamdmg = 0)
|
||||
C.gain_trauma(/datum/brain_trauma/mild/phobia)
|
||||
to_chat(user,"<span class='warning'>[target.name] has been cursed!</span>")
|
||||
SEND_SIGNAL(target, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay
|
||||
name = "Grasp of Decay"
|
||||
desc = "A sinister looking touch that rots your foes from the inside out for twenty seconds."
|
||||
hand_path = /obj/item/melee/touch_attack/grasp_of_decay
|
||||
school = "evocation"
|
||||
charge_max = 1200
|
||||
clothes_req = FALSE
|
||||
action_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
action_icon_state = "mansus_grasp"
|
||||
action_background_icon_state = "bg_ecult"
|
||||
|
||||
/obj/item/melee/touch_attack/grasp_of_decay
|
||||
name = "Grasp of Decay"
|
||||
desc = "A sinister looking aura that rots your foes from the inside out."
|
||||
icon = 'icons/obj/eldritch.dmi'
|
||||
icon_state = "mansus_grasp"
|
||||
item_state = "mansus"
|
||||
catchphrase = "SKILI'EDUONIS"
|
||||
|
||||
/obj/item/melee/touch_attack/grasp_of_decay/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
|
||||
if(!proximity_flag || target == user)
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/tar = target
|
||||
if(tar.anti_magic_check())
|
||||
tar.visible_message("<span class='danger'>Spell bounces off of [target]!</span>","<span class='danger'>The spell bounces off of you!</span>")
|
||||
return ..()
|
||||
|
||||
if(iscarbon(target))
|
||||
playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE)
|
||||
var/mob/living/carbon/C = target
|
||||
C.DefaultCombatKnockdown(50, override_stamdmg = 0)
|
||||
C.apply_status_effect(/datum/status_effect/corrosion_curse/lesser)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/nightwatchers_rite
|
||||
name = "Nightwatcher's Rite"
|
||||
desc = "Powerful spell that releases 5 streams of fire away from you."
|
||||
school = "transmutation"
|
||||
@@ -307,7 +350,7 @@
|
||||
action_icon_state = "flames"
|
||||
action_background_icon_state = "bg_ecult"
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/ash_final/cast(list/targets, mob/user)
|
||||
/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/cast(list/targets, mob/user)
|
||||
for(var/X in targets)
|
||||
var/T
|
||||
T = line_target(-25, range, X, user)
|
||||
@@ -322,11 +365,12 @@
|
||||
INVOKE_ASYNC(src, .proc/fire_line, user,T)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/ash_final/proc/line_target(offset, range, atom/at , atom/user)
|
||||
/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/proc/line_target(offset, range, atom/at , atom/user)
|
||||
if(!at)
|
||||
return
|
||||
var/angle = ATAN2(at.x - user.x, at.y - user.y) + offset
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(user,'sound/magic/fireball.ogg', 200, 1)
|
||||
for(var/i in 1 to range)
|
||||
var/turf/check = locate(user.x + cos(angle) * i, user.y + sin(angle) * i, user.z)
|
||||
if(!check)
|
||||
@@ -334,7 +378,7 @@
|
||||
T = check
|
||||
return (getline(user, T) - get_turf(user))
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/ash_final/proc/fire_line(atom/source, list/turfs)
|
||||
/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/proc/fire_line(atom/source, list/turfs)
|
||||
var/list/hit_list = list()
|
||||
for(var/turf/T in turfs)
|
||||
if(istype(T, /turf/closed))
|
||||
@@ -347,8 +391,8 @@
|
||||
if(L in hit_list || L == source)
|
||||
continue
|
||||
hit_list += L
|
||||
L.adjustFireLoss(20)
|
||||
to_chat(L, "<span class='userdanger'>You're hit by [source]'s fire breath!</span>")
|
||||
L.adjustFireLoss(15)
|
||||
to_chat(L, "<span class='userdanger'>You're hit by a blast of fire!</span>")
|
||||
|
||||
new /obj/effect/hotspot(T)
|
||||
T.hotspot_expose(700,50,1)
|
||||
@@ -368,7 +412,7 @@
|
||||
possible_shapes = list(/mob/living/simple_animal/mouse,\
|
||||
/mob/living/simple_animal/pet/dog/corgi,\
|
||||
/mob/living/simple_animal/hostile/carp,\
|
||||
/mob/living/simple_animal/bot/secbot, \
|
||||
/mob/living/simple_animal/bot/secbot,\
|
||||
/mob/living/simple_animal/pet/fox,\
|
||||
/mob/living/simple_animal/pet/cat )
|
||||
|
||||
@@ -430,7 +474,7 @@
|
||||
action_background_icon_state = "bg_ecult"
|
||||
range = -1
|
||||
include_user = TRUE
|
||||
charge_max = 700
|
||||
charge_max = 1200
|
||||
action_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
action_icon_state = "fire_ring"
|
||||
///how long it lasts
|
||||
@@ -595,6 +639,39 @@
|
||||
invocation = "AK'LIS"
|
||||
action_background_icon_state = "bg_ecult"
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/trigger/mute/eldritch
|
||||
name = "Silence"
|
||||
desc = "Using the power of the mansus, silences a selected unbeliever for twenty seconds."
|
||||
school = "transmutation"
|
||||
charge_max = 1800
|
||||
clothes_req = FALSE
|
||||
invocation = "VIS'TIEK TAVO'LIZUVIS"
|
||||
invocation_type = "whisper"
|
||||
message = "<span class='userdanger'>It feels as if your tongue is being held down by an unseen force!</span>"
|
||||
starting_spells = list("/obj/effect/proc_holder/spell/targeted/genetic/mute")
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/mute_target.dmi'
|
||||
action_background_icon_state = "bg_ecult"
|
||||
action_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
action_icon_state = "mute"
|
||||
active_msg = "You prepare to silence a target..."
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/mute
|
||||
mutations = list(MUT_MUTE)
|
||||
duration = 200
|
||||
charge_max = 1200 // needs to be higher than the duration or it'll be permanent
|
||||
sound = 'sound/magic/blind.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/trigger/mute/can_target(atom/target, mob/user, silent)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(!isliving(target))
|
||||
if(!silent)
|
||||
to_chat(user, "<span class='warning'>You can only silence living beings!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/entropic
|
||||
icon = 'icons/effects/160x160.dmi'
|
||||
icon_state = "entropic_plume"
|
||||
|
||||
@@ -95,7 +95,30 @@
|
||||
desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a person is in critical condition it finishes them off."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/fiery_rebirth
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/final/ash_final)
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/flame_immunity)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/flame_immunity
|
||||
name = "Nightwatcher's Blessing"
|
||||
gain_text = "The True Light will destroy and make something anew of any individual. If only they accepted it."
|
||||
desc = "Becoming one with the ash, you become immune to fire and heat, allowing you to thrive in a more extreme environment.."
|
||||
cost = 2
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/nightwatchers_rite)
|
||||
route = PATH_ASH
|
||||
var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOFIRE)
|
||||
|
||||
/datum/eldritch_knowledge/flame_immunity/on_gain(mob/living/user)
|
||||
to_chat(user, "<span class='warning'>[gain_text]</span>")
|
||||
for(var/X in trait_list)
|
||||
ADD_TRAIT(user,X,MAGIC_TRAIT)
|
||||
|
||||
/datum/eldritch_knowledge/spell/nightwatchers_rite
|
||||
name = "Nightwatcher's Rite"
|
||||
gain_text = "When the Glory of the Lantern scorches and sears their skin, nothing will protect them from the ashes."
|
||||
desc = "Fire off five streams of fire from your hand, each setting ablaze targets hit and scorching them upon contact."
|
||||
cost = 2
|
||||
spell_to_add = /obj/effect/proc_holder/spell/pointed/nightwatchers_rite
|
||||
next_knowledge = list(/datum/eldritch_knowledge/final/ash_final)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade
|
||||
@@ -167,7 +190,7 @@
|
||||
required_atoms = list(/mob/living/carbon/human)
|
||||
cost = 5
|
||||
route = PATH_ASH
|
||||
var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE)
|
||||
var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE)
|
||||
|
||||
/datum/eldritch_knowledge/final/ash_final/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the blaze, for Ashbringer [user.real_name] has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg')
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
desc = "Empowers your Mansus Grasp to be able to create a single ghoul out of a dead player. You cannot raise the same person twice. Ghouls have only 50 HP and look like husks."
|
||||
cost = 1
|
||||
next_knowledge = list(/datum/eldritch_knowledge/flesh_ghoul)
|
||||
var/ghoul_amt = 6
|
||||
var/ghoul_amt = 4
|
||||
var/list/spooky_scaries
|
||||
route = PATH_FLESH
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
cost = 1
|
||||
required_atoms = list(/obj/item/kitchen/knife,/obj/item/reagent_containers/food/snacks/grown/poppy,/obj/item/pen,/obj/item/paper)
|
||||
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker
|
||||
next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/final/flesh_final)
|
||||
next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/flesh_blade_upgrade_2)
|
||||
route = PATH_FLESH
|
||||
|
||||
/datum/eldritch_knowledge/summon/ashy
|
||||
@@ -250,3 +250,28 @@
|
||||
carbon_user.gib()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade_2
|
||||
name = "Remembrance"
|
||||
gain_text = "Pain isn't something easily forgotten."
|
||||
desc = "Your blade remembers more, and remembers how easily bones broke just as its flesh did, guaranteeing dislocated, or broken bones."
|
||||
cost = 2
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/touch_of_madness)
|
||||
route = PATH_FLESH
|
||||
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade_2/on_eldritch_blade(target,user,proximity_flag,click_parameters)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
var/obj/item/bodypart/bodypart = pick(carbon_target.bodyparts)
|
||||
var/datum/wound/blunt/moderate/moderate_wound = new
|
||||
moderate_wound.apply_wound(bodypart)
|
||||
|
||||
/datum/eldritch_knowledge/spell/touch_of_madness
|
||||
name = "Touch of Madness"
|
||||
gain_text = "The ignorant mind that inhabits their feeble bodies will crumble when they acknowledge - willingly or not, the truth."
|
||||
desc = "By forcing the knowledge of the Mansus upon my foes, I can show them things that would drive any normal man insane."
|
||||
cost = 2
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mad_touch
|
||||
next_knowledge = list(/datum/eldritch_knowledge/final/flesh_final)
|
||||
route = PATH_FLESH
|
||||
|
||||
@@ -27,8 +27,13 @@
|
||||
if(E)
|
||||
E.on_effect()
|
||||
H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25)
|
||||
else
|
||||
for(var/X in user.mind.spell_list)
|
||||
if(!istype(X,/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp))
|
||||
continue
|
||||
var/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp/MG = X
|
||||
MG.charge_counter = min(round(MG.charge_counter + MG.charge_max * 0.75),MG.charge_max)
|
||||
target.rust_heretic_act()
|
||||
target.emp_act(EMP_HEAVY)
|
||||
return TRUE
|
||||
|
||||
/datum/eldritch_knowledge/spell/area_conversion
|
||||
@@ -43,7 +48,7 @@
|
||||
/datum/eldritch_knowledge/spell/rust_wave
|
||||
name = "Patron's Reach"
|
||||
desc = "You can now send a bolt of rust that corrupts the immediate area, and poisons the first target hit."
|
||||
gain_text = "Messengers of hope fear the rustbringer."
|
||||
gain_text = "Messengers of hope fear the Rustbringer."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/aimed/rust_wave
|
||||
route = PATH_RUST
|
||||
@@ -92,19 +97,20 @@
|
||||
banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade)
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters)
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(mob/target,user,proximity_flag,click_parameters)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
carbon_target.reagents.add_reagent(/datum/reagent/eldritch, 5)
|
||||
if(!IS_HERETIC(target))
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
carbon_target.reagents.add_reagent(/datum/reagent/eldritch, 5)
|
||||
|
||||
/datum/eldritch_knowledge/spell/entropic_plume
|
||||
name = "Entropic Plume"
|
||||
desc = "You can now send a befuddling plume that blinds, poisons and makes enemies strike each other, while also converting the immediate area into rust."
|
||||
gain_text = "Messengers of hope fear the rustbringer."
|
||||
gain_text = "If they knew, the truth would turn them against eachother."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/cone/staggered/entropic_plume
|
||||
next_knowledge = list(/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/rusty)
|
||||
next_knowledge = list(/datum/eldritch_knowledge/rust_fist_upgrade,/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/rusty)
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/armor
|
||||
@@ -119,12 +125,38 @@
|
||||
/datum/eldritch_knowledge/essence
|
||||
name = "Priest's Ritual"
|
||||
desc = "You can now transmute a tank of water into a bottle of eldritch fluid."
|
||||
gain_text = "This is an old recipe, i got it from an owl."
|
||||
gain_text = "This is an old recipe, I got it from an owl."
|
||||
cost = 1
|
||||
next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/spell/ashen_shift)
|
||||
required_atoms = list(/obj/structure/reagent_dispensers/watertank)
|
||||
result_atoms = list(/obj/item/reagent_containers/glass/beaker/eldritch)
|
||||
|
||||
/datum/eldritch_knowledge/rust_fist_upgrade
|
||||
name = "Vile Grip"
|
||||
desc = "Empowers your Mansus Grasp further, sickening your foes and making them vomit, while also strengthening the rate at which your hand decays objects."
|
||||
gain_text = "A sickly diseased touch that was, yet, so welcoming."
|
||||
cost = 2
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/grasp_of_decay)
|
||||
var/rust_force = 750
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava,/turf/open/chasm,/turf/open/floor/plating/rust))
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/rust_fist_upgrade/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.set_disgust(75)
|
||||
return TRUE
|
||||
|
||||
/datum/eldritch_knowledge/spell/grasp_of_decay
|
||||
name = "Grasp of Decay"
|
||||
desc = "Applying your knowledge of rust to the human body, a knowledge that could decay your foes from the inside out, resulting in organ failure, vomiting, or eventual death through peeling flesh."
|
||||
gain_text = "Decay, similar to Rust, yet so much more terribly uninviting."
|
||||
cost = 2
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay
|
||||
next_knowledge = list(/datum/eldritch_knowledge/final/rust_final)
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/final/rust_final
|
||||
name = "Rustbringer's Oath"
|
||||
desc = "Bring three corpses onto a transmutation rune. After you finish the ritual, rust will now automatically spread from the rune. Your healing on rust is also tripled, while you become more resilient overall."
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
name = "Spawn Revenant" // Did you mean 'griefghost'?
|
||||
typepath = /datum/round_event/ghost_role/revenant
|
||||
weight = 7
|
||||
gamemode_blacklist = list("dynamic")
|
||||
max_occurrences = 1
|
||||
min_players = 5
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
max_occurrences = 1 //Only once okay fam
|
||||
earliest_start = 30 MINUTES
|
||||
min_players = 35
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
|
||||
/datum/round_event/spawn_swarmer
|
||||
|
||||
@@ -13,6 +13,13 @@
|
||||
//////////////////// Paperwork and Writing Supplies //////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/datum/supply_pack/misc/anvil
|
||||
name = "Anvil Crate"
|
||||
desc = "An anvil in a crate, we had to dig this out of the old warehouse. It's got wheels on it so you can move it."
|
||||
cost = 7500
|
||||
contains = list(/obj/structure/anvil/obtainable/basic)
|
||||
|
||||
/datum/supply_pack/misc/artsupply
|
||||
name = "Art Supplies"
|
||||
desc = "Make some happy little accidents with six canvasses, two easels, two boxes of crayons, and a rainbow crayon!"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
max_occurrences = 1
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace
|
||||
startWhen = 3
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
min_players = 10
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux
|
||||
startWhen = 10
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_pyro
|
||||
startWhen = 3
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
min_players = 20
|
||||
max_occurrences = 2
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex
|
||||
startWhen = 10
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
typepath = /datum/round_event/brain_trauma
|
||||
weight = 25
|
||||
|
||||
/datum/round_event_control/brain_trauma/canSpawnEvent(var/players_amt, var/gamemode)
|
||||
var/list/enemy_roles = list("Medical Doctor","Chief Medical Officer","Paramedic")
|
||||
for (var/mob/M in GLOB.alive_mob_list)
|
||||
if(M.stat != DEAD && (M.mind?.assigned_role in enemy_roles))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/round_event/brain_trauma
|
||||
fakeable = FALSE
|
||||
|
||||
@@ -16,18 +23,19 @@
|
||||
continue
|
||||
if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(!is_station_level(H.z))
|
||||
continue
|
||||
traumatize(H)
|
||||
break
|
||||
|
||||
/datum/round_event/brain_trauma/proc/traumatize(mob/living/carbon/human/H)
|
||||
var/resistance = pick(
|
||||
65;TRAUMA_RESILIENCE_BASIC,
|
||||
30;TRAUMA_RESILIENCE_SURGERY,
|
||||
5;TRAUMA_RESILIENCE_LOBOTOMY)
|
||||
35;TRAUMA_RESILIENCE_SURGERY)
|
||||
|
||||
var/trauma_type = pickweight(list(
|
||||
BRAIN_TRAUMA_MILD = 60,
|
||||
BRAIN_TRAUMA_SEVERE = 30,
|
||||
BRAIN_TRAUMA_MILD = 80,
|
||||
BRAIN_TRAUMA_SEVERE = 10,
|
||||
BRAIN_TRAUMA_SPECIAL = 10
|
||||
))
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
min_players = 15
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/brand_intelligence
|
||||
announceWhen = 21
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
min_players = 2
|
||||
earliest_start = 10 MINUTES
|
||||
max_occurrences = 6
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/carp_migration
|
||||
announceWhen = 3
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Communications Blackout"
|
||||
typepath = /datum/round_event/communications_blackout
|
||||
weight = 30
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/communications_blackout
|
||||
announceWhen = 1
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
max_occurrences = 1000
|
||||
earliest_start = 0 MINUTES
|
||||
alert_observers = FALSE
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/space_dust
|
||||
startWhen = 1
|
||||
@@ -29,4 +28,4 @@
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/sandstorm/tick()
|
||||
spawn_meteors(10, GLOB.meteorsC)
|
||||
spawn_meteors(10, GLOB.meteorsC)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
min_players = 5
|
||||
weight = 40
|
||||
alert_observers = FALSE
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/electrical_storm
|
||||
var/lightsoutAmount = 1
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
weight = 20
|
||||
max_occurrences = 2
|
||||
min_players = 40 // To avoid shafting lowpop
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/heart_attack/start()
|
||||
var/list/heart_attack_contestants = list()
|
||||
@@ -20,4 +19,4 @@
|
||||
var/mob/living/carbon/human/winner = pickweight(heart_attack_contestants)
|
||||
var/datum/disease/D = new /datum/disease/heart_failure()
|
||||
winner.ForceContractDisease(D, FALSE, TRUE)
|
||||
announce_to_ghosts(winner)
|
||||
announce_to_ghosts(winner)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
/datum/round_event_control/ion_storm
|
||||
name = "Ion Storm"
|
||||
typepath = /datum/round_event/ion_storm
|
||||
gamemode_blacklist = list("dynamic")
|
||||
weight = 15
|
||||
min_players = 2
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Major Space Dust"
|
||||
typepath = /datum/round_event/meteor_wave/major_dust
|
||||
weight = 8
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/meteor_wave/major_dust
|
||||
wave_name = "space dust"
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
min_players = 15
|
||||
max_occurrences = 3
|
||||
earliest_start = 25 MINUTES
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/meteor_wave
|
||||
startWhen = 6
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Spawn Nightmare"
|
||||
typepath = /datum/round_event/ghost_role/nightmare
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
min_players = 20
|
||||
|
||||
/datum/round_event/ghost_role/nightmare
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
max_occurrences = 1
|
||||
min_players = 10
|
||||
earliest_start = 30 MINUTES
|
||||
gamemode_blacklist = list("nuclear","dynamic")
|
||||
gamemode_blacklist = list("nuclear")
|
||||
|
||||
/datum/round_event_control/pirates/preRunEvent()
|
||||
if (!SSmapping.empty_space)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
weight = 2
|
||||
min_players = 15
|
||||
earliest_start = 30 MINUTES
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/portal_storm/syndicate_shocktroop
|
||||
boss_types = list(/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper = 2)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
typepath = /datum/round_event/processor_overload
|
||||
weight = 15
|
||||
min_players = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/processor_overload
|
||||
announceWhen = 1
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Radiation Storm"
|
||||
typepath = /datum/round_event/radiation_storm
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/radiation_storm
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Spider Infestation"
|
||||
typepath = /datum/round_event/spider_infestation
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
max_occurrences = 1
|
||||
min_players = 15
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
typepath = /datum/round_event/vent_clog
|
||||
weight = 10
|
||||
max_occurrences = 3
|
||||
gamemode_blacklist = list("dynamic")
|
||||
min_players = 25
|
||||
|
||||
/datum/round_event/vent_clog
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
max_occurrences = 3
|
||||
weight = 2
|
||||
min_players = 2
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
|
||||
/datum/round_event/wormholes
|
||||
|
||||
@@ -12,13 +12,14 @@
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
var/cooldown = 35
|
||||
var/current_cooldown = 0
|
||||
var/range = 7
|
||||
|
||||
/obj/item/mining_scanner/attack_self(mob/user)
|
||||
if(!user.client)
|
||||
return
|
||||
if(current_cooldown <= world.time)
|
||||
current_cooldown = world.time + cooldown
|
||||
mineral_scan_pulse(get_turf(user))
|
||||
mineral_scan_pulse(get_turf(user), range)
|
||||
|
||||
//Debug item to identify all ore spread quickly
|
||||
/obj/item/mining_scanner/admin
|
||||
|
||||
@@ -0,0 +1,315 @@
|
||||
#define WORKPIECE_PRESENT 1
|
||||
#define WORKPIECE_INPROGRESS 2
|
||||
#define WORKPIECE_FINISHED 3
|
||||
#define WORKPIECE_SLAG 5
|
||||
|
||||
#define RECIPE_SMALLPICK "dbp" //draw bend punch
|
||||
#define RECIPE_LARGEPICK "ddbp" //draw draw bend punch
|
||||
#define RECIPE_SHOVEL "dfup" //draw fold upset punch
|
||||
#define RECIPE_HAMMER "sfp" //shrink fold punch
|
||||
|
||||
|
||||
#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw
|
||||
#define RECIPE_SHORTSWORD "dff" //draw fold fold
|
||||
#define RECIPE_WAKI "dfsf" //draw fold shrink fold
|
||||
#define RECIPE_SCIMITAR "dfb" //draw fold bend
|
||||
#define RECIPE_SABRE "ddsf" //draw draw shrink fold
|
||||
#define RECIPE_RAPIER "sdfd" //shrink draw fold draw
|
||||
#define RECIPE_BROADSWORD "dfuf" //draw fold upset fold
|
||||
#define RECIPE_ZWEIHANDER "udfsf" //upset draw fold shrink fold
|
||||
#define RECIPE_KATANA "fffff" //fold fold fold fold fold
|
||||
|
||||
|
||||
#define RECIPE_SCYTHE "bdf" //bend draw fold
|
||||
#define RECIPE_COGHEAD "bsf" //bend shrink fold.
|
||||
|
||||
|
||||
#define RECIPE_JAVELIN "dbf" //draw bend fold
|
||||
#define RECIPE_HALBERD "duffp" //draw upset fold fold punch
|
||||
#define RECIPE_GLAIVE "usfp" //upset shrink fold punch
|
||||
#define RECIPE_PIKE "ddbf" //draw draw bend fold
|
||||
|
||||
/obj/structure/anvil
|
||||
name = "anvil"
|
||||
desc = "Base class of anvil. This shouldn't exist, but is useable."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "anvil"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/workpiece_state = FALSE
|
||||
var/datum/material/workpiece_material
|
||||
var/anvilquality = 0
|
||||
var/currentquality = 0 //lolman? what the fuck do these vars do?
|
||||
var/currentsteps = 0 //even i don't know
|
||||
var/outrightfailchance = 1 //todo: document this shit
|
||||
var/stepsdone = ""
|
||||
var/rng = FALSE
|
||||
var/debug = FALSE //vv this if you want an artifact
|
||||
var/artifactrolled = FALSE
|
||||
var/itemqualitymax = 20
|
||||
var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead,
|
||||
RECIPE_SCYTHE = /obj/item/smithing/scytheblade,
|
||||
RECIPE_SHOVEL = /obj/item/smithing/shovelhead,
|
||||
RECIPE_COGHEAD = /obj/item/smithing/cogheadclubhead,
|
||||
RECIPE_JAVELIN = /obj/item/smithing/javelinhead,
|
||||
RECIPE_LARGEPICK = /obj/item/smithing/pickaxehead,
|
||||
RECIPE_SMALLPICK = /obj/item/smithing/prospectingpickhead,
|
||||
RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade,
|
||||
RECIPE_SCIMITAR = /obj/item/smithing/scimitarblade,
|
||||
RECIPE_WAKI = /obj/item/smithing/wakiblade,
|
||||
RECIPE_RAPIER = /obj/item/smithing/rapierblade,
|
||||
RECIPE_SABRE = /obj/item/smithing/sabreblade,
|
||||
RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade,
|
||||
RECIPE_BROADSWORD = /obj/item/smithing/broadblade,
|
||||
RECIPE_ZWEIHANDER = /obj/item/smithing/zweiblade,
|
||||
RECIPE_KATANA = /obj/item/smithing/katanablade,
|
||||
RECIPE_HALBERD = /obj/item/smithing/halberdhead,
|
||||
RECIPE_GLAIVE = /obj/item/smithing/glaivehead,
|
||||
RECIPE_PIKE = /obj/item/smithing/pikehead)
|
||||
|
||||
/obj/structure/anvil/Initialize()
|
||||
..()
|
||||
currentquality = anvilquality
|
||||
|
||||
/obj/structure/anvil/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/ingot))
|
||||
var/obj/item/ingot/notsword = I
|
||||
if(workpiece_state)
|
||||
to_chat(user, "There's already a workpiece! Finish it or take it off.")
|
||||
return FALSE
|
||||
if(notsword.workability == "shapeable")
|
||||
workpiece_state = WORKPIECE_PRESENT
|
||||
workpiece_material = notsword.custom_materials
|
||||
to_chat(user, "You place the [notsword] on the [src].")
|
||||
currentquality = anvilquality
|
||||
var/skillmod = 0
|
||||
if(user.mind.skill_holder)
|
||||
skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/2
|
||||
currentquality += skillmod
|
||||
qdel(notsword)
|
||||
else
|
||||
to_chat(user, "The ingot isn't workable yet!")
|
||||
return FALSE
|
||||
return
|
||||
else if(istype(I, /obj/item/melee/smith/hammer))
|
||||
var/obj/item/melee/smith/hammer/hammertime = I
|
||||
if(workpiece_state == WORKPIECE_PRESENT || workpiece_state == WORKPIECE_INPROGRESS)
|
||||
do_shaping(user, hammertime.qualitymod)
|
||||
return
|
||||
else
|
||||
to_chat(user, "You can't work an empty anvil!")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/structure/anvil/wrench_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
default_unfasten_wrench(user, I, 5)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange)
|
||||
currentquality += qualitychange
|
||||
var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape.
|
||||
workpiece_state = WORKPIECE_INPROGRESS
|
||||
var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps
|
||||
var/steptime = 50
|
||||
if(user.mind.skill_holder)
|
||||
var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1
|
||||
steptime = 50 / skillmod
|
||||
playsound(src, 'sound/effects/clang2.ogg',40, 2)
|
||||
if(!do_after(user, steptime, target = src))
|
||||
return FALSE
|
||||
switch(stepdone)
|
||||
if("weak hit")
|
||||
currentsteps += 1
|
||||
outrightfailchance += 5
|
||||
currentquality += 1
|
||||
if("strong hit")
|
||||
currentsteps += 2
|
||||
outrightfailchance += 9.5
|
||||
currentquality += 2
|
||||
if("heavy hit")
|
||||
currentsteps += 3
|
||||
outrightfailchance += 12.5
|
||||
currentquality += 3
|
||||
if("fold")
|
||||
stepsdone += "f"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("draw")
|
||||
stepsdone += "d"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("shrink")
|
||||
stepsdone += "s"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("bend")
|
||||
stepsdone += "b"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("punch")
|
||||
stepsdone += "p"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("upset")
|
||||
stepsdone += "u"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
user.visible_message("<span class='notice'>[user] works the metal on the anvil with their hammer with a loud clang!</span>", \
|
||||
"<span class='notice'>You [stepdone] the metal with a loud clang!</span>")
|
||||
playsound(src, 'sound/effects/clang2.ogg',40, 2)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 40, 2), 15)
|
||||
if(length(stepsdone) >= 3)
|
||||
tryfinish(user)
|
||||
|
||||
/obj/structure/anvil/proc/tryfinish(mob/user)
|
||||
var/artifactchance = 0
|
||||
if(!artifactrolled)
|
||||
artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500
|
||||
artifactrolled = TRUE
|
||||
var/artifact = max(prob(artifactchance), debug)
|
||||
var/finalfailchance = outrightfailchance
|
||||
if(user.mind.skill_holder)
|
||||
var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1
|
||||
finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc
|
||||
if((currentsteps > 10 || (rng && prob(finalfailchance))) && !artifact)
|
||||
to_chat(user, "<span class='warning'?You overwork the metal, causing it to turn into useless slag!</span>")
|
||||
var/turf/T = get_turf(user)
|
||||
workpiece_state = FALSE
|
||||
new /obj/item/stack/ore/slag(T)
|
||||
currentquality = anvilquality
|
||||
stepsdone = ""
|
||||
currentsteps = 0
|
||||
outrightfailchance = 1
|
||||
artifactrolled = FALSE
|
||||
if(user.mind.skill_holder)
|
||||
user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE)
|
||||
for(var/i in smithrecipes)
|
||||
if(i == stepsdone)
|
||||
var/turf/T = get_turf(user)
|
||||
var/obj/item/smithing/create = smithrecipes[stepsdone]
|
||||
var/obj/item/smithing/finisheditem = new create(T)
|
||||
to_chat(user, "You finish your [finisheditem]!")
|
||||
if(artifact)
|
||||
to_chat(user, "It is an artifact, a creation whose legacy shall live on forevermore.") //todo: SSblackbox
|
||||
currentquality = max(currentquality, 2)
|
||||
finisheditem.quality = currentquality * 3//this is insane i know it's 1/2500 for most of the time and 0.8% at best
|
||||
finisheditem.artifact = TRUE
|
||||
else
|
||||
finisheditem.quality = min(currentquality, itemqualitymax)
|
||||
switch(finisheditem.quality)
|
||||
if(-1000 to -8)
|
||||
finisheditem.desc = "It looks to be the most awfully made object you've ever seen."
|
||||
if(-8)
|
||||
finisheditem.desc = "It looks to be the second most awfully made object you've ever seen."
|
||||
if(-8 to 0)
|
||||
finisheditem.desc = "It looks to be barely passable as... whatever it's trying to pass for."
|
||||
if(0)
|
||||
finisheditem.desc = "It looks to be totally average."
|
||||
if(0 to INFINITY)
|
||||
finisheditem.desc = "It looks to be better than average."
|
||||
workpiece_state = FALSE
|
||||
finisheditem.set_custom_materials(workpiece_material)
|
||||
currentquality = anvilquality
|
||||
stepsdone = ""
|
||||
currentsteps = 0
|
||||
outrightfailchance = 1
|
||||
artifactrolled = FALSE
|
||||
if(user.mind.skill_holder)
|
||||
user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 50, 10000000, silent = FALSE)
|
||||
break
|
||||
|
||||
/obj/structure/anvil/debugsuper
|
||||
name = "super ultra epic anvil of debugging."
|
||||
desc = "WOW. A DEBUG <del>ITEM</DEL> STRUCTURE. EPIC."
|
||||
icon_state = "anvil"
|
||||
anvilquality = 10
|
||||
itemqualitymax = 9001
|
||||
outrightfailchance = 0
|
||||
|
||||
/obj/structure/anvil/obtainable
|
||||
name = "anvil"
|
||||
desc = "Base class of anvil. This shouldn't exist, but is useable."
|
||||
anvilquality = 0
|
||||
outrightfailchance = 5
|
||||
rng = TRUE
|
||||
|
||||
/obj/structure/anvil/obtainable/table
|
||||
name = "table anvil"
|
||||
desc = "A slightly reinforced table. Good luck."
|
||||
icon_state = "tablevil"
|
||||
anvilquality = -2
|
||||
itemqualitymax = 0
|
||||
|
||||
|
||||
/obj/structure/anvil/obtainable/table/do_shaping(mob/user, var/qualitychange)
|
||||
if(prob(5))
|
||||
to_chat(user, "The [src] breaks under the strain!")
|
||||
take_damage(max_integrity)
|
||||
return FALSE
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/anvil/obtainable/bronze
|
||||
name = "slab of bronze"
|
||||
desc = "A big block of bronze. Useable as an anvil."
|
||||
custom_materials = list(/datum/material/bronze=8000)
|
||||
icon_state = "ratvaranvil"
|
||||
anvilquality = -0.5
|
||||
itemqualitymax = 2
|
||||
|
||||
/obj/structure/anvil/obtainable/sandstone
|
||||
name = "sandstone brick anvil"
|
||||
desc = "A big block of sandstone. Useable as an anvil."
|
||||
custom_materials = list(/datum/material/sandstone=8000)
|
||||
icon_state = "sandvil"
|
||||
anvilquality = -1
|
||||
itemqualitymax = 2
|
||||
|
||||
/obj/structure/anvil/obtainable/basalt
|
||||
name = "basalt brick anvil"
|
||||
desc = "A big block of basalt. Useable as an anvil, better than sandstone. Igneous!"
|
||||
icon_state = "sandvilnoir"
|
||||
anvilquality = -0.5
|
||||
itemqualitymax = 4
|
||||
|
||||
/obj/structure/anvil/obtainable/basic
|
||||
name = "anvil"
|
||||
desc = "An anvil. It's got wheels bolted to the bottom."
|
||||
anvilquality = 0
|
||||
itemqualitymax = 6
|
||||
|
||||
/obj/structure/anvil/obtainable/ratvar
|
||||
name = "brass anvil"
|
||||
desc = "A big block of what appears to be brass. Useable as an anvil, if whatever's holding the brass together lets you."
|
||||
custom_materials = list(/datum/material/bronze=8000)
|
||||
icon_state = "ratvaranvil"
|
||||
anvilquality = 1
|
||||
itemqualitymax = 8
|
||||
|
||||
/obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user)
|
||||
if(is_servant_of_ratvar(user))
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='neovgre'>KNPXWN, QNJCQNW!</span>") //rot13 then rot22 if anyone wants to decode
|
||||
|
||||
/obj/structure/anvil/obtainable/narsie
|
||||
name = "runic anvil"
|
||||
desc = "An anvil made of a strange, runic metal."
|
||||
custom_materials = list(/datum/material/runedmetal=8000)
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "evil"
|
||||
anvilquality = 1
|
||||
itemqualitymax = 8
|
||||
|
||||
/obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user)
|
||||
if(iscultist(user))
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='narsiesmall'>That is not yours to use!</span>")
|
||||
|
||||
#undef WORKPIECE_PRESENT
|
||||
#undef WORKPIECE_INPROGRESS
|
||||
#undef WORKPIECE_FINISHED
|
||||
#undef WORKPIECE_SLAG
|
||||
@@ -0,0 +1,329 @@
|
||||
|
||||
/obj/item/melee/smith
|
||||
name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit.
|
||||
desc = "cringe"
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "claymore"
|
||||
item_state = "claymore"
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
force = 6
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
var/quality
|
||||
var/overlay_state = "stick"
|
||||
var/mutable_appearance/overlay
|
||||
var/wielded_mult = 1
|
||||
var/wield_force = 15
|
||||
|
||||
/obj/item/melee/smith/Initialize()
|
||||
..()
|
||||
if(desc == "cringe")
|
||||
desc = "A handmade [name]."
|
||||
overlay = mutable_appearance(icon, overlay_state)
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(overlay)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
|
||||
/obj/item/melee/smith/twohand
|
||||
item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it.
|
||||
sharpness = SHARP_EDGED
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
force = 10
|
||||
wielded_mult = 1.75
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/melee/smith/twohand/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad.
|
||||
AddElement(/datum/element/sword_point)
|
||||
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// Mining //
|
||||
///////////////////////////
|
||||
/obj/item/mining_scanner/prospector
|
||||
name = "prospector's pickaxe"
|
||||
desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations."
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "minipick" //todo:sprite
|
||||
sharpness = SHARP_POINTY//it doesnt have a blade it has a point
|
||||
|
||||
/obj/item/mining_scanner/prospector/Initialize()
|
||||
..()
|
||||
var/mutable_appearance/overlay
|
||||
desc = "A handmade [name]."
|
||||
overlay = mutable_appearance(icon, "minihandle")
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(overlay)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
/obj/item/pickaxe/smithed
|
||||
name = "pickaxe"
|
||||
desc = "A pickaxe."
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "pickaxe"
|
||||
sharpness = SHARP_POINTY
|
||||
|
||||
/obj/item/pickaxe/smithed/Initialize()
|
||||
..()
|
||||
desc = "A handmade [name]."
|
||||
var/mutable_appearance/overlay
|
||||
overlay = mutable_appearance(icon, "stick")
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(overlay)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
/obj/item/pickaxe/smithed/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>Tool does not have a configureable dig range.</span>")
|
||||
|
||||
/obj/item/shovel/smithed
|
||||
name = "shovel"
|
||||
desc = "A shovel."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
icon_state = "shovel"
|
||||
sharpness = SHARP_EDGED //it cuts through the earth
|
||||
|
||||
/obj/item/shovel/smithed/Initialize()
|
||||
..()
|
||||
desc = "A handmade [name]."
|
||||
var/mutable_appearance/overlay
|
||||
overlay = mutable_appearance(icon, "shovelhandle")
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(overlay)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// Spears //
|
||||
///////////////////////////
|
||||
|
||||
|
||||
/obj/item/melee/smith/twohand/halberd
|
||||
name = "halberd"
|
||||
icon_state = "halberd"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
overlay_state = "spearhandle"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
wielded_mult = 2.5
|
||||
|
||||
/obj/item/melee/smith/twohand/halberd/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/jousting)
|
||||
|
||||
/obj/item/melee/smith/twohand/javelin
|
||||
name = "javelin"
|
||||
icon_state = "javelin"
|
||||
overlay_state = "longhandle"
|
||||
wielded_mult = 1.5
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
sharpness = SHARP_POINTY
|
||||
|
||||
|
||||
/obj/item/melee/smith/twohand/javelin/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/jousting)
|
||||
|
||||
/obj/item/melee/smith/twohand/glaive
|
||||
name = "glaive"
|
||||
icon_state = "glaive"
|
||||
overlay_state = "longhandle"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
wielded_mult = 2
|
||||
|
||||
/obj/item/melee/smith/twohand/glaive/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/jousting)
|
||||
|
||||
|
||||
/obj/item/melee/smith/twohand/pike
|
||||
name = "pike"
|
||||
icon_state = "pike"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
overlay_state = "longhandle"
|
||||
reach = 2 //yeah ok
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
sharpness = SHARP_POINTY
|
||||
|
||||
//////////////////////////
|
||||
// Other Melee //
|
||||
///////////////////////////
|
||||
|
||||
|
||||
/obj/item/melee/smith/hammer//blacksmithing, not warhammer.
|
||||
name = "hammer"
|
||||
icon_state = "hammer"
|
||||
overlay_state = "hammerhandle"
|
||||
var/qualitymod = 0
|
||||
|
||||
/obj/item/scythe/smithed //we need to inherit scythecode, but that's about it.
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
|
||||
|
||||
/obj/item/melee/smith/cogheadclub
|
||||
name = "coghead club"
|
||||
icon_state = "coghead"
|
||||
item_flags = NEEDS_PERMIT
|
||||
overlay_state = "stick"
|
||||
|
||||
/obj/item/melee/smith/shortsword
|
||||
name = "gladius"
|
||||
force = 9
|
||||
item_flags = NEEDS_PERMIT
|
||||
sharpness = SHARP_EDGED
|
||||
icon_state = "gladius"
|
||||
overlay_state = "gladiushilt"
|
||||
|
||||
/obj/item/melee/smith/shortsword/scimitar
|
||||
name = "scimitar"
|
||||
sharpness = SHARP_EDGED
|
||||
icon_state = "scimitar"
|
||||
overlay_state = "scimitarhilt"
|
||||
|
||||
/obj/item/melee/smith/wakizashi
|
||||
name = "wakizashi"
|
||||
sharpness = SHARP_EDGED
|
||||
force = 7
|
||||
item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY
|
||||
obj_flags = UNIQUE_RENAME
|
||||
icon_state = "waki"
|
||||
overlay_state = "wakihilt"
|
||||
block_parry_data = /datum/block_parry_data/waki
|
||||
|
||||
/datum/block_parry_data/waki //like longbokken but worse reflect
|
||||
parry_stamina_cost = 6
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 15 //decent window
|
||||
parry_time_spindown = 0
|
||||
parry_time_perfect = 2
|
||||
parry_time_perfect_leeway = 0.75
|
||||
parry_imperfect_falloff_percent = 7.5
|
||||
parry_efficiency_to_counterattack = 100
|
||||
parry_efficiency_considered_successful = 80
|
||||
parry_efficiency_perfect = 120
|
||||
parry_failed_stagger_duration = 3 SECONDS
|
||||
parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.9)
|
||||
|
||||
/obj/item/melee/smith/twohand/broadsword
|
||||
name = "broadsword"
|
||||
icon_state = "broadsword"
|
||||
overlay_state = "broadhilt"
|
||||
wielded_mult = 1.8
|
||||
|
||||
/obj/item/melee/smith/twohand/zweihander
|
||||
name = "zweihander"
|
||||
icon_state = "zwei"
|
||||
overlay_state = "zweihilt"
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON * 2
|
||||
force = 4
|
||||
wielded_mult = 3 //affected more by quality. a -1 is 25% less damage, a +1 is 25% more. These bonuses are tripled when wielded.
|
||||
|
||||
/obj/item/melee/smith/twohand/katana
|
||||
name = "katana"
|
||||
icon_state = "katana"
|
||||
overlay_state = "katanahilt"
|
||||
force = 7
|
||||
wielded_mult = 2
|
||||
item_flags = ITEM_CAN_PARRY | NEEDS_PERMIT //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot.
|
||||
obj_flags = UNIQUE_RENAME
|
||||
block_parry_data = /datum/block_parry_data/captain_saber //todo
|
||||
|
||||
/obj/item/melee/smith/sabre
|
||||
name = "sabre"
|
||||
icon_state = "sabre"
|
||||
sharpness = SHARP_EDGED
|
||||
overlay_state = "sabrehilt"
|
||||
armour_penetration = 15
|
||||
force = 9
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY
|
||||
block_parry_data = /datum/block_parry_data/captain_saber //yeah this is fine i guess
|
||||
|
||||
/obj/item/melee/smith/sabre/rapier
|
||||
name = "rapier"
|
||||
icon_state = "rapier"
|
||||
sharpness = SHARP_EDGED
|
||||
overlay_state = "rapierhilt"
|
||||
force = 6 //less force, stronger parry
|
||||
sharpness = SHARP_POINTY
|
||||
armour_penetration = 30
|
||||
block_parry_data = /datum/block_parry_data/smithrapier
|
||||
|
||||
/datum/block_parry_data/smithrapier //parry into riposte. i am pretty sure this is going to be nearly fucking impossible to land.
|
||||
parry_stamina_cost = 12 //dont miss
|
||||
parry_time_active = 4
|
||||
parry_time_perfect = 2
|
||||
parry_time_perfect_leeway = 2
|
||||
parry_failed_stagger_duration = 3 SECONDS
|
||||
parry_failed_clickcd_duration = 3 SECONDS
|
||||
parry_time_windup = 0
|
||||
parry_time_spindown = 0
|
||||
parry_imperfect_falloff_percent = 0
|
||||
parry_efficiency_to_counterattack = 100
|
||||
parry_efficiency_considered_successful = 120
|
||||
parry_efficiency_perfect = 120
|
||||
parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 4)
|
||||
|
||||
//unique hammers
|
||||
/obj/item/melee/smith/hammer/toolbox
|
||||
name = "toolbox hammer"
|
||||
desc = "A metal filled toolbox on a stick. Useable as a really shitty hammer."
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
icon_state = "toolbox"
|
||||
overlay_state = "hammerhandle"
|
||||
qualitymod = -2
|
||||
|
||||
/obj/item/melee/smith/hammer/narsie
|
||||
name = "runemetal hammer"
|
||||
custom_materials = list(/datum/material/runedmetal = 12000)
|
||||
desc = "A metal hammer inscribed with geometeric runes."
|
||||
qualitymod = 1
|
||||
|
||||
/obj/item/melee/smith/hammer/narsie/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!iscultist(user))
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>", \
|
||||
"<span class='cultlarge'>\"You shouldn't be touching tools that aren't yours.\"</span>")
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
|
||||
else
|
||||
user.adjustBruteLoss(rand(force/2,force))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/melee/smith/hammer/ratvar
|
||||
name = "brass hammer"
|
||||
custom_materials = list(/datum/material/bronze = 12000)
|
||||
desc = "A brass hammer inscribed with... writing? You can't read it."
|
||||
qualitymod = 1
|
||||
|
||||
/obj/item/melee/smith/hammer/ratvar/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!is_servant_of_ratvar(user))
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>", "<span class='neovgre'>\"You shouldn't be touching tools that aren't yours.\"</span>")
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
|
||||
else
|
||||
user.adjustBruteLoss(rand(force/2,force))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/melee/smith/hammer/debug
|
||||
name = "debugging hammer"
|
||||
desc = "A DEBUGGING HAMMER!! EPIC!!."
|
||||
qualitymod = 10
|
||||
@@ -0,0 +1,75 @@
|
||||
/obj/structure/furnace
|
||||
name = "furnace"
|
||||
desc = "A furnace."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "furnace0"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/debug = FALSE //debugging only
|
||||
var/working = TRUE
|
||||
var/fueluse = 1
|
||||
|
||||
|
||||
/obj/structure/furnace/Initialize()
|
||||
..()
|
||||
create_reagents(250, TRANSPARENT)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/furnace/Destroy()
|
||||
..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/furnace/process()
|
||||
if(debug)
|
||||
reagents.add_reagent(/datum/reagent/fuel, 1)
|
||||
return TRUE
|
||||
if(reagents.remove_reagent(/datum/reagent/fuel, fueluse))
|
||||
working = TRUE
|
||||
if(icon_state == "furnace0")
|
||||
icon_state = "furnace1"
|
||||
else
|
||||
working = FALSE
|
||||
icon_state = "furnace0"
|
||||
|
||||
/obj/structure/furnace/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/ingot))
|
||||
var/obj/item/ingot/notsword = I
|
||||
if(working)
|
||||
to_chat(user, "You heat the [notsword] in the [src].")
|
||||
notsword.workability = "shapeable"
|
||||
else
|
||||
to_chat(user, "The furnace isn't working!.")
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/furnace/wrench_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
default_unfasten_wrench(user, I, 5)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/furnace/attackby(obj/item/W, mob/user, params)
|
||||
if(W.reagents)
|
||||
W.reagents.trans_to(src, 250)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/furnace/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
|
||||
to_chat(user, "<span class='notice'>You start furiously plunging [name].")
|
||||
if(do_after(user, 30, target = src))
|
||||
to_chat(user, "<span class='notice'>You finish plunging the [name].")
|
||||
reagents.reaction(get_turf(src), TOUCH) //splash on the floor
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/structure/furnace/infinite
|
||||
name = "fuelless furnace"
|
||||
debug = TRUE
|
||||
icon_state = "ratfurnace"
|
||||
|
||||
|
||||
/obj/structure/furnace/infinite/ratvar
|
||||
name = "brass furnace"
|
||||
desc = "A brass furnace. Powered by... something, but seems otherwise safe." //todo:sprites they're safe for noncultists because you're just putting ingots in them. also there';s a reason to steal them ig
|
||||
|
||||
/obj/structure/furnace/infinite/narsie
|
||||
name = "rune furnace"
|
||||
desc = "A runed furnace. Powered by... something, but seems otherwise safe."
|
||||
@@ -0,0 +1,420 @@
|
||||
/obj/item/basaltblock
|
||||
name = "basalt block"
|
||||
desc = "A block of basalt."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "sandvilnoir"
|
||||
|
||||
|
||||
/obj/item/smithing
|
||||
name = "base class /obj/item/smithing"
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "unfinished"
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX
|
||||
var/quality = 0 //quality. Changed by the smithing process.
|
||||
var/obj/item/finishingitem = /obj/item/stick //What this item needs to be hit by to create finalitem
|
||||
var/obj/item/finalitem
|
||||
var/artifact = FALSE
|
||||
|
||||
/obj/item/ingot
|
||||
name = "ingot"
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "ingot"
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX
|
||||
var/workability = 0
|
||||
|
||||
|
||||
/obj/item/ingot/on_attack_hand(mob/user)
|
||||
var/mob/living/carbon/human/H
|
||||
if(workability != "shapeable")
|
||||
return ..()
|
||||
var/prot = 0
|
||||
if(ishuman(user))
|
||||
H = user
|
||||
if(H.gloves)
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(G.max_heat_protection_temperature)
|
||||
prot = (G.max_heat_protection_temperature > 360)
|
||||
else
|
||||
prot = 1
|
||||
if(prot > 0 || HAS_TRAIT(user, TRAIT_RESISTHEAT) || HAS_TRAIT(user, TRAIT_RESISTHEATHANDS))
|
||||
to_chat(user, "<span class='notice'>You pick up the [src].</span>")
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You try to move the [src], but you burn your hand on it!</span>")
|
||||
if(H)
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm")
|
||||
if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage
|
||||
H.update_damage_overlays()
|
||||
|
||||
/obj/item/ingot/iron
|
||||
custom_materials = list(/datum/material/iron=12000)
|
||||
|
||||
/obj/item/ingot/diamond
|
||||
custom_materials = list(/datum/material/diamond=12000) //yeah ok
|
||||
|
||||
/obj/item/ingot/uranium
|
||||
custom_materials = list(/datum/material/uranium=12000)
|
||||
|
||||
/obj/item/ingot/plasma
|
||||
custom_materials = list(/datum/material/plasma=12000)//yeah ok
|
||||
|
||||
/obj/item/ingot/gold
|
||||
custom_materials = list(/datum/material/gold=12000)
|
||||
|
||||
/obj/item/ingot/silver
|
||||
custom_materials = list(/datum/material/silver=12000)
|
||||
|
||||
/obj/item/ingot/bananium
|
||||
custom_materials = list(/datum/material/bananium=12000)
|
||||
|
||||
/obj/item/ingot/titanium
|
||||
custom_materials = list(/datum/material/titanium=12000)
|
||||
|
||||
/obj/item/ingot/adamantine
|
||||
custom_materials = list(/datum/material/adamantine=12000)
|
||||
|
||||
/obj/item/ingot/cult
|
||||
custom_materials = list(/datum/material/runedmetal=12000)
|
||||
|
||||
/obj/item/ingot/bronze
|
||||
custom_materials = list(/datum/material/bronze=12000)
|
||||
|
||||
/obj/item/ingot/bronze/ratvar
|
||||
material_flags = MATERIAL_COLOR
|
||||
name = "brass ingnot"
|
||||
desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually more structurally stable bronze. Ratvar must have transformed the brass into bronze. Somehow."
|
||||
|
||||
|
||||
/obj/item/smithing/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, finishingitem))
|
||||
qdel(I)
|
||||
startfinish()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/smithing/proc/startfinish()
|
||||
dofinish()
|
||||
|
||||
/obj/item/smithing/proc/dofinish()
|
||||
var/qualname
|
||||
switch(quality)
|
||||
if(-1000 to -5)
|
||||
qualname = "awful"
|
||||
if(-1000 to -2)
|
||||
qualname = "shoddy"
|
||||
if(-1000 to -1)
|
||||
qualname = "poor"
|
||||
if(-1 to 1)
|
||||
qualname = "normal"
|
||||
if(10 to INFINITY)
|
||||
qualname = "legendary"
|
||||
if(7.5 to 10)
|
||||
qualname = "masterwork"
|
||||
if(5.5 to 7.5)
|
||||
qualname = "excellent"
|
||||
if(3.5 to 5.5)
|
||||
qualname = "good"
|
||||
if(0 to 3.5)
|
||||
qualname = "above-average"
|
||||
var/datum/material/mat = custom_materials[1]
|
||||
finalitem.set_custom_materials(custom_materials)
|
||||
mat = mat.name
|
||||
if(artifact)
|
||||
dwarfyartifact(finalitem, mat)
|
||||
else
|
||||
finalitem.name = "[qualname] [mat] [initial(finalitem.name)]"
|
||||
finalitem.desc = "A [qualname] [initial(finalitem.name)]. Its quality is [quality]."
|
||||
finalitem.forceMove(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/smithing/proc/dwarfyartifact(var/obj/item/finalitem, var/mat)
|
||||
var/finaldesc = "A [initial(finalitem.name)] made of [mat], all craftsmanship is of the highest quality. It "
|
||||
switch(pick(1,2,3,4,5))
|
||||
if(1)
|
||||
finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")]."
|
||||
if(2)
|
||||
finaldesc += "is laced with studs of [pick("gold","silver","aluminium","titanium")]."
|
||||
if(3)
|
||||
finaldesc += "is encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")]."
|
||||
if(4)
|
||||
finaldesc += "menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]."
|
||||
if(5)
|
||||
finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapis lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]."
|
||||
finalitem.desc = finaldesc
|
||||
finalitem.name = pick("Delersibnir", "Nekolangrir", "Zanoreshik","Öntakrítin", "Nogzatan", "Vunomam", "Nazushagsaldôbar", "Sergeb", "Zafaldastot", "Vudnis", "Dostust", "Shotom", "Mugshith", "Angzak", "Oltud", "Deleratîs", "Nökornomal") //one of these is literally BLOOD POOL CREATE.iirc its Nazushagsaldôbar.
|
||||
|
||||
/obj/item/smithing/hammerhead
|
||||
name = "smithed hammer head"
|
||||
finalitem = /obj/item/melee/smith/hammer
|
||||
icon_state = "hammer"
|
||||
|
||||
/obj/item/smithing/hammerhead/startfinish()
|
||||
var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src)
|
||||
finalforreal.force += quality/2
|
||||
finalforreal.qualitymod = quality/4
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/item/smithing/scytheblade
|
||||
name = "smithed scythe head"
|
||||
finalitem = /obj/item/scythe/smithed
|
||||
icon_state = "scythe"
|
||||
|
||||
/obj/item/smithing/scytheblade/startfinish()
|
||||
finalitem = new /obj/item/scythe/smithed(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/shovelhead
|
||||
name = "smithed shovel head"
|
||||
finalitem = /obj/item/shovel/smithed
|
||||
icon_state = "shovel"
|
||||
|
||||
/obj/item/smithing/shovelhead/startfinish()
|
||||
finalitem = new /obj/item/shovel/smithed(src)
|
||||
finalitem.force += quality/2
|
||||
if(quality > 0)
|
||||
finalitem.toolspeed = max(0.05,(1-(quality/10)))
|
||||
else
|
||||
finalitem.toolspeed *= max(1, (quality * -1))
|
||||
..()
|
||||
|
||||
/obj/item/smithing/cogheadclubhead
|
||||
name = "smithed coghead club head"
|
||||
finalitem = /obj/item/melee/smith/cogheadclub
|
||||
icon_state = "coghead"
|
||||
|
||||
/obj/item/smithing/cogheadclubhead/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/cogheadclub(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/javelinhead
|
||||
name = "smithed javelin head"
|
||||
finalitem = /obj/item/melee/smith/twohand/javelin
|
||||
icon_state = "javelin"
|
||||
|
||||
/obj/item/smithing/javelinhead/startfinish()
|
||||
var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalforreal.throwforce = finalforreal.force*2
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/pikehead
|
||||
name = "smithed pike head"
|
||||
finalitem = /obj/item/melee/smith/twohand/pike
|
||||
icon_state = "pike"
|
||||
|
||||
/obj/item/smithing/pikehead/startfinish()
|
||||
var/obj/item/melee/smith/twohand/pike/finalforreal = new /obj/item/melee/smith/twohand/pike(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalforreal.throwforce = finalforreal.force/10 //its a pike not a javelin
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/pickaxehead
|
||||
name = "smithed pickaxe head"
|
||||
finalitem = /obj/item/pickaxe/smithed
|
||||
icon_state = "pickaxe"
|
||||
|
||||
/obj/item/smithing/pickaxehead/startfinish()
|
||||
var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src)
|
||||
finalforreal.force += quality/2
|
||||
if(quality > 0)
|
||||
finalforreal.toolspeed = max(0.05,(1-(quality/10)))
|
||||
else
|
||||
finalforreal.toolspeed *= max(1, (quality * -1))
|
||||
switch(quality)
|
||||
if(10 to INFINITY)
|
||||
finalforreal.digrange = 4
|
||||
if(5 to 9)
|
||||
finalforreal.digrange = 3
|
||||
if(3,4)
|
||||
finalforreal.digrange = 2
|
||||
else
|
||||
finalforreal.digrange = 1
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/smithing/prospectingpickhead
|
||||
name = "smithed prospector's pickaxe head"
|
||||
finalitem = /obj/item/mining_scanner/prospector
|
||||
icon_state = "minipick"
|
||||
|
||||
/obj/item/smithing/prospectingpickhead/startfinish()
|
||||
var/obj/item/mining_scanner/prospector/finalforreal = new /obj/item/mining_scanner/prospector(src)
|
||||
finalforreal.range = 2 + quality
|
||||
if(quality)
|
||||
finalforreal.cooldown = 100/quality
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/smithing/shortswordblade
|
||||
name = "smithed gladius blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/shortsword
|
||||
icon_state = "gladius"
|
||||
|
||||
/obj/item/smithing/shortswordblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/shortsword(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/scimitarblade
|
||||
name = "smithed scimitar blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/shortsword/scimitar
|
||||
icon_state = "scimitar"
|
||||
|
||||
/obj/item/smithing/scimitarblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/shortsword/scimitar(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/wakiblade
|
||||
name = "smithed wakizashi blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/wakizashi
|
||||
icon_state = "waki"
|
||||
|
||||
/obj/item/smithing/wakiblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/wakizashi(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/sabreblade
|
||||
name = "smithed sabre blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/sabre
|
||||
icon_state = "sabre"
|
||||
|
||||
/obj/item/smithing/sabreblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/sabre(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/rapierblade
|
||||
name = "smithed rapier blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/sabre/rapier
|
||||
icon_state = "rapier"
|
||||
|
||||
/obj/item/smithing/rapierblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/sabre/rapier(src)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/obj/item/smithing/knifeblade
|
||||
name = "smithed knife blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/kitchen/knife
|
||||
icon_state = "dagger"
|
||||
|
||||
/obj/item/smithing/knifeblade/startfinish()
|
||||
finalitem = new /obj/item/kitchen/knife(src)
|
||||
finalitem.force = 4 + quality/2
|
||||
finalitem.icon = 'icons/obj/smith.dmi'
|
||||
finalitem.icon_state = "dagger"
|
||||
finalitem.name = "dagger"
|
||||
finalitem.desc = "A dagger."
|
||||
var/mutable_appearance/overlay = mutable_appearance('icons/obj/smith.dmi', "daggerhilt")
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
finalitem.add_overlay(overlay)
|
||||
if(finalitem.force < 0)
|
||||
finalitem.force = 0
|
||||
finalitem.material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
..()
|
||||
|
||||
/obj/item/smithing/broadblade
|
||||
name = "smithed broadsword blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/twohand/broadsword
|
||||
icon_state = "broadsword"
|
||||
|
||||
/obj/item/smithing/broadblade/startfinish()
|
||||
var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/zweiblade
|
||||
name = "smithed zweihander blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/twohand/zweihander
|
||||
icon_state = "zwei"
|
||||
|
||||
/obj/item/smithing/zweiblade/startfinish()
|
||||
var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/halberdhead
|
||||
name = "smithed halberd head"
|
||||
finalitem = /obj/item/melee/smith/twohand/halberd
|
||||
icon_state = "halberd"
|
||||
|
||||
/obj/item/smithing/halberdhead/startfinish()
|
||||
var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.throwforce = finalforreal.force/3
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/glaivehead
|
||||
name = "smithed glaive head"
|
||||
finalitem = /obj/item/melee/smith/twohand/glaive
|
||||
icon_state = "glaive"
|
||||
|
||||
/obj/item/smithing/glaive/startfinish()
|
||||
var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.throwforce = finalforreal.force
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/katanablade
|
||||
name = "smithed katana blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/twohand/katana
|
||||
icon_state = "katana"
|
||||
|
||||
|
||||
/obj/item/smithing/katanablade/startfinish()
|
||||
var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src)
|
||||
finalforreal.force += quality
|
||||
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/stick
|
||||
name = "wooden rod"
|
||||
desc = "It's a rod, suitable for use of a handle of a tool. Also could serve as a weapon, in a pinch."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "stick"
|
||||
force = 7
|
||||
|
||||
/obj/item/swordhandle
|
||||
name = "sword handle"
|
||||
desc = "It's a crudlely shaped wooden sword hilt."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "shorthilt"
|
||||
@@ -172,7 +172,7 @@
|
||||
maxHealth = 75 //Take brute damage instead
|
||||
var/chattering = FALSE
|
||||
var/phomeme_type = "sans"
|
||||
var/list/phomeme_types = list(/datum/accent/bone/sans, /datum/accent/bone/papyrus)
|
||||
var/list/phomeme_types = list(/datum/accent/span/sans, /datum/accent/span/papyrus)
|
||||
|
||||
/obj/item/organ/tongue/bone/Initialize()
|
||||
. = ..()
|
||||
@@ -206,7 +206,7 @@
|
||||
icon_state = "tonguerobot"
|
||||
say_mod = "states"
|
||||
attack_verb = list("beeped", "booped")
|
||||
initial_accents = list(/datum/accent/robot)
|
||||
initial_accents = list(/datum/accent/span/robot)
|
||||
taste_sensitivity = 25 // not as good as an organic tongue
|
||||
maxHealth = 100 //RoboTongue!
|
||||
var/electronics_magic = TRUE
|
||||
|
||||
Reference in New Issue
Block a user