Merge branch 'master' into upstream-merge-11579
@@ -49,6 +49,10 @@
|
||||
#define MAT_BOROSILICATE "borosilicate glass"
|
||||
#define MAT_SANDSTONE "sandstone"
|
||||
#define MAT_FLINT "flint"
|
||||
#define MAT_PLATINUM "platinum"
|
||||
#define MAT_TRITIUM "tritium"
|
||||
#define MAT_DEUTERIUM "deuterium"
|
||||
|
||||
|
||||
#define DEFAULT_TABLE_MATERIAL MAT_PLASTIC
|
||||
#define DEFAULT_WALL_MATERIAL MAT_STEEL
|
||||
|
||||
@@ -62,55 +62,7 @@
|
||||
del_reqs - takes recipe and a user, loops over the recipes reqs var and tries to find everything in the list make by get_environment and delete it/add to parts list, then returns the said list
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check that the contents of the recipe meet the requirements.
|
||||
*
|
||||
* user: The /mob that initated the crafting.
|
||||
* R: The /datum/crafting_recipe being attempted.
|
||||
* contents: List of items to search for R's reqs.
|
||||
*/
|
||||
/datum/component/personal_crafting/proc/check_contents(atom/a, datum/crafting_recipe/R, list/contents)
|
||||
var/list/item_instances = contents["instances"]
|
||||
var/list/machines = contents["machinery"]
|
||||
contents = contents["other"]
|
||||
|
||||
|
||||
var/list/requirements_list = list()
|
||||
|
||||
// Process all requirements
|
||||
for(var/requirement_path in R.reqs)
|
||||
// Check we have the appropriate amount available in the contents list
|
||||
var/needed_amount = R.reqs[requirement_path]
|
||||
for(var/content_item_path in contents)
|
||||
// Right path and not blacklisted
|
||||
if(!ispath(content_item_path, requirement_path) || R.blacklist.Find(content_item_path))
|
||||
continue
|
||||
|
||||
needed_amount -= contents[content_item_path]
|
||||
if(needed_amount <= 0)
|
||||
break
|
||||
|
||||
if(needed_amount > 0)
|
||||
return FALSE
|
||||
|
||||
// Store the instances of what we will use for R.check_requirements() for requirement_path
|
||||
var/list/instances_list = list()
|
||||
for(var/instance_path in item_instances)
|
||||
if(ispath(instance_path, requirement_path))
|
||||
instances_list += item_instances[instance_path]
|
||||
|
||||
requirements_list[requirement_path] = instances_list
|
||||
|
||||
for(var/requirement_path in R.chem_catalysts)
|
||||
if(contents[requirement_path] < R.chem_catalysts[requirement_path])
|
||||
return FALSE
|
||||
|
||||
for(var/machinery_path in R.machinery)
|
||||
if(!machines[machinery_path])//We don't care for volume with machines, just if one is there or not
|
||||
return FALSE
|
||||
|
||||
return R.check_requirements(a, requirements_list)
|
||||
|
||||
// Returns a list of objects available
|
||||
/datum/component/personal_crafting/proc/get_environment(atom/a, list/blacklist = null, radius_range = 1)
|
||||
. = list()
|
||||
|
||||
@@ -122,13 +74,13 @@
|
||||
continue
|
||||
. += AM
|
||||
|
||||
|
||||
// Returns an associative list containing the types of tools available, and the paths of objects available
|
||||
/datum/component/personal_crafting/proc/get_surroundings(atom/a, list/blacklist=null)
|
||||
. = list()
|
||||
.["tool_qualities"] = list()
|
||||
.["other"] = list()
|
||||
.["instances"] = list()
|
||||
.["machinery"] = list()
|
||||
.["tool_qualities"] = list() // List of tool types available
|
||||
.["other"] = list() // List of reagents/material stacks available
|
||||
.["instances"] = list() // List of /obj/items available, maybe?
|
||||
.["machinery"] = list() // List of /obj/machinery available
|
||||
for(var/obj/object in get_environment(a, blacklist))
|
||||
if(isitem(object))
|
||||
var/obj/item/item = object
|
||||
@@ -150,11 +102,55 @@
|
||||
else if (istype(object, /obj/machinery))
|
||||
LAZYADDASSOCLIST(.["machinery"], object.type, object)
|
||||
|
||||
/**
|
||||
* Check that the contents of the recipe meet the requirements.
|
||||
*
|
||||
* user: The /mob that initated the crafting.
|
||||
* R: The /datum/crafting_recipe being attempted.
|
||||
* contents: List of items to search for R's reqs.
|
||||
*/
|
||||
/datum/component/personal_crafting/proc/check_contents(atom/a, datum/crafting_recipe/R, list/contents)
|
||||
var/list/item_instances = contents["instances"]
|
||||
contents = contents["other"]
|
||||
|
||||
|
||||
var/list/requirements_list = list()
|
||||
|
||||
// Process all requirements
|
||||
for(var/list/requirement in R.reqs)
|
||||
var/satisfied = FALSE
|
||||
for(var/requirement_path in requirement)
|
||||
// Check we have the appropriate amount available in the contents list
|
||||
var/needed_amount = requirement[requirement_path]
|
||||
for(var/content_item_path in contents)
|
||||
// Right path and not blacklisted
|
||||
if(!ispath(content_item_path, requirement_path) || R.blacklist.Find(content_item_path))
|
||||
continue
|
||||
|
||||
needed_amount -= contents[content_item_path]
|
||||
if(needed_amount <= 0)
|
||||
break
|
||||
|
||||
if(needed_amount > 0)
|
||||
continue
|
||||
|
||||
// Store the instances of what we will use for R.check_requirements() for requirement_path
|
||||
var/list/instances_list = list()
|
||||
for(var/instance_path in item_instances)
|
||||
if(ispath(instance_path, requirement_path))
|
||||
instances_list += item_instances[instance_path]
|
||||
|
||||
requirements_list[requirement_path] = instances_list
|
||||
satisfied = TRUE
|
||||
break
|
||||
if(!satisfied)
|
||||
return FALSE
|
||||
|
||||
return R.check_requirements(a, requirements_list)
|
||||
|
||||
/// Returns a boolean on whether the tool requirements of the input recipe are satisfied by the input source and surroundings.
|
||||
/datum/component/personal_crafting/proc/check_tools(atom/source, datum/crafting_recipe/recipe, list/surroundings)
|
||||
if(!length(recipe.tool_behaviors) && !length(recipe.tool_paths))
|
||||
/datum/component/personal_crafting/proc/check_tools(atom/source, datum/crafting_recipe/R, list/surroundings)
|
||||
if(!length(R.tool_behaviors) && !length(R.tool_paths))
|
||||
return TRUE
|
||||
var/list/available_tools = list()
|
||||
var/list/present_qualities = list()
|
||||
@@ -176,50 +172,70 @@
|
||||
for(var/path in surroundings["other"])
|
||||
available_tools[path] = TRUE
|
||||
|
||||
for(var/required_quality in recipe.tool_behaviors)
|
||||
for(var/required_quality in R.tool_behaviors)
|
||||
if(present_qualities[required_quality])
|
||||
continue
|
||||
return FALSE
|
||||
|
||||
for(var/required_path in recipe.tool_paths)
|
||||
var/found_this_tool = FALSE
|
||||
for(var/tool_path in available_tools)
|
||||
if(!ispath(required_path, tool_path))
|
||||
continue
|
||||
found_this_tool = TRUE
|
||||
break
|
||||
if(found_this_tool)
|
||||
for(var/required_path in R.tool_paths)
|
||||
if(is_path_in_list(required_path, available_tools))
|
||||
continue
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/component/personal_crafting/proc/check_reagents(atom/source, datum/crafting_recipe/R, list/surroundings)
|
||||
var/list/reagents = surroundings["other"]
|
||||
for(var/requirement_path in R.chem_catalysts)
|
||||
if(reagents[requirement_path] < R.chem_catalysts[requirement_path])
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/component/personal_crafting/proc/check_machinery(atom/source, datum/crafting_recipe/R, list/surroundings)
|
||||
var/list/machines = surroundings["machinery"]
|
||||
for(var/machinery_path in R.machinery)
|
||||
if(!machines[machinery_path])//We don't care for volume with machines, just if one is there or not
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/component/personal_crafting/proc/check_requirements(atom/source, datum/crafting_recipe/R, list/surroundings)
|
||||
if(!check_contents(source, R, surroundings))
|
||||
return ", missing component."
|
||||
if(!check_tools(source, R, surroundings))
|
||||
return ", missing tool."
|
||||
if(!check_reagents(source, R, surroundings))
|
||||
return ", missing reagents."
|
||||
if(!check_machinery(source, R, surroundings))
|
||||
return ", missing machinery."
|
||||
return
|
||||
|
||||
/datum/component/personal_crafting/proc/construct_item(atom/a, datum/crafting_recipe/R)
|
||||
var/list/contents = get_surroundings(a,R.blacklist)
|
||||
var/list/surroundings = get_surroundings(a,R.blacklist)
|
||||
// var/send_feedback = 1
|
||||
if(check_contents(a, R, contents))
|
||||
if(check_tools(a, R, contents))
|
||||
if(R.one_per_turf)
|
||||
for(var/content in get_turf(a))
|
||||
if(istype(content, R.result))
|
||||
return ", object already present."
|
||||
//If we're a mob we'll try a do_after; non mobs will instead instantly construct the item
|
||||
if(ismob(a) && !do_after(a, R.time, target = a))
|
||||
return "."
|
||||
contents = get_surroundings(a,R.blacklist)
|
||||
if(!check_contents(a, R, contents))
|
||||
return ", missing component."
|
||||
if(!check_tools(a, R, contents))
|
||||
return ", missing tool."
|
||||
var/list/parts = del_reqs(R, a)
|
||||
var/atom/movable/I = new R.result (get_turf(a.loc))
|
||||
I.CheckParts(parts, R)
|
||||
// if(send_feedback)
|
||||
// SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
|
||||
return I //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item
|
||||
return ", missing tool."
|
||||
return ", missing component."
|
||||
. = check_requirements(a, R, surroundings)
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(R.one_per_turf)
|
||||
for(var/content in get_turf(a))
|
||||
if(istype(content, R.result))
|
||||
return ", object already present."
|
||||
|
||||
//If we're a mob we'll try a do_after; non mobs will instead instantly construct the item
|
||||
if(ismob(a) && !do_after(a, R.time, target = a))
|
||||
return "."
|
||||
|
||||
surroundings = get_surroundings(a, R.blacklist)
|
||||
. = check_requirements(a, R, surroundings)
|
||||
if(.)
|
||||
return
|
||||
|
||||
var/list/parts = del_reqs(R, a)
|
||||
var/atom/movable/I = new R.result (get_turf(a.loc))
|
||||
I.CheckParts(parts, R)
|
||||
// if(send_feedback)
|
||||
// SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
|
||||
return I //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item
|
||||
|
||||
/*Del reqs works like this:
|
||||
|
||||
@@ -246,119 +262,108 @@
|
||||
*/
|
||||
|
||||
/datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, atom/a)
|
||||
var/list/surroundings
|
||||
var/list/Deletion = list()
|
||||
. = list()
|
||||
var/data
|
||||
var/amt
|
||||
var/list/surroundings = get_environment(a)
|
||||
var/list/parts = list("items" = list())
|
||||
if(R.get_parts_reagents_volume())
|
||||
parts["reagents"] = new /datum/reagents(R.get_parts_reagents_volume()) // Datums don't have create_reagents()
|
||||
var/list/requirements = list()
|
||||
if(R.reqs)
|
||||
requirements += R.reqs
|
||||
for(var/list/L in R.reqs)
|
||||
requirements += L
|
||||
if(R.machinery)
|
||||
requirements += R.machinery
|
||||
main_loop:
|
||||
for(var/path_key in requirements)
|
||||
amt = R.reqs[path_key] || R.machinery[path_key]
|
||||
if(!amt)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
|
||||
continue main_loop
|
||||
surroundings = get_environment(a, R.blacklist)
|
||||
surroundings -= Deletion
|
||||
if(ispath(path_key, /datum/reagent))
|
||||
var/datum/reagent/RG = new path_key
|
||||
var/datum/reagent/RGNT
|
||||
while(amt > 0)
|
||||
var/obj/item/weapon/reagent_containers/RC = locate() in surroundings
|
||||
RG = RC.reagents.get_reagent(path_key)
|
||||
if(RG)
|
||||
if(!locate(RG.type) in Deletion)
|
||||
Deletion += new RG.type()
|
||||
if(RG.volume > amt)
|
||||
RG.volume -= amt
|
||||
data = RG.data
|
||||
RC.reagents.conditional_update(RC)
|
||||
RG = locate(RG.type) in Deletion
|
||||
RG.volume = amt
|
||||
RG.data += data
|
||||
continue main_loop
|
||||
else
|
||||
surroundings -= RC
|
||||
amt -= RG.volume
|
||||
RC.reagents.reagent_list -= RG
|
||||
RC.reagents.conditional_update(RC)
|
||||
RGNT = locate(RG.type) in Deletion
|
||||
RGNT.volume += RG.volume
|
||||
RGNT.data += RG.data
|
||||
qdel(RG)
|
||||
SEND_SIGNAL(RC.reagents, COMSIG_REAGENTS_CRAFTING_PING) // - [] TODO: Make this entire thing less spaghetti
|
||||
else
|
||||
surroundings -= RC
|
||||
else if(ispath(path_key, /obj/item/stack))
|
||||
var/obj/item/stack/S
|
||||
var/obj/item/stack/SD
|
||||
while(amt > 0)
|
||||
S = locate(path_key) in surroundings
|
||||
if(S.get_amount() >= amt)
|
||||
if(!locate(S.type) in Deletion)
|
||||
SD = new S.type()
|
||||
Deletion += SD
|
||||
S.use(amt)
|
||||
SD = locate(S.type) in Deletion
|
||||
SD.add(amt)
|
||||
continue main_loop
|
||||
else
|
||||
amt -= S.get_amount()
|
||||
if(!locate(S.type) in Deletion)
|
||||
Deletion += S
|
||||
else
|
||||
data = S.get_amount()
|
||||
S = locate(S.type) in Deletion
|
||||
S.add(data)
|
||||
surroundings -= S
|
||||
else
|
||||
var/atom/movable/I
|
||||
while(amt > 0)
|
||||
I = locate(path_key) in surroundings
|
||||
Deletion += I
|
||||
surroundings -= I
|
||||
amt--
|
||||
var/list/partlist = list(R.parts.len)
|
||||
for(var/M in R.parts)
|
||||
partlist[M] = R.parts[M]
|
||||
for(var/part in R.parts)
|
||||
if(istype(part, /datum/reagent))
|
||||
var/datum/reagent/RG = locate(part) in Deletion
|
||||
if(RG.volume > partlist[part])
|
||||
RG.volume = partlist[part]
|
||||
. += RG
|
||||
Deletion -= RG
|
||||
|
||||
// Try to find everything that was actually used to craft
|
||||
for(var/path_key in requirements)
|
||||
var/amt = requirements[path_key]
|
||||
if(amt <= 0)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
|
||||
continue
|
||||
else if(istype(part, /obj/item/stack))
|
||||
var/obj/item/stack/ST = locate(part) in Deletion
|
||||
if(ST.get_amount() > partlist[part])
|
||||
ST.set_amount(partlist[part])
|
||||
. += ST
|
||||
Deletion -= ST
|
||||
continue
|
||||
else
|
||||
while(partlist[part] > 0)
|
||||
var/atom/movable/AM = locate(part) in Deletion
|
||||
. += AM
|
||||
Deletion -= AM
|
||||
partlist[part] -= 1
|
||||
while(Deletion.len)
|
||||
var/DL = Deletion[Deletion.len]
|
||||
Deletion.Cut(Deletion.len)
|
||||
// Snowflake handling of reagent containers and storage atoms.
|
||||
// If we consumed them in our crafting, we should dump their contents out before qdeling them.
|
||||
if(istype(DL, /obj/item/weapon/reagent_containers))
|
||||
var/obj/item/weapon/reagent_containers/container = DL
|
||||
container.reagents.clear_reagents()
|
||||
// container.reagents.expose(container.loc, TOUCH)
|
||||
else if(istype(DL, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/container = DL
|
||||
container.spill()
|
||||
container.close_all()
|
||||
qdel(DL)
|
||||
|
||||
// If the path is in R.parts, we want to grab those to stuff into the product
|
||||
var/amt_to_transfer = 0
|
||||
if(is_path_in_list(path_key, R.parts))
|
||||
amt_to_transfer = R.parts[path_key]
|
||||
|
||||
|
||||
// Reagent: gotta go sniffing in all the beakers
|
||||
if(ispath(path_key, /datum/reagent))
|
||||
var/datum/reagent/reagent = path_key
|
||||
var/id = initial(reagent.id)
|
||||
|
||||
for(var/obj/item/weapon/reagent_containers/RC in surroundings)
|
||||
// Found everything we need
|
||||
if(amt <= 0 && amt_to_transfer <= 0)
|
||||
break
|
||||
|
||||
// If we need to keep any to put in the new object, pull it out
|
||||
if(amt_to_transfer > 0)
|
||||
var/A = RC.reagents.trans_id_to(parts["reagents"], id, amt_to_transfer)
|
||||
amt_to_transfer -= A
|
||||
amt -= A
|
||||
|
||||
// If we need to consume some amount of it
|
||||
if(amt > 0)
|
||||
var/datum/reagent/RG = RC.reagents.get_reagent(id)
|
||||
var/A = min(RG.volume, amt)
|
||||
RC.reagents.remove_reagent(id, A)
|
||||
amt -= A
|
||||
SEND_SIGNAL(RC.reagents, COMSIG_REAGENTS_CRAFTING_PING)
|
||||
|
||||
// Material stacks may have to accumulate across multiple stacks
|
||||
else if(ispath(path_key, /obj/item/stack))
|
||||
for(var/obj/item/stack/S in surroundings)
|
||||
if(amt <= 0 && amt_to_transfer <= 0)
|
||||
break
|
||||
|
||||
// This could put 50 stacks in an object but frankly so long as the amount's right we don't care
|
||||
if(amt_to_transfer > 0)
|
||||
var/obj/item/stack/split = S.split(amt_to_transfer)
|
||||
if(istype(split))
|
||||
parts["items"] += split
|
||||
amt_to_transfer -= split.get_amount()
|
||||
amt -= split.get_amount()
|
||||
|
||||
if(amt > 0)
|
||||
var/A = min(amt, S.get_amount())
|
||||
if(S.use(A))
|
||||
amt -= A
|
||||
|
||||
|
||||
else // Just a regular item. Find them all and delete them
|
||||
for(var/atom/movable/I in surroundings)
|
||||
if(amt <= 0 && amt_to_transfer <= 0)
|
||||
break
|
||||
|
||||
if(!istype(I, path_key))
|
||||
continue
|
||||
|
||||
// Special case: the reagents may be needed for other recipes
|
||||
if(istype(I, /obj/item/weapon/reagent_containers))
|
||||
var/obj/item/weapon/reagent_containers/RC = I
|
||||
if(RC.reagents.total_volume > 0)
|
||||
continue
|
||||
|
||||
// We're using it for something
|
||||
amt--
|
||||
|
||||
// Prepare to stuff inside product, don't delete it
|
||||
if(is_path_in_list(path_key, parts))
|
||||
parts["items"] += I
|
||||
amt_to_transfer--
|
||||
continue
|
||||
|
||||
// Snowflake handling of reagent containers and storage atoms.
|
||||
// If we consumed them in our crafting, we should dump their contents out before qdeling them.
|
||||
if(istype(I, /obj/item/weapon/reagent_containers))
|
||||
var/obj/item/weapon/reagent_containers/container = I
|
||||
container.reagents.clear_reagents()
|
||||
// container.reagents.expose(container.loc, TOUCH)
|
||||
else if(istype(I, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/container = I
|
||||
container.spill()
|
||||
container.close_all()
|
||||
qdel(I)
|
||||
return parts
|
||||
|
||||
/datum/component/personal_crafting/proc/component_ui_interact(source, location, control, params, user)
|
||||
// SIGNAL_HANDLER
|
||||
@@ -487,10 +492,14 @@
|
||||
var/list/tool_list = list()
|
||||
var/list/catalyst_text = list()
|
||||
|
||||
for(var/atom/req_atom as anything in R.reqs)
|
||||
//We just need the name, so cheat-typecast to /atom for speed (even tho Reagents are /datum they DO have a "name" var)
|
||||
//Also these are typepaths so sadly we can't just do "[a]"
|
||||
req_text += "[R.reqs[req_atom]] [initial(req_atom.name)]"
|
||||
for(var/list/req in R.reqs)
|
||||
var/list/L = list()
|
||||
for(var/atom/req_atom as anything in req)
|
||||
//We just need the name, so cheat-typecast to /atom for speed (even tho Reagents are /datum they DO have a "name" var)
|
||||
//Also these are typepaths so sadly we can't just do "[a]"
|
||||
L += "[req[req_atom]] [initial(req_atom.name)]"
|
||||
req_text += L.Join(" OR ")
|
||||
|
||||
for(var/obj/machinery/content as anything in R.machinery)
|
||||
req_text += "[R.reqs[content]] [initial(content.name)]"
|
||||
if(R.additional_req_text)
|
||||
|
||||
@@ -12,21 +12,30 @@
|
||||
*/
|
||||
/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
|
||||
if(parts_list)
|
||||
for(var/A in parts_list)
|
||||
if(istype(A, /datum/reagent))
|
||||
if(!reagents)
|
||||
reagents = new()
|
||||
reagents.reagent_list.Add(A)
|
||||
reagents.conditional_update()
|
||||
else if(ismovable(A))
|
||||
var/atom/movable/M = A
|
||||
if(isliving(M.loc))
|
||||
var/mob/living/L = M.loc
|
||||
L.unEquip(M, target = src)
|
||||
else
|
||||
M.forceMove(src)
|
||||
SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, src)
|
||||
if(LAZYLEN(parts_list))
|
||||
if(istype(parts_list["reagents"], /datum/reagents))
|
||||
var/datum/reagents/RG = parts_list["reagents"]
|
||||
if(istype(reagents))
|
||||
RG.trans_to_holder(reagents, RG.total_volume)
|
||||
else
|
||||
reagents = RG
|
||||
RG.my_atom = src
|
||||
reagents.conditional_update()
|
||||
|
||||
for(var/atom/movable/M as anything in parts_list["items"])
|
||||
if(isliving(M.loc))
|
||||
var/mob/living/L = M.loc
|
||||
L.unEquip(M, target = src)
|
||||
else
|
||||
M.forceMove(src)
|
||||
SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, src)
|
||||
|
||||
var/list/L = parts_list["reagents"]
|
||||
if(LAZYLEN(L))
|
||||
L.Cut()
|
||||
L = parts_list["items"]
|
||||
if(LAZYLEN(L))
|
||||
L.Cut()
|
||||
parts_list.Cut()
|
||||
|
||||
/obj/machinery/CheckParts(list/parts_list)
|
||||
|
||||
@@ -47,3 +47,28 @@
|
||||
|
||||
/datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result)
|
||||
return
|
||||
|
||||
// Computes the total reagents volume
|
||||
/datum/crafting_recipe/proc/get_parts_reagents_volume()
|
||||
. = 0
|
||||
for(var/list/L in parts)
|
||||
for(var/path in L)
|
||||
if(ispath(path, /datum/reagent))
|
||||
. += L[path]
|
||||
|
||||
// Locate one of the things that set the material type, and update it from the default (glass)
|
||||
/datum/crafting_recipe/spear/on_craft_completion(mob/user, atom/result)
|
||||
var/obj/item/weapon/material/M
|
||||
for(var/path in parts)
|
||||
var/obj/item/weapon/material/N = locate(path) in result
|
||||
if(istype(N, path))
|
||||
if(!istype(M))
|
||||
M = N
|
||||
else
|
||||
N.forceMove(get_turf(result))
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
var/obj/item/weapon/material/twohanded/spear/S = result
|
||||
S.set_material(M.material.name)
|
||||
qdel(M)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/datum/crafting_recipe/cloth
|
||||
name = "Cloth bolt"
|
||||
result = /obj/item/stack/material/cloth
|
||||
reqs = list(/obj/item/stack/material/fiber = 3)
|
||||
reqs = list(list(/obj/item/stack/material/fiber = 3))
|
||||
time = 40
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/crude_bandage
|
||||
name = "Crude bandages (x10)"
|
||||
result = /obj/item/stack/medical/crude_pack
|
||||
reqs = list(/obj/item/stack/material/cloth = 2)
|
||||
reqs = list(list(/obj/item/stack/material/cloth = 2))
|
||||
time = 40
|
||||
category = CAT_PRIMAL
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
name = "primitive clothes"
|
||||
result = /obj/item/clothing/under/primitive
|
||||
reqs = list(
|
||||
/obj/item/stack/material/fiber = 4,
|
||||
/obj/item/stack/material/cloth = 6
|
||||
list(/obj/item/stack/material/fiber = 4),
|
||||
list(/obj/item/stack/material/cloth = 6)
|
||||
)
|
||||
time = 90
|
||||
category = CAT_CLOTHING
|
||||
@@ -30,8 +30,8 @@
|
||||
name = "primitive shoes"
|
||||
result = /obj/item/clothing/shoes/primitive
|
||||
reqs = list(
|
||||
/obj/item/stack/material/fiber = 2,
|
||||
/obj/item/stack/material/cloth = 3
|
||||
list(/obj/item/stack/material/fiber = 2),
|
||||
list(/obj/item/stack/material/cloth = 3)
|
||||
)
|
||||
time = 60
|
||||
category = CAT_CLOTHING
|
||||
@@ -2,10 +2,10 @@
|
||||
name = "Wooden Shovel"
|
||||
result = /obj/item/weapon/shovel/wood
|
||||
reqs = list(
|
||||
/obj/item/stack/material/stick = 5,
|
||||
/obj/item/stack/material/wood = 1,
|
||||
/obj/item/stack/material/fiber = 3,
|
||||
/obj/item/stack/material/flint = 1
|
||||
list(/obj/item/stack/material/stick = 5),
|
||||
list(/obj/item/stack/material/wood = 1),
|
||||
list(/obj/item/stack/material/fiber = 3),
|
||||
list(/obj/item/stack/material/flint = 1)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -15,7 +15,7 @@
|
||||
name = "stone blade"
|
||||
result = /obj/item/weapon/material/knife/stone
|
||||
reqs = list(
|
||||
/obj/item/stack/material/flint = 2
|
||||
list(/obj/item/stack/material/flint = 2)
|
||||
)
|
||||
time = 60
|
||||
category = CAT_WEAPONRY
|
||||
@@ -25,10 +25,10 @@
|
||||
name = "stone knife"
|
||||
result = /obj/item/weapon/material/knife/stone/wood
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/stack/material/wood = 1,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/stack/material/wood = 1),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -38,10 +38,10 @@
|
||||
name = "stone knife"
|
||||
result = /obj/item/weapon/material/knife/stone/bone
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/weapon/bone = 1,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/weapon/bone = 1),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -51,9 +51,9 @@
|
||||
name = "wooden bucket"
|
||||
result = /obj/item/weapon/reagent_containers/glass/bucket/wood
|
||||
reqs = list(
|
||||
/obj/item/stack/material/wood = 1,
|
||||
/obj/item/stack/material/stick = 1,
|
||||
/obj/item/stack/material/fiber = 2
|
||||
list(/obj/item/stack/material/wood = 1),
|
||||
list(/obj/item/stack/material/stick = 1),
|
||||
list(/obj/item/stack/material/fiber = 2)
|
||||
)
|
||||
time = 60
|
||||
category = CAT_TOOL
|
||||
@@ -61,7 +61,7 @@
|
||||
/datum/crafting_recipe/sticks
|
||||
name = "sticks"
|
||||
result = /obj/item/stack/material/stick/fivestack
|
||||
reqs = list(/obj/item/stack/material/wood = 1)
|
||||
reqs = list(list(/obj/item/stack/material/wood = 1))
|
||||
tool_paths = list(/obj/item/weapon/material/knife)
|
||||
time = 200
|
||||
category = CAT_MISC
|
||||
@@ -70,10 +70,10 @@
|
||||
name = "stone axe"
|
||||
result = /obj/item/weapon/material/knife/machete/hatchet/stone
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/stack/material/stick = 10,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/stack/material/stick = 1),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -83,10 +83,10 @@
|
||||
name = "stone axe"
|
||||
result = /obj/item/weapon/material/knife/machete/hatchet/stone/bone
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/weapon/bone = 1,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/weapon/bone = 1),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -96,10 +96,10 @@
|
||||
name = "stone spear"
|
||||
result = /obj/item/weapon/material/twohanded/spear/flint
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/stack/material/wood = 2,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/stack/material/wood = 2),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -109,10 +109,10 @@
|
||||
name = "stone spear"
|
||||
result = /obj/item/weapon/material/twohanded/spear/flint
|
||||
reqs = list(
|
||||
/obj/item/weapon/material/knife/stone = 1,
|
||||
/obj/item/stack/material/flint = 1,
|
||||
/obj/item/weapon/bone = 2,
|
||||
/obj/item/stack/material/fiber = 3
|
||||
list(/obj/item/weapon/material/knife/stone = 1),
|
||||
list(/obj/item/stack/material/flint = 1),
|
||||
list(/obj/item/weapon/bone = 2),
|
||||
list(/obj/item/stack/material/fiber = 3)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
@@ -121,6 +121,6 @@
|
||||
/datum/crafting_recipe/ropebindings
|
||||
name = "rope bindings"
|
||||
result = /obj/item/weapon/handcuffs/cable/plantfiber
|
||||
reqs = list(/obj/item/stack/material/fiber = 3)
|
||||
reqs = list(list(/obj/item/stack/material/fiber = 3))
|
||||
time = 60
|
||||
category = CAT_MISC
|
||||
|
||||
@@ -1,9 +1,23 @@
|
||||
/datum/crafting_recipe/stunprod
|
||||
name = "Stunprod"
|
||||
result = /obj/item/weapon/melee/baton/cattleprod
|
||||
reqs = list(/obj/item/weapon/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/weapon/tool/wirecutters = 1)
|
||||
reqs = list(list(/obj/item/weapon/handcuffs/cable = 1),
|
||||
list(/obj/item/stack/rods = 1),
|
||||
list(/obj/item/weapon/tool/wirecutters = 1))
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/spear
|
||||
name = "Spear"
|
||||
result = /obj/item/weapon/material/twohanded/spear
|
||||
reqs = list(list(/obj/item/weapon/handcuffs/cable = 1),
|
||||
list(/obj/item/stack/rods = 1),
|
||||
list(/obj/item/weapon/material/shard = 1,
|
||||
/obj/item/weapon/material/butterflyblade = 1)
|
||||
)
|
||||
parts = list(/obj/item/weapon/material/shard = 1,
|
||||
/obj/item/weapon/material/butterflyblade = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -11,10 +25,8 @@
|
||||
/datum/crafting_recipe/shortbow
|
||||
name = "Shortbow"
|
||||
result = /obj/item/weapon/gun/launcher/crossbow/bow
|
||||
reqs = list(
|
||||
/obj/item/stack/material/wood = 10,
|
||||
/obj/item/stack/material/cloth = 5
|
||||
)
|
||||
reqs = list(list(/obj/item/stack/material/wood = 10),
|
||||
list(/obj/item/stack/material/cloth = 5))
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -22,10 +34,8 @@
|
||||
/datum/crafting_recipe/arrow_sandstone
|
||||
name = "Wood arrow (sandstone tip)"
|
||||
result = /obj/item/weapon/arrow/standard
|
||||
reqs = list(
|
||||
/obj/item/stack/material/wood = 2,
|
||||
/obj/item/stack/material/sandstone = 2
|
||||
)
|
||||
reqs = list(list(/obj/item/stack/material/wood = 2),
|
||||
list(/obj/item/stack/material/sandstone = 2))
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
@@ -33,10 +43,8 @@
|
||||
/datum/crafting_recipe/arrow_marble
|
||||
name = "Wood arrow (marble tip)"
|
||||
result = /obj/item/weapon/arrow/standard
|
||||
reqs = list(
|
||||
/obj/item/stack/material/wood = 2,
|
||||
/obj/item/stack/material/marble = 2
|
||||
)
|
||||
reqs = list(list(/obj/item/stack/material/wood = 2),
|
||||
list(/obj/item/stack/material/marble = 2))
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
@@ -477,7 +477,11 @@
|
||||
src.germ_level = 0
|
||||
if(istype(blood_DNA, /list))
|
||||
blood_DNA = null
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/atom/proc/on_rag_wipe(var/obj/item/weapon/reagent_containers/glass/rag/R)
|
||||
clean_blood()
|
||||
R.reagents.splash(src, 1)
|
||||
|
||||
/atom/proc/get_global_map_pos()
|
||||
if(!islist(global_map) || isemptylist(global_map)) return
|
||||
|
||||
@@ -234,6 +234,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null)
|
||||
if(!chassis)
|
||||
return
|
||||
moveto = moveto || get_turf(chassis)
|
||||
forceMove(moveto)
|
||||
chassis.equipment -= src
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
if(origin.CanPass(src, target, 0, 0) && target.CanPass(src, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
|
||||
@@ -84,6 +84,13 @@
|
||||
to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/on_rag_wipe()
|
||||
. = ..()
|
||||
if(reagents.total_volume > 0)
|
||||
reagents.clear_reagents()
|
||||
cut_overlays()
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/fork
|
||||
name = "fork"
|
||||
desc = "It's a fork. Sure is pointy."
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set)
|
||||
var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item.
|
||||
var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead.
|
||||
|
||||
|
||||
/// Boxes screen object for fixed-size storage (belts, etc)
|
||||
var/obj/screen/storage/boxes = null
|
||||
/// List of 'click catchers' for boxes for fixed-size storage
|
||||
@@ -37,8 +37,8 @@
|
||||
var/obj/screen/storage/storage_continue = null
|
||||
/// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative.
|
||||
var/obj/screen/storage/storage_end = null
|
||||
|
||||
/// The "X" button at the far right of the storage
|
||||
|
||||
/// The "X" button at the far right of the storage
|
||||
var/obj/screen/close/closer = null
|
||||
|
||||
var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up.
|
||||
@@ -189,12 +189,12 @@
|
||||
return
|
||||
if(user.s_active)
|
||||
user.s_active.hide_from(user)
|
||||
|
||||
|
||||
var/client/C = user.client
|
||||
if(!C)
|
||||
return
|
||||
|
||||
if(storage_slots)
|
||||
if(storage_slots)
|
||||
C.screen += src.boxes
|
||||
create_slot_catchers()
|
||||
C.screen += src.box_catchers
|
||||
@@ -202,7 +202,7 @@
|
||||
C.screen += src.storage_start
|
||||
C.screen += src.storage_continue
|
||||
C.screen += src.storage_end
|
||||
|
||||
|
||||
C.screen += src.closer
|
||||
C.screen += src.contents
|
||||
|
||||
@@ -212,12 +212,12 @@
|
||||
/obj/item/weapon/storage/proc/hide_from(mob/user as mob)
|
||||
var/client/C = user.client
|
||||
LAZYREMOVE(is_seeing,user)
|
||||
|
||||
|
||||
if(!C)
|
||||
if(!LAZYLEN(is_seeing))
|
||||
clear_slot_catchers()
|
||||
return
|
||||
|
||||
|
||||
if(storage_slots)
|
||||
C.screen -= src.boxes
|
||||
C.screen -= src.box_catchers
|
||||
@@ -225,13 +225,13 @@
|
||||
C.screen -= src.storage_start
|
||||
C.screen -= src.storage_continue
|
||||
C.screen -= src.storage_end
|
||||
|
||||
|
||||
C.screen -= src.closer
|
||||
C.screen -= src.contents
|
||||
|
||||
|
||||
if(user.s_active == src)
|
||||
user.s_active = null
|
||||
|
||||
|
||||
if(!LAZYLEN(is_seeing))
|
||||
clear_slot_catchers()
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
|
||||
|
||||
/// A prototype for drawing the leftmost border behind each item in storage
|
||||
var/static/mutable_appearance/stored_start
|
||||
/// A prototype for drawing the wide backing space behind each item in storage
|
||||
@@ -679,6 +679,10 @@
|
||||
if(!Adjacent(usr))
|
||||
return
|
||||
|
||||
//VOREStation Add: No turf dumping if user is in a belly
|
||||
if(isbelly(usr.loc))
|
||||
return
|
||||
|
||||
drop_contents()
|
||||
|
||||
/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs
|
||||
@@ -852,7 +856,7 @@
|
||||
ASSERT(held_item)
|
||||
name += held_item.name
|
||||
src.held_item = weakref(held_item)
|
||||
|
||||
|
||||
/atom/movable/storage_slot/Destroy()
|
||||
held_item = null
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/random
|
||||
name = "random object"
|
||||
desc = "This item type is used to spawn random objects at round-start"
|
||||
icon = 'icons/misc/mark.dmi'
|
||||
icon_state = "rup"
|
||||
icon = 'icons/misc/random_spawners.dmi'
|
||||
icon_state = "generic"
|
||||
var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything
|
||||
var/drop_get_turf = TRUE
|
||||
|
||||
@@ -80,7 +80,7 @@ var/list/random_useful_
|
||||
/obj/random/single
|
||||
name = "randomly spawned object"
|
||||
desc = "This item type is used to randomly spawn a given object at round-start"
|
||||
icon_state = "x3"
|
||||
icon_state = "generic"
|
||||
var/spawn_object = null
|
||||
|
||||
/obj/random/single/item_to_spawn()
|
||||
@@ -104,8 +104,8 @@ var/list/multi_point_spawns
|
||||
/obj/random_multi
|
||||
name = "random object spawn point"
|
||||
desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected."
|
||||
icon = 'icons/misc/mark.dmi'
|
||||
icon_state = "x3"
|
||||
icon = 'icons/misc/random_spawners.dmi'
|
||||
icon_state = "generic_3"
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
var/id // Group id
|
||||
var/weight // Probability weight for this spawn point
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
/obj/random/gun/random
|
||||
name = "Random Weapon"
|
||||
desc = "This is a random energy or ballistic weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "energystun100"
|
||||
icon_state = "gun"
|
||||
|
||||
/obj/random/gun/random/item_to_spawn()
|
||||
return pick(prob(5);/obj/random/energy,
|
||||
@@ -10,9 +9,8 @@
|
||||
|
||||
/obj/random/energy
|
||||
name = "Random Energy Weapon"
|
||||
desc = "This is a random weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "energykill100"
|
||||
desc = "This is a random energy weapon."
|
||||
icon_state = "gun_energy"
|
||||
|
||||
/obj/random/energy/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/gun/energy/laser,
|
||||
@@ -28,17 +26,34 @@
|
||||
prob(2);/obj/item/weapon/gun/energy/ionrifle,
|
||||
prob(2);/obj/item/weapon/gun/energy/ionrifle/pistol,
|
||||
prob(3);/obj/item/weapon/gun/energy/toxgun,
|
||||
prob(4);/obj/item/weapon/gun/energy/taser,
|
||||
prob(3);/obj/item/weapon/gun/energy/taser,
|
||||
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
|
||||
prob(4);/obj/item/weapon/gun/energy/stunrevolver,
|
||||
prob(3);/obj/item/weapon/gun/energy/stunrevolver,
|
||||
prob(2);/obj/item/weapon/gun/energy/stunrevolver/vintage,
|
||||
prob(3);/obj/item/weapon/gun/energy/gun/compact)
|
||||
|
||||
/obj/random/energy/highend
|
||||
name = "Random Energy Weapon"
|
||||
desc = "This is a random, actually good energy weapon."
|
||||
icon_state = "gun_energy_2"
|
||||
|
||||
/obj/random/energy/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/gun/energy/laser,
|
||||
prob(3);/obj/item/weapon/gun/energy/laser/sleek,
|
||||
prob(4);/obj/item/weapon/gun/energy/gun,
|
||||
prob(3);/obj/item/weapon/gun/energy/gun/burst,
|
||||
prob(1);/obj/item/weapon/gun/energy/gun/nuclear,
|
||||
prob(2);/obj/item/weapon/gun/energy/retro,
|
||||
prob(2);/obj/item/weapon/gun/energy/lasercannon,
|
||||
prob(3);/obj/item/weapon/gun/energy/xray,
|
||||
prob(1);/obj/item/weapon/gun/energy/sniperrifle,
|
||||
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
|
||||
prob(3);/obj/item/weapon/gun/energy/gun/compact)
|
||||
|
||||
/obj/random/energy/sec
|
||||
name = "Random Security Energy Weapon"
|
||||
desc = "This is a random security weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "energykill100"
|
||||
icon_state = "gun_energy"
|
||||
|
||||
/obj/random/energy/sec/item_to_spawn()
|
||||
return pick(prob(2);/obj/item/weapon/gun/energy/laser,
|
||||
@@ -47,8 +62,7 @@
|
||||
/obj/random/projectile
|
||||
name = "Random Projectile Weapon"
|
||||
desc = "This is a random projectile weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun"
|
||||
|
||||
/obj/random/projectile/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/gun/projectile/automatic/wt550,
|
||||
@@ -89,8 +103,7 @@
|
||||
/obj/random/projectile/sec
|
||||
name = "Random Security Projectile Weapon"
|
||||
desc = "This is a random security weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_shotgun"
|
||||
|
||||
/obj/random/projectile/sec/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
|
||||
@@ -98,10 +111,9 @@
|
||||
prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
|
||||
|
||||
/obj/random/projectile/shotgun
|
||||
name = "Random Projectile Weapon"
|
||||
desc = "This is a random projectile weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "shotgun"
|
||||
name = "Random Shotgun"
|
||||
desc = "This is a random shotgun-type weapon."
|
||||
icon_state = "gun_shotgun"
|
||||
|
||||
/obj/random/projectile/item_to_spawn()
|
||||
return pick(prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
|
||||
@@ -113,7 +125,7 @@
|
||||
name = "Random Handgun"
|
||||
desc = "This is a random sidearm."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "secgundark"
|
||||
icon_state = "gun"
|
||||
|
||||
/obj/random/handgun/item_to_spawn()
|
||||
return pick(prob(4);/obj/item/weapon/gun/projectile/sec,
|
||||
@@ -130,8 +142,7 @@
|
||||
/obj/random/handgun/sec
|
||||
name = "Random Security Handgun"
|
||||
desc = "This is a random security sidearm."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "secgundark"
|
||||
icon_state = "gun"
|
||||
|
||||
/obj/random/handgun/sec/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
|
||||
@@ -140,8 +151,7 @@
|
||||
/obj/random/ammo
|
||||
name = "Random Ammunition"
|
||||
desc = "This is random security ammunition."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "45-10"
|
||||
icon_state = "ammo"
|
||||
|
||||
/obj/random/ammo/item_to_spawn()
|
||||
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
|
||||
@@ -157,8 +167,7 @@
|
||||
/obj/random/grenade
|
||||
name = "Random Grenade"
|
||||
desc = "This is random thrown grenades (no C4/etc.)."
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
icon_state = "grenade_2"
|
||||
|
||||
/obj/random/grenade/item_to_spawn()
|
||||
return pick( prob(15);/obj/item/weapon/grenade/concussion,
|
||||
@@ -179,11 +188,24 @@
|
||||
prob(15);/obj/item/weapon/grenade/smokebomb
|
||||
)
|
||||
|
||||
/obj/random/grenade/lethal
|
||||
name = "Random Grenade"
|
||||
desc = "This is random thrown grenade that hurts a lot."
|
||||
icon_state = "grenade_3"
|
||||
|
||||
/obj/random/grenade/lethal/item_to_spawn()
|
||||
return pick( prob(15);/obj/item/weapon/grenade/concussion,
|
||||
prob(5);/obj/item/weapon/grenade/empgrenade,
|
||||
prob(2);/obj/item/weapon/grenade/chem_grenade/incendiary,
|
||||
prob(5);/obj/item/weapon/grenade/explosive,
|
||||
prob(10);/obj/item/weapon/grenade/explosive/mini,
|
||||
prob(2);/obj/item/weapon/grenade/explosive/frag
|
||||
)
|
||||
|
||||
/obj/random/grenade/less_lethal
|
||||
name = "Random Security Grenade"
|
||||
desc = "This is a random thrown grenade that shouldn't kill anyone."
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
icon_state = "grenade"
|
||||
|
||||
/obj/random/grenade/less_lethal/item_to_spawn()
|
||||
return pick( prob(20);/obj/item/weapon/grenade/concussion,
|
||||
@@ -199,8 +221,7 @@
|
||||
/obj/random/grenade/box
|
||||
name = "Random Grenade Box"
|
||||
desc = "This is a random box of grenades. Not to be mistaken for a box of random grenades. Or a grenade of random boxes - but that would just be silly."
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
icon_state = "grenade_box"
|
||||
|
||||
/obj/random/grenade/box/item_to_spawn()
|
||||
return pick( prob(20);/obj/item/weapon/storage/box/flashbangs,
|
||||
@@ -215,9 +236,9 @@
|
||||
|
||||
/obj/random/projectile/random
|
||||
name = "Random Projectile Weapon"
|
||||
desc = "This is a random weapon."
|
||||
desc = "This is a random projectile weapon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_2"
|
||||
|
||||
/obj/random/projectile/random/item_to_spawn()
|
||||
return pick(prob(3);/obj/random/multiple/gun/projectile/handgun,
|
||||
@@ -228,8 +249,7 @@
|
||||
/obj/random/multiple/gun/projectile/smg
|
||||
name = "random smg projectile gun"
|
||||
desc = "Loot for PoIs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "saber"
|
||||
icon_state = "gun_auto"
|
||||
|
||||
/obj/random/multiple/gun/projectile/smg/item_to_spawn()
|
||||
return pick(
|
||||
@@ -267,8 +287,7 @@
|
||||
/obj/random/multiple/gun/projectile/rifle
|
||||
name = "random rifle projectile gun"
|
||||
desc = "Loot for PoIs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "carbine"
|
||||
icon_state = "gun_rifle"
|
||||
|
||||
//Concerns about the bullpup, but currently seems to be only a slightly stronger z8. But we shall see.
|
||||
|
||||
@@ -319,8 +338,7 @@
|
||||
/obj/random/multiple/gun/projectile/handgun
|
||||
name = "random handgun projectile gun"
|
||||
desc = "Loot for PoIs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun"
|
||||
|
||||
/obj/random/multiple/gun/projectile/handgun/item_to_spawn()
|
||||
return pick(
|
||||
@@ -451,8 +469,7 @@
|
||||
/obj/random/multiple/gun/projectile/shotgun
|
||||
name = "random shotgun projectile gun"
|
||||
desc = "Loot for PoIs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "shotgun"
|
||||
icon_state = "gun_shotgun"
|
||||
|
||||
/obj/random/multiple/gun/projectile/shotgun/item_to_spawn()
|
||||
return pick(
|
||||
@@ -485,7 +502,7 @@
|
||||
name = "broken gun spawner"
|
||||
desc = "Spawns a random broken gun, or rarely a fully functional one."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_gun/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -503,8 +520,7 @@
|
||||
/obj/random/projectile/scrapped_shotgun
|
||||
name = "broken shotgun spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "shotgun"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_shotgun/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -517,8 +533,7 @@
|
||||
/obj/random/projectile/scrapped_smg
|
||||
name = "broken smg spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_smg/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -529,8 +544,7 @@
|
||||
/obj/random/projectile/scrapped_pistol
|
||||
name = "broken pistol spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_pistol/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -541,8 +555,7 @@
|
||||
/obj/random/projectile/scrapped_laser
|
||||
name = "broken laser spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_laser/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -555,8 +568,7 @@
|
||||
/obj/random/projectile/scrapped_ionrifle
|
||||
name = "broken ionrifle spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_ionrifle/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -567,8 +579,7 @@
|
||||
/obj/random/projectile/scrapped_bulldog
|
||||
name = "broken z8 spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_bulldog/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -579,8 +590,7 @@
|
||||
/obj/random/projectile/scrapped_flechette
|
||||
name = "broken flechette spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_flechette/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -591,8 +601,7 @@
|
||||
/obj/random/projectile/scrapped_grenadelauncher
|
||||
name = "broken grenadelauncher spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_grenadelauncher/item_to_spawn()
|
||||
return pickweight(list(
|
||||
@@ -603,8 +612,7 @@
|
||||
/obj/random/projectile/scrapped_dartgun
|
||||
name = "broken dartgun spawner"
|
||||
desc = "Loot for PoIs, or their mobs."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
icon_state = "gun_scrap"
|
||||
|
||||
/obj/random/projectile/scrapped_dartgun/item_to_spawn()
|
||||
return pickweight(list(
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/obj/random/maintenance //Clutter and loot for maintenance and away missions
|
||||
name = "random maintenance item"
|
||||
desc = "This is a random maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
|
||||
/obj/random/maintenance/item_to_spawn()
|
||||
return pick(prob(300);/obj/random/tech_supply,
|
||||
@@ -25,8 +23,6 @@ Individual items to add to the maintenance list should go here, if you add
|
||||
something, make sure it's not in one of the other lists.*/
|
||||
name = "random clean maintenance item"
|
||||
desc = "This is a random clean maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
|
||||
/obj/random/maintenance/clean/item_to_spawn()
|
||||
return pick(prob(10);/obj/random/contraband,
|
||||
@@ -123,8 +119,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
/*Maintenance loot list. This one is for around security areas*/
|
||||
name = "random security maintenance item"
|
||||
desc = "This is a random security maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
icon_state = "security"
|
||||
|
||||
/obj/random/maintenance/security/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
@@ -180,8 +175,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
/*Maintenance loot list. This one is for around medical areas*/
|
||||
name = "random medical maintenance item"
|
||||
desc = "This is a random medical maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
icon_state = "medical"
|
||||
|
||||
/obj/random/maintenance/medical/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
@@ -220,8 +214,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
/*Maintenance loot list. This one is for around medical areas*/
|
||||
name = "random engineering maintenance item"
|
||||
desc = "This is a random engineering maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
icon_state = "tool"
|
||||
|
||||
/obj/random/maintenance/engineering/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
@@ -258,8 +251,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
/*Maintenance loot list. This one is for around medical areas*/
|
||||
name = "random research maintenance item"
|
||||
desc = "This is a random research maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
icon_state = "science"
|
||||
|
||||
/obj/random/maintenance/research/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
@@ -290,8 +282,6 @@ something, make sure it's not in one of the other lists.*/
|
||||
/*Maintenance loot list. This one is for around cargo areas*/
|
||||
name = "random cargo maintenance item"
|
||||
desc = "This is a random cargo maintenance item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift1"
|
||||
|
||||
/obj/random/maintenance/cargo/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
/obj/random/mech
|
||||
name = "random mech"
|
||||
desc = "This is a random single mech."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
icon_state = "mecha"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
//This list includes the phazon, gorilla and mauler. You might want to use something else if balance is a concern.
|
||||
@@ -25,8 +24,6 @@
|
||||
/obj/random/mech/weaker
|
||||
name = "random mech"
|
||||
desc = "This is a random single mech. Those are less potent and more common."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
/obj/random/mech/weaker/item_to_spawn()
|
||||
@@ -42,8 +39,6 @@
|
||||
/obj/random/mech/old
|
||||
name = "random mech"
|
||||
desc = "This is a random single old mech."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
//Note that all of those are worn out and have slightly less maximal health than the standard.
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
/obj/random/tool
|
||||
name = "random tool"
|
||||
desc = "This is a random tool"
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "welder"
|
||||
icon_state = "tool"
|
||||
|
||||
/obj/random/tool/item_to_spawn()
|
||||
return pick(/obj/item/weapon/tool/screwdriver,
|
||||
@@ -22,7 +21,7 @@
|
||||
/obj/random/tool/powermaint
|
||||
name = "random powertool"
|
||||
desc = "This is a random rare powertool for maintenance"
|
||||
icon_state = "jaws_pry"
|
||||
icon_state = "tool_2"
|
||||
|
||||
/obj/random/tool/powermaint/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/tool,
|
||||
@@ -34,7 +33,7 @@
|
||||
/obj/random/tool/power
|
||||
name = "random powertool"
|
||||
desc = "This is a random powertool"
|
||||
icon_state = "jaws_pry"
|
||||
icon_state = "tool_2"
|
||||
|
||||
/obj/random/tool/power/item_to_spawn()
|
||||
return pick(/obj/item/weapon/tool/screwdriver/power,
|
||||
@@ -45,8 +44,7 @@
|
||||
/obj/random/tool/alien
|
||||
name = "random alien tool"
|
||||
desc = "This is a random tool"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "welder"
|
||||
icon_state = "tool_3"
|
||||
|
||||
/obj/random/tool/alien/item_to_spawn()
|
||||
return pick(/obj/item/weapon/tool/screwdriver/alien,
|
||||
@@ -60,8 +58,7 @@
|
||||
/obj/random/technology_scanner
|
||||
name = "random scanner"
|
||||
desc = "This is a random technology scanner."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "atmos"
|
||||
icon_state = "tech"
|
||||
|
||||
/obj/random/technology_scanner/item_to_spawn()
|
||||
return pick(prob(5);/obj/item/device/t_scanner,
|
||||
@@ -85,8 +82,7 @@
|
||||
/obj/random/bomb_supply
|
||||
name = "bomb supply"
|
||||
desc = "This is a random bomb supply."
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "signaller"
|
||||
icon_state = "tech"
|
||||
|
||||
/obj/random/bomb_supply/item_to_spawn()
|
||||
return pick(/obj/item/device/assembly/igniter,
|
||||
@@ -99,8 +95,7 @@
|
||||
/obj/random/toolbox
|
||||
name = "random toolbox"
|
||||
desc = "This is a random toolbox."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "red"
|
||||
icon_state = "toolbox"
|
||||
|
||||
/obj/random/toolbox/item_to_spawn()
|
||||
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
|
||||
@@ -111,8 +106,7 @@
|
||||
/obj/random/smes_coil
|
||||
name = "random smes coil"
|
||||
desc = "This is a random smes coil."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "smes"
|
||||
icon_state = "cell_2"
|
||||
|
||||
/obj/random/smes_coil/item_to_spawn()
|
||||
return pick(prob(4);/obj/item/weapon/smes_coil,
|
||||
@@ -122,8 +116,7 @@
|
||||
/obj/random/pacman
|
||||
name = "random portable generator"
|
||||
desc = "This is a random portable generator."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "portgen0"
|
||||
icon_state = "cell_3"
|
||||
|
||||
/obj/random/pacman/item_to_spawn()
|
||||
return pick(prob(6);/obj/machinery/power/port_gen/pacman,
|
||||
@@ -161,8 +154,7 @@
|
||||
/obj/random/tech_supply/component
|
||||
name = "random tech component"
|
||||
desc = "This is a random machine component."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "portable_analyzer"
|
||||
icon_state = "tech"
|
||||
|
||||
/obj/random/tech_supply/component/item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/stock_parts/gear,
|
||||
@@ -188,8 +180,7 @@
|
||||
/obj/random/medical
|
||||
name = "Random Medicine"
|
||||
desc = "This is a random medical item."
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "traumakit"
|
||||
icon_state = "medical"
|
||||
|
||||
/obj/random/medical/item_to_spawn()
|
||||
return pick(prob(21);/obj/random/medical/lite,
|
||||
@@ -208,8 +199,7 @@
|
||||
/obj/random/medical/pillbottle
|
||||
name = "Random Pill Bottle"
|
||||
desc = "This is a random pill bottle."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "pill_canister"
|
||||
icon_state = "pillbottle"
|
||||
|
||||
/obj/random/medical/pillbottle/item_to_spawn()
|
||||
return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
|
||||
@@ -221,8 +211,7 @@
|
||||
/obj/random/medical/lite
|
||||
name = "Random Medicine"
|
||||
desc = "This is a random simple medical item."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "brutepack"
|
||||
icon_state = "medical"
|
||||
spawn_nothing_percentage = 25
|
||||
|
||||
/obj/random/medical/lite/item_to_spawn()
|
||||
@@ -240,8 +229,7 @@
|
||||
/obj/random/firstaid
|
||||
name = "Random First Aid Kit"
|
||||
desc = "This is a random first aid kit."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "firstaid"
|
||||
icon_state = "medicalkit"
|
||||
|
||||
/obj/random/firstaid/item_to_spawn()
|
||||
return pick(prob(10);/obj/item/weapon/storage/firstaid/regular,
|
||||
@@ -255,8 +243,7 @@
|
||||
/obj/random/contraband
|
||||
name = "Random Illegal Item"
|
||||
desc = "Hot Stuff."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "purplecomb"
|
||||
icon_state = "sus"
|
||||
spawn_nothing_percentage = 50
|
||||
/obj/random/contraband/item_to_spawn()
|
||||
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/paracetamol, //VOREStation Edit,
|
||||
@@ -505,8 +492,7 @@
|
||||
/obj/random/material //Random materials for building stuff
|
||||
name = "random material"
|
||||
desc = "This is a random material."
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "sheet-metal_2"
|
||||
icon_state = "material"
|
||||
|
||||
/obj/random/material/item_to_spawn()
|
||||
return pick(/obj/item/stack/material/steel{amount = 10},
|
||||
@@ -524,8 +510,7 @@
|
||||
/obj/random/material/refined //Random materials for building stuff
|
||||
name = "random refined material"
|
||||
desc = "This is a random refined metal."
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "sheet-adamantine_3"
|
||||
icon_state = "material_2"
|
||||
|
||||
/obj/random/material/refined/item_to_spawn()
|
||||
return pick(/obj/item/stack/material/steel{amount = 10},
|
||||
@@ -555,8 +540,7 @@
|
||||
/obj/random/material/precious //Precious metals, go figure
|
||||
name = "random precious metal"
|
||||
desc = "This is a small stack of a random precious metal."
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "sheet-gold_2"
|
||||
icon_state = "material_3"
|
||||
|
||||
/obj/random/material/precious/item_to_spawn()
|
||||
return pick(/obj/item/stack/material/gold{amount = 5},
|
||||
@@ -790,8 +774,7 @@
|
||||
/obj/random/janusmodule
|
||||
name = "random janus circuit"
|
||||
desc = "A random (possibly broken) Janus module."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "circuit_damaged"
|
||||
icon_state = "tech_2"
|
||||
|
||||
/obj/random/janusmodule/item_to_spawn()
|
||||
return pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion))
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
/obj/random/mob
|
||||
name = "Random Animal"
|
||||
desc = "This is a random animal."
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "chicken_white"
|
||||
icon_state = "animal"
|
||||
|
||||
var/overwrite_hostility = 0
|
||||
|
||||
@@ -68,7 +67,7 @@
|
||||
/obj/random/mob/sif
|
||||
name = "Random Sif Animal"
|
||||
desc = "This is a random cold weather animal."
|
||||
icon_state = "penguin"
|
||||
icon_state = "animal"
|
||||
|
||||
mob_returns_home = 1
|
||||
mob_wander_distance = 10
|
||||
@@ -89,7 +88,7 @@
|
||||
/obj/random/mob/sif/peaceful
|
||||
name = "Random Peaceful Sif Animal"
|
||||
desc = "This is a random peaceful cold weather animal."
|
||||
icon_state = "penguin"
|
||||
icon_state = "animal_passive"
|
||||
|
||||
mob_returns_home = 1
|
||||
mob_wander_distance = 12
|
||||
@@ -106,7 +105,7 @@
|
||||
/obj/random/mob/sif/hostile
|
||||
name = "Random Hostile Sif Animal"
|
||||
desc = "This is a random hostile cold weather animal."
|
||||
icon_state = "frost"
|
||||
icon_state = "animal_hostile"
|
||||
|
||||
/obj/random/mob/sif/hostile/item_to_spawn()
|
||||
return pick(prob(22);/mob/living/simple_mob/animal/sif/savik,
|
||||
@@ -169,7 +168,7 @@
|
||||
/obj/random/mob/robotic
|
||||
name = "Random Robot Mob"
|
||||
desc = "This is a random robot."
|
||||
icon_state = "drone_dead"
|
||||
icon_state = "robot"
|
||||
|
||||
overwrite_hostility = 1
|
||||
|
||||
@@ -217,7 +216,7 @@
|
||||
/obj/random/mob/robotic/hivebot
|
||||
name = "Random Hivebot"
|
||||
desc = "This is a random hivebot."
|
||||
icon_state = "drone3"
|
||||
icon_state = "robot"
|
||||
|
||||
mob_faction = "hivebot"
|
||||
|
||||
@@ -237,18 +236,58 @@
|
||||
name = "Random Mouse"
|
||||
desc = "This is a random boring maus."
|
||||
icon_state = "mouse_gray"
|
||||
spawn_nothing_percentage = 15
|
||||
|
||||
/obj/random/mob/mouse/item_to_spawn()
|
||||
return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white,
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
|
||||
prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/rat)
|
||||
|
||||
/obj/random/mob/fish
|
||||
name = "Random Fish"
|
||||
desc = "This is a random fish found on Sif."
|
||||
icon_state = "fish"
|
||||
mob_faction = "fish"
|
||||
overwrite_hostility = 1
|
||||
mob_hostile = 0
|
||||
mob_retaliate = 0
|
||||
|
||||
/obj/random/mob/fish/item_to_spawn()
|
||||
return pick(prob(10);/mob/living/simple_mob/animal/passive/fish/bass,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/fish/icebass,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/fish/trout,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/fish/salmon,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/fish/pike,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/fish/perch,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/fish/murkin,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/fish/javelin,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/fish/rockfish,
|
||||
prob(5);/mob/living/simple_mob/animal/passive/fish/solarfish,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/crab,
|
||||
prob(1);/mob/living/simple_mob/animal/sif/hooligan_crab)
|
||||
|
||||
/obj/random/mob/bird
|
||||
name = "Random Bird"
|
||||
desc = "This is a random wild/feral bird."
|
||||
icon_state = "bird"
|
||||
mob_faction = "bird"
|
||||
|
||||
/obj/random/mob/bird/item_to_spawn()
|
||||
return pick(prob(10);/mob/living/simple_mob/animal/passive/bird/black_bird,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/bird/azure_tit,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/bird/european_robin,
|
||||
prob(10);/mob/living/simple_mob/animal/passive/bird/goldcrest,
|
||||
prob(20);/mob/living/simple_mob/animal/passive/bird/ringneck_dove,
|
||||
prob(10);/mob/living/simple_mob/animal/space/goose,
|
||||
prob(5);/mob/living/simple_mob/animal/passive/chicken,
|
||||
prob(1);/mob/living/simple_mob/animal/passive/penguin)
|
||||
|
||||
// Mercs
|
||||
/obj/random/mob/merc
|
||||
name = "Random Mercenary"
|
||||
desc = "This is a random PoI mercenary."
|
||||
icon_state = "syndicate"
|
||||
icon_state = "humanoid"
|
||||
|
||||
mob_faction = "syndicate"
|
||||
mob_returns_home = 1
|
||||
@@ -270,7 +309,7 @@
|
||||
/obj/random/mob/merc/armored
|
||||
name = "Random Armored Infantry Merc"
|
||||
desc = "This is a random PoI exo or robot for mercs."
|
||||
icon_state = "drone3"
|
||||
icon_state = "mecha"
|
||||
|
||||
/obj/random/mob/merc/armored/item_to_spawn()
|
||||
return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark,
|
||||
@@ -327,6 +366,7 @@
|
||||
/obj/random/mob/multiple/sifmobs
|
||||
name = "Random Sifmob Pack"
|
||||
desc = "A pack of random neutral sif mobs."
|
||||
icon_state = "animal_group"
|
||||
|
||||
/obj/random/mob/multiple/sifmobs/item_to_spawn()
|
||||
return pick(
|
||||
|
||||
@@ -104,6 +104,12 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/barricade/planks
|
||||
name = "crude barricade"
|
||||
icon_state = "barricade_planks"
|
||||
health = 50
|
||||
maxhealth = 50
|
||||
|
||||
/obj/structure/barricade/sandbag
|
||||
name = "sandbags"
|
||||
desc = "Bags. Bags of sand. It's rough and coarse and somehow stays in the bag."
|
||||
|
||||
@@ -3,6 +3,35 @@
|
||||
desc = "It's a storage unit for athletic wear."
|
||||
closet_appearance = /decl/closet_appearance/wardrobe/mixed
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/shorts/grey,
|
||||
/obj/item/clothing/under/shorts/black,
|
||||
/obj/item/clothing/under/shorts/red,
|
||||
/obj/item/clothing/under/shorts/blue,
|
||||
/obj/item/clothing/under/shorts/green,
|
||||
/obj/item/clothing/under/shorts/white,
|
||||
/obj/item/clothing/suit/storage/toggle/track,
|
||||
/obj/item/clothing/suit/storage/toggle/track/blue,
|
||||
/obj/item/clothing/suit/storage/toggle/track/green,
|
||||
/obj/item/clothing/suit/storage/toggle/track/red,
|
||||
/obj/item/clothing/suit/storage/toggle/track/white,
|
||||
/obj/item/clothing/under/pants/track,
|
||||
/obj/item/clothing/under/pants/track/blue,
|
||||
/obj/item/clothing/under/pants/track/green,
|
||||
/obj/item/clothing/under/pants/track/white,
|
||||
/obj/item/clothing/under/pants/track/red,
|
||||
/obj/item/clothing/shoes/athletic = 2,
|
||||
/obj/item/clothing/shoes/hitops,
|
||||
/obj/item/clothing/shoes/hitops/red,
|
||||
/obj/item/clothing/shoes/hitops/black,
|
||||
/obj/item/clothing/shoes/hitops/blue
|
||||
)
|
||||
|
||||
/obj/structure/closet/athletic_swimwear
|
||||
name = "athletic wardrobe"
|
||||
desc = "It's a storage unit for swimwear."
|
||||
closet_appearance = /decl/closet_appearance/wardrobe/mixed
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/shorts/grey,
|
||||
/obj/item/clothing/under/shorts/black,
|
||||
@@ -17,6 +46,9 @@
|
||||
/obj/item/clothing/under/swimsuit/striped,
|
||||
/obj/item/clothing/under/swimsuit/white,
|
||||
/obj/item/clothing/under/swimsuit/earth,
|
||||
/obj/item/clothing/under/wetsuit,
|
||||
/obj/item/clothing/under/wetsuit_rec,
|
||||
/obj/item/clothing/under/wetsuit_skimpy,
|
||||
/obj/item/clothing/mask/snorkel = 2,
|
||||
/obj/item/clothing/shoes/swimmingfins = 2)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/obj/structure/girder
|
||||
name = "girder"
|
||||
icon_state = "girder"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
@@ -418,4 +419,3 @@
|
||||
|
||||
/obj/structure/girder/eris
|
||||
wall_type = /turf/simulated/wall/eris
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
|
||||
/obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
|
||||
|
||||
playsound(src, 'sound/effects/roll.ogg', 100, 1)
|
||||
|
||||
/obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob)
|
||||
|
||||
@@ -132,6 +132,8 @@
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
random_species = TRUE
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/chef
|
||||
name = "Chef"
|
||||
corpseuniform = /obj/item/clothing/under/rank/chef
|
||||
@@ -198,7 +200,7 @@
|
||||
corpseid = 1
|
||||
corpseidjob = "Scientist"
|
||||
corpseidaccess = "Scientist"
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/security
|
||||
name = "Security Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sec
|
||||
@@ -212,18 +214,18 @@
|
||||
corpseid = 1
|
||||
corpseidjob = "Security Officer"
|
||||
corpseidaccess = "Security Officer"
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig/eva
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security/alt
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt
|
||||
corpseidjob = "Starship Security Officer"
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/prisoner
|
||||
name = "Unknown Prisoner"
|
||||
corpseuniform = /obj/item/clothing/under/color/prison
|
||||
@@ -247,7 +249,7 @@
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
|
||||
|
||||
/////////////////Vintage//////////////////////
|
||||
|
||||
//define the basic props at this level and only change specifics for variants, e.z.
|
||||
@@ -337,3 +339,41 @@
|
||||
corpseid = 1
|
||||
corpseidjob = "Commander"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
/////////////////Lore Factions//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/sifguard
|
||||
name = "Patrolman"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsemask = /obj/item/clothing/mask/balaclava
|
||||
corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard
|
||||
corpsegloves = /obj/item/clothing/gloves/duty
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard
|
||||
corpseid = 1
|
||||
corpseidjob = "Sif Defense Force Patrolman"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg/merc
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Enforcer"
|
||||
|
||||
|
||||
@@ -92,14 +92,17 @@
|
||||
ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement
|
||||
ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet
|
||||
ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason
|
||||
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
|
||||
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
|
||||
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
|
||||
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
|
||||
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
|
||||
ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass
|
||||
ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood
|
||||
ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic
|
||||
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
|
||||
ringtype["ring, bronze"] = /obj/item/clothing/gloves/ring/material/bronze
|
||||
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
|
||||
ringtype["ring, copper"] = /obj/item/clothing/gloves/ring/material/copper
|
||||
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
|
||||
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
|
||||
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
|
||||
|
||||
gear_tweaks += new/datum/gear_tweak/path(ringtype)
|
||||
|
||||
/datum/gear/gloves/circuitry
|
||||
|
||||
@@ -20,28 +20,52 @@
|
||||
return material
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/wood/New(var/newloc)
|
||||
..(newloc, "wood")
|
||||
..(newloc, MAT_WOOD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/plastic/New(var/newloc)
|
||||
..(newloc, "plastic")
|
||||
..(newloc, MAT_PLASTIC)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/iron/New(var/newloc)
|
||||
..(newloc, "iron")
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
|
||||
..(newloc, "steel")
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
|
||||
..(newloc, "silver")
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
|
||||
..(newloc, "gold")
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
|
||||
..(newloc, "platinum")
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
|
||||
..(newloc, "phoron")
|
||||
..(newloc, MAT_IRON)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/glass/New(var/newloc)
|
||||
..(newloc, "glass")
|
||||
..(newloc, MAT_GLASS)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
|
||||
..(newloc, MAT_STEEL)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
|
||||
..(newloc, MAT_SILVER)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
|
||||
..(newloc, MAT_GOLD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
|
||||
..(newloc, MAT_PLATINUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
|
||||
..(newloc, MAT_PHORON)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/titanium/New(var/newloc)
|
||||
..(newloc, MAT_TITANIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/copper/New(var/newloc)
|
||||
..(newloc, MAT_COPPER)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/bronze/New(var/newloc)
|
||||
..(newloc, MAT_BRONZE)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/uranium/New(var/newloc)
|
||||
..(newloc, MAT_URANIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/osmium/New(var/newloc)
|
||||
..(newloc, MAT_OSMIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/lead/New(var/newloc)
|
||||
..(newloc, MAT_LEAD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/diamond/New(var/newloc)
|
||||
..(newloc, MAT_DIAMOND)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/tin/New(var/newloc)
|
||||
..(newloc, MAT_TIN)
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/athletic
|
||||
name = "athletic shoes"
|
||||
desc = "A pair of sleek atheletic shoes. Made by and for the sporty types."
|
||||
desc = "A pair of sleek athletic shoes. Made by and for the sporty types."
|
||||
icon_state = "sportshoe"
|
||||
addblends = "sportshoe_a"
|
||||
item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld")
|
||||
|
||||
@@ -1020,6 +1020,25 @@
|
||||
desc = "A rather skimpy cow patterned swimsuit."
|
||||
icon_state = "swim_cow"
|
||||
|
||||
/obj/item/clothing/under/wetsuit
|
||||
name = "wetsuit"
|
||||
desc = "For when you need to scuba dive your way into an enemy base."
|
||||
icon_state = "wetsuit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/under/wetsuit_skimpy
|
||||
name = "tactical wetsuit"
|
||||
desc = "For when you need to scuba dive your way into an enemy base but still want to show off a little skin."
|
||||
icon_state = "wetsuit_skimpy"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/wetsuit_rec
|
||||
name = "recreational wetsuit"
|
||||
desc = "For when you need to kayak your way into an enemy base."
|
||||
icon_state = "wetsuit_rec"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/*
|
||||
* Pyjamas
|
||||
|
||||
@@ -98,16 +98,11 @@
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>The [initial(name)] is dry!</span>")
|
||||
else
|
||||
user.visible_message("\The [user] starts to wipe down [A] with [src]!")
|
||||
//reagents.splash(A, 1) //get a small amount of liquid on the thing we're wiping.
|
||||
user.visible_message("[user] starts to wipe [A] with [src].")
|
||||
update_name()
|
||||
if(do_after(user,30))
|
||||
user.visible_message("\The [user] finishes wiping off the [A]!")
|
||||
A.clean_blood()
|
||||
if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) //VOREStation Edit - "Allows rags to clean dirt from turfs"
|
||||
var/turf/T = get_turf(A)
|
||||
if(T)
|
||||
T.clean(src, user) //VOREStation Edit End
|
||||
user.visible_message("[user] finishes wiping [A]!")
|
||||
A.on_rag_wipe(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
|
||||
if(isliving(target)) //Leaving this as isliving.
|
||||
@@ -121,7 +116,7 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.head && (H.head.body_parts_covered & FACE)) //Check human head coverage.
|
||||
to_chat(user, "<span class='warning'>Remove their [H.head] first.</span>")
|
||||
return
|
||||
return
|
||||
else if(reagents.total_volume) //Final check. If the rag is not on fire and their face is uncovered, smother target.
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message(
|
||||
|
||||
@@ -216,6 +216,9 @@
|
||||
/datum/reagent/ethanol/cuba_libre
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/ethanol/demonsblood
|
||||
price_tag = 4
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ Drinks Data
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
glass_icon_state = "rumcolaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/cuba_libre
|
||||
glass_icon_state = "cubalibreglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/on_rag_wipe(var/obj/item/weapon/reagent_containers/glass/rag/R)
|
||||
clean_blood()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
|
||||
if(!is_open_container())
|
||||
open(user)
|
||||
|
||||
@@ -630,8 +630,7 @@
|
||||
plastic.add_charge(total_material)
|
||||
if(material == "wood")
|
||||
wood.add_charge(total_material)
|
||||
else
|
||||
drain(-50 * digested)
|
||||
drain(-50 * digested)
|
||||
else if(istype(target,/obj/effect/decal/remains))
|
||||
qdel(target)
|
||||
drain(-100)
|
||||
@@ -712,7 +711,7 @@
|
||||
icon_state = "sleeperc"
|
||||
injection_chems = list("glucose","inaprovaline","tricordrazine")
|
||||
max_item_count = 1
|
||||
|
||||
|
||||
/obj/item/device/dogborg/sleeper/command //Command borg belly //CHOMP addition
|
||||
name = "Bluespace Filing Belly"
|
||||
desc = "A mounted bluespace storage unit for carrying paperwork"
|
||||
@@ -729,7 +728,7 @@
|
||||
desc = "A mounted drunk tank unit with fuel processor."
|
||||
icon_state = "brewer"
|
||||
injection_chems = null
|
||||
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem) //CHOMP Addition Start
|
||||
if(patient && patient.reagents)
|
||||
if(chem in injection_chems + "inaprovaline")
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
//Hoooo boy.
|
||||
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
|
||||
var/mob/living/L = ridden
|
||||
var/scale_x = L.icon_scale_x
|
||||
var/scale_y = L.icon_scale_y
|
||||
var/scale_x = L.icon_scale_x * L.size_multiplier //VOREStation Edit
|
||||
var/scale_y = L.icon_scale_y * L.size_multiplier //VOREStation Edit
|
||||
|
||||
var/list/values = list(
|
||||
"[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER),
|
||||
|
||||
@@ -5,15 +5,16 @@
|
||||
known = FALSE
|
||||
in_space = TRUE
|
||||
|
||||
/obj/effect/overmap/visitable/sector/temporary/Initialize(var/nx, var/ny)
|
||||
/obj/effect/overmap/visitable/sector/temporary/Initialize()
|
||||
if(!istype(loc, /turf/unsimulated/map))
|
||||
CRASH("Attempt to create deepspace which is not on overmap: [log_info_line(loc)]")
|
||||
// Tell sector initializer where are is where we want to be.
|
||||
start_x = loc.x
|
||||
start_y = loc.y
|
||||
// But pick an empty z level to use
|
||||
map_z += global.using_map.get_empty_zlevel()
|
||||
. = ..()
|
||||
loc = locate(nx, ny, global.using_map.overmap_z)
|
||||
x = nx
|
||||
y = ny
|
||||
var/emptyz = global.using_map.get_empty_zlevel()
|
||||
map_z += emptyz
|
||||
map_sectors["[emptyz]"] = src
|
||||
testing("Temporary sector at [x],[y] was created, corresponding zlevel is [emptyz].")
|
||||
testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_z)].")
|
||||
|
||||
/obj/effect/overmap/visitable/sector/temporary/Destroy()
|
||||
for(var/zlevel in map_z)
|
||||
@@ -43,7 +44,7 @@
|
||||
var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf
|
||||
if(istype(res))
|
||||
return res
|
||||
return new /obj/effect/overmap/visitable/sector/temporary(x, y)
|
||||
return new /obj/effect/overmap/visitable/sector/temporary(overmap_turf)
|
||||
|
||||
/atom/movable/proc/lost_in_space()
|
||||
for(var/atom/movable/AM in contents)
|
||||
@@ -133,6 +134,8 @@
|
||||
TM = get_deepspace(M.x,M.y)
|
||||
nz = pick(TM.get_space_zlevels())
|
||||
|
||||
testing("spacetravel chose [nz],[ny],[nz] in sector [TM] @ ([TM.x],[TM.y],[TM.z])")
|
||||
|
||||
var/turf/dest = locate(nx,ny,nz)
|
||||
if(istype(dest))
|
||||
A.forceMove(dest)
|
||||
|
||||
@@ -185,11 +185,18 @@
|
||||
required_reagents = list("gin" = 2, "tonic" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/rum_and_cola
|
||||
name = "Rum and Cola"
|
||||
id = "rumandcola"
|
||||
result = "rumandcola"
|
||||
required_reagents = list("rum" = 2, "cola" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
id = "cubalibre"
|
||||
result = "cubalibre"
|
||||
required_reagents = list("rum" = 2, "cola" = 1)
|
||||
required_reagents = list("rumcola" = 3, "limejuice" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/martini
|
||||
@@ -329,14 +336,14 @@
|
||||
name = "Long Island Iced Tea"
|
||||
id = "longislandicedtea"
|
||||
result = "longislandicedtea"
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "rumcoke" = 3)
|
||||
result_amount = 6
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/icedtea
|
||||
name = "Long Island Iced Tea"
|
||||
id = "longislandicedtea"
|
||||
result = "longislandicedtea"
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "rumcoke" = 3)
|
||||
result_amount = 6
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/threemileisland
|
||||
|
||||
@@ -3185,59 +3185,29 @@
|
||||
glass_desc = "Damn, the bartender even stirred it, not shook it."
|
||||
|
||||
allergen_type = ALLERGEN_FRUIT //Made from gin(fruit) and vermouth(fruit)
|
||||
|
||||
|
||||
/datum/reagent/ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
id = "cubalibre"
|
||||
<<<<<<< HEAD
|
||||
description = "Rum, mixed with cola. Viva la revolucion."
|
||||
||||||| parent of 147dddcf38... Merge pull request #11579 from VOREStation/upstream-merge-8283
|
||||
description = "Rum, mixed with cola and a splash of lime. Viva la revolucion."
|
||||
taste_description = "cola with lime"
|
||||
color = "#3E1B00"
|
||||
strength = 30
|
||||
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime."
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
name = "Rum and Cola"
|
||||
id = "rumandcola"
|
||||
description = "A classic mix of sugar with more sugar."
|
||||
=======
|
||||
description = "Rum, mixed with cola and a splash of lime. Viva la revolucion."
|
||||
taste_description = "cola with lime"
|
||||
color = "#3E1B00"
|
||||
strength = 30
|
||||
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime."
|
||||
allergen_type = ALLERGEN_STIMULANT //Cola
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
name = "Rum and Cola"
|
||||
id = "rumandcola"
|
||||
description = "A classic mix of sugar with more sugar."
|
||||
taste_description = "cola"
|
||||
color = "#3E1B00"
|
||||
strength = 30
|
||||
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime."
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
name = "Rum and Cola"
|
||||
id = "rumandcola"
|
||||
description = "A classic mix of sugar with more sugar."
|
||||
>>>>>>> 147dddcf38... Merge pull request #11579 from VOREStation/upstream-merge-8283
|
||||
taste_description = "cola"
|
||||
nutriment_factor = 1.5 //CHOMPStation addition
|
||||
color = "#3E1B00"
|
||||
strength = 30
|
||||
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime."
|
||||
|
||||
/datum/reagent/ethanol/rum_and_cola
|
||||
name = "Rum and Cola"
|
||||
id = "rumandcola"
|
||||
description = "A classic mix of sugar with more sugar."
|
||||
taste_description = "cola"
|
||||
color = "#3E1B00"
|
||||
strength = 30
|
||||
|
||||
glass_name = "rum and cola"
|
||||
glass_desc = "A classic mix of rum and cola."
|
||||
allergen_type = ALLERGEN_STIMULANT // Cola
|
||||
|
||||
/datum/reagent/ethanol/demonsblood
|
||||
name = "Demons Blood"
|
||||
|
||||
@@ -224,8 +224,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
|
||||
B.ownegg.calibrate_size()
|
||||
B.ownegg.orient2hud()
|
||||
B.ownegg.w_class = clamp(B.ownegg.w_class * 0.25, 1, 8) //A total w_class of 16 will result in a backpack sized egg.
|
||||
B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.icon_scale_x = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
|
||||
B.ownegg.icon_scale_y = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
|
||||
B.ownegg.update_transform()
|
||||
if(B.ownegg.w_class > 4)
|
||||
B.ownegg.slowdown = B.ownegg.w_class - 4
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
if((. = ..()))
|
||||
if(isbelly(item_storage))
|
||||
var/obj/belly/B = item_storage
|
||||
. += 2 * (B.digest_brute + B.digest_burn + (B.digest_oxy)/2)
|
||||
. *= 3
|
||||
else
|
||||
. += 30 //Organs give a little more
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 111 KiB |