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