This commit is contained in:
Enric Gabriel
2020-09-05 13:09:14 -03:00
68 changed files with 1610 additions and 652 deletions
@@ -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
+7
View File
@@ -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!"
-1
View File
@@ -4,7 +4,6 @@
max_occurrences = 1
weight = 5
gamemode_blacklist = list("dynamic")
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
-1
View File
@@ -5,7 +5,6 @@
min_players = 10
max_occurrences = 5
weight = 20
gamemode_blacklist = list("dynamic")
/datum/round_event/anomaly/anomaly_flux
startWhen = 10
-1
View File
@@ -4,7 +4,6 @@
max_occurrences = 5
weight = 20
gamemode_blacklist = list("dynamic")
/datum/round_event/anomaly/anomaly_grav
-1
View File
@@ -4,7 +4,6 @@
max_occurrences = 5
weight = 20
gamemode_blacklist = list("dynamic")
/datum/round_event/anomaly/anomaly_pyro
startWhen = 3
-1
View File
@@ -5,7 +5,6 @@
min_players = 20
max_occurrences = 2
weight = 5
gamemode_blacklist = list("dynamic")
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
+12 -4
View File
@@ -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
-1
View File
@@ -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
+1 -2
View File
@@ -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)
-1
View File
@@ -5,7 +5,6 @@
min_players = 5
weight = 40
alert_observers = FALSE
gamemode_blacklist = list("dynamic")
/datum/round_event/electrical_storm
var/lightsoutAmount = 1
+1 -2
View File
@@ -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)
-1
View File
@@ -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
-1
View File
@@ -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"
-1
View File
@@ -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
-1
View File
@@ -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
+1 -1
View File
@@ -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)
-1
View File
@@ -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
-1
View File
@@ -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
-1
View File
@@ -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
-1
View File
@@ -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
+315
View File
@@ -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
+329
View File
@@ -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
+75
View File
@@ -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."
+420
View File
@@ -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"
+2 -2
View File
@@ -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