// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM. // This class of weapons takes force and appearance data from a material datum. // They are also fragile based on material data and many can break/smash apart. /obj/item/material attack_sound = 'sound/weapons/bladeslice.ogg' icon = 'icons/obj/weapons.dmi' gender = NEUTER throw_speed = 3 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL item_icons = list( SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_material.dmi', SLOT_ID_RIGHT_HAND = 'icons/mob/items/righthand_material.dmi', ) material_parts = /datum/prototype/material/steel material_costs = SHEET_MATERIAL_AMOUNT * 2 material_primary = MATERIAL_PART_DEFAULT /// applies material color var/material_color = TRUE /// material attribute significance var/material_significance = MATERIAL_SIGNIFICANCE_BASELINE /// material quantity significance /// this is multiplier to material amount to determine stuff like weight. var/material_factoring = 0.05 /// % of force that goes int oforce var/throw_force_multiplier = 1 /// direct force multiplier var/force_multiplier = 1 // var/unbreakable = 0 //Doesn't lose health // var/fragile = 0 //Shatters when it dies // var/dulled = 0 //Has gone dull // var/can_dull = 1 //Can it go dull? // var/dulled_divisor = 0.1 //Just drops the damage to a tenth // var/drops_debris = 1 /obj/item/material/Initialize(mapload, material) if(!isnull(material)) material_parts = material return ..() /obj/item/material/update_material_single(datum/prototype/material/material) . = ..() if(isnull(material)) return if(material_color) color = material.icon_colour else color = null siemens_coefficient = material.relative_conductivity atom_flags = (atom_flags & ~(NOCONDUCT)) | (material.relative_conductivity == 0? NOCONDUCT : NONE) name = "[material.display_name] [initial(name)]" var/list/returned = material.melee_stats(initial(damage_mode), material_significance) damage_force = returned[MATERIAL_MELEE_STATS_DAMAGE] * force_multiplier damage_mode = returned[MATERIAL_MELEE_STATS_MODE] damage_flag = returned[MATERIAL_MELEE_STATS_FLAG] damage_tier = initial(damage_tier) + returned[MATERIAL_MELEE_STATS_TIERMOD] // todo: this is a multiplier, not a divisor throw_force = damage_force * throw_force_multiplier /obj/item/material/melee_finalize(datum/event_args/actor/clickchain/clickchain, clickchain_flags, datum/melee_attack/weapon/attack_style) . = ..() MATERIAL_INVOKE(src, MATERIAL_TRAIT_MELEE, on_melee_finalize, clickchain, clickchain_flags, attack_style) // todo: dulling system, maybe /obj/item level..? /obj/item/material/attackby(obj/item/I, mob/user, list/params, clickchain_flags, damage_multiplier) // if(istype(W, /obj/item/whetstone)) // var/obj/item/whetstone/whet = W // repair(whet.repair_amount, whet.repair_time, user) // if(istype(I, /obj/item/material/sharpeningkit)) // var/obj/item/material/sharpeningkit/SK = I // repair(SK.repair_amount, SK.repair_time, user) return ..() // /obj/item/material/proc/check_health(var/consumed) // if(health<=0) // if(fragile) // shatter(consumed) // else if(!dulled && can_dull) // dull() // #warn shatter on impact? // /obj/item/material/proc/dull() // var/turf/T = get_turf(src) // T.visible_message("\The [src] goes dull!") // playsound(src, "shatter", 70, 1) // dulled = 1 // if(is_sharp() || has_edge()) // sharp = 0 // edge = 0 // /obj/item/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user) // if(!fragile) // if(health < initial(health)) // user.visible_message("[user] begins repairing \the [src].", "You begin repairing \the [src].") // if(do_after(user, repair_time)) // user.visible_message("[user] has finished repairing \the [src]", "You finish repairing \the [src].") // health = min(health + repair_amount, initial(health)) // dulled = 0 // sharp = initial(sharp) // edge = initial(edge) // else // to_chat(user, "[src] doesn't need repairs.") // else // to_chat(user, "You can't repair \the [src].") // return /obj/item/material/proc/sharpen(datum/prototype/material/material_like, var/sharpen_time, var/kit, mob/living/M) material_like = RSmaterials.fetch(material_like) // if(!fragile && material_primary) if(material_primary) // if(integrity < integrity_max) // to_chat(M, "You should repair [src] first. Try using [kit] on it.") // return FALSE M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].") if(do_after(usr, sharpen_time)) M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].") set_primary_material(material_like) return TRUE else to_chat(M, "You can't sharpen and re-edge [src].") return FALSE