[READY] Floydmats (Datum materials) & custom toolboxes (#45118)

* Initial work

* more

* ass

* wsedfwedff

* asss

* test

* stuff

* fuck

* sss

a

* kms

* asdadwedwdfwefwef

* start

* test

* dwwdew

* ewefwfef

* Redemption machine (#8)

* Redemption machine

* Removes debug messages

* changes

* fuckmyshitup

* coin mint works with new material shenanigans (#10)

* Auto stash before merge of "materials" and "origin/materials"

* woops

* furnace (#11)

* autolathe manufacturing of toolboxes

* eggs in a basket

* some small changes

* matcolors

* documentation

* more documentation and effects

* done

* Color man bad (#12)

* fixes designs

* ass

* more fixes

* fuck me

* firestacks adder

* epic fixes

* fixes designs

* DONE DIDDILY DOO

* removes category macro

* ch-ch-ch-changes

* fixes some stuff

* Fixes display of ore values (#9)

* Redemption machine

* Removes debug messages

* Re-adds value display

* Replaces the fire stacking component with an element instead (#13)

* fixes examine

* fixes ligma bugs

* double ligma boofus

* fix

* misses some defines

* fixes ORM

* Update code/datums/components/material_container.dm

Co-Authored-By: Emmett Gaines <ninjanomnom@gmail.com>

* fixes

* Makes glass objects weaker (#14)

* Makes glass objects weaker

* uses correct proc

* fixes shit

* honk honk

* better

* oh shit oh fuck

* fixes

* fuck ORMs

* fixes the biogen

* documentation

* ass (#15)

* component

* changes

* ass

* ass

* doc

* Auto stash before merge of "materials-plasmacomponent" and "origin/materials-plasmacomponent"

* fixes rounding

* fixed
This commit is contained in:
Qustinnus
2019-07-24 11:27:01 -04:00
committed by Emmett Gaines
co-authored by Emmett Gaines
parent 1ffc9f032b
commit b33d1c49a3
176 changed files with 1667 additions and 1196 deletions
+1
View File
@@ -150,6 +150,7 @@
#define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): ()
#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of
#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user)
#define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage" //from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone)
#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params)
#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target)
-13
View File
@@ -59,19 +59,6 @@
//let's just pretend fulltile windows being children of border windows is fine
#define FULLTILE_WINDOW_DIR NORTHEAST
//Material defines, for determining how much of a given material an item contains
#define MAT_METAL "$metal"
#define MAT_GLASS "$glass"
#define MAT_SILVER "$silver"
#define MAT_GOLD "$gold"
#define MAT_DIAMOND "$diamond"
#define MAT_URANIUM "$uranium"
#define MAT_PLASMA "$plasma"
#define MAT_BLUESPACE "$bluespace"
#define MAT_BANANIUM "$bananium"
#define MAT_TITANIUM "$titanium"
#define MAT_BIOMASS "$biomass"
#define MAT_PLASTIC "$plastic"
//The amount of materials you get from a sheet of mineral like iron/diamond/glass etc
#define MINERAL_MATERIAL_AMOUNT 2000
//The maximum size of a stack object.
+12
View File
@@ -0,0 +1,12 @@
/// Is the material from an ore? currently unused but exists atm for categorizations sake
#define MAT_CATEGORY_ORE "ore capable"
/// Hard materials, such as iron or metal
#define MAT_CATEGORY_RIGID "rigid material"
/// Gets the reference for the material type that was given
#define getmaterialref(A) (SSmaterials.materials[A])
/// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes.
#define MATERIAL_NO_COLOR (1<<0)
+1
View File
@@ -105,6 +105,7 @@
#define INIT_ORDER_SERVER_MAINT 93
#define INIT_ORDER_INPUT 85
#define INIT_ORDER_VIS 80
#define INIT_ORDER_MATERIALS 76
#define INIT_ORDER_RESEARCH 75
#define INIT_ORDER_EVENTS 70
#define INIT_ORDER_JOBS 65
-5
View File
@@ -42,11 +42,6 @@
for(var/path in subtypesof(/datum/surgery))
GLOB.surgeries_list += new path()
//Materials
for(var/path in subtypesof(/datum/material))
var/datum/material/D = new path()
GLOB.materials_list[D.id] = D
GLOB.emote_list = init_emote_list()
-1
View File
@@ -16,7 +16,6 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati
GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions
GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
GLOBAL_LIST_EMPTY(materials_list) //list of all /datum/material datums indexed by material id.
GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id.
GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path.
GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes
+27
View File
@@ -0,0 +1,27 @@
/*! How material datums work
Materials are now instanced datums, with an associative list of them being kept in SSmaterials. We only instance the materials once and then re-use these instances for everything.
These materials call on_applied() on whatever item they are applied to, common effects are adding components, changing color and changing description. This allows us to differentiate items based on the material they are made out of.area
*/
SUBSYSTEM_DEF(materials)
name = "Materials"
flags = SS_NO_FIRE
init_order = INIT_ORDER_MATERIALS
///Dictionary of material.type || material ref
var/list/materials = list()
///Dictionary of category || list of material refs
var/list/materials_by_category = list()
/datum/controller/subsystem/materials/Initialize(timeofday)
InitializeMaterials()
return ..()
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
/datum/controller/subsystem/materials/proc/InitializeMaterials(timeofday)
for(var/type in subtypesof(/datum/material))
var/datum/material/ref = new type
materials[type] = ref
for(var/c in ref.categories)
materials_by_category[c] += list(ref)
+1
View File
@@ -155,6 +155,7 @@ SUBSYSTEM_DEF(research)
stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected! Path: [path]")
errored_datums[DN] = initial(DN.id)
continue
DN.InitializeMaterials() //Initialize the materials in the design
returned[initial(DN.id)] = DN
techweb_designs = returned
verify_techweb_designs()
+107
View File
@@ -0,0 +1,107 @@
///Component specifically for explosion sensetive things, currently only applies to heat based explosions but can later perhaps be used for things that are dangerous to handle carelessly like nitroglycerin.
/datum/component/explodable
var/devastation_range = 0
var/heavy_impact_range = 0
var/light_impact_range = 2
var/flash_range = 3
var/equipped_slot //For items, lets us determine where things should be hit.
/datum/component/explodable/Initialize(devastation_range_override, heavy_impact_range_override, light_impact_range_override, flash_range_override)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/explodable_attack)
RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/explodable_insert_item)
RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/detonate)
if(ismovableatom(parent))
RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/explodable_impact)
RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/explodable_bump)
if(isitem(parent))
RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), .proc/explodable_attack)
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
if(devastation_range_override)
devastation_range = devastation_range_override
if(heavy_impact_range_override)
heavy_impact_range = heavy_impact_range_override
if(light_impact_range_override)
light_impact_range = light_impact_range_override
if(flash_range_override)
flash_range = flash_range_override
/datum/component/explodable/proc/explodable_insert_item(datum/source, obj/item/I, mob/M, silent = FALSE, force = FALSE)
check_if_detonate(I)
/datum/component/explodable/proc/explodable_impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum)
check_if_detonate(hit_atom)
/datum/component/explodable/proc/explodable_bump(datum/source, atom/A)
check_if_detonate(A)
///Called when you use this object to attack sopmething
/datum/component/explodable/proc/explodable_attack(datum/source, atom/movable/target, mob/living/user)
check_if_detonate(target)
///Called when you attack a specific body part of the thing this is equipped on. Useful for exploding pants.
/datum/component/explodable/proc/explodable_attack_zone(datum/source, damage, damagetype, def_zone)
if(!def_zone)
return
if(damagetype != BURN) //Don't bother if it's not fire.
return
if(!is_hitting_zone(def_zone)) //You didn't hit us! ha!
return
detonate()
/datum/component/explodable/proc/on_equip(datum/source, mob/equipper, slot)
RegisterSignal(equipper, COMSIG_MOB_APPLY_DAMGE, .proc/explodable_attack_zone)
/datum/component/explodable/proc/on_drop(datum/source, mob/user)
UnregisterSignal(user, COMSIG_MOB_APPLY_DAMGE)
/// Checks if we're hitting the zone this component is covering
/datum/component/explodable/proc/is_hitting_zone(def_zone)
var/obj/item/item = parent
var/mob/living/L = item.loc //Get whoever is equipping the item currently
if(!istype(L))
return
var/obj/item/bodypart/bodypart = L.get_bodypart(check_zone(def_zone))
var/list/equipment_items = list()
if(iscarbon(L))
var/mob/living/carbon/C = L
equipment_items += list(C.head, C.wear_mask, C.back, C.gloves, C.shoes, C.glasses, C.ears)
if(ishuman(C))
var/mob/living/carbon/human/H = C
equipment_items += list(H.wear_suit, H.w_uniform, H.belt, H.s_store, H.wear_id)
for(var/bp in equipment_items)
if(!bp)
continue
var/obj/item/I = bp
if(I.body_parts_covered & bodypart.body_part)
return TRUE
return FALSE
/datum/component/explodable/proc/check_if_detonate(target)
if(!isitem(target))
return
var/obj/item/I = target
if(!I.is_hot())
return
detonate() //If we're touching a hot item we go boom
/// Expldoe and remove the object
/datum/component/explodable/proc/detonate()
var/atom/A = parent
explosion(A, devastation_range, heavy_impact_range, light_impact_range, flash_range) //epic explosion time
qdel(A)
+165 -209
View File
@@ -1,4 +1,4 @@
/*
/*!
This datum should be used for handling mineral contents of machines and whatever else is supposed to hold minerals and make use of them.
Variables:
@@ -13,7 +13,7 @@
var/total_amount = 0
var/max_amount
var/sheet_type
var/list/materials
var/list/materials //Map of key = material ref | Value = amount
var/show_on_examine
var/disable_attackby
var/list/allowed_typecache
@@ -22,6 +22,7 @@
var/datum/callback/precondition
var/datum/callback/after_insert
/// Sets up the proper signals and fills the list of materials with the appropriate references.
/datum/component/material_container/Initialize(list/mat_list, max_amt = 0, _show_on_examine = FALSE, list/allowed_types, datum/callback/_precondition, datum/callback/_after_insert, _disable_attackby)
materials = list()
max_amount = max(0, max_amt)
@@ -40,23 +41,19 @@
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy)
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/OnExamine)
var/list/possible_mats = list()
for(var/mat_type in subtypesof(/datum/material))
var/datum/material/MT = mat_type
possible_mats[initial(MT.id)] = mat_type
for(var/id in mat_list)
if(possible_mats[id])
var/mat_path = possible_mats[id]
materials[id] = new mat_path()
for(var/mat in mat_list) //Make the assoc list ref | amount
var/datum/material/M = getmaterialref(mat) || mat
materials[M] = 0
/datum/component/material_container/proc/OnExamine(datum/source, mob/user)
if(show_on_examine)
for(var/I in materials)
var/datum/material/M = materials[I]
var/amt = amount(M.id)
var/datum/material/M = I
var/amt = materials[I]
if(amt)
to_chat(user, "<span class='notice'>It has [amt] units of [lowertext(M.name)] stored.</span>")
/// Proc that allows players to fill the parent with mats
/datum/component/material_container/proc/OnAttackBy(datum/source, obj/item/I, mob/living/user)
var/list/tc = allowed_typecache
if(disable_attackby)
@@ -81,6 +78,7 @@
return
user_insert(I, user)
/// Proc used for when player inserts materials
/datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user)
set waitfor = FALSE
var/requested_amount
@@ -112,24 +110,34 @@
else if(I == active_held)
user.put_in_active_hand(I)
//For inserting an amount of material
/datum/component/material_container/proc/insert_amount(amt, id = null)
if(amt > 0 && has_space(amt))
var/total_amount_saved = total_amount
if(id)
var/datum/material/M = materials[id]
if(M)
M.amount += amt
total_amount += amt
else
for(var/i in materials)
var/datum/material/M = materials[i]
M.amount += amt
total_amount += amt
return (total_amount - total_amount_saved)
return FALSE
/// Proc specifically for inserting items, returns the amount of materials entered.
/datum/component/material_container/proc/insert_item(obj/item/I, var/multiplier = 1, stack_amt)
if(!I)
return FALSE
if(istype(I, /obj/item/stack))
return insert_stack(I, stack_amt, multiplier)
/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt, multiplier = 1)
multiplier = CEILING(multiplier, 0.01)
var/material_amount = get_item_material_amount(I)
if(!material_amount || !has_space(material_amount))
return FALSE
last_inserted_id = insert_item_materials(I, multiplier)
return material_amount
/datum/component/material_container/proc/insert_item_materials(obj/item/I, multiplier = 1)
var/primary_mat
var/max_mat_value = 0
for(var/MAT in materials)
materials[MAT] += I.materials[MAT] * multiplier
total_amount += I.materials[MAT] * multiplier
if(I.materials[MAT] > max_mat_value)
primary_mat = MAT
return primary_mat
/// Proc for putting a stack inside of the container
/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt, multiplier = 1)
if(isnull(amt))
amt = S.amount
@@ -147,250 +155,198 @@
if(!amt)
return FALSE
last_inserted_id = insert_materials(S,amt * multiplier)
last_inserted_id = insert_item_materials(S,amt * multiplier)
S.use(amt)
return amt
/datum/component/material_container/proc/insert_item(obj/item/I, multiplier = 1, stack_amt)
if(!I)
return FALSE
if(istype(I, /obj/item/stack))
return insert_stack(I, stack_amt, multiplier)
/// For inserting an amount of material
/datum/component/material_container/proc/insert_amount_mat(amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
if(amt > 0 && has_space(amt))
var/total_amount_saved = total_amount
if(mat)
materials[mat] += amt
else
for(var/i in materials)
materials[i] += amt
total_amount += amt
return (total_amount - total_amount_saved)
return FALSE
var/material_amount = get_item_material_amount(I)
if(!material_amount || !has_space(material_amount))
return FALSE
last_inserted_id = insert_materials(I, multiplier)
return material_amount
/datum/component/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only
var/datum/material/M
var/primary_mat
var/max_mat_value = 0
for(var/MAT in materials)
M = materials[MAT]
M.amount += I.materials[MAT] * multiplier
total_amount += I.materials[MAT] * multiplier
if(I.materials[MAT] > max_mat_value)
primary_mat = MAT
return primary_mat
//For consuming material
//mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200)
/datum/component/material_container/proc/use_amount(list/mats, multiplier=1)
if(!mats || !mats.len)
return FALSE
var/datum/material/M
for(var/MAT in materials)
M = materials[MAT]
if(M.amount < (mats[MAT] * multiplier))
return FALSE
var/total_amount_save = total_amount
for(var/MAT in materials)
M = materials[MAT]
M.amount -= mats[MAT] * multiplier
total_amount -= mats[MAT] * multiplier
return total_amount_save - total_amount
/datum/component/material_container/proc/use_amount_type(amt, id)
var/datum/material/M = materials[id]
if(M)
if(M.amount >= amt)
M.amount -= amt
/// Uses an amount of a specific material, effectively removing it.
/datum/component/material_container/proc/use_amount_mat(amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
var/amount = materials[mat]
if(mat)
if(amount >= amt)
materials[mat] -= amt
total_amount -= amt
return amt
return FALSE
/datum/component/material_container/proc/transer_amt_to(var/datum/component/material_container/T, amt, id)
if((amt==0)||(!T)||(!id))
/// Proc for transfering materials to another container.
/datum/component/material_container/proc/transer_amt_to(var/datum/component/material_container/T, amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
if((amt==0)||(!T)||(!mat))
return FALSE
if(amt<0)
return T.transer_amt_to(src, -amt, id)
var/datum/material/M = materials[id]
if(M)
var/tr = min(amt, M.amount,T.can_insert_amount(amt, id))
if(tr)
use_amount_type(tr, id)
T.insert_amount(tr, id)
return tr
return T.transer_amt_to(src, -amt, mat)
var/tr = min(amt, materials[mat],T.can_insert_amount_mat(amt, mat))
if(tr)
use_amount_mat(tr, mat)
T.insert_amount_mat(tr, mat)
return tr
return FALSE
/datum/component/material_container/proc/can_insert_amount(amt, id)
if(amt && id)
var/datum/material/M = materials[id]
/// Proc for checking if there is room in the component, returning the amount or else the amount lacking.
/datum/component/material_container/proc/can_insert_amount_mat(amt, mat)
if(amt && mat)
var/datum/material/M = mat
if(M)
if((total_amount + amt) <= max_amount)
return amt
else
return (max_amount-total_amount)
/datum/component/material_container/proc/can_use_amount(amt, id, list/mats)
if(amt && id)
var/datum/material/M = materials[id]
if(M && M.amount >= amt)
return TRUE
else if(istype(mats))
for(var/M in mats)
if(materials[M] && (mats[M] <= materials[M]))
continue
else
return FALSE
return TRUE
return FALSE
//For spawning mineral sheets; internal use only
/datum/component/material_container/proc/retrieve(sheet_amt, datum/material/M, target = null)
/// For consuming a dictionary of materials. mats is the map of materials to use and the corresponding amounts, example: list(M/datum/material/glass =100, datum/material/iron=200)
/datum/component/material_container/proc/use_materials(list/mats, multiplier=1)
if(!mats || !length(mats))
return FALSE
var/list/mats_to_remove = list() //Assoc list MAT | AMOUNT
for(var/x in mats) //Loop through all required materials
var/datum/material/req_mat = x
if(!istype(req_mat))
req_mat = getmaterialref(req_mat) //Get the ref if necesary
if(!materials[req_mat]) //Do we have the resource?
return FALSE //Can't afford it
var/amount_required = mats[x] * multiplier
if(!(materials[req_mat] >= amount_required)) // do we have enough of the resource?
return FALSE //Can't afford it
mats_to_remove[req_mat] += amount_required //Add it to the assoc list of things to remove
continue
var/total_amount_save = total_amount
for(var/i in mats_to_remove)
total_amount_save -= use_amount_mat(mats_to_remove[i], i)
return total_amount_save - total_amount
/// For spawning mineral sheets at a specific location. Used by machines to output sheets.
/datum/component/material_container/proc/retrieve_sheets(sheet_amt, var/datum/material/M, target = null)
if(!M.sheet_type)
return 0
return 0 //Add greyscale sheet handling here later
if(sheet_amt <= 0)
return 0
if(!target)
target = get_turf(parent)
if(M.amount < (sheet_amt * MINERAL_MATERIAL_AMOUNT))
sheet_amt = round(M.amount / MINERAL_MATERIAL_AMOUNT)
if(materials[M] < (sheet_amt * MINERAL_MATERIAL_AMOUNT))
sheet_amt = round(materials[M] / MINERAL_MATERIAL_AMOUNT)
var/count = 0
while(sheet_amt > MAX_STACK_SIZE)
new M.sheet_type(target, MAX_STACK_SIZE)
count += MAX_STACK_SIZE
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.id)
use_amount_mat(sheet_amt * MINERAL_MATERIAL_AMOUNT, M)
sheet_amt -= MAX_STACK_SIZE
if(sheet_amt >= 1)
new M.sheet_type(target, sheet_amt)
count += sheet_amt
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.id)
use_amount_mat(sheet_amt * MINERAL_MATERIAL_AMOUNT, M)
return count
/datum/component/material_container/proc/retrieve_sheets(sheet_amt, id, target = null)
if(materials[id])
return retrieve(sheet_amt, materials[id], target)
return FALSE
/datum/component/material_container/proc/retrieve_amount(amt, id, target)
return retrieve_sheets(amount2sheet(amt), id, target)
/datum/component/material_container/proc/retrieve_all(target = null)
/// Proc to get all the materials and dump them as sheets
/datum/component/material_container/proc/retrieve_all(target = null)
var/result = 0
var/datum/material/M
for(var/MAT in materials)
M = materials[MAT]
result += retrieve_sheets(amount2sheet(M.amount), MAT, target)
var/amount = materials[MAT]
result += retrieve_sheets(amount2sheet(amount), MAT, target)
return result
/// Proc that returns TRUE if the container has space
/datum/component/material_container/proc/has_space(amt = 0)
return (total_amount + amt) <= max_amount
/// Checks if its possible to afford a certain amount of materials. Takes a dictionary of materials.
/datum/component/material_container/proc/has_materials(list/mats, multiplier=1)
if(!mats || !mats.len)
return FALSE
var/datum/material/M
for(var/MAT in mats)
M = materials[MAT]
if(M.amount < (mats[MAT] * multiplier))
for(var/x in mats) //Loop through all required materials
var/datum/material/req_mat = x
if(!istype(req_mat))
if(ispath(req_mat)) //Is this an actual material, or is it a category?
req_mat = getmaterialref(req_mat) //Get the ref
else // Its a category. (For example MAT_CATEGORY_RIGID)
if(!has_enough_of_category(req_mat, mats[req_mat], multiplier)) //Do we have enough of this category?
return FALSE
else
continue
if(!has_enough_of_material(req_mat, mats[req_mat], multiplier))//Not a category, so just check the normal way
return FALSE
return TRUE
/datum/component/material_container/proc/amount2sheet(amt)
/// Returns all the categories in a recipe.
/datum/component/material_container/proc/get_categories(list/mats)
var/list/categories = list()
for(var/x in mats) //Loop through all required materials
if(!istext(x)) //This means its not a category
continue
categories += x
return categories
/// Returns TRUE if you have enough of the specified material.
/datum/component/material_container/proc/has_enough_of_material(var/datum/material/req_mat, amount, multiplier=1)
if(!materials[req_mat]) //Do we have the resource?
return FALSE //Can't afford it
var/amount_required = amount * multiplier
if(materials[req_mat] >= amount_required) // do we have enough of the resource?
return TRUE
return FALSE //Can't afford it
/// Returns TRUE if you have enough of a specified material category (Which could be multiple materials)
/datum/component/material_container/proc/has_enough_of_category(category, amount, multiplier=1)
for(var/i in SSmaterials.materials_by_category[category])
var/datum/material/mat = i
if(materials[mat] >= amount) //we have enough
return TRUE
return FALSE
/// Turns a material amount into the amount of sheets it should output
/datum/component/material_container/proc/amount2sheet(amt)
if(amt >= MINERAL_MATERIAL_AMOUNT)
return round(amt / MINERAL_MATERIAL_AMOUNT)
return FALSE
/// Turns an amount of sheets into the amount of material amount it should output
/datum/component/material_container/proc/sheet2amount(sheet_amt)
if(sheet_amt > 0)
return sheet_amt * MINERAL_MATERIAL_AMOUNT
return FALSE
/datum/component/material_container/proc/amount(id)
var/datum/material/M = materials[id]
return M ? M.amount : 0
//returns the amount of material relevant to this container;
//if this container does not support glass, any glass in 'I' will not be taken into account
///returns the amount of material relevant to this container; if this container does not support glass, any glass in 'I' will not be taken into account
/datum/component/material_container/proc/get_item_material_amount(obj/item/I)
if(!istype(I))
return FALSE
var/material_amount = 0
for(var/MAT in materials)
for(var/MAT in I.materials)
material_amount += I.materials[MAT]
return material_amount
/datum/material
var/name
var/amount = 0
var/id = null
var/sheet_type = null
var/coin_type = null
/datum/material/metal
name = "Metal"
id = MAT_METAL
sheet_type = /obj/item/stack/sheet/metal
coin_type = /obj/item/coin/iron
/datum/material/glass
name = "Glass"
id = MAT_GLASS
sheet_type = /obj/item/stack/sheet/glass
/datum/material/silver
name = "Silver"
id = MAT_SILVER
sheet_type = /obj/item/stack/sheet/mineral/silver
coin_type = /obj/item/coin/silver
/datum/material/gold
name = "Gold"
id = MAT_GOLD
sheet_type = /obj/item/stack/sheet/mineral/gold
coin_type = /obj/item/coin/gold
/datum/material/diamond
name = "Diamond"
id = MAT_DIAMOND
sheet_type = /obj/item/stack/sheet/mineral/diamond
coin_type = /obj/item/coin/diamond
/datum/material/uranium
name = "Uranium"
id = MAT_URANIUM
sheet_type = /obj/item/stack/sheet/mineral/uranium
coin_type = /obj/item/coin/uranium
/datum/material/plasma
name = "Solid Plasma"
id = MAT_PLASMA
sheet_type = /obj/item/stack/sheet/mineral/plasma
coin_type = /obj/item/coin/plasma
/datum/material/bluespace
name = "Bluespace Mesh"
id = MAT_BLUESPACE
sheet_type = /obj/item/stack/sheet/bluespace_crystal
/datum/material/bananium
name = "Bananium"
id = MAT_BANANIUM
sheet_type = /obj/item/stack/sheet/mineral/bananium
coin_type = /obj/item/coin/bananium
/datum/material/titanium
name = "Titanium"
id = MAT_TITANIUM
sheet_type = /obj/item/stack/sheet/mineral/titanium
/datum/material/biomass
name = "Biomass"
id = MAT_BIOMASS
/datum/material/plastic
name = "Plastic"
id = MAT_PLASTIC
sheet_type = /obj/item/stack/sheet/plastic
/// Returns the amount of a specific material in this container.
/datum/component/material_container/proc/get_material_amount(var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
return(materials[mat])
+2
View File
@@ -76,6 +76,8 @@
/datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user)
radiation_pulse(parent, strength/20)
target.rad_act(strength/2)
if(!hl3_release_date)
return
strength -= strength / hl3_release_date
#undef RAD_AMOUNT_LOW
+1 -1
View File
@@ -54,7 +54,7 @@ handles linking back and forth.
/datum/component/remote_materials/proc/_MakeLocal()
silo = null
mat_container = parent.AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC),
list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic),
local_size,
FALSE,
/obj/item/stack)
+40
View File
@@ -0,0 +1,40 @@
/**
* Can be applied to /atom/movable subtypes to make them apply fire stacks to things they hit
*/
/datum/element/firestacker
element_flags = ELEMENT_DETACH
/// A list in format {atom/movable/owner, number}
/// Used to keep track of movables which want to apply a different number of fire stacks than default
var/list/amount_by_owner = list()
/datum/element/firestacker/Attach(datum/target, amount)
. = ..()
if(!ismovableatom(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_MOVABLE_IMPACT, .proc/impact)
if(isitem(target))
RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/item_attack)
RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, .proc/item_attack_self)
if(amount) // If amount is not given we default to 1 and don't need to save it here
amount_by_owner[target] = amount
/datum/element/firestacker/Detach(datum/source, force)
. = ..()
UnregisterSignal(source, list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_SELF))
amount_by_owner -= source
/datum/element/firestacker/proc/stack_on(datum/owner, mob/living/target)
target.adjust_fire_stacks(amount_by_owner[owner] || 1)
/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum)
if(isliving(hit_atom))
stack_on(source, hit_atom)
/datum/element/firestacker/proc/item_attack(datum/source, atom/movable/target, mob/living/user)
if(isliving(target))
stack_on(source, target)
/datum/element/firestacker/proc/item_attack_self(datum/source, mob/user)
if(isliving(user))
stack_on(source, user)
+1 -1
View File
@@ -216,7 +216,7 @@
desc = "Stores recorder holocalls."
icon_state = "holodisk"
obj_flags = UNIQUE_RENAME
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
materials = list(/datum/material/iron = 100, /datum/material/glass = 100)
var/datum/holorecord/record
//Preset variables
var/preset_image_type
+67
View File
@@ -0,0 +1,67 @@
/*! Material datum
Simple datum which is instanced once per type and is used for every object of said material. It has a variety of variables that define behavior. Subtyping from this makes it easier to create your own materials.
*/
/datum/material
var/name = "material"
var/desc = "its..stuff."
///Var that's mostly used by science machines to identify specific materials, should most likely be phased out at some point
var/id = "mat"
///Base color of the material, is used for greyscale. Item isn't changed in color if this is null.
var/color
///Base alpha of the material, is used for greyscale icons.
var/alpha
///Materials "Traits". its a map of key = category | Value = Bool. Used to define what it can be used for.gold
var/list/categories = list()
///The type of sheet this material creates. This should be replaced as soon as possible by greyscale sheets.
var/sheet_type
///The type of coin this material spawns. This should be replaced as soon as possible by greyscale coins.
var/coin_type
///This is a modifier for force, and resembles the strength of the material
var/strength_modifier = 1
///This is a modifier for integrity, and resembles the strength of the material
var/integrity_modifier = 1
///This proc is called when the material is added to an object.
/datum/material/proc/on_applied(atom/source, amount, material_flags)
if(!(material_flags & MATERIAL_NO_COLOR)) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example
if(color) //Do we have a custom color?
source.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
if(alpha)
source.alpha = alpha
if(istype(source, /obj)) //objs
on_applied_obj(source, amount, material_flags)
///This proc is called when the material is added to an object specifically.
/datum/material/proc/on_applied_obj(var/obj/o, amount, material_flags)
var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1)
// This is to keep the same damage relative to the max integrity of the object
o.obj_integrity = (o.obj_integrity / o.max_integrity) * new_max_integrity
o.max_integrity = new_max_integrity
o.force *= strength_modifier
o.throwforce *= strength_modifier
///This proc is called when the material is removed from an object.
/datum/material/proc/on_removed(atom/source, material_flags)
if(!(material_flags & MATERIAL_NO_COLOR)) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example
if(color)
source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color)
source.alpha = initial(source.alpha)
if(istype(source, /obj)) //objs
on_removed_obj(source, material_flags)
///This proc is called when the material is removed from an object specifically.
/datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags)
var/new_max_integrity = initial(o.max_integrity)
// This is to keep the same damage relative to the max integrity of the object
o.obj_integrity = (o.obj_integrity / o.max_integrity) * new_max_integrity
o.max_integrity = new_max_integrity
o.force = initial(o.force)
o.throwforce = initial(o.throwforce)
+149
View File
@@ -0,0 +1,149 @@
///Has no special properties.
/datum/material/iron
name = "iron"
id = "iron"
desc = "Common iron ore often found in sedimentary and igneous layers of the crust."
color = "#878687"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/metal
coin_type = /obj/item/coin/iron
///Breaks extremely easily but is transparent.
/datum/material/glass
name = "glass"
id = "glass"
desc = "Glass forged by melting sand."
color = "#dae6f0"
alpha = 210
categories = list(MAT_CATEGORY_RIGID = TRUE)
integrity_modifier = 0.1
sheet_type = /obj/item/stack/sheet/glass
///Has no special properties. Could be good against vampires in the future perhaps.
/datum/material/silver
name = "silver"
id = "silver"
desc = "Silver"
color = "#bdbebf"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/silver
coin_type = /obj/item/coin/silver
///Slight force increase
/datum/material/gold
name = "gold"
id = "gold"
desc = "Gold"
color = "#f0972b"
strength_modifier = 1.2
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/gold
coin_type = /obj/item/coin/gold
///Has no special properties
/datum/material/diamond
name = "diamond"
id = "diamond"
desc = "Highly pressurized carbon"
color = "#22c2d4"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/diamond
coin_type = /obj/item/coin/diamond
///Is slightly radioactive
/datum/material/uranium
name = "uranium"
id = "uranium"
desc = "Uranium"
color = "#1fb83b"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/uranium
coin_type = /obj/item/coin/uranium
/datum/material/uranium/on_applied(atom/source, amount, material_flags)
. = ..()
source.AddComponent(/datum/component/radioactive, amount / 10, source, 0) //half-life of 0 because we keep on going.
/datum/material/uranium/on_removed(atom/source, material_flags)
. = ..()
qdel(source.GetComponent(/datum/component/radioactive))
///Adds firestacks on hit (Still needs support to turn into gas on destruction)
/datum/material/plasma
name = "plasma"
id = "plasma"
desc = "Isn't plasma a state of matter? Oh whatever."
color = "#c716b8"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/plasma
coin_type = /obj/item/coin/plasma
/datum/material/plasma/on_applied(atom/source, amount, material_flags)
. = ..()
if(ismovableatom(source))
source.AddElement(/datum/element/firestacker)
source.AddComponent(/datum/component/explodable, 0, 0, amount / 1000, amount / 500)
/datum/material/plasma/on_removed(atom/source, material_flags)
. = ..()
source.RemoveElement(/datum/element/firestacker)
qdel(source.GetComponent(/datum/component/explodable))
///Can cause bluespace effects on use. (Teleportation) (Not yet implemented)
/datum/material/bluespace
name = "bluespace crystal"
id = "bluespace_crystal"
desc = "Crystals with bluespace properties"
color = "#506bc7"
categories = list(MAT_CATEGORY_ORE = TRUE)
sheet_type = /obj/item/stack/sheet/bluespace_crystal
///Honks and slips
/datum/material/bananium
name = "bananium"
id = "bananium"
desc = "Material with hilarious properties"
color = "#fff263"
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/bananium
coin_type = /obj/item/coin/bananium
/datum/material/bananium/on_applied(atom/source, amount, material_flags)
. = ..()
source.AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
source.AddComponent(/datum/component/slippery, min(amount / 10, 80))
/datum/material/bananium/on_removed(atom/source, amount, material_flags)
. = ..()
qdel(source.GetComponent(/datum/component/slippery))
qdel(source.GetComponent(/datum/component/squeak))
///Mediocre force increase
/datum/material/titanium
name = "titanium"
id = "titanium"
desc = "Titanium"
color = "#b3c0c7"
strength_modifier = 1.3
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/titanium
///Force decrease
/datum/material/plastic
name = "plastic"
id = "plastic"
desc = "plastic"
color = "#caccd9"
strength_modifier = 0.85
sheet_type = /obj/item/stack/sheet/plastic
///Force decrease and mushy sound effect. (Not yet implemented)
/datum/material/biomass
name = "biomass"
id = "biomass"
desc = "Organic matter"
color = "#735b4d"
strength_modifier = 0.8
+35
View File
@@ -68,6 +68,12 @@
/// Radiation insulation types
var/rad_insulation = RAD_NO_INSULATION
///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.)
var/list/custom_materials
///Bitfield for how the atom handles materials.
var/material_flags = NONE
/**
* Called when an atom is created in byond (built in engine proc)
*
@@ -146,6 +152,16 @@
if (canSmoothWith)
canSmoothWith = typelist("canSmoothWith", canSmoothWith)
if(custom_materials && custom_materials.len)
var/temp_list = list()
for(var/i in custom_materials)
var/datum/material/material = getmaterialref(i) || i
temp_list[material] = custom_materials[material] //Get the proper instanced version
custom_materials = null //Null the list to prepare for applying the materials properly
set_custom_materials(temp_list)
ComponentInitialize()
return INITIALIZE_HINT_NORMAL
@@ -448,6 +464,10 @@
if(desc)
. += desc
if(custom_materials)
for(var/i in custom_materials)
var/datum/material/M = i
. += "<u>It is made out of [M.name]</u>."
if(reagents)
if(reagents.flags & TRANSPARENT)
. += "It contains:"
@@ -1076,3 +1096,18 @@
/atom/proc/intercept_zImpact(atom/movable/AM, levels = 1)
return FALSE
///Sets the custom materials for an item.
/atom/proc/set_custom_materials(var/list/materials, multiplier = 1)
if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways
for(var/i in custom_materials)
var/datum/material/custom_material = i
custom_material.on_removed(src, material_flags) //Remove the current materials
custom_materials = list() //Reset the list
for(var/x in materials)
var/datum/material/custom_material = x
custom_material.on_applied(src, materials[custom_material] * multiplier, material_flags)
custom_materials[custom_material] += materials[custom_material] * multiplier
@@ -40,14 +40,14 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize()
. = ..()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
bananium.insert_amount(max_recharge, MAT_BANANIUM)
bananium.insert_amount_mat(max_recharge, /datum/material/bananium)
START_PROCESSING(SSobj, src)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
var/bananium_amount = bananium.amount(MAT_BANANIUM)
var/bananium_amount = bananium.get_material_amount(/datum/material/bananium)
if(bananium_amount < max_recharge)
bananium.insert_amount(min(recharge_rate, max_recharge - bananium_amount), MAT_BANANIUM)
bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/bananium)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user)
ui_action_click(user)
+67 -26
View File
@@ -48,7 +48,7 @@
)
/obj/machinery/autolathe/Initialize()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert))
AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/gold, /datum/material/silver, /datum/material/diamond, /datum/material/uranium, /datum/material/plasma, /datum/material/bluespace, /datum/material/bananium, /datum/material/titanium), 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert))
. = ..()
wires = new /datum/wires/autolathe(src)
@@ -122,15 +122,16 @@
return ..()
/obj/machinery/autolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal))
use_power(MINERAL_MATERIAL_AMOUNT / 10)
else
switch(id_inserted)
if (MAT_METAL)
if (/datum/material/iron)
flick("autolathe_o",src)//plays metal insertion animation
if (MAT_GLASS)
flick("autolathe_r",src)//plays glass insertion animation
else
flick("autolathe_r",src)//plays glass insertion animation by default otherwise
use_power(min(1000, amount_inserted / 100))
updateUsrDialog()
@@ -161,18 +162,42 @@
/////////////////
var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient
var/metal_cost = being_built.materials[MAT_METAL]
var/glass_cost = being_built.materials[MAT_GLASS]
var/total_amount = 0
for(var/MAT in being_built.materials)
total_amount += being_built.materials[MAT]
var/power = max(2000, (metal_cost+glass_cost)*multiplier/5)
var/power = max(2000, (total_amount)*multiplier/5) //Change this to use all materials
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if((materials.amount(MAT_METAL) >= metal_cost*multiplier*coeff) && (materials.amount(MAT_GLASS) >= glass_cost*multiplier*coeff))
var/list/materials_used = list()
var/list/custom_materials = list() //These will apply their material effect, This should usually only be one.
for(var/MAT in being_built.materials)
var/datum/material/used_material = MAT
var/amount_needed = being_built.materials[MAT] * coeff * multiplier
if(istext(used_material)) //This means its a category
var/list/list_to_show = list()
for(var/i in SSmaterials.materials_by_category[used_material])
if(materials.materials[i] > 0)
list_to_show += i
used_material = input("Choose [used_material]", "Custom Material") as null|anything in list_to_show
if(!used_material)
return //Didn't pick any material, so you can't build shit either.
custom_materials[used_material] += amount_needed
materials_used[used_material] = amount_needed
if(materials.has_materials(materials_used))
busy = TRUE
use_power(power)
icon_state = "autolathe_n"
var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8
addtimer(CALLBACK(src, .proc/make_item, power, metal_cost, glass_cost, multiplier, coeff, is_stack), time)
addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack), time)
else
to_chat(usr, "<span class=\"alert\">Not enough materials for this operation.</span>")
if(href_list["search"])
matching_designs.Cut()
@@ -189,12 +214,12 @@
return
/obj/machinery/autolathe/proc/make_item(power, metal_cost, glass_cost, multiplier, coeff, is_stack)
/obj/machinery/autolathe/proc/make_item(power, var/list/materials_used, var/list/picked_materials, multiplier, coeff, is_stack)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/atom/A = drop_location()
use_power(power)
var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier)
materials.use_amount(materials_used)
materials.use_materials(materials_used)
if(is_stack)
var/obj/item/stack/N = new being_built.build_path(A, multiplier)
@@ -207,6 +232,11 @@
for(var/mat in materials_used)
new_item.materials[mat] = materials_used[mat] / multiplier
new_item.autolathe_crafted(src)
if(length(picked_materials))
new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount
icon_state = "autolathe"
busy = FALSE
updateDialog()
@@ -271,7 +301,9 @@
if(ispath(D.build_path, /obj/item/stack))
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY)
var/max_multiplier
for(var/datum/material/mat in D.materials)
max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat]))
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
if (max_multiplier>25 && !disabled)
@@ -303,7 +335,9 @@
if(ispath(D.build_path, /obj/item/stack))
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY)
var/max_multiplier
for(var/datum/material/mat in D.materials)
max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat]))
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
if (max_multiplier>25 && !disabled)
@@ -320,8 +354,10 @@
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/dat = "<b>Total amount:</b> [materials.total_amount] / [materials.max_amount] cm<sup>3</sup><br>"
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
dat += "<b>[M.name] amount:</b> [M.amount] cm<sup>3</sup><br>"
var/datum/material/M = mat_id
var/mineral_amount = materials.materials[mat_id]
if(mineral_amount > 0)
dat += "<b>[M.name] amount:</b> [mineral_amount] cm<sup>3</sup><br>"
return dat
/obj/machinery/autolathe/proc/can_build(datum/design/D, amount = 1)
@@ -330,20 +366,25 @@
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
var/list/required_materials = list()
for(var/i in D.materials)
required_materials[i] = D.materials[i] * coeff * amount
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount)))
return FALSE
if(D.materials[MAT_GLASS] && (materials.amount(MAT_GLASS) < (D.materials[MAT_GLASS] * coeff * amount)))
return FALSE
return TRUE
return materials.has_materials(required_materials)
/obj/machinery/autolathe/proc/get_design_cost(datum/design/D)
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
var/dat
if(D.materials[MAT_METAL])
dat += "[D.materials[MAT_METAL] * coeff] metal "
if(D.materials[MAT_GLASS])
dat += "[D.materials[MAT_GLASS] * coeff] glass"
for(var/i in D.materials)
if(istext(i)) //Category handling
dat += "[D.materials[i] * coeff] [i]"
else
var/datum/material/M = i
dat += "[D.materials[i] * coeff] [M.name] "
return dat
/obj/machinery/autolathe/proc/reset(wire)
@@ -388,4 +429,4 @@
//Called when the object is constructed by an autolathe
//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes
/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A)
return
return
+1 -1
View File
@@ -283,4 +283,4 @@
desc = "Used for building buttons."
icon_state = "button"
result_path = /obj/machinery/button
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
@@ -8,7 +8,7 @@
desc = "The basic construction for Nanotrasen-Always-Watching-You cameras."
icon = 'icons/obj/machines/camera.dmi'
icon_state = "cameracase"
materials = list(MAT_METAL=400, MAT_GLASS=250)
materials = list(/datum/material/iron=400, /datum/material/glass=250)
result_path = /obj/structure/camera_assembly
/obj/structure/camera_assembly
+1 -1
View File
@@ -138,7 +138,7 @@
desc = "A frame for a defibrillator mount. It can't be removed once it's placed."
icon = 'icons/obj/machines/defib_mount.dmi'
icon_state = "defibrillator_mount"
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
materials = list(/datum/material/iron = 300, /datum/material/glass = 100)
w_class = WEIGHT_CLASS_BULKY
result_path = /obj/machinery/defibrillator_mount
pixel_shift = -28
+4 -4
View File
@@ -15,7 +15,7 @@
density = TRUE
max_integrity = 100
var/proj_pass_rate = 50 //How many projectiles will pass the cover. Lower means stronger cover
var/material = METAL
var/bar_material = METAL
/obj/structure/barricade/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -26,7 +26,7 @@
return
/obj/structure/barricade/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM && material == METAL)
if(I.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM && bar_material == METAL)
if(obj_integrity < max_integrity)
if(!I.tool_start_check(user, amount=0))
return
@@ -61,7 +61,7 @@
desc = "This space is blocked off by a wooden barricade."
icon = 'icons/obj/structures.dmi'
icon_state = "woodenbarricade"
material = WOOD
bar_material = WOOD
var/drop_amount = 3
/obj/structure/barricade/wooden/attackby(obj/item/I, mob/user)
@@ -105,7 +105,7 @@
max_integrity = 280
proj_pass_rate = 20
pass_flags = LETPASSTHROW
material = SAND
bar_material = SAND
climbable = TRUE
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/barricade/sandbags, /turf/closed/wall, /turf/closed/wall/r_wall, /obj/structure/falsewall, /obj/structure/falsewall/reinforced, /turf/closed/wall/rust, /turf/closed/wall/r_wall/rust, /obj/structure/barricade/security)
+4 -4
View File
@@ -50,10 +50,10 @@
/obj/machinery/droneDispenser/Initialize()
. = ..()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/stack)
materials.insert_amount(starting_amount)
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/stack)
materials.insert_amount_mat(starting_amount)
materials.precise_insertion = TRUE
using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost)
using_materials = list(/datum/material/iron = metal_cost, /datum/material/glass = glass_cost)
/obj/machinery/droneDispenser/preloaded
starting_amount = 5000
@@ -168,7 +168,7 @@
update_icon()
if(DRONE_PRODUCTION)
materials.use_amount(using_materials)
materials.use_materials(using_materials)
if(power_used)
use_power(power_used)
+1 -1
View File
@@ -174,7 +174,7 @@ GLOBAL_LIST_EMPTY(allCasters)
name = "newscaster frame"
desc = "Used to build newscasters, just secure to the wall."
icon_state = "newscaster"
materials = list(MAT_METAL=14000, MAT_GLASS=8000)
materials = list(/datum/material/iron=14000, /datum/material/glass=8000)
result_path = /obj/machinery/newscaster
@@ -958,7 +958,7 @@
desc = "Used for building turret control panels."
icon_state = "apc"
result_path = /obj/machinery/turretid
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
/obj/item/gun/proc/get_turret_properties()
. = list()
+1 -1
View File
@@ -18,7 +18,7 @@
var/item_recycle_sound = 'sound/items/welder.ogg'
/obj/machinery/recycler/Initialize()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), INFINITY, FALSE, null, null, null, TRUE)
AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
AddComponent(/datum/component/butchering, 1, amount_produced,amount_produced/5)
. = ..()
update_icon()
@@ -527,7 +527,7 @@
range = MELEE|RANGED
equip_cooldown = 0
var/obj/item/gun/medbeam/mech/medigun
materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_PLASMA = 3000, MAT_GOLD = 8000, MAT_DIAMOND = 2000)
materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000)
/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/Initialize()
. = ..()
+15 -12
View File
@@ -36,7 +36,7 @@
/obj/machinery/mecha_part_fabricator/Initialize()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0,
list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), 0,
TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
materials.precise_insertion = TRUE
stored_research = new
@@ -112,20 +112,22 @@
var/output
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
output += "<span class=\"res_name\">[M.name]: </span>[M.amount] cm&sup3;"
if(M.amount >= MINERAL_MATERIAL_AMOUNT)
output += "<span style='font-size:80%;'>- Remove \[<a href='?src=[REF(src)];remove_mat=1;material=[mat_id]'>1</a>\]"
if(M.amount >= (MINERAL_MATERIAL_AMOUNT * 10))
output += " | \[<a href='?src=[REF(src)];remove_mat=10;material=[mat_id]'>10</a>\]"
output += " | \[<a href='?src=[REF(src)];remove_mat=50;material=[mat_id]'>All</a>\]</span>"
var/datum/material/M = mat_id
var/amount = materials.materials[mat_id]
output += "<span class=\"res_name\">[M.name]: </span>[amount] cm&sup3;"
if(amount >= MINERAL_MATERIAL_AMOUNT)
output += "<span style='font-size:80%;'>- Remove \[<a href='?src=[REF(src)];remove_mat=1;material=[REF(mat_id)]'>1</a>\]"
if(amount >= (MINERAL_MATERIAL_AMOUNT * 10))
output += " | \[<a href='?src=[REF(src)];remove_mat=10;material=[REF(M)]'>10</a>\]"
output += " | \[<a href='?src=[REF(src)];remove_mat=50;material=[REF(M)]'>All</a>\]</span>"
output += "<br/>"
return output
/obj/machinery/mecha_part_fabricator/proc/get_resources_w_coeff(datum/design/D)
var/list/resources = list()
for(var/R in D.materials)
resources[R] = get_resource_cost_w_coeff(D, R)
var/datum/material/M = R
resources[M] = get_resource_cost_w_coeff(D, M)
return resources
/obj/machinery/mecha_part_fabricator/proc/check_resources(datum/design/D)
@@ -142,7 +144,7 @@
var/list/res_coef = get_resources_w_coeff(D)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.use_amount(res_coef)
materials.use_materials(res_coef)
add_overlay("fab-active")
use_power = ACTIVE_POWER_USE
updateUsrDialog()
@@ -246,7 +248,7 @@
updateUsrDialog()
return
/obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(datum/design/D, resource, roundto = 1)
/obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(datum/design/D, var/datum/material/resource, roundto = 1)
return round(D.materials[resource]*component_coeff, roundto)
/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran
@@ -385,7 +387,8 @@
if(href_list["remove_mat"] && href_list["material"])
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.retrieve_sheets(text2num(href_list["remove_mat"]), href_list["material"])
var/datum/material/Mat = locate(href_list["material"])
materials.retrieve_sheets(text2num(href_list["remove_mat"]), Mat)
updateUsrDialog()
return
+10 -2
View File
@@ -65,7 +65,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/equip_delay_other = 20 //In deciseconds, how long an item takes to put on another person
var/strip_delay = 40 //In deciseconds, how long an item takes to remove from another person
var/breakouttime = 0
var/list/materials
var/list/materials //materials in this object, and the amount
var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
var/list/species_exception = null // list() of species types, if a species cannot put items in a certain slot, but species type is in list, it will be able to wear that item
@@ -109,6 +109,14 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
materials = typelist("materials", materials)
if(materials) //Otherwise, use the instances already provided.
var/list/temp_list = list()
for(var/i in materials) //Go through all of our materials, get the subsystem instance, and then replace the list.
var/amount = materials[i]
var/datum/material/M = getmaterialref(i)
temp_list[M] = amount
materials = temp_list
if (attack_verb)
attack_verb = typelist("attack_verb", attack_verb)
@@ -798,4 +806,4 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
return !HAS_TRAIT(src, TRAIT_NODROP)
/obj/item/proc/doStrip(mob/stripper, mob/owner)
return owner.dropItemToGround(src)
return owner.dropItemToGround(src)
+1 -1
View File
@@ -22,7 +22,7 @@ AI MODULES
throw_range = 7
var/list/laws = list()
var/bypass_law_amt_check = 0
materials = list(MAT_GOLD=50)
materials = list(/datum/material/gold = 50)
/obj/item/aiModule/examine(var/mob/user as mob)
. = ..()
+3 -3
View File
@@ -22,7 +22,7 @@ RLD
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=100000)
materials = list(/datum/material/iron=100000)
req_access_txt = "11"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
@@ -599,11 +599,11 @@ RLD
w_class = WEIGHT_CLASS_TINY
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
materials = list(MAT_METAL=12000, MAT_GLASS=8000)
materials = list(/datum/material/iron=12000, /datum/material/glass=8000)
var/ammoamt = 40
/obj/item/rcd_ammo/large
materials = list(MAT_METAL=48000, MAT_GLASS=32000)
materials = list(/datum/material/iron=48000, /datum/material/glass=32000)
ammoamt = 160
+1 -1
View File
@@ -200,7 +200,7 @@ GLOBAL_LIST_INIT(fluid_duct_recipes, list(
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=75000, MAT_GLASS=37500)
materials = list(/datum/material/iron=75000, /datum/material/glass=37500)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
var/datum/effect_system/spark_spread/spark_system
+1 -1
View File
@@ -7,7 +7,7 @@
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=50, MAT_GLASS=50)
materials = list(/datum/material/iron=50, /datum/material/glass=50)
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
+4 -4
View File
@@ -1,6 +1,6 @@
/obj/item/wallframe
icon = 'icons/obj/wallframe.dmi'
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT*2)
materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT*2)
flags_1 = CONDUCT_1
item_state = "syringe_kit"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
@@ -66,8 +66,8 @@
if(iswallturf(T))
T.attackby(src, user, params)
var/metal_amt = round(materials[MAT_METAL]/MINERAL_MATERIAL_AMOUNT)
var/glass_amt = round(materials[MAT_GLASS]/MINERAL_MATERIAL_AMOUNT)
var/metal_amt = round(materials[/datum/material/iron]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later
var/glass_amt = round(materials[/datum/material/glass]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later
if(W.tool_behaviour == TOOL_WRENCH && (metal_amt || glass_amt))
to_chat(user, "<span class='notice'>You dismantle [src].</span>")
@@ -119,5 +119,5 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=50, MAT_GLASS=50)
materials = list(/datum/material/iron=50, /datum/material/glass=50)
grind_results = list(/datum/reagent/iron = 10, /datum/reagent/silicon = 10)
@@ -10,7 +10,7 @@
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_GLASS=1000)
materials = list(/datum/material/glass=1000)
w_class = WEIGHT_CLASS_SMALL
grind_results = list(/datum/reagent/silicon = 20)
var/build_path = null
@@ -8,7 +8,7 @@
item_flags = NOBLUDGEON
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_METAL=250, MAT_GLASS=500)
materials = list(/datum/material/iron=250, /datum/material/glass=500)
var/max_duration = 3000
var/duration = 300
var/last_use = 0
@@ -12,7 +12,7 @@
item_flags = NOBLUDGEON
force = 3
attack_verb = list("blown up", "exploded", "detonated")
materials = list(MAT_METAL=50, MAT_GLASS=30)
materials = list(/datum/material/iron=50, /datum/material/glass=30)
/obj/item/doorCharge/ex_act(severity, target)
switch(severity)
@@ -5,7 +5,7 @@
icon = 'icons/obj/module.dmi'
icon_state = "boris"
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL = 50, MAT_GLASS = 300)
materials = list(/datum/material/iron = 50, /datum/material/glass = 300)
var/recharging = FALSE
var/circuits = 5 //How many circuits the pseudocircuit has left
var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \
@@ -10,7 +10,7 @@
w_class = WEIGHT_CLASS_SMALL
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=50, MAT_GLASS=20)
materials = list(/datum/material/iron=50, /datum/material/glass=20)
actions_types = list(/datum/action/item_action/toggle_light)
var/on = FALSE
var/brightness_on = 4 //range of light when on
@@ -9,7 +9,7 @@
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_METAL=250, MAT_GLASS=500)
materials = list(/datum/material/iron=250, /datum/material/glass=500)
var/max_shield_integrity = 250
var/shield_integrity = 250
var/max_fields = 3
@@ -18,7 +18,7 @@
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
materials = list(/datum/material/iron = 150, /datum/material/glass = 150)
var/grace = RAD_GRACE_PERIOD
var/datum/looping_sound/geiger/soundloop
@@ -8,7 +8,7 @@
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=500, MAT_GLASS=500)
materials = list(/datum/material/iron=500, /datum/material/glass=500)
w_class = WEIGHT_CLASS_SMALL
var/turf/pointer_loc
var/energy = 5
+1 -1
View File
@@ -24,7 +24,7 @@
throwforce = 0
throw_range = 7
throw_speed = 3
materials = list(MAT_METAL=50, MAT_GLASS=20)
materials = list(/datum/material/iron=50, /datum/material/glass=20)
var/obj/machinery/buffer // simple machine buffer for device linkage
toolspeed = 1
usesound = 'sound/weapons/empty.ogg'
@@ -6,7 +6,7 @@
item_flags = NOBLUDGEON
var/paint_color = "grey"
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
materials = list(/datum/material/iron=5000, /datum/material/glass=2000)
/obj/item/pipe_painter/afterattack(atom/A, mob/user, proximity_flag)
. = ..()
+1 -1
View File
@@ -13,7 +13,7 @@
throwforce = 5
throw_speed = 1
throw_range = 2
materials = list(MAT_METAL=750)
materials = list(/datum/material/iron=750)
var/drain_rate = 2000000 // amount of power to drain per tick
var/power_drained = 0 // has drained this much power
var/max_power = 6e8 // maximum power that can be drained before exploding
@@ -9,7 +9,7 @@
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_HUGE
materials = list(MAT_METAL=10000, MAT_GLASS=2500)
materials = list(/datum/material/iron=10000, /datum/material/glass=2500)
var/on = TRUE
var/code = 2
var/frequency = FREQ_ELECTROPACK
@@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
icon_state = "headset"
item_state = "headset"
materials = list(MAT_METAL=75)
materials = list(/datum/material/iron=75)
subspace_transmission = TRUE
canhear_range = 0 // can't hear headsets from very far away
@@ -147,4 +147,4 @@
result_path = /obj/item/radio/intercom/unscrewed
pixel_shift = 29
inverse = TRUE
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
materials = list(/datum/material/iron = 75, /datum/material/glass = 25)
@@ -11,7 +11,7 @@
throw_speed = 3
throw_range = 7
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=75, MAT_GLASS=25)
materials = list(/datum/material/iron=75, /datum/material/glass=25)
obj_flags = USES_TGUI
var/on = TRUE
+6 -6
View File
@@ -22,7 +22,7 @@ GENE SCANNER
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_METAL=150)
materials = list(/datum/material/iron=150)
/obj/item/t_scanner/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins to emit terahertz-rays into [user.p_their()] brain with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -86,7 +86,7 @@ GENE SCANNER
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=200)
materials = list(/datum/material/iron=200)
var/mode = 1
var/scanmode = 0
var/advanced = FALSE
@@ -402,7 +402,7 @@ GENE SCANNER
throw_speed = 3
throw_range = 7
tool_behaviour = TOOL_ANALYZER
materials = list(MAT_METAL=30, MAT_GLASS=20)
materials = list(/datum/material/iron=30, /datum/material/glass=20)
grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
var/cooldown = FALSE
var/cooldown_time = 250
@@ -597,7 +597,7 @@ GENE SCANNER
throwforce = 0
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=30, MAT_GLASS=20)
materials = list(/datum/material/iron=30, /datum/material/glass=20)
/obj/item/slime_scanner/attack(mob/living/M, mob/living/user)
if(user.stat || user.eye_blind)
@@ -656,7 +656,7 @@ GENE SCANNER
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=200)
materials = list(/datum/material/iron=200)
/obj/item/nanite_scanner/attack(mob/living/M, mob/living/carbon/human/user)
user.visible_message("<span class='notice'>[user] has analyzed [M]'s nanites.</span>")
@@ -682,7 +682,7 @@ GENE SCANNER
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=200)
materials = list(/datum/material/iron=200)
var/list/discovered = list() //hit a dna console to update the scanners database
var/list/buffer
var/ready = TRUE
@@ -9,7 +9,7 @@
w_class = WEIGHT_CLASS_SMALL
flags_1 = HEAR_1
slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=60, MAT_GLASS=30)
materials = list(/datum/material/iron=60, /datum/material/glass=30)
force = 2
throwforce = 0
var/recording = 0
@@ -243,7 +243,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL=20, MAT_GLASS=5)
materials = list(/datum/material/iron=20, /datum/material/glass=5)
force = 1
throwforce = 0
var/max_capacity = 600
@@ -69,7 +69,7 @@ effective or pretty fucking useless.
*/
/obj/item/healthanalyzer/rad_laser
materials = list(MAT_METAL=400)
materials = list(/datum/material/iron=400)
var/irradiate = 1
var/intensity = 10 // how much damage the radiation does
var/wavelength = 10 // time it takes for the radiation to kick in, in seconds
+2 -2
View File
@@ -11,7 +11,7 @@
throw_speed = 2
throw_range = 7
force = 10
materials = list(MAT_METAL = 90)
materials = list(/datum/material/iron = 90)
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
dog_fashion = /datum/dog_fashion/back
resistance_flags = FIRE_PROOF
@@ -36,7 +36,7 @@
throwforce = 2
w_class = WEIGHT_CLASS_SMALL
force = 3
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
materials = list(/datum/material/iron = 50, /datum/material/glass = 40)
max_water = 30
sprite_name = "miniFE"
dog_fashion = null
+1 -1
View File
@@ -12,7 +12,7 @@
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=500)
materials = list(/datum/material/iron=500)
resistance_flags = FIRE_PROOF
var/status = FALSE
var/lit = FALSE //on or off
+2 -2
View File
@@ -34,7 +34,7 @@
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=500)
materials = list(/datum/material/iron=500)
breakouttime = 1 MINUTES
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
var/cuffsound = 'sound/weapons/handcuffs.ogg'
@@ -115,7 +115,7 @@
color = "#ff0000"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
materials = list(MAT_METAL=150, MAT_GLASS=75)
materials = list(/datum/material/iron=150, /datum/material/glass=75)
breakouttime = 30 SECONDS
cuffsound = 'sound/weapons/cablecuff.ogg'
@@ -9,7 +9,7 @@
throw_speed = 2
throw_range = 5
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_GLASS=500)
materials = list(/datum/material/glass=500)
var/obj/item/implant/imp = null
var/imp_type
@@ -9,7 +9,7 @@
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=600, MAT_GLASS=200)
materials = list(/datum/material/iron=600, /datum/material/glass=200)
var/obj/item/implant/imp = null
var/imp_type = null
+3 -3
View File
@@ -22,7 +22,7 @@
throwforce = 0
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=80)
materials = list(/datum/material/iron=80)
flags_1 = CONDUCT_1
attack_verb = list("attacked", "stabbed", "poked")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -68,7 +68,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
throw_speed = 3
throw_range = 6
materials = list(MAT_METAL=12000)
materials = list(/datum/material/iron=12000)
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = IS_SHARP_ACCURATE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
@@ -110,7 +110,7 @@
flags_1 = CONDUCT_1
force = 15
throwforce = 10
materials = list(MAT_METAL=18000)
materials = list(/datum/material/iron=18000)
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
w_class = WEIGHT_CLASS_NORMAL
custom_price = 60
+2 -2
View File
@@ -23,7 +23,7 @@
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
hitsound = 'sound/weapons/chainhit.ogg'
materials = list(MAT_METAL = 1000)
materials = list(/datum/material/iron = 1000)
/obj/item/melee/chainofcommand/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -65,7 +65,7 @@
sharpness = IS_SHARP
attack_verb = list("slashed", "cut")
hitsound = 'sound/weapons/rapierhit.ogg'
materials = list(MAT_METAL = 1000)
materials = list(/datum/material/iron = 1000)
/obj/item/melee/sabre/Initialize()
. = ..()
+1 -1
View File
@@ -15,7 +15,7 @@
w_class = WEIGHT_CLASS_BULKY
throw_speed = 2
throw_range = 3
materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
materials = list(/datum/material/iron = 7500, /datum/material/glass = 100)
var/open = TRUE
var/locked = FALSE
var/list/occupants = list()
+1 -1
View File
@@ -12,7 +12,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL = 500, MAT_GLASS = 250)
materials = list(/datum/material/iron = 500, /datum/material/glass = 250)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/active = FALSE
var/atom/movable/target //The thing we're searching for
+2 -2
View File
@@ -20,7 +20,7 @@
throw_speed = 2
throw_range = 3
w_class = WEIGHT_CLASS_BULKY
materials = list(MAT_GLASS=7500, MAT_METAL=1000)
materials = list(/datum/material/glass=7500, /datum/material/iron=1000)
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
transparent = TRUE
@@ -85,7 +85,7 @@
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
transparent = FALSE
materials = list(MAT_METAL=8500)
materials = list(/datum/material/iron=8500)
max_integrity = 65
/obj/item/shield/riot/roman/fake
+3 -3
View File
@@ -7,7 +7,7 @@
item_color = "cosmos"
singular_name = "bluespace crystal"
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT)
points = 50
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
refined_type = /obj/item/stack/sheet/bluespace_crystal
@@ -50,7 +50,7 @@
/obj/item/stack/ore/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT*0.5)
materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT*0.5)
blink_range = 4 // Not as good as the organic stuff!
points = 0 //nice try
refined_type = null
@@ -64,7 +64,7 @@
item_state = "sheet-polycrystal"
singular_name = "bluespace polycrystal"
desc = "A stable polycrystal, made of fused-together bluespace crystals. You could probably break one off."
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed")
novariants = TRUE
grind_results = list(/datum/reagent/bluespace = 20)
+1 -1
View File
@@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
throwforce = 10
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=1000)
materials = list(/datum/material/iron=1000)
max_amount = 50
attack_verb = list("hit", "bludgeoned", "whacked")
hitsound = 'sound/weapons/grenadelaunch.ogg'
@@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
singular_name = "glass sheet"
icon_state = "sheet-glass"
item_state = "sheet-glass"
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
@@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
singular_name = "plasma glass sheet"
icon_state = "sheet-pglass"
item_state = "sheet-pglass"
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmaglass
@@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
item_state = "sheet-rglass"
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
@@ -177,7 +177,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
singular_name = "reinforced plasma glass sheet"
icon_state = "sheet-prglass"
item_state = "sheet-prglass"
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5,)
materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5,)
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmarglass
@@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
singular_name = "titanium glass sheet"
icon_state = "sheet-titaniumglass"
item_state = "sheet-titaniumglass"
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
@@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
singular_name = "plastitanium glass sheet"
icon_state = "sheet-plastitaniumglass"
item_state = "sheet-plastitaniumglass"
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
@@ -237,7 +237,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
item_state = "shard-glass"
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("stabbed", "slashed", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
resistance_flags = ACID_PROOF
@@ -335,5 +335,5 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
force = 6
throwforce = 11
icon_state = "plasmalarge"
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
icon_prefix = "plasma"
@@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
item_state = "sheet-sandstone"
throw_speed = 3
throw_range = 5
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
sheettype = "sandstone"
merge_type = /obj/item/stack/sheet/mineral/sandstone
@@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
item_state = "sheet-diamond"
singular_name = "diamond"
sheettype = "diamond"
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT)
novariants = TRUE
grind_results = list(/datum/reagent/carbon = 20)
point_value = 25
@@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
item_state = "sheet-uranium"
singular_name = "uranium sheet"
sheettype = "uranium"
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT)
novariants = TRUE
grind_results = list(/datum/reagent/uranium = 20)
point_value = 20
@@ -158,7 +158,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
sheettype = "plasma"
resistance_flags = FLAMMABLE
max_integrity = 100
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/toxin/plasma = 20)
point_value = 20
merge_type = /obj/item/stack/sheet/mineral/plasma
@@ -199,7 +199,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
item_state = "sheet-gold"
singular_name = "gold bar"
sheettype = "gold"
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/gold = 20)
point_value = 20
merge_type = /obj/item/stack/sheet/mineral/gold
@@ -228,7 +228,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
item_state = "sheet-silver"
singular_name = "silver bar"
sheettype = "silver"
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/silver = 20)
point_value = 20
merge_type = /obj/item/stack/sheet/mineral/silver
@@ -256,7 +256,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
item_state = "sheet-bananium"
singular_name = "bananium sheet"
sheettype = "bananium"
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
novariants = TRUE
grind_results = list(/datum/reagent/consumable/banana = 20)
point_value = 50
@@ -285,7 +285,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
throw_speed = 1
throw_range = 3
sheettype = "titanium"
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT)
point_value = 20
merge_type = /obj/item/stack/sheet/mineral/titanium
@@ -315,7 +315,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
throw_speed = 1
throw_range = 3
sheettype = "plastitanium"
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT, MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
point_value = 45
merge_type = /obj/item/stack/sheet/mineral/plastitanium
@@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
singular_name = "metal sheet"
icon_state = "sheet-metal"
item_state = "sheet-metal"
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
throwforce = 10
flags_1 = CONDUCT_1
resistance_flags = FIRE_PROOF
@@ -159,7 +159,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
desc = "This sheet is an alloy of iron and plasma."
icon_state = "sheet-plasteel"
item_state = "sheet-metal"
materials = list(MAT_METAL=2000, MAT_PLASMA=2000)
materials = list(/datum/material/iron=2000, /datum/material/plasma=2000)
throwforce = 10
flags_1 = CONDUCT_1
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80)
@@ -654,7 +654,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
singular_name = "plastic sheet"
icon_state = "sheet-plastic"
item_state = "sheet-plastic"
materials = list(MAT_PLASTIC=MINERAL_MATERIAL_AMOUNT)
materials = list(/datum/material/plastic=MINERAL_MATERIAL_AMOUNT)
throwforce = 7
merge_type = /obj/item/stack/sheet/plastic
@@ -5,7 +5,7 @@
icon_state = "tile_plasma"
turf_type = /turf/open/floor/mineral/plasma
mineralType = "plasma"
materials = list(MAT_PLASMA=500)
materials = list(/datum/material/plasma=500)
/obj/item/stack/tile/mineral/uranium
name = "uranium tile"
@@ -14,7 +14,7 @@
icon_state = "tile_uranium"
turf_type = /turf/open/floor/mineral/uranium
mineralType = "uranium"
materials = list(MAT_URANIUM=500)
materials = list(/datum/material/uranium=500)
/obj/item/stack/tile/mineral/gold
name = "gold tile"
@@ -23,7 +23,7 @@
icon_state = "tile_gold"
turf_type = /turf/open/floor/mineral/gold
mineralType = "gold"
materials = list(MAT_GOLD=500)
materials = list(/datum/material/gold=500)
/obj/item/stack/tile/mineral/silver
name = "silver tile"
@@ -32,7 +32,7 @@
icon_state = "tile_silver"
turf_type = /turf/open/floor/mineral/silver
mineralType = "silver"
materials = list(MAT_SILVER=500)
materials = list(/datum/material/silver=500)
/obj/item/stack/tile/mineral/diamond
name = "diamond tile"
@@ -41,7 +41,7 @@
icon_state = "tile_diamond"
turf_type = /turf/open/floor/mineral/diamond
mineralType = "diamond"
materials = list(MAT_DIAMOND=500)
materials = list(/datum/material/diamond=500)
/obj/item/stack/tile/mineral/bananium
name = "bananium tile"
@@ -50,7 +50,7 @@
icon_state = "tile_bananium"
turf_type = /turf/open/floor/mineral/bananium
mineralType = "bananium"
materials = list(MAT_BANANIUM=500)
materials = list(/datum/material/bananium=500)
/obj/item/stack/tile/mineral/abductor
name = "alien floor tile"
@@ -68,7 +68,7 @@
icon_state = "tile_shuttle"
turf_type = /turf/open/floor/mineral/titanium
mineralType = "titanium"
materials = list(MAT_TITANIUM=500)
materials = list(/datum/material/titanium=500)
/obj/item/stack/tile/mineral/plastitanium
name = "plastitanium tile"
@@ -77,7 +77,7 @@
icon_state = "tile_darkshuttle"
turf_type = /turf/open/floor/mineral/plastitanium
mineralType = "plastitanium"
materials = list(MAT_TITANIUM=250, MAT_PLASMA=250)
materials = list(/datum/material/titanium=250, /datum/material/plasma=250)
/obj/item/stack/tile/mineral/snow
name = "snow tile"
@@ -204,7 +204,7 @@
desc = "Those could work as a pretty decent throwing weapon."
icon_state = "tile"
force = 6
materials = list(MAT_METAL=500)
materials = list(/datum/material/iron=500)
throwforce = 10
flags_1 = CONDUCT_1
turf_type = /turf/open/floor/plasteel
+1 -1
View File
@@ -283,7 +283,7 @@
throw_range = 5
w_class = WEIGHT_CLASS_BULKY
flags_1 = CONDUCT_1
materials = list(MAT_METAL=3000)
materials = list(/datum/material/iron=3000)
/obj/item/storage/bag/tray/ComponentInitialize()
. = ..()
+1 -1
View File
@@ -324,7 +324,7 @@
desc = "Proves to the world that you are the strongest!"
icon_state = "championbelt"
item_state = "champion"
materials = list(MAT_GOLD=400)
materials = list(/datum/material/gold=400)
/obj/item/storage/belt/champion/ComponentInitialize()
. = ..()
+13 -3
View File
@@ -1,8 +1,8 @@
/obj/item/storage/toolbox
name = "toolbox"
desc = "Danger. Very robust."
icon_state = "red"
item_state = "toolbox_red"
icon_state = "toolbox_default"
item_state = "toolbox_default"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
flags_1 = CONDUCT_1
@@ -11,9 +11,10 @@
throw_speed = 2
throw_range = 7
w_class = WEIGHT_CLASS_BULKY
materials = list(MAT_METAL = 500)
materials = list(/datum/material/iron = 500)
attack_verb = list("robusted")
hitsound = 'sound/weapons/smash.ogg'
custom_materials = list(/datum/material/iron = 500) //Toolboxes by default use iron as their core, custom material.
var/latches = "single_latch"
var/has_latches = TRUE
@@ -41,6 +42,7 @@
name = "emergency toolbox"
icon_state = "red"
item_state = "toolbox_red"
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/emergency/PopulateContents()
new /obj/item/crowbar/red(src)
@@ -59,11 +61,13 @@
name = "rusty red toolbox"
icon_state = "toolbox_red_old"
has_latches = FALSE
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/mechanical/PopulateContents()
new /obj/item/screwdriver(src)
@@ -77,6 +81,7 @@
name = "rusty blue toolbox"
icon_state = "toolbox_blue_old"
has_latches = FALSE
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/mechanical/old/heirloom
name = "toolbox" //this will be named "X family toolbox"
@@ -124,6 +129,7 @@
name = "electrical toolbox"
icon_state = "yellow"
item_state = "toolbox_yellow"
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/electrical/PopulateContents()
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
@@ -144,6 +150,7 @@
item_state = "toolbox_syndi"
force = 15
throwforce = 18
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/syndicate/ComponentInitialize()
. = ..()
@@ -163,6 +170,7 @@
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/drone/PopulateContents()
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
@@ -183,6 +191,7 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("robusted", "crushed", "smashed")
material_flags = MATERIAL_NO_COLOR
var/fabricator_type = /obj/item/clockwork/replica_fabricator/scarab
/obj/item/storage/toolbox/brass/ComponentInitialize()
@@ -222,6 +231,7 @@
icon_state = "green"
item_state = "artistic_toolbox"
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
material_flags = MATERIAL_NO_COLOR
/obj/item/storage/toolbox/artistic/ComponentInitialize()
. = ..()
+1 -1
View File
@@ -11,7 +11,7 @@
throwforce = 10
throw_speed = 1
throw_range = 4
materials = list(MAT_METAL = 500)
materials = list(/datum/material/iron = 500)
actions_types = list(/datum/action/item_action/set_internals)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 30)
var/datum/gas_mixture/air_contents = null
+2 -2
View File
@@ -24,7 +24,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=400)
materials = list(/datum/material/iron=400)
/obj/item/locator/attack_self(mob/user)
user.set_machine(src)
@@ -126,7 +126,7 @@
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=10000)
materials = list(/datum/material/iron=10000)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/list/active_portal_pairs
+3 -3
View File
@@ -11,7 +11,7 @@
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=50)
materials = list(/datum/material/iron=50)
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_CROWBAR
@@ -50,7 +50,7 @@
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 3
throw_range = 3
materials = list(MAT_METAL=70)
materials = list(/datum/material/iron=70)
icon_state = "crowbar_large"
item_state = "crowbar"
toolspeed = 0.7
@@ -69,7 +69,7 @@
item_state = "jawsoflife"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25)
usesound = 'sound/items/jaws_pry.ogg'
force = 15
+2 -2
View File
@@ -13,7 +13,7 @@
throwforce = 5
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=75)
materials = list(/datum/material/iron=75)
attack_verb = list("stabbed")
hitsound = 'sound/weapons/bladeslice.ogg'
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
@@ -111,7 +111,7 @@
item_state = "drill"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get
materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25) //done for balance reasons, making them high value for research, but harder to get
force = 8 //might or might not be too high, subject to change
w_class = WEIGHT_CLASS_SMALL
throwforce = 8
+5 -5
View File
@@ -21,7 +21,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
materials = list(MAT_METAL=70, MAT_GLASS=30)
materials = list(/datum/material/iron=70, /datum/material/glass=30)
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
var/max_fuel = 20 //The max amount of fuel the welder can hold
@@ -297,7 +297,7 @@
desc = "A slightly larger welder with a larger tank."
icon_state = "indwelder"
max_fuel = 40
materials = list(MAT_GLASS=60)
materials = list(/datum/material/glass=60)
/obj/item/weldingtool/largetank/cyborg
name = "integrated welding tool"
@@ -319,7 +319,7 @@
icon_state = "miniwelder"
max_fuel = 10
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL=30, MAT_GLASS=10)
materials = list(/datum/material/iron=30, /datum/material/glass=10)
change_icons = 0
/obj/item/weldingtool/mini/flamethrower_screwdriver()
@@ -345,7 +345,7 @@
icon_state = "upindwelder"
item_state = "upindwelder"
max_fuel = 80
materials = list(MAT_METAL=70, MAT_GLASS=120)
materials = list(/datum/material/iron=70, /datum/material/glass=120)
/obj/item/weldingtool/experimental
name = "experimental welding tool"
@@ -353,7 +353,7 @@
icon_state = "exwelder"
item_state = "exwelder"
max_fuel = 40
materials = list(MAT_METAL=70, MAT_GLASS=120)
materials = list(/datum/material/iron=70, /datum/material/glass=120)
var/last_gen = 0
change_icons = 0
can_off_process = 1
+2 -2
View File
@@ -12,7 +12,7 @@
throw_speed = 3
throw_range = 7
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=80)
materials = list(/datum/material/iron=80)
attack_verb = list("pinched", "nipped")
hitsound = 'sound/items/wirecutter.ogg'
usesound = 'sound/items/wirecutter.ogg'
@@ -94,7 +94,7 @@
icon_state = "jaws_cutter"
item_state = "jawsoflife"
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25)
usesound = 'sound/items/jaws_cut.ogg'
toolspeed = 0.7
random_color = FALSE
+2 -2
View File
@@ -11,7 +11,7 @@
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
usesound = 'sound/items/ratchet.ogg'
materials = list(MAT_METAL=150)
materials = list(/datum/material/iron=150)
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_WRENCH
@@ -52,7 +52,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
usesound = 'sound/items/drill_use.ogg'
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25)
//done for balance reasons, making them high value for research, but harder to get
force = 8 //might or might not be too high, subject to change
w_class = WEIGHT_CLASS_SMALL
+2 -2
View File
@@ -164,7 +164,7 @@
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=10, MAT_GLASS=10)
materials = list(/datum/material/iron=10, /datum/material/glass=10)
attack_verb = list("struck", "pistol whipped", "hit", "bashed")
var/bullets = 7
@@ -218,7 +218,7 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "357OLD-7"
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL=10, MAT_GLASS=10)
materials = list(/datum/material/iron=10, /datum/material/glass=10)
var/amount_left = 7
/obj/item/toy/ammo/gun/update_icon()
+2 -2
View File
@@ -467,7 +467,7 @@
throw_speed = 4
embedding = list("embedded_impact_pain_multiplier" = 3)
armour_penetration = 10
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
materials = list(/datum/material/iron=1150, /datum/material/glass=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
sharpness = IS_SHARP
@@ -573,7 +573,7 @@
throwforce = 13
throw_speed = 2
throw_range = 4
materials = list(MAT_METAL=13000)
materials = list(/datum/material/iron=13000)
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = "swing_hit"
sharpness = IS_SHARP
+4 -4
View File
@@ -239,7 +239,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
force = 9
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=1150, MAT_GLASS=75)
materials = list(/datum/material/iron=1150, /datum/material/glass=75)
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
/obj/item/wirerod/attackby(obj/item/I, mob/user, params)
@@ -283,7 +283,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 100, "embedded_fall_chance" = 0)
w_class = WEIGHT_CLASS_SMALL
sharpness = IS_SHARP
materials = list(MAT_METAL=500, MAT_GLASS=500)
materials = list(/datum/material/iron=500, /datum/material/glass=500)
resistance_flags = FIRE_PROOF
/obj/item/throwing_star/magspear
@@ -309,7 +309,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throwforce = 5
throw_speed = 3
throw_range = 6
materials = list(MAT_METAL=12000)
materials = list(/datum/material/iron=12000)
hitsound = 'sound/weapons/genhit.ogg'
attack_verb = list("stubbed", "poked")
resistance_flags = FIRE_PROOF
@@ -370,7 +370,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=50)
materials = list(/datum/material/iron=50)
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
/obj/item/staff
@@ -261,7 +261,7 @@
throw_range = 3
hitsound = 'sound/items/trayhit1.ogg'
hit_reaction_chance = 50
materials = list(MAT_METAL = 2000)
materials = list(/datum/material/iron = 2000)
var/break_chance = 5 //Likely hood of smashing the chair.
var/obj/structure/chair/origin_type = /obj/structure/chair
@@ -302,7 +302,7 @@
if(remaining_mats)
for(var/M=1 to remaining_mats)
new stack_type(get_turf(loc))
else if(materials[MAT_METAL])
else if(materials[/datum/material/iron])
new /obj/item/stack/rods(get_turf(loc), 2)
qdel(src)
+1 -1
View File
@@ -542,7 +542,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "rack_parts"
flags_1 = CONDUCT_1
materials = list(MAT_METAL=2000)
materials = list(/datum/material/iron=2000)
var/building = FALSE
/obj/item/rack_parts/attackby(obj/item/W, mob/user, params)
+2 -2
View File
@@ -4,7 +4,7 @@
desc = "A shell of swarmer that was completely powered down. It can no longer activate itself."
icon = 'icons/mob/swarmer.dmi'
icon_state = "swarmer_unactivated"
materials = list(MAT_METAL=10000, MAT_GLASS=4000)
materials = list(/datum/material/iron=10000, /datum/material/glass=4000)
/obj/effect/mob_spawn/swarmer
name = "unactivated swarmer"
@@ -189,7 +189,7 @@
return 0
/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item
if(materials[MAT_METAL] || materials[MAT_GLASS])
if(materials[getmaterialref(/datum/material/iron)] || materials[getmaterialref(/datum/material/glass)])
return 1
return ..()
+1 -1
View File
@@ -12,7 +12,7 @@
icon_state = ""
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=100)
materials = list(/datum/material/iron=100)
throwforce = 2
throw_speed = 3
throw_range = 7
+1 -1
View File
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
throwforce = 0
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL = 300, MAT_GLASS = 300)
materials = list(/datum/material/iron = 300, /datum/material/glass = 300)
light_color = LIGHT_COLOR_WHITE
light_power = FLASH_LIGHT_POWER
var/flashing_overlay = "flash-f"
+1 -1
View File
@@ -2,7 +2,7 @@
name = "health sensor"
desc = "Used for scanning and monitoring health."
icon_state = "health"
materials = list(MAT_METAL=800, MAT_GLASS=200)
materials = list(/datum/material/iron=800, /datum/material/glass=200)
attachable = TRUE
var/scanning = FALSE
+1 -1
View File
@@ -2,7 +2,7 @@
name = "igniter"
desc = "A small electronic device able to ignite combustible substances."
icon_state = "igniter"
materials = list(MAT_METAL=500, MAT_GLASS=50)
materials = list(/datum/material/iron=500, /datum/material/glass=50)
var/datum/effect_system/spark_spread/sparks
heat = 1000
+1 -1
View File
@@ -2,7 +2,7 @@
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
icon_state = "infrared"
materials = list(MAT_METAL=1000, MAT_GLASS=500)
materials = list(/datum/material/iron=1000, /datum/material/glass=500)
is_position_sensitive = TRUE
var/on = FALSE
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A handy little spring-loaded trap for catching pesty rodents."
icon_state = "mousetrap"
item_state = "mousetrap"
materials = list(MAT_METAL=100)
materials = list(/datum/material/iron=100)
attachable = TRUE
var/armed = FALSE
+1 -1
View File
@@ -2,7 +2,7 @@
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
materials = list(MAT_METAL=800, MAT_GLASS=200)
materials = list(/datum/material/iron=800, /datum/material/glass=200)
attachable = TRUE
var/scanning = FALSE
+1 -1
View File
@@ -5,7 +5,7 @@
item_state = "signaler"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_METAL=400, MAT_GLASS=120)
materials = list(/datum/material/iron=400, /datum/material/glass=120)
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
attachable = TRUE
+1 -1
View File
@@ -2,7 +2,7 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
materials = list(MAT_METAL=500, MAT_GLASS=50)
materials = list(/datum/material/iron=500, /datum/material/glass=50)
attachable = TRUE
var/timing = FALSE
+1 -1
View File
@@ -7,7 +7,7 @@
name = "voice analyzer"
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
icon_state = "voice"
materials = list(MAT_METAL=500, MAT_GLASS=50)
materials = list(/datum/material/iron=500, /datum/material/glass=50)
flags_1 = HEAR_1
attachable = TRUE
verb_say = "beeps"
@@ -122,7 +122,7 @@
icon = 'icons/obj/economy.dmi'
icon_state = "rupee"
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_GLASS = 500)
materials = list(/datum/material/glass = 500)
/obj/item/rupee/Initialize()
. = ..()
+12 -12
View File
@@ -14,10 +14,10 @@
if(!isitem(O))
return 0
var/obj/item/I = O
if(!(material_id in I.materials))
if(!(getmaterialref(material_id) in I.materials))
return 0
var/amount = I.materials[material_id]
var/amount = I.materials[getmaterialref(material_id)]
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I
@@ -31,49 +31,49 @@
/datum/export/material/bananium
cost = 1000
material_id = MAT_BANANIUM
material_id = /datum/material/bananium
message = "cm3 of bananium"
/datum/export/material/diamond
cost = 500
material_id = MAT_DIAMOND
material_id = /datum/material/diamond
message = "cm3 of diamonds"
/datum/export/material/plasma
cost = 200
k_elasticity = 0
material_id = MAT_PLASMA
material_id = /datum/material/plasma
message = "cm3 of plasma"
/datum/export/material/uranium
cost = 100
material_id = MAT_URANIUM
material_id = /datum/material/uranium
message = "cm3 of uranium"
/datum/export/material/gold
cost = 125
material_id = MAT_GOLD
material_id = /datum/material/gold
message = "cm3 of gold"
/datum/export/material/silver
cost = 50
material_id = MAT_SILVER
material_id = /datum/material/silver
message = "cm3 of silver"
/datum/export/material/titanium
cost = 125
material_id = MAT_TITANIUM
material_id = /datum/material/titanium
message = "cm3 of titanium"
/datum/export/material/plastitanium
cost = 325 // plasma + titanium costs
material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium
material_id = /datum/material/titanium // code can only check for one material_id; plastitanium is half plasma, half titanium
message = "cm3 of plastitanium"
/datum/export/material/metal
cost = 5
message = "cm3 of metal"
material_id = MAT_METAL
material_id = /datum/material/iron
export_types = list(
/obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel,
/obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin)
@@ -81,6 +81,6 @@
/datum/export/material/glass
cost = 5
message = "cm3 of glass"
material_id = MAT_GLASS
material_id = /datum/material/glass
export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore,
/obj/item/shard)
+2 -2
View File
@@ -8,7 +8,7 @@
strip_delay = 20
equip_delay_other = 25
resistance_flags = NONE
materials = list(MAT_GLASS = 250)
materials = list(/datum/material/glass = 250)
var/vision_flags = 0
var/darkness_view = 2//Base human is 2
var/invis_view = SEE_INVISIBLE_LIVING //admin only for now
@@ -259,7 +259,7 @@
icon_state = "welding-g"
item_state = "welding-g"
actions_types = list(/datum/action/item_action/toggle)
materials = list(MAT_METAL = 250)
materials = list(/datum/material/iron = 250)
flash_protect = 2
tint = 2
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
+1 -1
View File
@@ -19,7 +19,7 @@
icon_state = "welding"
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
materials = list(MAT_METAL=1750, MAT_GLASS=400)
materials = list(/datum/material/iron=1750, /datum/material/glass=400)
flash_protect = 2
tint = 2
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60)

Some files were not shown because too many files have changed in this diff Show More