Merge branch 'master' into upstream-merge-11579

This commit is contained in:
Nadyr
2021-10-22 20:03:36 -04:00
committed by GitHub
45 changed files with 713 additions and 517 deletions

View File

@@ -49,6 +49,10 @@
#define MAT_BOROSILICATE "borosilicate glass" #define MAT_BOROSILICATE "borosilicate glass"
#define MAT_SANDSTONE "sandstone" #define MAT_SANDSTONE "sandstone"
#define MAT_FLINT "flint" #define MAT_FLINT "flint"
#define MAT_PLATINUM "platinum"
#define MAT_TRITIUM "tritium"
#define MAT_DEUTERIUM "deuterium"
#define DEFAULT_TABLE_MATERIAL MAT_PLASTIC #define DEFAULT_TABLE_MATERIAL MAT_PLASTIC
#define DEFAULT_WALL_MATERIAL MAT_STEEL #define DEFAULT_WALL_MATERIAL MAT_STEEL

View File

@@ -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 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
*/ */
/** // Returns a list of objects available
* 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)
/datum/component/personal_crafting/proc/get_environment(atom/a, list/blacklist = null, radius_range = 1) /datum/component/personal_crafting/proc/get_environment(atom/a, list/blacklist = null, radius_range = 1)
. = list() . = list()
@@ -122,13 +74,13 @@
continue continue
. += AM . += 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) /datum/component/personal_crafting/proc/get_surroundings(atom/a, list/blacklist=null)
. = list() . = list()
.["tool_qualities"] = list() .["tool_qualities"] = list() // List of tool types available
.["other"] = list() .["other"] = list() // List of reagents/material stacks available
.["instances"] = list() .["instances"] = list() // List of /obj/items available, maybe?
.["machinery"] = list() .["machinery"] = list() // List of /obj/machinery available
for(var/obj/object in get_environment(a, blacklist)) for(var/obj/object in get_environment(a, blacklist))
if(isitem(object)) if(isitem(object))
var/obj/item/item = object var/obj/item/item = object
@@ -150,11 +102,55 @@
else if (istype(object, /obj/machinery)) else if (istype(object, /obj/machinery))
LAZYADDASSOCLIST(.["machinery"], object.type, object) 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. /// 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) /datum/component/personal_crafting/proc/check_tools(atom/source, datum/crafting_recipe/R, list/surroundings)
if(!length(recipe.tool_behaviors) && !length(recipe.tool_paths)) if(!length(R.tool_behaviors) && !length(R.tool_paths))
return TRUE return TRUE
var/list/available_tools = list() var/list/available_tools = list()
var/list/present_qualities = list() var/list/present_qualities = list()
@@ -176,50 +172,70 @@
for(var/path in surroundings["other"]) for(var/path in surroundings["other"])
available_tools[path] = TRUE 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]) if(present_qualities[required_quality])
continue continue
return FALSE return FALSE
for(var/required_path in recipe.tool_paths) for(var/required_path in R.tool_paths)
var/found_this_tool = FALSE if(is_path_in_list(required_path, available_tools))
for(var/tool_path in available_tools)
if(!ispath(required_path, tool_path))
continue
found_this_tool = TRUE
break
if(found_this_tool)
continue continue
return FALSE return FALSE
return TRUE 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) /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 // var/send_feedback = 1
if(check_contents(a, R, contents)) . = check_requirements(a, R, surroundings)
if(check_tools(a, R, contents)) if(.)
if(R.one_per_turf) return
for(var/content in get_turf(a))
if(istype(content, R.result)) if(R.one_per_turf)
return ", object already present." for(var/content in get_turf(a))
//If we're a mob we'll try a do_after; non mobs will instead instantly construct the item if(istype(content, R.result))
if(ismob(a) && !do_after(a, R.time, target = a)) return ", object already present."
return "."
contents = get_surroundings(a,R.blacklist) //If we're a mob we'll try a do_after; non mobs will instead instantly construct the item
if(!check_contents(a, R, contents)) if(ismob(a) && !do_after(a, R.time, target = a))
return ", missing component." return "."
if(!check_tools(a, R, contents))
return ", missing tool." surroundings = get_surroundings(a, R.blacklist)
var/list/parts = del_reqs(R, a) . = check_requirements(a, R, surroundings)
var/atom/movable/I = new R.result (get_turf(a.loc)) if(.)
I.CheckParts(parts, R) return
// if(send_feedback)
// SSblackbox.record_feedback("tally", "object_crafted", 1, I.type) var/list/parts = del_reqs(R, a)
return I //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item var/atom/movable/I = new R.result (get_turf(a.loc))
return ", missing tool." I.CheckParts(parts, R)
return ", missing component." // 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: /*Del reqs works like this:
@@ -246,119 +262,108 @@
*/ */
/datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, atom/a) /datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, atom/a)
var/list/surroundings var/list/surroundings = get_environment(a)
var/list/Deletion = list() var/list/parts = list("items" = list())
. = list() if(R.get_parts_reagents_volume())
var/data parts["reagents"] = new /datum/reagents(R.get_parts_reagents_volume()) // Datums don't have create_reagents()
var/amt
var/list/requirements = list() var/list/requirements = list()
if(R.reqs) if(R.reqs)
requirements += R.reqs for(var/list/L in R.reqs)
requirements += L
if(R.machinery) if(R.machinery)
requirements += R.machinery requirements += R.machinery
main_loop:
for(var/path_key in requirements) // Try to find everything that was actually used to craft
amt = R.reqs[path_key] || R.machinery[path_key] for(var/path_key in requirements)
if(!amt)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it! var/amt = requirements[path_key]
continue main_loop if(amt <= 0)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
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
continue continue
else if(istype(part, /obj/item/stack))
var/obj/item/stack/ST = locate(part) in Deletion // If the path is in R.parts, we want to grab those to stuff into the product
if(ST.get_amount() > partlist[part]) var/amt_to_transfer = 0
ST.set_amount(partlist[part]) if(is_path_in_list(path_key, R.parts))
. += ST amt_to_transfer = R.parts[path_key]
Deletion -= ST
continue
else // Reagent: gotta go sniffing in all the beakers
while(partlist[part] > 0) if(ispath(path_key, /datum/reagent))
var/atom/movable/AM = locate(part) in Deletion var/datum/reagent/reagent = path_key
. += AM var/id = initial(reagent.id)
Deletion -= AM
partlist[part] -= 1 for(var/obj/item/weapon/reagent_containers/RC in surroundings)
while(Deletion.len) // Found everything we need
var/DL = Deletion[Deletion.len] if(amt <= 0 && amt_to_transfer <= 0)
Deletion.Cut(Deletion.len) break
// 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 we need to keep any to put in the new object, pull it out
if(istype(DL, /obj/item/weapon/reagent_containers)) if(amt_to_transfer > 0)
var/obj/item/weapon/reagent_containers/container = DL var/A = RC.reagents.trans_id_to(parts["reagents"], id, amt_to_transfer)
container.reagents.clear_reagents() amt_to_transfer -= A
// container.reagents.expose(container.loc, TOUCH) amt -= A
else if(istype(DL, /obj/item/weapon/storage))
var/obj/item/weapon/storage/container = DL // If we need to consume some amount of it
container.spill() if(amt > 0)
container.close_all() var/datum/reagent/RG = RC.reagents.get_reagent(id)
qdel(DL) 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) /datum/component/personal_crafting/proc/component_ui_interact(source, location, control, params, user)
// SIGNAL_HANDLER // SIGNAL_HANDLER
@@ -487,10 +492,14 @@
var/list/tool_list = list() var/list/tool_list = list()
var/list/catalyst_text = list() var/list/catalyst_text = list()
for(var/atom/req_atom as anything in R.reqs) for(var/list/req 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) var/list/L = list()
//Also these are typepaths so sadly we can't just do "[a]" for(var/atom/req_atom as anything in req)
req_text += "[R.reqs[req_atom]] [initial(req_atom.name)]" //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) for(var/obj/machinery/content as anything in R.machinery)
req_text += "[R.reqs[content]] [initial(content.name)]" req_text += "[R.reqs[content]] [initial(content.name)]"
if(R.additional_req_text) if(R.additional_req_text)

View File

