mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
This commit is contained in:
@@ -210,23 +210,14 @@ proc/listclearnulls(list/list)
|
|||||||
return (result + R.Copy(Ri, 0))
|
return (result + R.Copy(Ri, 0))
|
||||||
|
|
||||||
//Mergesort: divides up the list into halves to begin the sort
|
//Mergesort: divides up the list into halves to begin the sort
|
||||||
/proc/sortAtom(var/list/atom/L, var/order = 1, first = 1)
|
/proc/sortAtom(var/list/atom/L, var/order = 1)
|
||||||
if(isnull(L) || L.len < 2)
|
if(isnull(L) || L.len < 2)
|
||||||
if(!L)
|
|
||||||
testing("sortAtom() called with null as first parameter!")
|
|
||||||
return L
|
return L
|
||||||
if(first)
|
|
||||||
var/msg = "sortAtom() called with list([L.len]): "
|
|
||||||
for(var/x in L)
|
|
||||||
msg += "'[x]'; "
|
|
||||||
testing(msg)
|
|
||||||
var/middle = L.len / 2 + 1
|
var/middle = L.len / 2 + 1
|
||||||
return mergeAtoms(sortAtom(L.Copy(0,middle), order, 0), sortAtom(L.Copy(middle), order, 0), order)
|
return mergeAtoms(sortAtom(L.Copy(0,middle)), sortAtom(L.Copy(middle)), order)
|
||||||
|
|
||||||
//Mergsort: does the actual sorting and returns the results back to sortAtom
|
//Mergsort: does the actual sorting and returns the results back to sortAtom
|
||||||
/proc/mergeAtoms(var/list/atom/L, var/list/atom/R, var/order = 1)
|
/proc/mergeAtoms(var/list/atom/L, var/list/atom/R, var/order = 1)
|
||||||
if(!L || !R)
|
|
||||||
testing("mergeAtoms([L] ([L ? L.len : "*null*"]), [R] ([R ? R.len : "*null*"]))")
|
|
||||||
var/Li=1
|
var/Li=1
|
||||||
var/Ri=1
|
var/Ri=1
|
||||||
var/list/result = new()
|
var/list/result = new()
|
||||||
@@ -239,14 +230,8 @@ proc/listclearnulls(list/list)
|
|||||||
result += R[Ri++]
|
result += R[Ri++]
|
||||||
|
|
||||||
if(Li <= L.len)
|
if(Li <= L.len)
|
||||||
. = (result + L.Copy(Li, 0))
|
return (result + L.Copy(Li, 0))
|
||||||
if(!.)
|
return (result + R.Copy(Ri, 0))
|
||||||
testing("mergeAtoms returning [.]")
|
|
||||||
return
|
|
||||||
. = (result + R.Copy(Ri, 0))
|
|
||||||
if(!.)
|
|
||||||
testing("mergeAtoms returning [.]")
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,14 @@
|
|||||||
if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING)
|
if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING)
|
||||||
initialize()
|
initialize()
|
||||||
|
|
||||||
|
/proc/generate_debug_runtime() // Guaranteed to runtime and print a stack trace to the runtime log
|
||||||
|
var/t = 0 // BYOND won't let us do var/t = 1/0 directly, but it's fine with this.
|
||||||
|
t = 1 / t
|
||||||
|
|
||||||
/atom/movable/Del()
|
/atom/movable/Del()
|
||||||
if(isnull(gcDestroyed) && loc)
|
if(isnull(gcDestroyed) && loc)
|
||||||
testing("GC: -- [type] was deleted via del() rather than qdel() --")
|
testing("GC: -- [type] was deleted via del() rather than qdel() --")
|
||||||
|
generate_debug_runtime() // stick a stack trace in the runtime logs
|
||||||
// else if(isnull(gcDestroyed))
|
// else if(isnull(gcDestroyed))
|
||||||
// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel()
|
// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel()
|
||||||
// else
|
// else
|
||||||
|
|||||||
@@ -47,11 +47,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
|||||||
|
|
||||||
signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity
|
signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Edit by Atlantis: Commented out as emergency fix due to causing extreme delays in communications.
|
||||||
// Apply some lag based on traffic rates
|
// Apply some lag based on traffic rates
|
||||||
var/netlag = round(traffic / 50)
|
var/netlag = round(traffic / 50)
|
||||||
if(netlag > signal.data["slow"])
|
if(netlag > signal.data["slow"])
|
||||||
signal.data["slow"] = netlag
|
signal.data["slow"] = netlag
|
||||||
|
*/
|
||||||
// Loop through all linked machines and send the signal or copy.
|
// Loop through all linked machines and send the signal or copy.
|
||||||
for(var/obj/machinery/telecomms/machine in links)
|
for(var/obj/machinery/telecomms/machine in links)
|
||||||
if(filter && !istype( machine, text2path(filter) ))
|
if(filter && !istype( machine, text2path(filter) ))
|
||||||
|
|||||||
@@ -68,10 +68,7 @@
|
|||||||
|
|
||||||
if (istype(E, /datum/stack_recipe_list))
|
if (istype(E, /datum/stack_recipe_list))
|
||||||
var/datum/stack_recipe_list/srl = E
|
var/datum/stack_recipe_list/srl = E
|
||||||
if (src.get_amount() >= srl.req_amount)
|
t1 += "<a href='?src=\ref[src];sublist=[i]'>[srl.title]</a>"
|
||||||
t1 += "<a href='?src=\ref[src];sublist=[i]'>[srl.title] ([srl.req_amount] [src.singular_name]\s)</a>"
|
|
||||||
else
|
|
||||||
t1 += "[srl.title] ([srl.req_amount] [src.singular_name]\s)<br>"
|
|
||||||
|
|
||||||
if (istype(E, /datum/stack_recipe))
|
if (istype(E, /datum/stack_recipe))
|
||||||
var/datum/stack_recipe/R = E
|
var/datum/stack_recipe/R = E
|
||||||
@@ -360,8 +357,6 @@
|
|||||||
/datum/stack_recipe_list
|
/datum/stack_recipe_list
|
||||||
var/title = "ERROR"
|
var/title = "ERROR"
|
||||||
var/list/recipes = null
|
var/list/recipes = null
|
||||||
var/req_amount = 1
|
New(title, recipes)
|
||||||
New(title, recipes, req_amount = 1)
|
|
||||||
src.title = title
|
src.title = title
|
||||||
src.recipes = recipes
|
src.recipes = recipes
|
||||||
src.req_amount = req_amount
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
|
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
|
||||||
), 5)
|
))
|
||||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
|
||||||
), 2)
|
))
|
||||||
|
|
||||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
||||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
|
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||||
), 4)
|
))
|
||||||
|
|
||||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
|
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
|
||||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
|
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
|
|
||||||
/material/sandstone/generate_recipes()
|
/material/sandstone/generate_recipes()
|
||||||
..()
|
..()
|
||||||
recipes += new/datum/stack_recipe("pile of dirt", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||||
|
|
||||||
/material/plastic/generate_recipes()
|
/material/plastic/generate_recipes()
|
||||||
..()
|
..()
|
||||||
@@ -122,4 +122,4 @@
|
|||||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red), \
|
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red), \
|
||||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
||||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
||||||
), 3)
|
))
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ var/list/name_to_material
|
|||||||
weight = 15
|
weight = 15
|
||||||
door_icon_base = "stone"
|
door_icon_base = "stone"
|
||||||
destruction_desc = "shatters"
|
destruction_desc = "shatters"
|
||||||
window_options = list("One Direction", "Full Window")
|
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||||
created_window = /obj/structure/window/basic
|
created_window = /obj/structure/window/basic
|
||||||
wire_product = /obj/item/stack/light_w
|
wire_product = /obj/item/stack/light_w
|
||||||
rod_product = /obj/item/stack/material/glass/reinforced
|
rod_product = /obj/item/stack/material/glass/reinforced
|
||||||
@@ -417,9 +417,8 @@ var/list/name_to_material
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
var/build_path = /obj/structure/windoor_assembly
|
var/build_path = /obj/structure/windoor_assembly
|
||||||
var/sheets_needed = 4
|
var/sheets_needed = window_options[choice]
|
||||||
if(choice == "Windoor")
|
if(choice == "Windoor")
|
||||||
sheets_needed = 5
|
|
||||||
build_dir = user.dir
|
build_dir = user.dir
|
||||||
else
|
else
|
||||||
build_path = created_window
|
build_path = created_window
|
||||||
@@ -450,7 +449,7 @@ var/list/name_to_material
|
|||||||
weight = 30
|
weight = 30
|
||||||
stack_origin_tech = "materials=2"
|
stack_origin_tech = "materials=2"
|
||||||
composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750)
|
composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750)
|
||||||
window_options = list("One Direction", "Full Window", "Windoor")
|
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 5)
|
||||||
created_window = /obj/structure/window/reinforced
|
created_window = /obj/structure/window/reinforced
|
||||||
wire_product = null
|
wire_product = null
|
||||||
rod_product = null
|
rod_product = null
|
||||||
|
|||||||
@@ -1023,22 +1023,28 @@
|
|||||||
|
|
||||||
return(visible_implants)
|
return(visible_implants)
|
||||||
|
|
||||||
|
/mob/living/carbon/human/embedded_needs_process()
|
||||||
|
for(var/obj/item/organ/external/organ in src.organs)
|
||||||
|
for(var/obj/item/O in organ.implants)
|
||||||
|
if(!istype(O, /obj/item/weapon/implant)) //implant type items do not cause embedding effects, see handle_embedded_objects()
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/handle_embedded_objects()
|
/mob/living/carbon/human/proc/handle_embedded_objects()
|
||||||
|
|
||||||
for(var/obj/item/organ/external/organ in src.organs)
|
for(var/obj/item/organ/external/organ in src.organs)
|
||||||
if(organ.status & ORGAN_SPLINTED) //Splints prevent movement.
|
if(organ.status & ORGAN_SPLINTED) //Splints prevent movement.
|
||||||
continue
|
continue
|
||||||
for(var/obj/item/weapon/O in organ.implants)
|
for(var/obj/item/O in organ.implants)
|
||||||
if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad.
|
if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad.
|
||||||
// All kinds of embedded objects cause bleeding.
|
// All kinds of embedded objects cause bleeding.
|
||||||
var/msg = null
|
if(species.flags & NO_PAIN)
|
||||||
switch(rand(1,3))
|
src << "<span class='warning'>You feel [O] moving inside your [organ.name].</span>"
|
||||||
if(1)
|
else
|
||||||
msg ="<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>"
|
var/msg = pick( \
|
||||||
if(2)
|
"<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>", \
|
||||||
msg ="<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>"
|
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>", \
|
||||||
if(3)
|
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>")
|
||||||
msg ="<span class='warning'>[O] in your [organ.name] twists painfully as you move.</span>"
|
|
||||||
src << msg
|
src << msg
|
||||||
|
|
||||||
organ.take_damage(rand(1,3), 0, 0)
|
organ.take_damage(rand(1,3), 0, 0)
|
||||||
|
|||||||
@@ -134,11 +134,12 @@
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if(E.is_broken() || E.is_dislocated())
|
if(E.is_broken() || E.is_dislocated())
|
||||||
if(E.body_part == HAND_LEFT)
|
switch(E.body_part)
|
||||||
|
if(HAND_LEFT, ARM_LEFT)
|
||||||
if(!l_hand)
|
if(!l_hand)
|
||||||
continue
|
continue
|
||||||
drop_from_inventory(l_hand)
|
drop_from_inventory(l_hand)
|
||||||
else
|
if(HAND_RIGHT, ARM_RIGHT)
|
||||||
if(!r_hand)
|
if(!r_hand)
|
||||||
continue
|
continue
|
||||||
drop_from_inventory(r_hand)
|
drop_from_inventory(r_hand)
|
||||||
@@ -147,12 +148,12 @@
|
|||||||
emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
|
emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
|
||||||
|
|
||||||
else if(E.is_malfunctioning())
|
else if(E.is_malfunctioning())
|
||||||
|
switch(E.body_part)
|
||||||
if(E.body_part == HAND_LEFT)
|
if(HAND_LEFT, ARM_LEFT)
|
||||||
if(!l_hand)
|
if(!l_hand)
|
||||||
continue
|
continue
|
||||||
drop_from_inventory(l_hand)
|
drop_from_inventory(l_hand)
|
||||||
else
|
if(HAND_RIGHT, ARM_RIGHT)
|
||||||
if(!r_hand)
|
if(!r_hand)
|
||||||
continue
|
continue
|
||||||
drop_from_inventory(r_hand)
|
drop_from_inventory(r_hand)
|
||||||
|
|||||||
@@ -1015,6 +1015,10 @@
|
|||||||
|
|
||||||
// Check everything else.
|
// Check everything else.
|
||||||
|
|
||||||
|
//Periodically double-check embedded_flag
|
||||||
|
if(embedded_flag && !(life_tick % 10))
|
||||||
|
if(!embedded_needs_process())
|
||||||
|
embedded_flag = 0
|
||||||
//Vision
|
//Vision
|
||||||
var/obj/item/organ/vision
|
var/obj/item/organ/vision
|
||||||
if(species.vision_organ)
|
if(species.vision_organ)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
/obj/item/weapon/firealarm_electronics,
|
/obj/item/weapon/firealarm_electronics,
|
||||||
/obj/item/weapon/airalarm_electronics,
|
/obj/item/weapon/airalarm_electronics,
|
||||||
/obj/item/weapon/airlock_electronics,
|
/obj/item/weapon/airlock_electronics,
|
||||||
|
/obj/item/weapon/tracker_electronics,
|
||||||
/obj/item/weapon/module/power_control,
|
/obj/item/weapon/module/power_control,
|
||||||
/obj/item/weapon/stock_parts,
|
/obj/item/weapon/stock_parts,
|
||||||
/obj/item/frame,
|
/obj/item/frame,
|
||||||
|
|||||||
@@ -59,8 +59,13 @@
|
|||||||
var/mob/dead/observer/spook = locate() in range(src,5)
|
var/mob/dead/observer/spook = locate() in range(src,5)
|
||||||
if(spook)
|
if(spook)
|
||||||
var/turf/T = spook.loc
|
var/turf/T = spook.loc
|
||||||
var/obj/O = pick(T.contents)
|
var/list/visible = list()
|
||||||
visible_emote("suddenly stops and stares at something unseen[istype(O) ? " near [O]":""].")
|
for(var/obj/O in T.contents)
|
||||||
|
if(!O.invisibility && O.name)
|
||||||
|
visible += O
|
||||||
|
if(visible.len)
|
||||||
|
var/atom/A = pick(visible)
|
||||||
|
visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
|
||||||
|
|
||||||
/mob/living/simple_animal/cat/proc/handle_movement_target()
|
/mob/living/simple_animal/cat/proc/handle_movement_target()
|
||||||
//if our target is neither inside a turf or inside a human(???), stop
|
//if our target is neither inside a turf or inside a human(???), stop
|
||||||
|
|||||||
@@ -872,6 +872,9 @@
|
|||||||
visible_implants += O
|
visible_implants += O
|
||||||
return visible_implants
|
return visible_implants
|
||||||
|
|
||||||
|
/mob/proc/embedded_needs_process()
|
||||||
|
return (embedded.len > 0)
|
||||||
|
|
||||||
mob/proc/yank_out_object()
|
mob/proc/yank_out_object()
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set name = "Yank out object"
|
set name = "Yank out object"
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
var/joint = "joint" // Descriptive string used in dislocation.
|
var/joint = "joint" // Descriptive string used in dislocation.
|
||||||
var/amputation_point // Descriptive string used in amputation.
|
var/amputation_point // Descriptive string used in amputation.
|
||||||
var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ.
|
var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ.
|
||||||
var/can_grasp
|
var/can_grasp //It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
|
||||||
var/can_stand
|
var/can_stand
|
||||||
|
|
||||||
/obj/item/organ/external/Destroy()
|
/obj/item/organ/external/Destroy()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user