Merge branch 'master' into Holoparasite-spended

This commit is contained in:
farie82
2018-10-20 13:12:15 +02:00
committed by GitHub
27 changed files with 578 additions and 1035 deletions
@@ -381,6 +381,8 @@
if(!welded)
if(open)
for(var/obj/item/W in src)
if(istype(W, /obj/item/pipe))
continue
W.forceMove(get_turf(src))
+2 -1
View File
@@ -17,7 +17,8 @@
// /datum signals
#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component)
#define COMSIG_PARENT_QDELETED "parent_qdeleted" //before a datum's Destroy() is called: ()
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_QDELETED "parent_qdeleted" //after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
// /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
+4 -6
View File
@@ -11,14 +11,12 @@
#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails.
//defines for the gc_destroyed var
#define GC_QUEUE_PREQUEUE 1
#define GC_QUEUE_CHECK 2
#define GC_QUEUE_HARDDELETE 3
#define GC_QUEUE_COUNT 3 //increase this when adding more steps.
#define GC_QUEUE_CHECK 1
#define GC_QUEUE_HARDDELETE 2
#define GC_QUEUE_COUNT 2 //increase this when adding more steps.
#define GC_QUEUED_FOR_QUEUING -1
#define GC_QUEUED_FOR_HARD_DEL -2
#define GC_CURRENTLY_BEING_QDELETED -3
#define GC_CURRENTLY_BEING_QDELETED -2
#define QDELING(X) (X.gc_destroyed)
#define QDELETED(X) (!X || QDELING(X))
+18 -49
View File
@@ -59,7 +59,6 @@ SUBSYSTEM_DEF(garbage)
msg += " | Fail:[fail_counts.Join(",")]"
..(msg)
/datum/controller/subsystem/garbage/Shutdown()
//Adds the del() log to the qdel log file
var/list/dellog = list()
@@ -86,41 +85,21 @@ SUBSYSTEM_DEF(garbage)
/datum/controller/subsystem/garbage/fire()
//the fact that this resets its processing each fire (rather then resume where it left off) is intentional.
var/queue = GC_QUEUE_PREQUEUE
var/queue = GC_QUEUE_CHECK
while(state == SS_RUNNING)
switch(queue)
if(GC_QUEUE_PREQUEUE)
HandlePreQueue()
queue = GC_QUEUE_PREQUEUE + 1
if(GC_QUEUE_CHECK)
HandleQueue(GC_QUEUE_CHECK)
queue = GC_QUEUE_CHECK + 1
if(GC_QUEUE_HARDDELETE)
HandleQueue(GC_QUEUE_HARDDELETE)
if(state == SS_PAUSED) //make us wait again before the next run.
state = SS_RUNNING
break
if(state == SS_PAUSED) //make us wait again before the next run.
state = SS_RUNNING
//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
//Don't attempt to optimize, not worth the effort.
/datum/controller/subsystem/garbage/proc/HandlePreQueue()
var/list/tobequeued = queues[GC_QUEUE_PREQUEUE]
var/static/count = 0
if(count)
var/c = count
count = 0 //so if we runtime on the Cut, we don't try again.
tobequeued.Cut(1, c + 1)
for(var/ref in tobequeued)
count++
Queue(ref, GC_QUEUE_PREQUEUE + 1)
if(MC_TICK_CHECK)
break
if(count)
tobequeued.Cut(1, count + 1)
count = 0
/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK)
if(level == GC_QUEUE_CHECK)
@@ -142,7 +121,7 @@ SUBSYSTEM_DEF(garbage)
if(!refID)
count++
if(MC_TICK_CHECK)
break
return
continue
var/GCd_at_time = queue[refID]
@@ -161,7 +140,7 @@ SUBSYSTEM_DEF(garbage)
reference_find_on_fail -= refID //It's deleted we don't care anymore.
#endif
if(MC_TICK_CHECK)
break
return
continue
// Something's still referring to the qdel'd object.
@@ -184,27 +163,20 @@ SUBSYSTEM_DEF(garbage)
if(GC_QUEUE_HARDDELETE)
HardDelete(D)
if(MC_TICK_CHECK)
break
return
continue
Queue(D, level + 1)
if(MC_TICK_CHECK)
break
return
if(count)
queue.Cut(1, count + 1)
count = 0
/datum/controller/subsystem/garbage/proc/PreQueue(datum/D)
if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
queues[GC_QUEUE_PREQUEUE] += D
D.gc_destroyed = GC_QUEUED_FOR_QUEUING
/datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_CHECK)
if(isnull(D))
return
if(D.gc_destroyed == GC_QUEUED_FOR_HARD_DEL)
level = GC_QUEUE_HARDDELETE
if(level > GC_QUEUE_COUNT)
HardDelete(D)
return
@@ -250,11 +222,6 @@ SUBSYSTEM_DEF(garbage)
message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time / 10] seconds to delete).")
postpone(time)
/datum/controller/subsystem/garbage/proc/HardQueue(datum/D)
if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
queues[GC_QUEUE_PREQUEUE] += D
D.gc_destroyed = GC_QUEUED_FOR_HARD_DEL
/datum/controller/subsystem/garbage/Recover()
if(istype(SSgarbage.queues))
for(var/i in 1 to SSgarbage.queues.len)
@@ -294,11 +261,13 @@ SUBSYSTEM_DEF(garbage)
if(isnull(D.gc_destroyed))
D.SendSignal(COMSIG_PARENT_QDELETED)
if(D.SendSignal(COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted
return
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/start_tick = world.tick_usage
var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
D.SendSignal(COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy
if(world.time != start_time)
I.slept_destroy++
else
@@ -307,7 +276,7 @@ SUBSYSTEM_DEF(garbage)
return
switch(hint)
if(QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
SSgarbage.PreQueue(D)
SSgarbage.Queue(D)
if(QDEL_HINT_IWILLGC)
D.gc_destroyed = world.time
return
@@ -327,18 +296,18 @@ SUBSYSTEM_DEF(garbage)
#endif
I.no_respect_force++
SSgarbage.PreQueue(D)
if(QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate()
SSgarbage.HardQueue(D)
SSgarbage.Queue(D)
if(QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete
SSgarbage.Queue(D, GC_QUEUE_HARDDELETE)
if(QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
SSgarbage.HardDelete(D)
if(QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
SSgarbage.PreQueue(D)
SSgarbage.Queue(D)
#ifdef TESTING
D.find_references()
#endif
if(QDEL_HINT_IFFAIL_FINDREFERENCE)
SSgarbage.PreQueue(D)
SSgarbage.Queue(D)
#ifdef TESTING
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
#endif
@@ -348,7 +317,7 @@ SUBSYSTEM_DEF(garbage)
testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
#endif
I.no_hint++
SSgarbage.PreQueue(D)
SSgarbage.Queue(D)
else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic")
@@ -463,4 +432,4 @@ SUBSYSTEM_DEF(garbage)
CHECK_TICK
#endif
#endif
#endif
@@ -347,7 +347,7 @@
G.icon_state = "[theme][color]"
G.icon_dead = "[theme][color]"
to_chat(user, "[G.magic_fluff_string].")
/obj/item/guardiancreator/choose
random = FALSE
+3
View File
@@ -391,6 +391,9 @@ Class Procs:
return ..()
/obj/machinery/proc/is_operational()
return !(stat & (NOPOWER|BROKEN|MAINT))
/obj/machinery/CheckParts(list/parts_list)
..()
RefreshParts()
File diff suppressed because it is too large Load Diff
-1
View File
@@ -180,7 +180,6 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
var/turf/simulated/floor/plating/P = pry_tile(CB, user, TRUE)
if(!istype(P))
return
update_icon()
P.attackby(T, user, params)
/turf/simulated/floor/proc/pry_tile(obj/item/C, mob/user, silent = FALSE)
@@ -15,9 +15,6 @@
/turf/simulated/floor/plating/New()
..()
icon_plating = icon_state
if(icon == 'icons/turf/floors/plating.dmi')
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/simulated/floor/plating, /turf/space)
update_icon()
/turf/simulated/floor/plating/update_icon()
@@ -25,7 +22,6 @@
return
if(!broken && !burnt)
icon_state = icon_plating //Because asteroids are 'platings' too.
underlays += image(icon, icon_state)
/turf/simulated/floor/plating/attackby(obj/item/C, mob/user, params)
if(..())
-2
View File
@@ -226,8 +226,6 @@
for(var/obj/structure/cable/C in contents)
qdel(C)
smooth_icon(src)
/turf/simulated/AfterChange(ignore_air, keep_cabling = FALSE)
..()
RemoveLattice()
+1 -1
View File
@@ -11,7 +11,7 @@ var/list/chem_t2_reagents = list(
var/list/chem_t3_reagents = list(
"ethanol", "chlorine", "potassium",
"aluminium", "radium", "fluorine",
"aluminum", "radium", "fluorine",
"iron", "fuel", "silver",
"stable_plasma"
)
+1 -1
View File
@@ -462,10 +462,10 @@ var/global/list/rockTurfEdgeCache = list(
/turf/simulated/floor/plating/airless/asteroid/New()
var/proper_name = name
..()
name = proper_name
if(prob(20))
icon_state = "asteroid[rand(0,12)]"
..()
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity, target)
switch(severity)
@@ -38,6 +38,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
var/obj/item/paicard/card = locate(href_list["device"])
if(card.pai)
return
if(usr.incapacitated() || isobserver(usr) || !card.Adjacent(usr))
return
if(istype(card,/obj/item/paicard) && istype(candidate,/datum/paiCandidate))
var/mob/living/silicon/pai/pai = new(card)
if(!candidate.name)
@@ -4,10 +4,11 @@ var/global/file_uid = 0
var/filename = "NewFile" // Placeholder. No spacebars
var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case
var/size = 1 // File size in GQ. Integers only!
var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file.
var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file.
var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means.
var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc.
var/uid // UID of this file
var/password = "" // Placeholder for password.
/datum/computer_file/New()
..()
@@ -36,4 +37,14 @@ var/global/file_uid = 0
else
temp.filename = filename
temp.filetype = filetype
return temp
temp.password = password
return temp
/datum/computer_file/proc/can_access_file(mob/user, input_password = "")
if(!password)
return TRUE
if(!input_password)
input_password = sanitize(input(user, "Please enter a password to access file '[filename]':"))
if(input_password == password)
return TRUE
return FALSE
@@ -55,7 +55,8 @@
"name" = F.filename,
"type" = F.filetype,
"size" = F.size,
"undeletable" = F.undeletable
"undeletable" = F.undeletable,
"encrypted" = !!F.password
)))
data["files"] = files
if(RHDD)
@@ -66,7 +67,8 @@
"name" = F.filename,
"type" = F.filetype,
"size" = F.size,
"undeletable" = F.undeletable
"undeletable" = F.undeletable,
"encrypted" = !!F.password
)))
data["usbfiles"] = usbfiles
@@ -83,6 +85,9 @@
switch(href_list["action"])
if("PRG_openfile")
. = 1
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
if(!F.can_access_file(usr))
return
open_file = href_list["name"]
if("PRG_newtextfile")
. = 1
@@ -197,4 +202,27 @@
if(!F || !istype(F))
return 1
var/datum/computer_file/C = F.clone(0)
HDD.store_file(C)
HDD.store_file(C)
if("PRG_encrypt")
. = 1
if(!HDD)
return 1
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
if(!F || F.undeletable)
return 1
if(F.password)
return
var/new_password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File"))
if(!new_password)
to_chat(usr, "<span class='warning'>File not encrypted.</span>")
return
F.password=new_password
if("PRG_decrypt")
. = 1
if(!HDD)
return 1
var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"])
if(!F || F.undeletable)
return 1
if(F.can_access_file(usr))
F.password = ""
@@ -192,7 +192,7 @@
/datum/reagent/medicine/styptic_powder
name = "Styptic Powder"
id = "styptic_powder"
description = "Styptic (aluminium sulfate) powder helps control bleeding and heal physical wounds."
description = "Styptic (aluminum sulfate) powder helps control bleeding and heal physical wounds."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 3
+12 -5
View File
@@ -233,12 +233,19 @@
if(!health)
spawn(0)
message_to_riders("<span class='userdanger'>Critical damage to the vessel detected, core explosion imminent!</span>")
for(var/i = 10, i >= 0; --i)
message_to_riders("<span class='warning'>[i]</span>")
if(i == 0)
explosion(loc, 2, 4, 8)
qdel(src)
for(var/i in 1 to 3)
var/count = 3
message_to_riders("<span class='warning'>[count]</span>")
count--
sleep(10)
if(LAZYLEN(pilot) || LAZYLEN(passengers))
for(var/M in passengers + pilot)
var/mob/living/L = M
L.adjustBruteLoss(300)
explosion(loc, 0, 0, 2)
robogibs(loc)
robogibs(loc)
qdel(src)
update_icons()
+19
View File
@@ -56,6 +56,25 @@
-->
<div class="commit sansserif">
<h2 class="date">20 October 2018</h2>
<h3 class="author">Dapocalypse updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Adds password protected files to modular computer.</li>
</ul>
<h3 class="author">Purpose updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Suit storage units now contain magboots for relevant roles.</li>
<li class="bugfix">Adds the captains jetpack to his suit storage unit, so it is now stealable again on Delta.</li>
</ul>
<h3 class="author">uc_guy updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">It is no longer possible to duplicate uvents.</li>
</ul>
<h3 class="author">variableundefined updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Plating's icon is back to the old one once again.</li>
</ul>
<h2 class="date">19 October 2018</h2>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
+11
View File
@@ -7579,3 +7579,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscdel: Removed old UI from safe
- tweak: Safe now is only Right - Left - Right. Safe is 0-99 rather than 0-71.
- imageadd: Added safe dial for it's nanoui.
2018-10-20:
Dapocalypse:
- rscadd: Adds password protected files to modular computer.
Purpose:
- rscadd: Suit storage units now contain magboots for relevant roles.
- bugfix: Adds the captains jetpack to his suit storage unit, so it is now stealable
again on Delta.
uc_guy:
- bugfix: It is no longer possible to duplicate uvents.
variableundefined:
- tweak: Plating's icon is back to the old one once again.
@@ -0,0 +1,4 @@
author: "craftxbox"
delete-after: True
changes:
- bugfix: "added check to make sure person downloading pAI isnt dead."
@@ -0,0 +1,4 @@
author: "Birdtalon"
delete-after: True
changes:
- tweak: "Spacepods explosions are significantly reduced."
@@ -0,0 +1,4 @@
author: "Fox McCloud"
delete-after: True
changes:
- tweak: "Updates the Garbage SS so it's less likely to induce lag"
@@ -0,0 +1,4 @@
author: "Purpose"
delete-after: True
changes:
- spellcheck: "Aluminum & Aluminium properly standardized."
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

+5
View File
@@ -32,6 +32,11 @@
{{:helper.link('DELETE', 'trash', {'action' : 'PRG_deletefile', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{:helper.link('RENAME', 'pencil', {'action' : 'PRG_rename', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{:helper.link('CLONE', 'files-o', {'action' : 'PRG_clone', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{if !value.encrypted}}
{{:helper.link('ENCRYPT', null, {'action' : 'PRG_encrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{else}}
{{:helper.link('DECRYPT', null, {'action' : 'PRG_decrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{/if}}
{{if data.usbconnected}}
{{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}}
{{/if}}