@@ -12,21 +12,30 @@
*/ */
/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R) /atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R)
SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R) SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
if(parts_list) if(LAZYLEN(parts_list))
for(var/A in parts_list) if(istype(parts_list["reagents"], /datum/reagents))
if(istype(A, /datum/reagent)) var/datum/reagents/RG = parts_list["reagents"]
if(!reagents) if(istype(reagents))
reagents = new() RG.trans_to_holder(reagents, RG.total_volume)
reagents.reagent_list.Add(A) else
reagents.conditional_update() reagents = RG
else if(ismovable(A)) RG.my_atom = src
var/atom/movable/M = A reagents.conditional_update()
if(isliving(M.loc))
var/mob/living/L = M.loc for(var/atom/movable/M as anything in parts_list["items"])
L.unEquip(M, target = src) if(isliving(M.loc))
else var/mob/living/L = M.loc
M.forceMove(src) L.unEquip(M, target = src)
SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, 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() parts_list.Cut()
/obj/machinery/CheckParts(list/parts_list) /obj/machinery/CheckParts(list/parts_list)

View File

@@ -47,3 +47,28 @@
/datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result) /datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result)
return 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)

View File

@@ -1,14 +1,14 @@
/datum/crafting_recipe/cloth /datum/crafting_recipe/cloth
name = "Cloth bolt" name = "Cloth bolt"
result = /obj/item/stack/material/cloth 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 time = 40
category = CAT_PRIMAL category = CAT_PRIMAL
/datum/crafting_recipe/crude_bandage /datum/crafting_recipe/crude_bandage
name = "Crude bandages (x10)" name = "Crude bandages (x10)"
result = /obj/item/stack/medical/crude_pack 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 time = 40
category = CAT_PRIMAL category = CAT_PRIMAL
@@ -20,8 +20,8 @@
name = "primitive clothes" name = "primitive clothes"
result = /obj/item/clothing/under/primitive result = /obj/item/clothing/under/primitive
reqs = list( reqs = list(
/obj/item/stack/material/fiber = 4, list(/obj/item/stack/material/fiber = 4),
/obj/item/stack/material/cloth = 6 list(/obj/item/stack/material/cloth = 6)
) )
time = 90 time = 90
category = CAT_CLOTHING category = CAT_CLOTHING
@@ -30,8 +30,8 @@
name = "primitive shoes" name = "primitive shoes"
result = /obj/item/clothing/shoes/primitive result = /obj/item/clothing/shoes/primitive
reqs = list( reqs = list(
/obj/item/stack/material/fiber = 2, list(/obj/item/stack/material/fiber = 2),
/obj/item/stack/material/cloth = 3 list(/obj/item/stack/material/cloth = 3)
) )
time = 60 time = 60
category = CAT_CLOTHING category = CAT_CLOTHING

View File

@@ -2,10 +2,10 @@
name = "Wooden Shovel" name = "Wooden Shovel"
result = /obj/item/weapon/shovel/wood result = /obj/item/weapon/shovel/wood
reqs = list( reqs = list(
/obj/item/stack/material/stick = 5, list(/obj/item/stack/material/stick = 5),
/obj/item/stack/material/wood = 1, list(/obj/item/stack/material/wood = 1),
/obj/item/stack/material/fiber = 3, list(/obj/item/stack/material/fiber = 3),
/obj/item/stack/material/flint = 1 list(/obj/item/stack/material/flint = 1)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -15,7 +15,7 @@
name = "stone blade" name = "stone blade"
result = /obj/item/weapon/material/knife/stone result = /obj/item/weapon/material/knife/stone
reqs = list( reqs = list(
/obj/item/stack/material/flint = 2 list(/obj/item/stack/material/flint = 2)
) )
time = 60 time = 60
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -25,10 +25,10 @@
name = "stone knife" name = "stone knife"
result = /obj/item/weapon/material/knife/stone/wood result = /obj/item/weapon/material/knife/stone/wood
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/stack/material/wood = 1, list(/obj/item/stack/material/wood = 1),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -38,10 +38,10 @@
name = "stone knife" name = "stone knife"
result = /obj/item/weapon/material/knife/stone/bone result = /obj/item/weapon/material/knife/stone/bone
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/weapon/bone = 1, list(/obj/item/weapon/bone = 1),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -51,9 +51,9 @@
name = "wooden bucket" name = "wooden bucket"
result = /obj/item/weapon/reagent_containers/glass/bucket/wood result = /obj/item/weapon/reagent_containers/glass/bucket/wood
reqs = list( reqs = list(
/obj/item/stack/material/wood = 1, list(/obj/item/stack/material/wood = 1),
/obj/item/stack/material/stick = 1, list(/obj/item/stack/material/stick = 1),
/obj/item/stack/material/fiber = 2 list(/obj/item/stack/material/fiber = 2)
) )
time = 60 time = 60
category = CAT_TOOL category = CAT_TOOL
@@ -61,7 +61,7 @@
/datum/crafting_recipe/sticks /datum/crafting_recipe/sticks
name = "sticks" name = "sticks"
result = /obj/item/stack/material/stick/fivestack 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) tool_paths = list(/obj/item/weapon/material/knife)
time = 200 time = 200
category = CAT_MISC category = CAT_MISC
@@ -70,10 +70,10 @@
name = "stone axe" name = "stone axe"
result = /obj/item/weapon/material/knife/machete/hatchet/stone result = /obj/item/weapon/material/knife/machete/hatchet/stone
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/stack/material/stick = 10, list(/obj/item/stack/material/stick = 1),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -83,10 +83,10 @@
name = "stone axe" name = "stone axe"
result = /obj/item/weapon/material/knife/machete/hatchet/stone/bone result = /obj/item/weapon/material/knife/machete/hatchet/stone/bone
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/weapon/bone = 1, list(/obj/item/weapon/bone = 1),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -96,10 +96,10 @@
name = "stone spear" name = "stone spear"
result = /obj/item/weapon/material/twohanded/spear/flint result = /obj/item/weapon/material/twohanded/spear/flint
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/stack/material/wood = 2, list(/obj/item/stack/material/wood = 2),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -109,10 +109,10 @@
name = "stone spear" name = "stone spear"
result = /obj/item/weapon/material/twohanded/spear/flint result = /obj/item/weapon/material/twohanded/spear/flint
reqs = list( reqs = list(
/obj/item/weapon/material/knife/stone = 1, list(/obj/item/weapon/material/knife/stone = 1),
/obj/item/stack/material/flint = 1, list(/obj/item/stack/material/flint = 1),
/obj/item/weapon/bone = 2, list(/obj/item/weapon/bone = 2),
/obj/item/stack/material/fiber = 3 list(/obj/item/stack/material/fiber = 3)
) )
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
@@ -121,6 +121,6 @@
/datum/crafting_recipe/ropebindings /datum/crafting_recipe/ropebindings
name = "rope bindings" name = "rope bindings"
result = /obj/item/weapon/handcuffs/cable/plantfiber 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 time = 60
category = CAT_MISC category = CAT_MISC

View File

@@ -1,9 +1,23 @@
/datum/crafting_recipe/stunprod /datum/crafting_recipe/stunprod
name = "Stunprod" name = "Stunprod"
result = /obj/item/weapon/melee/baton/cattleprod result = /obj/item/weapon/melee/baton/cattleprod
reqs = list(/obj/item/weapon/handcuffs/cable = 1, reqs = list(list(/obj/item/weapon/handcuffs/cable = 1),
/obj/item/stack/rods = 1, list(/obj/item/stack/rods = 1),
/obj/item/weapon/tool/wirecutters = 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 time = 40
category = CAT_WEAPONRY category = CAT_WEAPONRY
subcategory = CAT_WEAPON subcategory = CAT_WEAPON
@@ -11,10 +25,8 @@
/datum/crafting_recipe/shortbow /datum/crafting_recipe/shortbow
name = "Shortbow" name = "Shortbow"
result = /obj/item/weapon/gun/launcher/crossbow/bow result = /obj/item/weapon/gun/launcher/crossbow/bow
reqs = list( reqs = list(list(/obj/item/stack/material/wood = 10),
/obj/item/stack/material/wood = 10, list(/obj/item/stack/material/cloth = 5))
/obj/item/stack/material/cloth = 5
)
time = 120 time = 120
category = CAT_WEAPONRY category = CAT_WEAPONRY
subcategory = CAT_WEAPON subcategory = CAT_WEAPON
@@ -22,10 +34,8 @@
/datum/crafting_recipe/arrow_sandstone /datum/crafting_recipe/arrow_sandstone
name = "Wood arrow (sandstone tip)" name = "Wood arrow (sandstone tip)"
result = /obj/item/weapon/arrow/standard result = /obj/item/weapon/arrow/standard
reqs = list( reqs = list(list(/obj/item/stack/material/wood = 2),
/obj/item/stack/material/wood = 2, list(/obj/item/stack/material/sandstone = 2))
/obj/item/stack/material/sandstone = 2
)
time = 40 time = 40
category = CAT_WEAPONRY category = CAT_WEAPONRY
subcategory = CAT_AMMO subcategory = CAT_AMMO
@@ -33,10 +43,8 @@
/datum/crafting_recipe/arrow_marble /datum/crafting_recipe/arrow_marble
name = "Wood arrow (marble tip)" name = "Wood arrow (marble tip)"
result = /obj/item/weapon/arrow/standard result = /obj/item/weapon/arrow/standard
reqs = list( reqs = list(list(/obj/item/stack/material/wood = 2),
/obj/item/stack/material/wood = 2, list(/obj/item/stack/material/marble = 2))
/obj/item/stack/material/marble = 2
)
time = 40 time = 40
category = CAT_WEAPONRY category = CAT_WEAPONRY
subcategory = CAT_AMMO subcategory = CAT_AMMO

View File

@@ -477,7 +477,11 @@
src.germ_level = 0 src.germ_level = 0
if(istype(blood_DNA, /list)) if(istype(blood_DNA, /list))
blood_DNA = null 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() /atom/proc/get_global_map_pos()
if(!islist(global_map) || isemptylist(global_map)) return if(!islist(global_map) || isemptylist(global_map)) return

View File

@@ -234,6 +234,8 @@
return ..() return ..()
/obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null) /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null)
if(!chassis)
return
moveto = moveto || get_turf(chassis) moveto = moveto || get_turf(chassis)
forceMove(moveto) forceMove(moveto)
chassis.equipment -= src chassis.equipment -= src

View File

@@ -38,7 +38,7 @@
for(var/d in cardinal) for(var/d in cardinal)
var/turf/simulated/target = get_step(src,d) var/turf/simulated/target = get_step(src,d)
var/turf/simulated/origin = get_turf(src) 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 var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
if(other_fuel) if(other_fuel)
other_fuel.amount += amount*0.25 other_fuel.amount += amount*0.25

View File

@@ -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 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 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 /obj/item/weapon/material/kitchen/utensil/fork
name = "fork" name = "fork"
desc = "It's a fork. Sure is pointy." desc = "It's a fork. Sure is pointy."

View File

@@ -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_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/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. 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) /// Boxes screen object for fixed-size storage (belts, etc)
var/obj/screen/storage/boxes = null var/obj/screen/storage/boxes = null
/// List of 'click catchers' for boxes for fixed-size storage /// List of 'click catchers' for boxes for fixed-size storage
@@ -37,8 +37,8 @@
var/obj/screen/storage/storage_continue = null var/obj/screen/storage/storage_continue = null
/// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative. /// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative.
var/obj/screen/storage/storage_end = null 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/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. 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 return
if(user.s_active) if(user.s_active)
user.s_active.hide_from(user) user.s_active.hide_from(user)
var/client/C = user.client var/client/C = user.client
if(!C) if(!C)
return return
if(storage_slots) if(storage_slots)
C.screen += src.boxes C.screen += src.boxes
create_slot_catchers() create_slot_catchers()
C.screen += src.box_catchers C.screen += src.box_catchers
@@ -202,7 +202,7 @@
C.screen += src.storage_start C.screen += src.storage_start
C.screen += src.storage_continue C.screen += src.storage_continue
C.screen += src.storage_end C.screen += src.storage_end
C.screen += src.closer C.screen += src.closer
C.screen += src.contents C.screen += src.contents
@@ -212,12 +212,12 @@
/obj/item/weapon/storage/proc/hide_from(mob/user as mob) /obj/item/weapon/storage/proc/hide_from(mob/user as mob)
var/client/C = user.client var/client/C = user.client
LAZYREMOVE(is_seeing,user) LAZYREMOVE(is_seeing,user)
if(!C) if(!C)
if(!LAZYLEN(is_seeing)) if(!LAZYLEN(is_seeing))
clear_slot_catchers() clear_slot_catchers()
return return
if(storage_slots) if(storage_slots)
C.screen -= src.boxes C.screen -= src.boxes
C.screen -= src.box_catchers C.screen -= src.box_catchers
@@ -225,13 +225,13 @@
C.screen -= src.storage_start C.screen -= src.storage_start
C.screen -= src.storage_continue C.screen -= src.storage_continue
C.screen -= src.storage_end C.screen -= src.storage_end
C.screen -= src.closer C.screen -= src.closer
C.screen -= src.contents C.screen -= src.contents
if(user.s_active == src) if(user.s_active == src)
user.s_active = null user.s_active = null
if(!LAZYLEN(is_seeing)) if(!LAZYLEN(is_seeing))
clear_slot_catchers() clear_slot_catchers()
@@ -330,7 +330,7 @@
/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) /obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents)
SHOULD_NOT_SLEEP(TRUE) SHOULD_NOT_SLEEP(TRUE)
/// A prototype for drawing the leftmost border behind each item in storage /// A prototype for drawing the leftmost border behind each item in storage
var/static/mutable_appearance/stored_start var/static/mutable_appearance/stored_start
/// A prototype for drawing the wide backing space behind each item in storage /// A prototype for drawing the wide backing space behind each item in storage
@@ -679,6 +679,10 @@
if(!Adjacent(usr)) if(!Adjacent(usr))
return return
//VOREStation Add: No turf dumping if user is in a belly
if(isbelly(usr.loc))
return
drop_contents() drop_contents()
/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs /obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs
@@ -852,7 +856,7 @@
ASSERT(held_item) ASSERT(held_item)
name += held_item.name name += held_item.name
src.held_item = weakref(held_item) src.held_item = weakref(held_item)
/atom/movable/storage_slot/Destroy() /atom/movable/storage_slot/Destroy()
held_item = null held_item = null

View File

@@ -1,8 +1,8 @@
/obj/random /obj/random
name = "random object" name = "random object"
desc = "This item type is used to spawn random objects at round-start" desc = "This item type is used to spawn random objects at round-start"
icon = 'icons/misc/mark.dmi' icon = 'icons/misc/random_spawners.dmi'
icon_state = "rup" icon_state = "generic"
var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything
var/drop_get_turf = TRUE var/drop_get_turf = TRUE
@@ -80,7 +80,7 @@ var/list/random_useful_
/obj/random/single /obj/random/single
name = "randomly spawned object" name = "randomly spawned object"
desc = "This item type is used to randomly spawn a given object at round-start" 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 var/spawn_object = null
/obj/random/single/item_to_spawn() /obj/random/single/item_to_spawn()
@@ -104,8 +104,8 @@ var/list/multi_point_spawns
/obj/random_multi /obj/random_multi
name = "random object spawn point" 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." 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 = 'icons/misc/random_spawners.dmi'
icon_state = "x3" icon_state = "generic_3"
invisibility = INVISIBILITY_MAXIMUM invisibility = INVISIBILITY_MAXIMUM
var/id // Group id var/id // Group id
var/weight // Probability weight for this spawn point var/weight // Probability weight for this spawn point

View File

@@ -1,8 +1,7 @@
/obj/random/gun/random /obj/random/gun/random
name = "Random Weapon" name = "Random Weapon"
desc = "This is a random energy or ballistic weapon." desc = "This is a random energy or ballistic weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun"
icon_state = "energystun100"
/obj/random/gun/random/item_to_spawn() /obj/random/gun/random/item_to_spawn()
return pick(prob(5);/obj/random/energy, return pick(prob(5);/obj/random/energy,
@@ -10,9 +9,8 @@
/obj/random/energy /obj/random/energy
name = "Random Energy Weapon" name = "Random Energy Weapon"
desc = "This is a random weapon." desc = "This is a random energy weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun_energy"
icon_state = "energykill100"
/obj/random/energy/item_to_spawn() /obj/random/energy/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/energy/laser, 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,
prob(2);/obj/item/weapon/gun/energy/ionrifle/pistol, prob(2);/obj/item/weapon/gun/energy/ionrifle/pistol,
prob(3);/obj/item/weapon/gun/energy/toxgun, 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(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(2);/obj/item/weapon/gun/energy/stunrevolver/vintage,
prob(3);/obj/item/weapon/gun/energy/gun/compact) 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 /obj/random/energy/sec
name = "Random Security Energy Weapon" name = "Random Security Energy Weapon"
desc = "This is a random security weapon." desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun_energy"
icon_state = "energykill100"
/obj/random/energy/sec/item_to_spawn() /obj/random/energy/sec/item_to_spawn()
return pick(prob(2);/obj/item/weapon/gun/energy/laser, return pick(prob(2);/obj/item/weapon/gun/energy/laser,
@@ -47,8 +62,7 @@
/obj/random/projectile /obj/random/projectile
name = "Random Projectile Weapon" name = "Random Projectile Weapon"
desc = "This is a random projectile weapon." desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun"
icon_state = "revolver"
/obj/random/projectile/item_to_spawn() /obj/random/projectile/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/automatic/wt550, return pick(prob(3);/obj/item/weapon/gun/projectile/automatic/wt550,
@@ -89,8 +103,7 @@
/obj/random/projectile/sec /obj/random/projectile/sec
name = "Random Security Projectile Weapon" name = "Random Security Projectile Weapon"
desc = "This is a random security weapon." desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun_shotgun"
icon_state = "revolver"
/obj/random/projectile/sec/item_to_spawn() /obj/random/projectile/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump, 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) prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
/obj/random/projectile/shotgun /obj/random/projectile/shotgun
name = "Random Projectile Weapon" name = "Random Shotgun"
desc = "This is a random projectile weapon." desc = "This is a random shotgun-type weapon."
icon = 'icons/obj/gun.dmi' icon_state = "gun_shotgun"
icon_state = "shotgun"
/obj/random/projectile/item_to_spawn() /obj/random/projectile/item_to_spawn()
return pick(prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel, return pick(prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
@@ -113,7 +125,7 @@
name = "Random Handgun" name = "Random Handgun"
desc = "This is a random sidearm." desc = "This is a random sidearm."
icon = 'icons/obj/gun.dmi' icon = 'icons/obj/gun.dmi'
icon_state = "secgundark" icon_state = "gun"
/obj/random/handgun/item_to_spawn() /obj/random/handgun/item_to_spawn()
return pick(prob(4);/obj/item/weapon/gun/projectile/sec, return pick(prob(4);/obj/item/weapon/gun/projectile/sec,
@@ -130,8 +142,7 @@
/obj/random/handgun/sec /obj/random/handgun/sec
name = "Random Security Handgun" name = "Random Security Handgun"
desc = "This is a random security sidearm." desc = "This is a random security sidearm."
icon = 'icons/obj/gun.dmi' icon_state = "gun"
icon_state = "secgundark"
/obj/random/handgun/sec/item_to_spawn() /obj/random/handgun/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/sec, return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
@@ -140,8 +151,7 @@
/obj/random/ammo /obj/random/ammo
name = "Random Ammunition" name = "Random Ammunition"
desc = "This is random security ammunition." desc = "This is random security ammunition."
icon = 'icons/obj/ammo.dmi' icon_state = "ammo"
icon_state = "45-10"
/obj/random/ammo/item_to_spawn() /obj/random/ammo/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags, return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
@@ -157,8 +167,7 @@
/obj/random/grenade /obj/random/grenade
name = "Random Grenade" name = "Random Grenade"
desc = "This is random thrown grenades (no C4/etc.)." desc = "This is random thrown grenades (no C4/etc.)."
icon = 'icons/obj/grenade.dmi' icon_state = "grenade_2"
icon_state = "clusterbang_segment"
/obj/random/grenade/item_to_spawn() /obj/random/grenade/item_to_spawn()
return pick( prob(15);/obj/item/weapon/grenade/concussion, return pick( prob(15);/obj/item/weapon/grenade/concussion,
@@ -179,11 +188,24 @@
prob(15);/obj/item/weapon/grenade/smokebomb 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 /obj/random/grenade/less_lethal
name = "Random Security Grenade" name = "Random Security Grenade"
desc = "This is a random thrown grenade that shouldn't kill anyone." desc = "This is a random thrown grenade that shouldn't kill anyone."
icon = 'icons/obj/grenade.dmi' icon_state = "grenade"
icon_state = "clusterbang_segment"
/obj/random/grenade/less_lethal/item_to_spawn() /obj/random/grenade/less_lethal/item_to_spawn()
return pick( prob(20);/obj/item/weapon/grenade/concussion, return pick( prob(20);/obj/item/weapon/grenade/concussion,
@@ -199,8 +221,7 @@
/obj/random/grenade/box /obj/random/grenade/box
name = "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." 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 = "grenade_box"
icon_state = "clusterbang_segment"
/obj/random/grenade/box/item_to_spawn() /obj/random/grenade/box/item_to_spawn()
return pick( prob(20);/obj/item/weapon/storage/box/flashbangs, return pick( prob(20);/obj/item/weapon/storage/box/flashbangs,
@@ -215,9 +236,9 @@
/obj/random/projectile/random /obj/random/projectile/random
name = "Random Projectile Weapon" name = "Random Projectile Weapon"
desc = "This is a random weapon." desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi' icon = 'icons/obj/gun.dmi'
icon_state = "revolver" icon_state = "gun_2"
/obj/random/projectile/random/item_to_spawn() /obj/random/projectile/random/item_to_spawn()
return pick(prob(3);/obj/random/multiple/gun/projectile/handgun, return pick(prob(3);/obj/random/multiple/gun/projectile/handgun,
@@ -228,8 +249,7 @@
/obj/random/multiple/gun/projectile/smg /obj/random/multiple/gun/projectile/smg
name = "random smg projectile gun" name = "random smg projectile gun"
desc = "Loot for PoIs." desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_auto"
icon_state = "saber"
/obj/random/multiple/gun/projectile/smg/item_to_spawn() /obj/random/multiple/gun/projectile/smg/item_to_spawn()
return pick( return pick(
@@ -267,8 +287,7 @@
/obj/random/multiple/gun/projectile/rifle /obj/random/multiple/gun/projectile/rifle
name = "random rifle projectile gun" name = "random rifle projectile gun"
desc = "Loot for PoIs." desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_rifle"
icon_state = "carbine"
//Concerns about the bullpup, but currently seems to be only a slightly stronger z8. But we shall see. //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 /obj/random/multiple/gun/projectile/handgun
name = "random handgun projectile gun" name = "random handgun projectile gun"
desc = "Loot for PoIs." desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi' icon_state = "gun"
icon_state = "revolver"
/obj/random/multiple/gun/projectile/handgun/item_to_spawn() /obj/random/multiple/gun/projectile/handgun/item_to_spawn()
return pick( return pick(
@@ -451,8 +469,7 @@
/obj/random/multiple/gun/projectile/shotgun /obj/random/multiple/gun/projectile/shotgun
name = "random shotgun projectile gun" name = "random shotgun projectile gun"
desc = "Loot for PoIs." desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_shotgun"
icon_state = "shotgun"
/obj/random/multiple/gun/projectile/shotgun/item_to_spawn() /obj/random/multiple/gun/projectile/shotgun/item_to_spawn()
return pick( return pick(
@@ -485,7 +502,7 @@
name = "broken gun spawner" name = "broken gun spawner"
desc = "Spawns a random broken gun, or rarely a fully functional one." desc = "Spawns a random broken gun, or rarely a fully functional one."
icon = 'icons/obj/gun.dmi' icon = 'icons/obj/gun.dmi'
icon_state = "revolver" icon_state = "gun_scrap"
/obj/random/projectile/scrapped_gun/item_to_spawn() /obj/random/projectile/scrapped_gun/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -503,8 +520,7 @@
/obj/random/projectile/scrapped_shotgun /obj/random/projectile/scrapped_shotgun
name = "broken shotgun spawner" name = "broken shotgun spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "shotgun"
/obj/random/projectile/scrapped_shotgun/item_to_spawn() /obj/random/projectile/scrapped_shotgun/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -517,8 +533,7 @@
/obj/random/projectile/scrapped_smg /obj/random/projectile/scrapped_smg
name = "broken smg spawner" name = "broken smg spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_smg/item_to_spawn() /obj/random/projectile/scrapped_smg/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -529,8 +544,7 @@
/obj/random/projectile/scrapped_pistol /obj/random/projectile/scrapped_pistol
name = "broken pistol spawner" name = "broken pistol spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_pistol/item_to_spawn() /obj/random/projectile/scrapped_pistol/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -541,8 +555,7 @@
/obj/random/projectile/scrapped_laser /obj/random/projectile/scrapped_laser
name = "broken laser spawner" name = "broken laser spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_laser/item_to_spawn() /obj/random/projectile/scrapped_laser/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -555,8 +568,7 @@
/obj/random/projectile/scrapped_ionrifle /obj/random/projectile/scrapped_ionrifle
name = "broken ionrifle spawner" name = "broken ionrifle spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_ionrifle/item_to_spawn() /obj/random/projectile/scrapped_ionrifle/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -567,8 +579,7 @@
/obj/random/projectile/scrapped_bulldog /obj/random/projectile/scrapped_bulldog
name = "broken z8 spawner" name = "broken z8 spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_bulldog/item_to_spawn() /obj/random/projectile/scrapped_bulldog/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -579,8 +590,7 @@
/obj/random/projectile/scrapped_flechette /obj/random/projectile/scrapped_flechette
name = "broken flechette spawner" name = "broken flechette spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_flechette/item_to_spawn() /obj/random/projectile/scrapped_flechette/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -591,8 +601,7 @@
/obj/random/projectile/scrapped_grenadelauncher /obj/random/projectile/scrapped_grenadelauncher
name = "broken grenadelauncher spawner" name = "broken grenadelauncher spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_grenadelauncher/item_to_spawn() /obj/random/projectile/scrapped_grenadelauncher/item_to_spawn()
return pickweight(list( return pickweight(list(
@@ -603,8 +612,7 @@
/obj/random/projectile/scrapped_dartgun /obj/random/projectile/scrapped_dartgun
name = "broken dartgun spawner" name = "broken dartgun spawner"
desc = "Loot for PoIs, or their mobs." desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap"
icon_state = "revolver"
/obj/random/projectile/scrapped_dartgun/item_to_spawn() /obj/random/projectile/scrapped_dartgun/item_to_spawn()
return pickweight(list( return pickweight(list(

View File

@@ -1,8 +1,6 @@
/obj/random/maintenance //Clutter and loot for maintenance and away missions /obj/random/maintenance //Clutter and loot for maintenance and away missions
name = "random maintenance item" name = "random maintenance item"
desc = "This is a random maintenance item." desc = "This is a random maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/item_to_spawn() /obj/random/maintenance/item_to_spawn()
return pick(prob(300);/obj/random/tech_supply, 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.*/ something, make sure it's not in one of the other lists.*/
name = "random clean maintenance item" name = "random clean maintenance item"
desc = "This is a 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() /obj/random/maintenance/clean/item_to_spawn()
return pick(prob(10);/obj/random/contraband, 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*/ /*Maintenance loot list. This one is for around security areas*/
name = "random security maintenance item" name = "random security maintenance item"
desc = "This is a random security maintenance item." desc = "This is a random security maintenance item."
icon = 'icons/obj/items.dmi' icon_state = "security"
icon_state = "gift1"
/obj/random/maintenance/security/item_to_spawn() /obj/random/maintenance/security/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean, 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*/ /*Maintenance loot list. This one is for around medical areas*/
name = "random medical maintenance item" name = "random medical maintenance item"
desc = "This is a random medical maintenance item." desc = "This is a random medical maintenance item."
icon = 'icons/obj/items.dmi' icon_state = "medical"
icon_state = "gift1"
/obj/random/maintenance/medical/item_to_spawn() /obj/random/maintenance/medical/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean, 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*/ /*Maintenance loot list. This one is for around medical areas*/
name = "random engineering maintenance item" name = "random engineering maintenance item"
desc = "This is a random engineering maintenance item." desc = "This is a random engineering maintenance item."
icon = 'icons/obj/items.dmi' icon_state = "tool"
icon_state = "gift1"
/obj/random/maintenance/engineering/item_to_spawn() /obj/random/maintenance/engineering/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean, 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*/ /*Maintenance loot list. This one is for around medical areas*/
name = "random research maintenance item" name = "random research maintenance item"
desc = "This is a random research maintenance item." desc = "This is a random research maintenance item."
icon = 'icons/obj/items.dmi' icon_state = "science"
icon_state = "gift1"
/obj/random/maintenance/research/item_to_spawn() /obj/random/maintenance/research/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean, 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*/ /*Maintenance loot list. This one is for around cargo areas*/
name = "random cargo maintenance item" name = "random cargo maintenance item"
desc = "This is a 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() /obj/random/maintenance/cargo/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean, return pick(prob(320);/obj/random/maintenance/clean,

View File

@@ -1,8 +1,7 @@
/obj/random/mech /obj/random/mech
name = "random mech" name = "random mech"
desc = "This is a random single mech." desc = "This is a random single mech."
icon = 'icons/mecha/mecha.dmi' icon_state = "mecha"
icon_state = "old_durand"
drop_get_turf = FALSE drop_get_turf = FALSE
//This list includes the phazon, gorilla and mauler. You might want to use something else if balance is a concern. //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 /obj/random/mech/weaker
name = "random mech" name = "random mech"
desc = "This is a random single mech. Those are less potent and more common." 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 drop_get_turf = FALSE
/obj/random/mech/weaker/item_to_spawn() /obj/random/mech/weaker/item_to_spawn()
@@ -42,8 +39,6 @@
/obj/random/mech/old /obj/random/mech/old
name = "random mech" name = "random mech"
desc = "This is a random single old mech." desc = "This is a random single old mech."
icon = 'icons/mecha/mecha.dmi'
icon_state = "old_durand"
drop_get_turf = FALSE drop_get_turf = FALSE
//Note that all of those are worn out and have slightly less maximal health than the standard. //Note that all of those are worn out and have slightly less maximal health than the standard.

View File

@@ -6,8 +6,7 @@
/obj/random/tool /obj/random/tool
name = "random tool" name = "random tool"
desc = "This is a random tool" desc = "This is a random tool"
icon = 'icons/obj/tools.dmi' icon_state = "tool"
icon_state = "welder"
/obj/random/tool/item_to_spawn() /obj/random/tool/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver, return pick(/obj/item/weapon/tool/screwdriver,
@@ -22,7 +21,7 @@
/obj/random/tool/powermaint /obj/random/tool/powermaint
name = "random powertool" name = "random powertool"
desc = "This is a random rare powertool for maintenance" desc = "This is a random rare powertool for maintenance"
icon_state = "jaws_pry" icon_state = "tool_2"
/obj/random/tool/powermaint/item_to_spawn() /obj/random/tool/powermaint/item_to_spawn()
return pick(prob(320);/obj/random/tool, return pick(prob(320);/obj/random/tool,
@@ -34,7 +33,7 @@
/obj/random/tool/power /obj/random/tool/power
name = "random powertool" name = "random powertool"
desc = "This is a random powertool" desc = "This is a random powertool"
icon_state = "jaws_pry" icon_state = "tool_2"
/obj/random/tool/power/item_to_spawn() /obj/random/tool/power/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver/power, return pick(/obj/item/weapon/tool/screwdriver/power,
@@ -45,8 +44,7 @@
/obj/random/tool/alien /obj/random/tool/alien
name = "random alien tool" name = "random alien tool"
desc = "This is a random tool" desc = "This is a random tool"
icon = 'icons/obj/abductor.dmi' icon_state = "tool_3"
icon_state = "welder"
/obj/random/tool/alien/item_to_spawn() /obj/random/tool/alien/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver/alien, return pick(/obj/item/weapon/tool/screwdriver/alien,
@@ -60,8 +58,7 @@
/obj/random/technology_scanner /obj/random/technology_scanner
name = "random scanner" name = "random scanner"
desc = "This is a random technology scanner." desc = "This is a random technology scanner."
icon = 'icons/obj/device.dmi' icon_state = "tech"
icon_state = "atmos"
/obj/random/technology_scanner/item_to_spawn() /obj/random/technology_scanner/item_to_spawn()
return pick(prob(5);/obj/item/device/t_scanner, return pick(prob(5);/obj/item/device/t_scanner,
@@ -85,8 +82,7 @@
/obj/random/bomb_supply /obj/random/bomb_supply
name = "bomb supply" name = "bomb supply"
desc = "This is a random bomb supply." desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "tech"
icon_state = "signaller"
/obj/random/bomb_supply/item_to_spawn() /obj/random/bomb_supply/item_to_spawn()
return pick(/obj/item/device/assembly/igniter, return pick(/obj/item/device/assembly/igniter,
@@ -99,8 +95,7 @@
/obj/random/toolbox /obj/random/toolbox
name = "random toolbox" name = "random toolbox"
desc = "This is a random toolbox." desc = "This is a random toolbox."
icon = 'icons/obj/storage.dmi' icon_state = "toolbox"
icon_state = "red"
/obj/random/toolbox/item_to_spawn() /obj/random/toolbox/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical, return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
@@ -111,8 +106,7 @@
/obj/random/smes_coil /obj/random/smes_coil
name = "random smes coil" name = "random smes coil"
desc = "This is a random smes coil." desc = "This is a random smes coil."
icon = 'icons/obj/power.dmi' icon_state = "cell_2"
icon_state = "smes"
/obj/random/smes_coil/item_to_spawn() /obj/random/smes_coil/item_to_spawn()
return pick(prob(4);/obj/item/weapon/smes_coil, return pick(prob(4);/obj/item/weapon/smes_coil,
@@ -122,8 +116,7 @@
/obj/random/pacman /obj/random/pacman
name = "random portable generator" name = "random portable generator"
desc = "This is a random portable generator." desc = "This is a random portable generator."
icon = 'icons/obj/power.dmi' icon_state = "cell_3"
icon_state = "portgen0"
/obj/random/pacman/item_to_spawn() /obj/random/pacman/item_to_spawn()
return pick(prob(6);/obj/machinery/power/port_gen/pacman, return pick(prob(6);/obj/machinery/power/port_gen/pacman,
@@ -161,8 +154,7 @@
/obj/random/tech_supply/component /obj/random/tech_supply/component
name = "random tech component" name = "random tech component"
desc = "This is a random machine component." desc = "This is a random machine component."
icon = 'icons/obj/items.dmi' icon_state = "tech"
icon_state = "portable_analyzer"
/obj/random/tech_supply/component/item_to_spawn() /obj/random/tech_supply/component/item_to_spawn()
return pick(prob(3);/obj/item/weapon/stock_parts/gear, return pick(prob(3);/obj/item/weapon/stock_parts/gear,
@@ -188,8 +180,7 @@
/obj/random/medical /obj/random/medical
name = "Random Medicine" name = "Random Medicine"
desc = "This is a random medical item." desc = "This is a random medical item."
icon = 'icons/obj/stacks.dmi' icon_state = "medical"
icon_state = "traumakit"
/obj/random/medical/item_to_spawn() /obj/random/medical/item_to_spawn()
return pick(prob(21);/obj/random/medical/lite, return pick(prob(21);/obj/random/medical/lite,
@@ -208,8 +199,7 @@
/obj/random/medical/pillbottle /obj/random/medical/pillbottle
name = "Random Pill Bottle" name = "Random Pill Bottle"
desc = "This is a random pill bottle." desc = "This is a random pill bottle."
icon = 'icons/obj/chemical.dmi' icon_state = "pillbottle"
icon_state = "pill_canister"
/obj/random/medical/pillbottle/item_to_spawn() /obj/random/medical/pillbottle/item_to_spawn()
return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin, return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
@@ -221,8 +211,7 @@
/obj/random/medical/lite /obj/random/medical/lite
name = "Random Medicine" name = "Random Medicine"
desc = "This is a random simple medical item." desc = "This is a random simple medical item."
icon = 'icons/obj/items.dmi' icon_state = "medical"
icon_state = "brutepack"
spawn_nothing_percentage = 25 spawn_nothing_percentage = 25
/obj/random/medical/lite/item_to_spawn() /obj/random/medical/lite/item_to_spawn()
@@ -240,8 +229,7 @@
/obj/random/firstaid /obj/random/firstaid
name = "Random First Aid Kit" name = "Random First Aid Kit"
desc = "This is a random first aid kit." desc = "This is a random first aid kit."
icon = 'icons/obj/storage.dmi' icon_state = "medicalkit"
icon_state = "firstaid"
/obj/random/firstaid/item_to_spawn() /obj/random/firstaid/item_to_spawn()
return pick(prob(10);/obj/item/weapon/storage/firstaid/regular, return pick(prob(10);/obj/item/weapon/storage/firstaid/regular,
@@ -255,8 +243,7 @@
/obj/random/contraband /obj/random/contraband
name = "Random Illegal Item" name = "Random Illegal Item"
desc = "Hot Stuff." desc = "Hot Stuff."
icon = 'icons/obj/items.dmi' icon_state = "sus"
icon_state = "purplecomb"
spawn_nothing_percentage = 50 spawn_nothing_percentage = 50
/obj/random/contraband/item_to_spawn() /obj/random/contraband/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/paracetamol, //VOREStation Edit, 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 /obj/random/material //Random materials for building stuff
name = "random material" name = "random material"
desc = "This is a random material." desc = "This is a random material."
icon = 'icons/obj/stacks.dmi' icon_state = "material"
icon_state = "sheet-metal_2"
/obj/random/material/item_to_spawn() /obj/random/material/item_to_spawn()
return pick(/obj/item/stack/material/steel{amount = 10}, return pick(/obj/item/stack/material/steel{amount = 10},
@@ -524,8 +510,7 @@
/obj/random/material/refined //Random materials for building stuff /obj/random/material/refined //Random materials for building stuff
name = "random refined material" name = "random refined material"
desc = "This is a random refined metal." desc = "This is a random refined metal."
icon = 'icons/obj/stacks.dmi' icon_state = "material_2"
icon_state = "sheet-adamantine_3"
/obj/random/material/refined/item_to_spawn() /obj/random/material/refined/item_to_spawn()
return pick(/obj/item/stack/material/steel{amount = 10}, return pick(/obj/item/stack/material/steel{amount = 10},
@@ -555,8 +540,7 @@
/obj/random/material/precious //Precious metals, go figure /obj/random/material/precious //Precious metals, go figure
name = "random precious metal" name = "random precious metal"
desc = "This is a small stack of a random precious metal." desc = "This is a small stack of a random precious metal."
icon = 'icons/obj/stacks.dmi' icon_state = "material_3"
icon_state = "sheet-gold_2"
/obj/random/material/precious/item_to_spawn() /obj/random/material/precious/item_to_spawn()
return pick(/obj/item/stack/material/gold{amount = 5}, return pick(/obj/item/stack/material/gold{amount = 5},
@@ -790,8 +774,7 @@
/obj/random/janusmodule /obj/random/janusmodule
name = "random janus circuit" name = "random janus circuit"
desc = "A random (possibly broken) Janus module." desc = "A random (possibly broken) Janus module."
icon = 'icons/obj/abductor.dmi' icon_state = "tech_2"
icon_state = "circuit_damaged"
/obj/random/janusmodule/item_to_spawn() /obj/random/janusmodule/item_to_spawn()
return pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion)) return pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion))

View File

@@ -5,8 +5,7 @@
/obj/random/mob /obj/random/mob
name = "Random Animal" name = "Random Animal"
desc = "This is a random animal." desc = "This is a random animal."
icon = 'icons/mob/animal.dmi' icon_state = "animal"
icon_state = "chicken_white"
var/overwrite_hostility = 0 var/overwrite_hostility = 0
@@ -68,7 +67,7 @@
/obj/random/mob/sif /obj/random/mob/sif
name = "Random Sif Animal" name = "Random Sif Animal"
desc = "This is a random cold weather animal." desc = "This is a random cold weather animal."
icon_state = "penguin" icon_state = "animal"
mob_returns_home = 1 mob_returns_home = 1
mob_wander_distance = 10 mob_wander_distance = 10
@@ -89,7 +88,7 @@
/obj/random/mob/sif/peaceful /obj/random/mob/sif/peaceful
name = "Random Peaceful Sif Animal" name = "Random Peaceful Sif Animal"
desc = "This is a random peaceful cold weather animal." desc = "This is a random peaceful cold weather animal."
icon_state = "penguin" icon_state = "animal_passive"
mob_returns_home = 1 mob_returns_home = 1
mob_wander_distance = 12 mob_wander_distance = 12
@@ -106,7 +105,7 @@
/obj/random/mob/sif/hostile /obj/random/mob/sif/hostile
name = "Random Hostile Sif Animal" name = "Random Hostile Sif Animal"
desc = "This is a random hostile cold weather 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() /obj/random/mob/sif/hostile/item_to_spawn()
return pick(prob(22);/mob/living/simple_mob/animal/sif/savik, return pick(prob(22);/mob/living/simple_mob/animal/sif/savik,
@@ -169,7 +168,7 @@
/obj/random/mob/robotic /obj/random/mob/robotic
name = "Random Robot Mob" name = "Random Robot Mob"
desc = "This is a random robot." desc = "This is a random robot."
icon_state = "drone_dead" icon_state = "robot"
overwrite_hostility = 1 overwrite_hostility = 1
@@ -217,7 +216,7 @@
/obj/random/mob/robotic/hivebot /obj/random/mob/robotic/hivebot
name = "Random Hivebot" name = "Random Hivebot"
desc = "This is a random hivebot." desc = "This is a random hivebot."
icon_state = "drone3" icon_state = "robot"
mob_faction = "hivebot" mob_faction = "hivebot"
@@ -237,18 +236,58 @@
name = "Random Mouse" name = "Random Mouse"
desc = "This is a random boring maus." desc = "This is a random boring maus."
icon_state = "mouse_gray" icon_state = "mouse_gray"
spawn_nothing_percentage = 15
/obj/random/mob/mouse/item_to_spawn() /obj/random/mob/mouse/item_to_spawn()
return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white, 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/brown,
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray, 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 // Mercs
/obj/random/mob/merc /obj/random/mob/merc
name = "Random Mercenary" name = "Random Mercenary"
desc = "This is a random PoI mercenary." desc = "This is a random PoI mercenary."
icon_state = "syndicate" icon_state = "humanoid"
mob_faction = "syndicate" mob_faction = "syndicate"
mob_returns_home = 1 mob_returns_home = 1
@@ -270,7 +309,7 @@
/obj/random/mob/merc/armored /obj/random/mob/merc/armored
name = "Random Armored Infantry Merc" name = "Random Armored Infantry Merc"
desc = "This is a random PoI exo or robot for mercs." 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() /obj/random/mob/merc/armored/item_to_spawn()
return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark, return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark,
@@ -327,6 +366,7 @@
/obj/random/mob/multiple/sifmobs /obj/random/mob/multiple/sifmobs
name = "Random Sifmob Pack" name = "Random Sifmob Pack"
desc = "A pack of random neutral sif mobs." desc = "A pack of random neutral sif mobs."
icon_state = "animal_group"
/obj/random/mob/multiple/sifmobs/item_to_spawn() /obj/random/mob/multiple/sifmobs/item_to_spawn()
return pick( return pick(

View File

@@ -104,6 +104,12 @@
return TRUE return TRUE
return FALSE return FALSE
/obj/structure/barricade/planks
name = "crude barricade"
icon_state = "barricade_planks"
health = 50
maxhealth = 50
/obj/structure/barricade/sandbag /obj/structure/barricade/sandbag
name = "sandbags" name = "sandbags"
desc = "Bags. Bags of sand. It's rough and coarse and somehow stays in the bag." desc = "Bags. Bags of sand. It's rough and coarse and somehow stays in the bag."

View File

@@ -3,6 +3,35 @@
desc = "It's a storage unit for athletic wear." desc = "It's a storage unit for athletic wear."
closet_appearance = /decl/closet_appearance/wardrobe/mixed 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( starts_with = list(
/obj/item/clothing/under/shorts/grey, /obj/item/clothing/under/shorts/grey,
/obj/item/clothing/under/shorts/black, /obj/item/clothing/under/shorts/black,
@@ -17,6 +46,9 @@
/obj/item/clothing/under/swimsuit/striped, /obj/item/clothing/under/swimsuit/striped,
/obj/item/clothing/under/swimsuit/white, /obj/item/clothing/under/swimsuit/white,
/obj/item/clothing/under/swimsuit/earth, /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/mask/snorkel = 2,
/obj/item/clothing/shoes/swimmingfins = 2) /obj/item/clothing/shoes/swimmingfins = 2)

View File

@@ -1,4 +1,5 @@
/obj/structure/girder /obj/structure/girder
name = "girder"
icon_state = "girder" icon_state = "girder"
anchored = TRUE anchored = TRUE
density = TRUE density = TRUE
@@ -418,4 +419,3 @@
/obj/structure/girder/eris /obj/structure/girder/eris
wall_type = /turf/simulated/wall/eris wall_type = /turf/simulated/wall/eris

View File

@@ -301,7 +301,7 @@
/obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE) /obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE)
. = ..() . = ..()
playsound(src, 'sound/effects/roll.ogg', 100, 1) playsound(src, 'sound/effects/roll.ogg', 100, 1)
/obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob) /obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob)

View File

@@ -132,6 +132,8 @@
corpseshoes = /obj/item/clothing/shoes/black corpseshoes = /obj/item/clothing/shoes/black
random_species = TRUE random_species = TRUE
/obj/effect/landmark/corpse/chef /obj/effect/landmark/corpse/chef
name = "Chef" name = "Chef"
corpseuniform = /obj/item/clothing/under/rank/chef corpseuniform = /obj/item/clothing/under/rank/chef
@@ -198,7 +200,7 @@
corpseid = 1 corpseid = 1
corpseidjob = "Scientist" corpseidjob = "Scientist"
corpseidaccess = "Scientist" corpseidaccess = "Scientist"
/obj/effect/landmark/corpse/security /obj/effect/landmark/corpse/security
name = "Security Officer" name = "Security Officer"
corpseradio = /obj/item/device/radio/headset/headset_sec corpseradio = /obj/item/device/radio/headset/headset_sec
@@ -212,18 +214,18 @@
corpseid = 1 corpseid = 1
corpseidjob = "Security Officer" corpseidjob = "Security Officer"
corpseidaccess = "Security Officer" corpseidaccess = "Security Officer"
/obj/effect/landmark/corpse/security/rig /obj/effect/landmark/corpse/security/rig
corpsesuit = /obj/item/clothing/suit/space/void/security corpsesuit = /obj/item/clothing/suit/space/void/security
corpsemask = /obj/item/clothing/mask/breath corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security corpsehelmet = /obj/item/clothing/head/helmet/space/void/security
corpseback = /obj/item/weapon/tank/jetpack/oxygen corpseback = /obj/item/weapon/tank/jetpack/oxygen
/obj/effect/landmark/corpse/security/rig/eva /obj/effect/landmark/corpse/security/rig/eva
corpsesuit = /obj/item/clothing/suit/space/void/security/alt corpsesuit = /obj/item/clothing/suit/space/void/security/alt
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt
corpseidjob = "Starship Security Officer" corpseidjob = "Starship Security Officer"
/obj/effect/landmark/corpse/prisoner /obj/effect/landmark/corpse/prisoner
name = "Unknown Prisoner" name = "Unknown Prisoner"
corpseuniform = /obj/item/clothing/under/color/prison corpseuniform = /obj/item/clothing/under/color/prison
@@ -247,7 +249,7 @@
corpsemask = /obj/item/clothing/mask/breath corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining
corpseback = /obj/item/weapon/tank/oxygen corpseback = /obj/item/weapon/tank/oxygen
/////////////////Vintage////////////////////// /////////////////Vintage//////////////////////
//define the basic props at this level and only change specifics for variants, e.z. //define the basic props at this level and only change specifics for variants, e.z.
@@ -337,3 +339,41 @@
corpseid = 1 corpseid = 1
corpseidjob = "Commander" corpseidjob = "Commander"
corpseidaccess = "Captain" 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"

View File

@@ -92,14 +92,17 @@
ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement
ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet
ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason 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, glass"] = /obj/item/clothing/gloves/ring/material/glass
ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood
ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic 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) gear_tweaks += new/datum/gear_tweak/path(ringtype)
/datum/gear/gloves/circuitry /datum/gear/gloves/circuitry

View File

@@ -20,28 +20,52 @@
return material return material
/obj/item/clothing/gloves/ring/material/wood/New(var/newloc) /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) /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) /obj/item/clothing/gloves/ring/material/iron/New(var/newloc)
..(newloc, "iron") ..(newloc, MAT_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")
/obj/item/clothing/gloves/ring/material/glass/New(var/newloc) /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)

View File

@@ -166,7 +166,7 @@
/obj/item/clothing/shoes/athletic /obj/item/clothing/shoes/athletic
name = "athletic shoes" 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" icon_state = "sportshoe"
addblends = "sportshoe_a" addblends = "sportshoe_a"
item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld") item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld")

View File

@@ -1020,6 +1020,25 @@
desc = "A rather skimpy cow patterned swimsuit." desc = "A rather skimpy cow patterned swimsuit."
icon_state = "swim_cow" 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 * Pyjamas

View File

@@ -98,16 +98,11 @@
if(!reagents.total_volume) if(!reagents.total_volume)
to_chat(user, "<span class='warning'>The [initial(name)] is dry!</span>") to_chat(user, "<span class='warning'>The [initial(name)] is dry!</span>")
else else
user.visible_message("\The [user] starts to wipe down [A] with [src]!") user.visible_message("[user] starts to wipe [A] with [src].")
//reagents.splash(A, 1) //get a small amount of liquid on the thing we're wiping.
update_name() update_name()
if(do_after(user,30)) if(do_after(user,30))
user.visible_message("\The [user] finishes wiping off the [A]!") user.visible_message("[user] finishes wiping [A]!")
A.clean_blood() A.on_rag_wipe(src)
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
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) /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. if(isliving(target)) //Leaving this as isliving.
@@ -121,7 +116,7 @@
var/mob/living/carbon/human/H = target var/mob/living/carbon/human/H = target
if(H.head && (H.head.body_parts_covered & FACE)) //Check human head coverage. 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>") 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. 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.do_attack_animation(src)
user.visible_message( user.visible_message(

View File

@@ -216,6 +216,9 @@
/datum/reagent/ethanol/cuba_libre /datum/reagent/ethanol/cuba_libre
price_tag = 4 price_tag = 4
/datum/reagent/ethanol/rum_and_cola
price_tag = 4
/datum/reagent/ethanol/demonsblood /datum/reagent/ethanol/demonsblood
price_tag = 4 price_tag = 4

View File

@@ -373,6 +373,10 @@ Drinks Data
glass_icon_state = "martiniglass" glass_icon_state = "martiniglass"
glass_center_of_mass = list("x"=17, "y"=8) 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 /datum/reagent/ethanol/cuba_libre
glass_icon_state = "cubalibreglass" glass_icon_state = "cubalibreglass"
glass_center_of_mass = list("x"=16, "y"=8) glass_center_of_mass = list("x"=16, "y"=8)

View File

@@ -38,6 +38,9 @@
qdel(src) qdel(src)
return 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) /obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
if(!is_open_container()) if(!is_open_container())
open(user) open(user)

View File

@@ -630,8 +630,7 @@
plastic.add_charge(total_material) plastic.add_charge(total_material)
if(material == "wood") if(material == "wood")
wood.add_charge(total_material) wood.add_charge(total_material)
else drain(-50 * digested)
drain(-50 * digested)
else if(istype(target,/obj/effect/decal/remains)) else if(istype(target,/obj/effect/decal/remains))
qdel(target) qdel(target)
drain(-100) drain(-100)
@@ -712,7 +711,7 @@
icon_state = "sleeperc" icon_state = "sleeperc"
injection_chems = list("glucose","inaprovaline","tricordrazine") injection_chems = list("glucose","inaprovaline","tricordrazine")
max_item_count = 1 max_item_count = 1
/obj/item/device/dogborg/sleeper/command //Command borg belly //CHOMP addition /obj/item/device/dogborg/sleeper/command //Command borg belly //CHOMP addition
name = "Bluespace Filing Belly" name = "Bluespace Filing Belly"
desc = "A mounted bluespace storage unit for carrying paperwork" desc = "A mounted bluespace storage unit for carrying paperwork"
@@ -729,7 +728,7 @@
desc = "A mounted drunk tank unit with fuel processor." desc = "A mounted drunk tank unit with fuel processor."
icon_state = "brewer" icon_state = "brewer"
injection_chems = null injection_chems = null
/obj/item/device/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem) //CHOMP Addition Start /obj/item/device/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem) //CHOMP Addition Start
if(patient && patient.reagents) if(patient && patient.reagents)
if(chem in injection_chems + "inaprovaline") if(chem in injection_chems + "inaprovaline")

View File

@@ -26,8 +26,8 @@
//Hoooo boy. //Hoooo boy.
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer) /datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
var/mob/living/L = ridden var/mob/living/L = ridden
var/scale_x = L.icon_scale_x var/scale_x = L.icon_scale_x * L.size_multiplier //VOREStation Edit
var/scale_y = L.icon_scale_y var/scale_y = L.icon_scale_y * L.size_multiplier //VOREStation Edit
var/list/values = list( var/list/values = list(
"[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER), "[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER),

View File

@@ -5,15 +5,16 @@
known = FALSE known = FALSE
in_space = TRUE 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) testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_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].")
/obj/effect/overmap/visitable/sector/temporary/Destroy() /obj/effect/overmap/visitable/sector/temporary/Destroy()
for(var/zlevel in map_z) for(var/zlevel in map_z)
@@ -43,7 +44,7 @@
var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf
if(istype(res)) if(istype(res))
return 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() /atom/movable/proc/lost_in_space()
for(var/atom/movable/AM in contents) for(var/atom/movable/AM in contents)
@@ -133,6 +134,8 @@
TM = get_deepspace(M.x,M.y) TM = get_deepspace(M.x,M.y)
nz = pick(TM.get_space_zlevels()) 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) var/turf/dest = locate(nx,ny,nz)
if(istype(dest)) if(istype(dest))
A.forceMove(dest) A.forceMove(dest)

View File

@@ -185,11 +185,18 @@
required_reagents = list("gin" = 2, "tonic" = 1) required_reagents = list("gin" = 2, "tonic" = 1)
result_amount = 3 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 /decl/chemical_reaction/instant/drinks/cuba_libre
name = "Cuba Libre" name = "Cuba Libre"
id = "cubalibre" id = "cubalibre"
result = "cubalibre" result = "cubalibre"
required_reagents = list("rum" = 2, "cola" = 1) required_reagents = list("rumcola" = 3, "limejuice" = 1)
result_amount = 3 result_amount = 3
/decl/chemical_reaction/instant/drinks/martini /decl/chemical_reaction/instant/drinks/martini
@@ -329,14 +336,14 @@
name = "Long Island Iced Tea" name = "Long Island Iced Tea"
id = "longislandicedtea" id = "longislandicedtea"
result = "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 result_amount = 6
/decl/chemical_reaction/instant/drinks/icedtea /decl/chemical_reaction/instant/drinks/icedtea
name = "Long Island Iced Tea" name = "Long Island Iced Tea"
id = "longislandicedtea" id = "longislandicedtea"
result = "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 result_amount = 6
/decl/chemical_reaction/instant/drinks/threemileisland /decl/chemical_reaction/instant/drinks/threemileisland

View File

@@ -3185,59 +3185,29 @@
glass_desc = "Damn, the bartender even stirred it, not shook it." glass_desc = "Damn, the bartender even stirred it, not shook it."
allergen_type = ALLERGEN_FRUIT //Made from gin(fruit) and vermouth(fruit) allergen_type = ALLERGEN_FRUIT //Made from gin(fruit) and vermouth(fruit)
/datum/reagent/ethanol/cuba_libre /datum/reagent/ethanol/cuba_libre
name = "Cuba Libre" name = "Cuba Libre"
id = "cubalibre" 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." description = "Rum, mixed with cola and a splash of lime. Viva la revolucion."
taste_description = "cola with lime" 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 nutriment_factor = 1.5 //CHOMPStation addition
color = "#3E1B00" color = "#3E1B00"
strength = 30 strength = 30
glass_name = "Cuba Libre" 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." glass_desc = "A classic mix of rum and cola."
allergen_type = ALLERGEN_STIMULANT // Cola
/datum/reagent/ethanol/demonsblood /datum/reagent/ethanol/demonsblood
name = "Demons Blood" name = "Demons Blood"

View File

@@ -224,8 +224,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.ownegg.calibrate_size() B.ownegg.calibrate_size()
B.ownegg.orient2hud() 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.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_x = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class B.ownegg.icon_scale_y = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
B.ownegg.update_transform() B.ownegg.update_transform()
if(B.ownegg.w_class > 4) if(B.ownegg.w_class > 4)
B.ownegg.slowdown = B.ownegg.w_class - 4 B.ownegg.slowdown = B.ownegg.w_class - 4

View File

@@ -139,7 +139,7 @@
if((. = ..())) if((. = ..()))
if(isbelly(item_storage)) if(isbelly(item_storage))
var/obj/belly/B = item_storage var/obj/belly/B = item_storage
. += 2 * (B.digest_brute + B.digest_burn + (B.digest_oxy)/2) . *= 3
else else
. += 30 //Organs give a little more . += 30 //Organs give a little more

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 111 KiB