"
dat += "
R&D Console Device Linkage Menu:
"
dat += "
Re-sync with Nearby Devices"
dat += "
Linked Devices:
"
@@ -803,12 +811,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "
Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
"
dat += "
Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
"
- dat += "
"
dat += list_categories(linked_lathe.categories, 3.15)
@@ -957,12 +965,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Material Amount: [linked_imprinter.TotalMaterials()]
"
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
"
- dat += "
"
dat += list_categories(linked_imprinter.categories, 4.15)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 62dd6e45bac..fb56e869fe8 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -177,7 +177,8 @@
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
desc = "Used to manage access to research and manufacturing databases."
- icon_state = "rdcomp"
+ icon_screen = "rdcomp"
+ icon_keyboard = "rd_key"
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
var/list/servers = list()
@@ -192,7 +193,7 @@
add_fingerprint(usr)
usr.set_machine(src)
if(!src.allowed(usr) && !emagged)
- usr << "
You do not have the required access level."
+ usr << "
You do not have the required access level."
return
if(href_list["main"])
@@ -269,7 +270,7 @@
if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
continue
dat += "[S.name] || "
- dat += "
Access Rights | "
+ dat += "
Access Rights | "
dat += "
Data Management"
if(badmin) dat += " |
Server-to-Server Transfer"
dat += "
"
@@ -310,7 +311,7 @@
dat += "[temp_server.name] Server to Server Transfer
"
dat += "Send Data to what server?
"
for(var/obj/machinery/r_n_d/server/S in servers)
- dat += "[S.name]
(Transfer)"
+ dat += "[S.name]
(Transfer)"
dat += "
Main Menu"
user << browse("
R&D Server Control
[dat]", "window=server_control;size=575x400")
onclose(user, "server_control")
@@ -325,7 +326,7 @@
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
- user << "
You you disable the security protocols."
+ user << "
You you disable the security protocols."
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index f6693492790..19892b22d1e 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -18,10 +18,10 @@
/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/slimesteroid2))
if(enhanced == 1)
- user << "
This extract has already been enhanced!"
+ user << "
This extract has already been enhanced!"
return ..()
if(Uses == 0)
- user << "
You can't enhance a used extract!"
+ user << "
You can't enhance a used extract!"
return ..()
user <<"
You apply the enhancer. It now has triple the amount of uses."
Uses = 3
@@ -138,8 +138,8 @@
M.docile = 1
M.nutrition = 700
- M <<"
You absorb the potion and feel your intense desire to feed melt away."
- user <<"
You feed the slime the potion, removing it's hunger and calming it."
+ M <<"
You absorb the potion and feel your intense desire to feed melt away."
+ user <<"
You feed the slime the potion, removing it's hunger and calming it."
var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN)
if (!newname)
@@ -220,16 +220,16 @@
/obj/item/weapon/slimesteroid/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob)
if(!isslime(M))//If target is not a slime.
- user << "
The steroid only works on baby slimes!"
+ user << "
The steroid only works on baby slimes!"
return ..()
if(M.is_adult) //Can't tame adults
- user << "
Only baby slimes can use the steroid!"
+ user << "
Only baby slimes can use the steroid!"
return..()
if(M.stat)
- user << "
The slime is dead!"
+ user << "
The slime is dead!"
return..()
if(M.cores == 3)
- user <<"
The slime already has the maximum amount of extract!"
+ user <<"
The slime already has the maximum amount of extract!"
return..()
user <<"
You feed the slime the steroid. It now has triple the amount of extract."
@@ -252,10 +252,10 @@
/*afterattack(obj/target, mob/user , flag)
if(istype(target, /obj/item/slime_extract))
if(target.enhanced == 1)
- user << "
This extract has already been enhanced!"
+ user << "
This extract has already been enhanced!"
return ..()
if(target.Uses == 0)
- user << "
You can't enhance a used extract!"
+ user << "
You can't enhance a used extract!"
return ..()
user <<"You apply the enhancer. It now has triple the amount of uses."
target.Uses = 3
@@ -271,13 +271,13 @@
/obj/item/weapon/slimestabilizer/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob)
if(!isslime(M))
- user << "
The stabilizer only works on slimes!"
+ user << "
The stabilizer only works on slimes!"
return ..()
if(M.stat)
- user << "
The slime is dead!"
+ user << "
The slime is dead!"
return..()
if(M.mutation_chance == 0)
- user <<"
The slime already has no chance of mutating!"
+ user <<"
The slime already has no chance of mutating!"
return..()
user <<"
You feed the slime the stabilizer. It is now less likely to mutate."
@@ -292,16 +292,16 @@
/obj/item/weapon/slimemutator/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob)
if(!isslime(M))
- user << "
The mutator only works on slimes!"
+ user << "
The mutator only works on slimes!"
return ..()
if(M.stat)
- user << "
The slime is dead!"
+ user << "
The slime is dead!"
return..()
if(M.mutator_used)
- user << "
This slime has already consumed a mutator, any more would be far too unstable!"
+ user << "
This slime has already consumed a mutator, any more would be far too unstable!"
return..()
if(M.mutation_chance == 100)
- user <<"
The slime is already guaranteed to mutate!"
+ user <<"
The slime is already guaranteed to mutate!"
return..()
user <<"
You feed the slime the mutator. It is now more likely to mutate."
@@ -418,3 +418,104 @@
G.key = ghost.key
G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost."
qdel(src)
+
+
+
+
+/obj/effect/timestop
+ anchored = 1
+ name = "chronofield"
+ desc = "ZA WARUDO"
+ icon = 'icons/effects/160x160.dmi'
+ icon_state = "time"
+ layer = FLY_LAYER
+ pixel_x = -64
+ pixel_y = -64
+ unacidable = 1
+ var/mob/living/immune = null // the one who creates the timestop is immune
+ var/freezerange = 2
+ var/duration = 140
+ alpha = 125
+
+/obj/effect/timestop/New()
+ ..()
+ timestop()
+
+
+/obj/effect/timestop/proc/timestop()
+ playsound(get_turf(src), 'sound/magic/TIMEPARADOX2.ogg', 100, 1, -1)
+ while(loc)
+ if(duration)
+ for(var/mob/living/M in orange (freezerange, src.loc))
+ if(M == immune)
+ continue
+ M.stunned = 10
+ M.anchored = 1
+ if(istype(M, /mob/living/simple_animal/hostile))
+ var/mob/living/simple_animal/hostile/H = M
+ H.AIStatus = AI_OFF
+ H.LoseTarget()
+ continue
+ for(var/obj/item/projectile/P in orange (freezerange, src.loc))
+ P.paused = TRUE
+ duration --
+ else
+ for(var/mob/living/M in orange (freezerange+2, src.loc)) //longer range incase they lag out of it or something
+ M.stunned = 0
+ M.anchored = 0
+ if(istype(M, /mob/living/simple_animal/hostile))
+ var/mob/living/simple_animal/hostile/H = M
+ H.AIStatus = initial(H.AIStatus)
+ continue
+ for(var/obj/item/projectile/P in orange(freezerange+2, src.loc))
+ P.paused = FALSE
+ qdel(src)
+ return
+ sleep(1)
+
+
+
+/obj/item/stack/tile/bluespace
+ name = "bluespace floor tile"
+ singular_name = "floor tile"
+ desc = "Through a series of micro-teleports these tiles let people move at incredible speeds"
+ icon_state = "tile-bluespace"
+ w_class = 3.0
+ force = 6.0
+ m_amt = 937.5
+ throwforce = 10.0
+ throw_speed = 3
+ throw_range = 7
+ flags = CONDUCT
+ max_amount = 60
+ turf_type = /turf/simulated/floor/bluespace
+
+
+/turf/simulated/floor/bluespace
+ slowdown = -1
+ icon_state = "bluespace"
+ desc = "Through a series of micro-teleports these tiles let people move at incredible speeds"
+ floor_tile = /obj/item/stack/tile/bluespace
+
+
+/obj/item/stack/tile/sepia
+ name = "sepia floor tile"
+ singular_name = "floor tile"
+ desc = "Time seems to flow very slowly around these tiles"
+ icon_state = "tile-sepia"
+ w_class = 3.0
+ force = 6.0
+ m_amt = 937.5
+ throwforce = 10.0
+ throw_speed = 3
+ throw_range = 7
+ flags = CONDUCT
+ max_amount = 60
+ turf_type = /turf/simulated/floor/sepia
+
+
+/turf/simulated/floor/sepia
+ slowdown = 2
+ icon_state = "sepia"
+ desc = "Time seems to flow very slowly around these tiles"
+ floor_tile = /obj/item/stack/tile/sepia
\ No newline at end of file
diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm
index 62aac98be5e..75ae34bc050 100644
--- a/code/modules/scripting/Implementations/Telecomms.dm
+++ b/code/modules/scripting/Implementations/Telecomms.dm
@@ -308,7 +308,7 @@ var/const/SIGNAL_COOLDOWN = 20 // 2 seconds
ERROR("[src] has no radio.")
return
- if((!message || message == "") && message != 0)
+ if((!message) && message != 0)
message = "*beep*"
if(!source)
source = "[html_encode(uppertext(S.id))]"
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index b60a0d7bfe5..673e7176eaa 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -482,8 +482,8 @@
/obj/machinery/computer/shuttle
name = "Shuttle Console"
- icon = 'icons/obj/computer.dmi'
- icon_state = "shuttle"
+ icon_screen = "shuttle"
+ icon_keyboard = "tech_key"
req_access = list( )
circuit = /obj/item/weapon/circuitboard/shuttle
var/shuttleId
@@ -544,7 +544,7 @@
if(!emagged)
src.req_access = list()
emagged = 1
- user << "
You fried the consoles ID checking system."
+ user << "
You fried the consoles ID checking system."
/obj/machinery/computer/shuttle/ferry
name = "transport ferry console"
@@ -567,7 +567,7 @@
return
cooldown = 1
usr << "
Your request has been recieved by Centcom."
- admins << "
FERRY: [key_name(usr)] (?) (JMP) (Move Ferry) is requesting to move the transport ferry to Centcom."
+ admins << "
FERRY: [key_name_admin(usr)] (?) (FLW) (Move Ferry) is requesting to move the transport ferry to Centcom."
spawn(600) //One minute cooldown
cooldown = 0
diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm
index 3f4dcb5210c..ced4776f535 100644
--- a/code/modules/surgery/cybernetic_implants.dm
+++ b/code/modules/surgery/cybernetic_implants.dm
@@ -70,9 +70,10 @@
if(full)
user << "
You can't seem to implant anything else into the [target]'s [target_zone]!"
else
+ if(!user.drop_item())
+ return
user.visible_message("[user] inserts [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone]!", "
You insert [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone].")
implant.owner = target
implant.function()
- user.drop_item()
target.internal_organs |= implant
implant.loc = target
\ No newline at end of file
diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm
index 63327f69d70..662a4304d3e 100644
--- a/code/modules/surgery/helpers.dm
+++ b/code/modules/surgery/helpers.dm
@@ -48,6 +48,7 @@
user.visible_message("[user] drapes [I] over [M]'s [parse_zone(procedure.location)] to prepare for \an [procedure.name].", "
You drape [I] over [M]'s [parse_zone(procedure.location)] to prepare for \an [procedure.name].")
add_logs(user, M, "operated", addition="Operation type: [procedure.name]")
+ feedback_add_details("surgery_initiated","[procedure.name]")
return 1
else
user << "
You need to expose [M]'s [procedure.location] first!"
diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm
index 950c4a536b0..22d168044c0 100644
--- a/code/modules/surgery/limb augmentation.dm
+++ b/code/modules/surgery/limb augmentation.dm
@@ -71,6 +71,8 @@
user << "
That is the wrong robotic limb for this body part."
return 0
+ if(!user.drop_item())
+ return 0
var/mob/living/carbon/human/H = target
user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!", "
You successfully augment [target]'s [parse_zone(target_zone)].")
L.loc = get_turf(target)
@@ -92,7 +94,6 @@
H.organs += new /obj/item/organ/limb/robot/chest(src)
for(var/datum/disease/appendicitis/A in H.viruses) //If they already have Appendicitis, Remove it
A.cure(1)
- user.drop_item()
qdel(tool)
H.update_damage_overlays(0)
H.update_augments() //Gives them the Cyber limb overlay
diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm
index 5a6d84c3019..a54491e6f41 100644
--- a/code/modules/surgery/organs/cybernetic_implants.dm
+++ b/code/modules/surgery/organs/cybernetic_implants.dm
@@ -75,7 +75,7 @@
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
eye_color = "000"
implant_color = "#000000"
- origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2"
+ origin_tech = "materials=6;programming=4;biotech=6;magnets=5"
/obj/item/cybernetic_implant/eyes/xray/function()
if(!owner)
@@ -95,7 +95,7 @@
eye_color = "FC0"
implant_color = "#FFCC00"
flash_protect = -1
- origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2;syndicate=4"
+ origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4"
/obj/item/cybernetic_implant/eyes/thermals/function()
if(!owner)
@@ -295,7 +295,7 @@
/obj/item/cybernetic_implant/chest/nutriment/plus
name = "Nutriment pump implant PLUS"
- desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
+ desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
icon_state = "chest_implant"
implant_color = "#006607"
hunger_threshold = NUTRITION_LEVEL_HUNGRY
@@ -307,4 +307,81 @@
if(!owner)
return
owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning
- owner << "
You feel like your insides are burning."
+ owner << "
You feel like your insides are burning."
+
+
+/obj/item/cybernetic_implant/chest/reviver
+ name = "Reviver implant"
+ desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!"
+ icon_state = "chest_implant"
+ implant_color = "#AD0000"
+ origin_tech = "materials=6;programming=3;biotech=6;syndicate=4"
+ var/revive_cost = 0
+ var/reviving = 0
+
+/obj/item/cybernetic_implant/chest/reviver/function()
+ SSobj.processing |= src
+
+/obj/item/cybernetic_implant/chest/reviver/process()
+ if(!owner)
+ SSobj.processing.Remove(src)
+ qdel(src)
+ return
+
+ if(reviving)
+ if(owner.stat == UNCONSCIOUS)
+ spawn(30)
+ if(prob(90) && owner.getOxyLoss())
+ owner.adjustOxyLoss(-3)
+ revive_cost += 0.1
+ if(prob(75) && owner.getBruteLoss())
+ owner.adjustBruteLoss(-1)
+ revive_cost += 0.5
+ if(prob(75) && owner.getFireLoss())
+ owner.adjustFireLoss(-1)
+ revive_cost += 0.5
+ if(prob(40) && owner.getToxLoss())
+ owner.adjustToxLoss(-1)
+ revive_cost++
+ else
+ revive_cost = (revive_cost * 100) + world.time
+ reviving = 0
+ return
+
+ if(revive_cost > world.time)
+ return
+ if(owner.stat != UNCONSCIOUS)
+ return
+ if(owner.suiciding)
+ SSobj.processing.Remove(src)
+ return
+
+ revive_cost = 0
+ reviving = 1
+
+/obj/item/cybernetic_implant/chest/reviver/emp_act(severity)
+ revive_cost = world.time + 200
+ if(prob(50 / severity))
+ owner.heart_attack = 1
+ spawn(600 / severity)
+ owner.heart_attack = 0
+
+
+//BOX O' IMPLANTS
+
+/obj/item/weapon/storage/box/cyber_implants
+ name = "boxed cybernetic implants"
+ desc = "A sleek, sturdy box."
+ icon_state = "cyber_implants"
+ var/list/boxed = list(/obj/item/cybernetic_implant/eyes/xray,/obj/item/cybernetic_implant/eyes/thermals,
+ /obj/item/cybernetic_implant/brain/anti_drop, /obj/item/cybernetic_implant/brain/anti_stun,
+ /obj/item/cybernetic_implant/chest/nutriment/plus, /obj/item/cybernetic_implant/chest/reviver)
+ var/amount = 5
+
+/obj/item/weapon/storage/box/cyber_implants/New()
+ ..()
+ var/i
+ var/implant
+ for(i = 0, i < amount, i++)
+ implant = pick(boxed)
+ new implant(src)
\ No newline at end of file
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index df88239994d..2025f3c155b 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -188,4 +188,12 @@
for(var/obj/item/organ/limb/L in organs)
for(var/obj/item/I in L.embedded_objects)
L.embedded_objects -= I
- I.loc = T
\ No newline at end of file
+ I.loc = T
+
+ clear_alert("embeddedobject")
+
+/mob/living/carbon/human/proc/has_embedded_objects()
+ . = 0
+ for(var/obj/item/organ/limb/L in organs)
+ for(var/obj/item/I in L.embedded_objects)
+ return 1
\ No newline at end of file
diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm
index 33968dd8968..f8e7de333d9 100644
--- a/code/modules/surgery/remove_embedded_object.dm
+++ b/code/modules/surgery/remove_embedded_object.dm
@@ -33,6 +33,9 @@
I.loc = get_turf(H)
L.embedded_objects -= I
+ if(!H.has_embedded_objects())
+ H.clear_alert("embeddedobject")
+
if(objects > 0)
user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L.getDisplayName()]!", "
You sucessfully remove [objects] objects from [H]'s [L.getDisplayName()].")
else
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 042832894d7..e630e7da48e 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -43,7 +43,7 @@
Handle_Multi_Loc(user, target)
preop(user, target, target_zone, tool)
- if(do_after(user, time))
+ if(do_after(user, time, target = target))
var/advance = 0
var/prob_chance = 100
@@ -73,17 +73,20 @@
/datum/surgery_step/proc/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] succeeds!", "
You succeed.")
+ feedback_add_details("surgery_step_success","[src.type]")
return 1
/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- H.apply_damage(75,"brute","[target_zone]")
+ if(ishuman(target) || ismonkey(target) || isalienadult(target))
+ var/mob/living/carbon/M = target
+ M.apply_damage(75,"brute","[target_zone]")
user.visible_message("[user] saws [target]'s [parse_zone(target_zone)] open!", "
You saw [target]'s [parse_zone(target_zone)] open.")
+ feedback_add_details("surgery_step_success","[src.type]")
return 1
/datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("
[user] screws up!", "
You screw up!")
+ feedback_add_details("surgery_step_failed","[src.type]")
return 0
/datum/surgery_step/close/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm
index c006939d876..74b9807dade 100644
--- a/code/modules/telesci/bscrystal.dm
+++ b/code/modules/telesci/bscrystal.dm
@@ -21,7 +21,7 @@
PoolOrNew(/obj/effect/effect/sparks, loc)
playsound(src.loc, "sparks", 50, 1)
blink_mob(user)
- user.drop_item()
+ user.unEquip(src)
qdel(src)
/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 7949dcfba88..e1f4a37d288 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -35,7 +35,7 @@
if(istype(I, /obj/item/device/multitool))
var/obj/item/device/multitool/M = I
M.buffer = src
- user << "
You save the data in the [I.name]'s buffer."
+ user << "
You save the data in the [I.name]'s buffer."
if(exchange_parts(user, I))
return
@@ -60,22 +60,22 @@
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
- user << "
\The [src] can now be moved."
+ user << "
\The [src] can now be moved."
else if(!anchored)
anchored = 1
- user << "
\The [src] is now secured."
+ user << "
\The [src] is now secured."
if(istype(W, /obj/item/weapon/screwdriver))
if(stage == 0)
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "
You unscrew the telepad's tracking beacon."
+ user << "
You unscrew the telepad's tracking beacon."
stage = 1
else if(stage == 1)
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "
You screw in the telepad's tracking beacon."
+ user << "
You screw in the telepad's tracking beacon."
stage = 0
if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
playsound(src, 'sound/items/Welder.ogg', 50, 1)
- user << "
You disassemble the telepad."
+ user << "
You disassemble the telepad."
new /obj/item/stack/sheet/metal(get_turf(src))
new /obj/item/stack/sheet/glass(get_turf(src))
qdel(src)
@@ -91,7 +91,7 @@
/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
if(user)
- user << "
Locked In"
+ user << "
Locked In"
new /obj/machinery/telepad_cargo(user.loc)
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
@@ -142,11 +142,11 @@
if(mode == 0)
mode = 1
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "
The telepad locator has become uncalibrated."
+ user << "
The telepad locator has become uncalibrated."
else
mode = 0
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "
You calibrate the telepad locator."
+ user << "
You calibrate the telepad locator."
/obj/item/weapon/rcs/emag_act(mob/user as mob)
if(!emagged)
@@ -154,4 +154,4 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
- user << "
You emag the RCS. Click on it to toggle between modes."
+ user << "
You emag the RCS. Click on it to toggle between modes."
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 6d602467fa1..0450b8109c1 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -58,7 +58,8 @@
if(crystals.len >= max_crystals)
user << "
There are not enough crystal slots."
return
- user.drop_item()
+ if(!user.drop_item())
+ return
crystals += W
W.loc = null
user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", "
You insert [W] into \the [src]'s crystal slot.")
@@ -74,7 +75,7 @@
if(M.buffer && istype(M.buffer, /obj/machinery/telepad))
telepad = M.buffer
M.buffer = null
- user << "
You upload the data from the [W.name]'s buffer."
+ user << "
You upload the data from the [W.name]'s buffer."
else
..()
diff --git a/code/orphaned procs/priority_announce.dm b/code/orphaned procs/priority_announce.dm
index e085fa783ca..3630b9d58df 100644
--- a/code/orphaned procs/priority_announce.dm
+++ b/code/orphaned procs/priority_announce.dm
@@ -6,7 +6,8 @@
if(type == "Priority")
announcement += "
Priority Announcement
"
-
+ if (title && length(title) > 0)
+ announcement += "
[html_encode(title)]
"
else if(type == "Captain")
announcement += "
Captain Announces
"
news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null)
diff --git a/config/game_options.txt b/config/game_options.txt
index cc2a9c13d1d..ff0e47dc246 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -66,8 +66,8 @@ ALERT_GREEN All threats to the station have passed. Security may not have weapon
ALERT_BLUE_UPTO The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted.
ALERT_BLUE_DOWNTO The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.
ALERT_RED_UPTO There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.
-ALERT_RED_DOWNTO The self-destruct mechanism has been deactivated, there is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised.
-ALERT_DELTA The station's self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
+ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised.
+ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
@@ -276,3 +276,22 @@ MIDROUND_ANTAG_LIFE_CHECK 0.7
#NO_SUMMON_MAGIC
#NO_SUMMON_EVENTS
+//Comment for "normal" explosions, which ignore obstacles
+//Uncomment for explosions that react to doors and walls
+REACTIONARY_EXPLOSIONS
+
+### Configure the bomb cap
+## This caps all explosions to the specified range. Used for both balance reasons and to prevent overloading the server and lagging the game out.
+## This is given as the 3rd number(light damage) in the standard (1,2,3) explosion notation. The other numbers are derived by dividing by 2 and 4.
+## eg: If you give the number 20. The bomb cap will be 5,10,20.
+## Can be any number between 4 and 128, some examples are provided below.
+
+## Default (3,7,14)
+BOMBCAP 14
+## One 'step' up (4,8,16) (recommended if you enable REACTIONARY_EXPLOSIONS above)
+#BOMBCAP 16
+## LagHell (7,14,28)
+#BOMBCAP 28
+
+
+
diff --git a/config/tips.txt b/config/tips.txt
index dd6b2f23f85..ca03cc723d6 100644
--- a/config/tips.txt
+++ b/config/tips.txt
@@ -12,7 +12,7 @@ You can drag the icon of an equipped headset or PDA onto your screen to interact
The mime's invisible wall will block electrodes and other projectiles, but beams pass straight through it like windows.
The Library system is much more robust than most people think! Mess around with it, see if you can log who takes out the books for radio-reading.
Use a pair of handcuffs on a pair of orange shoes (standard prisoner issue) to chain them together.
-Revolutionaries brainwashed by Rev leaders can have their opinions swayed back to Nanotrasen loyalty by enough heavy objects to the head.
+Revolutionaries and gangsters can have their opinions swayed back to Nanotrasen loyalty by enough heavy objects to the head.
Husked corpses that have been drained of their genomes by a changeling also lack blood in their veins, unlike burned or space frozen corpses.
The stethoscope's utility extends beyond lung and heart check-ups. They can also be used to crack certain safes.
Chloral Hydrate can be counteracted by having coffee in your system!
@@ -43,6 +43,7 @@ Blobs are extremely powerful and are impossible to defeat alone. Communicate wit
You can fight blob pieces diagonally, as they can only expand onto adjacent tiles in cardinal directions.
Security huds and secglass huds can tell you if someone is implanted with a loyalty implant. Use this to your advantage in a revolution.
Loyalty implants can only prevent someone from being turned into a cultist: unlike revolutionaries, it will not de-cult them if they have already been converted.
+Loyalty implants can only prevent someone from being turned into a gangster: unlike revolutionaries, it will not de-gang them if they have already been recruited.
Don't neglect upgrading your machines with the machine parts produced by research! These can seriously improve the efficiency of your equipment.
Cyborgs are impervious to fires and temperature, and can walk in a blazing inferno without worry. Don't shy away from setting the whole station on fire as a malfunctioning or rogue AI!
The heads of staff, especially the Head of Security and the Captain, are usually extremely difficult to kill. If one of them is your target as a traitor, plan carefully.
@@ -85,3 +86,7 @@ You can use . or # instead of : for radio channels. Building this habit reduces
While pulling something, clicking on a tile with an empty hand will move it to that tile. No more getting stuck in maint while dragging something!
Things that override clicks like decks of cards or paper bins can still be picked up by dragging them to your character. Equipped things that override click can be unequipped by dragging it to an empty hand.
In the job selection menu, from the lobby, you can use right click on the "Low/Medium/High" priority button to make it cycle backwards.
+If you stay out of camera range for 10 seconds, the AI's track on you will break.
+You can shoot cameras with bullets to disable them remotely.
+Disabling a camera with wirecutters will not cause a camera alarm, but bludgeoning it will.
+Gangs derive their power from their presence. Cleaning up gang tags is the best way to prevent them from growing out of control.
diff --git a/html/changelog.html b/html/changelog.html
index 7c401b84b21..b65266be7d1 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,253 @@
-->
+
24 June 2015
+
Ikarrus updated:
+
+ - Request Console message sent to major departments will now be broadcasted on that department's radio.
+ - Request Consoles can be used to quicly declare a security, medical, or engineering emergency.
+
+
+
23 June 2015
+
Fayrik updated:
+
+ - NanoUI is now Telekenesis aware, but due to other constraints, NanoUI interfaces are read only at a distance.
+ - Refactored all NanoUI interfaces to use a more universal proc.
+ - Adjusted the refresh time of the NanoUI SubSystem. All interfaces will update less, but register mouse clicks faster.
+ - Removed automatic updates on atmospheric pumps, canisters and tanks, making them respond to button clicks much faster.
+ - Atmos alarm reset buttons work now. Probably.
+
+
Iamgoofball updated:
+
+ - Adds a progress bar when performing actions.
+
+
Ikarrus updated:
+
+ - New gang names with tags created by Joan
+ - C4 explosive can be purchased by gangs for 10 influence.
+ - Recruitment pen cost increased to 50.
+ - Lieutenants recieve one free recruitment pen.
+ - Recruitment pens are now stealthy and no longer give a tiny prick message.
+ - Increased chance of deconversion with head trauma
+ - Recalling the shuttle now takes about a minute to work, during which you won't be able to use your gangtool.
+ - Pinpointers no longer point at dominators. Instead, dominators will beep while active.
+ - Added puffer jackets and vests.
+ - Increased gang outfit armor. It is moderately resistant to bullets now.
+ - Removed bulletproof vests from gangtool menu.
+
+
Jordie0608 updated:
+
+ - Admins can now flag ckeys to be alerted when they connect to the server.
+
+
N3X15 updated:
+
+ - Admins can now reject poor adminhelps. This will tell the player how to construct a useful adminhelp and give them back their adminhelp verb
+
+
RemieRichards updated:
+
+ - Cumulative armour damage resistance is now capped at 90%, you will now always take at bare minimum, 10% of the incoming damage.
+ - Added a system for Armour Penetration to items, it works by temporarily (It does NOT damage the armour or anything) reducing the armour values by the AP value during the attack instance.
+ - The formula for AP is Armour-ArmourPenetration = AdjustedArmour and AdjustedArmour is used for all the remaining calculations instead of Armour (Eg: 80 Melee - 15 AP = 65 Melee).
+ - The Ninja's Energy Katana has 15 AP, Xenomorphs have an inbuilt AP of 10.
+ - You can now unwrench pipes who's internal pressures are greater than that of their environment...
+ - However it will throw you away from the pipe at extreme speed! (You are warned beforehand if the pipe will do this, allowing you to cancel)
+
+
Vekter updated:
+
+ - Finally fixed immovable rods! They will now properly bisect the station (and crit anyone unlucky enough to be in their path).
+ - Increased Meteor activity detected in the vicinity of the station. Be advised that many storms may be more violent than they once were.
+ - Gravitational anomalies will now throw items at mobs in their vicinity. Take care while scanning them.
+ - Flux anomalies explode much more violently now. Get there and destroy them, or risk losing half a department.
+
+
xxalpha updated:
+
+ - Added a new Reviver implant: now it revives you from unconsciousness rather than death.
+ - Added cybernetic implants and a cybernetic implants bundle to the Nuke Ops uplink.
+ - Fixed Nutriment pump implant printing.
+ - Health Analyzers now have the ability to detect cybernetic implants.
+ - X-Ray implants are now much harder to unlock.
+
+
+
22 June 2015
+
Iamgoofball updated:
+
+ - Removed failure chance and delay when emagging an APC.
+
+
KorPhaeron updated:
+
+ - Rebalanced armor to be less effective, reducing the melee, bullet and/or laser damage reduction of all armor suits.
+
+
LaharlMontogmmery updated:
+
+ - You can now click and drag a storage container to empty it's contents into another container, disposal bin or floor tile.
+
+
Xhuis updated:
+
+ - Revenants have received a considerable overhaul.
+ - Revenants will no longer share spawn points with space carp and will spawn in locations like the morgue and prisoner transfer center.
+ - Revenants can no longer cross tiles covered in holy water.
+ - Revenants have a new ability called Defile for 30E. It will cause robots to malfunction, holy water over tiles to evaporate, and a few other effects.
+ - Upon death, revenants will appear and play a sound before rapidly fading away and leaving behind glimmering residue as evidence of their demise.
+ - This residue lingers with the essence of the revenant. If left unattended, it may reform into a new revenant. Simply scattering it is enough to stop this, but it also has high research levels.
+ - Revenants now have fluff objectives as well as a set essence goal.
+ - Revenanants will be revealed for longer when using abilities and also receive feedback on this revealing.
+ - Revenants can now only spawn via random event with a specific amount of dead mobs on the station. The default for this is 10.
+ - Revenants can no longer use abilities from inside walls.
+ - Directly lethal abilities have been removed from revenants. In addition, they can no longer harvest unconscious people, only the dead.
+
+
+
21 June 2015
+
GunHog updated:
+
+ - The Hostile Lockdown ability for Malfunctioning AIs has been nerfed. It now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds.
+ - Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy lasers instead of simply shooting faster.
+ - Nanotrasen has released an Artificial Intelligence firmware upgrade under the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants of exosuit technology, from the Ripley APLU design to even experimental Phazon units. Simply upload your AI to the exosuit's internal computer via the InteliCard device. Per safety regulations, the exosuit must have maintenance protocols enabled in order to remove an AI from it.
+ - Malfunctioning AIs may wirelessly steal mechs via a new power, Mech Domination. For 30 CPU, a Malf AI may permanently upload itself to a mech, ejecting any pilots. Malf AIs will still lose if they leave the Z-level, and the Malf will be gibbed if the mech is destroyed - they cannot be carded out of the mech or shunt to an APC.
+
+
Iamgoofball updated:
+
+ - Blobs can no longer have Morphine as their chemical.
+
+
duncathan updated:
+
+ - Heat exchangers now update their color to match that of the pipe connected to them.
+ - Heat exchangers are on longer dense.
+
+
+
20 June 2015
+
Dorsisdwarf updated:
+
+ - Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default
+ - Nuke Ops can now buy team grab-bags of bulldog ammo at a discount.
+
+
Ikarrus updated:
+
+ - Wearing your gang's outfit now increases influence and shortens takeover time faster.
+ - Added several more options for gang outfits
+ - Pinpointers will now point at active dominators.
+ - Gang outfits are now slightly armored
+ - Gang tags are now named 'graffiti' to make them harder to detect
+ - Initial takeover timer is now capped at 5 minutes (50% control)
+ - Server Operators: The default Delta Alert texts have changed. Please check if your game_options.txt is up to date.
+ - Loyalty implants now treat gangs as it treats cultists. Implants can no longer deconvert gangsters, but it can still prevent recruitments.
+ - Replaced tommy guns with 9mm 2-burst 32 mag uzis that costs 40 influence. Unlike tommy guns gangs will be able to purchase ammo for uzis.
+
+
Jordie0608 updated:
+
+ - For Admins: Jump-to-Mob (JMP) notification command replaced with Follow (FLW).
+ - Message and Follow links added to many notifications.
+ - New buttons to toggle nuke and set security level.
+ - Flamethrowers are logged in attack_log.
+
+
Thunder12345 updated:
+
+ - Combat shotguns are now semi automatic, and will be pumped automatically after firing.
+ - Combat shotgun capacity has been reduced to six shells.
+
+
Xhuis updated:
+
+ - You will now trip over securitrons if you run over them whilst they are chasing a target.
+ - An admin-spawnable drone dispenser has been added that will automatically create drone shells when supplied with materials.
+ - Airlock charges are available to traitors and will cause a lethal explosion on the next person to open the door.
+ - Nuclear operatives can now buy drum magazines for their Bulldog shotguns filled with lethal poison-filled darts.
+ - When a malfunctioning AI declares Delta, all blue tiles in its core will begin flashing red.
+ - Back-worn cloaks have been added for all heads except the HoP. LARPers rejoice!
+ - More suicide messages have been added for a few items.
+
+
+
18 June 2015
+
AnturK updated:
+
+ - Added new photo-over-pda function. Apply the photo to PDA to send it with your next message!
+
+
Ikarrus updated:
+
+ - Department Management consoles have been added to Head of Staff offices. These will enable heads to modify ID's access to their department, as well as preform demotions.
+
+
Miauw updated:
+
+ - Bullets can now damage cameras.
+ - Camera alarms now trigger 90 seconds after the first EMP pulse, instead of when all EMP pulses run out.
+ - Makes the force required to damage cameras greater than or equal to ten instead of greater than ten.
+ - Camera alarms now trigger when cameras are disabled with brute force or bullets.
+
+
Xhuis updated:
+
+ - Nanotrasen scientists have determined that a delaminating supermatter shard combining with a gravitational singularity is an extremely bad idea. They advise keeping the two as far apart as possible.
+
+
phil235 updated:
+
+ - Nerfed the xray gun. Its range is now 15 tiles.
+
+
+
15 June 2015
+
Incoming5643 updated:
+
+ - Lizards can now choose from a wide varity of physical appearances in character creation! Sprites made by WJohn. Hiss Responsibly.
+
+
Kor updated:
+
+ - A terrible new creature stalks the halls of SS13.
+ - The wizard has a new artefact related to said creature.
+ - Added a new sepia slime plasma reaction. Try it out!
+
+
spasticVerbalizer updated:
+
+ - Drones can now properly quick-equip.
+
+
+
14 June 2015
+
Ikarrus updated:
+
+ - White suits added to gang outfits
+ - Gang outfits are now free, but are now limited in stock (that replenishes over time)
+ - While attempting a Hostile Takeover, gangs do not gain influence. Instead, the takeover timer will be reduced by how many territories they control.
+ - Spraycan cost reduced to 5 influence.
+ - Recruitment Pen cooldown increased to 2 minutes, but is reduced if the enemy gang has more members than yours.
+ - Tommy guns no longer deal stamina damage.
+ - Gangtools can no longer recall the shuttle if the game mode is not Gang War
+
+
+
12 June 2015
+
Ikarrus updated:
+
+ - Gang Updates
+ - New objective: To win, Gangs must now buy a Dominator machine (50 influence) and defend it for a varying time frame.
* The location of the dominator is broadcasted to the entire station the moment it is activated
* The more territories the gang controls, the less time it will take
* Gangs no longer win by capturing territories
+ - A choice of gang outfits are now purchasable for 1 influence each
+ - Thompson SMGs aka "tommy guns" are now purchasable for 50 influence
+ - Bulletproof armor vests are now purchasable for 10 influence
+ - Gang messages are now free to send
+ - Prices of pistols and pens reduced to 20 and 30, respectively
+ - Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now.
+ - Gangs will no longer be notified how much territory the enemy controls
+
+
Incoming5643 updated:
+
+ - Growing tired of reports of slain members, the Wizard Federation has cautiously sactioned the dark path of lichdom. Beware of the powerful lich who hides his phylactery well, for he is immortal!
+ - The trick to defeating liches is to destroy either their body or their phylactery item before they can ressurect to it. The more a lich is slain the longer it will take him to make use of his phylactery and the more likely the crew is to catch him during a vunerable moment.
+ - Due to the addition of proper liching, skeletons as a choosable race from magic mirrors has been discontinued. My apologies to the powergamers. A special admin version of the mirror that allows for skeletons has also been added to the code.
+
+
Miauw updated:
+
+ - AIs have received several minor nerfs in order to increase antagonist counterplay:
+ - AI tracking is no longer instant, it takes an amount of time that increases with distance from the AI eye, up to 4 seconds. The AI detector item will light up when an AI begins tracking.
+ - A random camera failure event has been added, which will break one or two random cameras.
+ - You can no longer keep tracking people that are outside of your camera vision.
+ - Camera wires have been removed. Screwdriver a camera to open the panel, then use wirecutters to disable it or a multitool to change the focus.
+ - You can now hit cameras with items to break them. To repair a camera, simply open the panel and use wirecutters on it.
+ - Camera alerts now only happen after a camera is reactivated.
+
+
RemieRichards updated:
+
+ - New optional explosion effect ported from /vg/'s DeityLink, Explosions that are affected by Walls and Doors
+
+
+
11 June 2015
+
Cheridan updated:
+
+ - Removes the powerdrain for individiual active modules on cyborgs.
+
+
09 June 2015
Aranclanos updated:
@@ -78,6 +325,10 @@
- Hydroponics Tray: Manipulators improve water and nutrients efficiency.
- Biogenerator: Matter Bins increase storage.
+
bananacreampie updated:
+
+ - Added several new options to the ghostform sprites
+
08 June 2015
AnturK updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 23046d23fe2..7f4e20ff61e 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -2700,3 +2700,262 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
points per ore and Manipulators speed up operation time.'
- tweak: 'Hydroponics Tray: Manipulators improve water and nutrients efficiency.'
- tweak: 'Biogenerator: Matter Bins increase storage.'
+ bananacreampie:
+ - rscadd: Added several new options to the ghostform sprites
+2015-06-11:
+ Cheridan:
+ - rscdel: Removes the powerdrain for individiual active modules on cyborgs.
+2015-06-12:
+ Ikarrus:
+ - experiment:
Gang Updates
+ - rscadd: 'New objective: To win, Gangs must now buy a Dominator machine (50 influence)
+ and defend it for a varying time frame.
* The location of the dominator is
+ broadcasted to the entire station the moment it is activated
* The more territories
+ the gang controls, the less time it will take
* Gangs no longer win by capturing
+ territories'
+ - rscadd: A choice of gang outfits are now purchasable for 1 influence each
+ - rscadd: Thompson SMGs aka "tommy guns" are now purchasable for 50 influence
+ - rscadd: Bulletproof armor vests are now purchasable for 10 influence
+ - tweak: Gang messages are now free to send
+ - tweak: Prices of pistols and pens reduced to 20 and 30, respectively
+ - tweak: Gang spraycans have been made a lot less obvious. They look nearly identical
+ to regular ones, now.
+ - rscdel: Gangs will no longer be notified how much territory the enemy controls
+ Incoming5643:
+ - rscadd: Growing tired of reports of slain members, the Wizard Federation has cautiously
+ sactioned the dark path of lichdom. Beware of the powerful lich who hides his
+ phylactery well, for he is immortal!
+ - rscadd: The trick to defeating liches is to destroy either their body or their
+ phylactery item before they can ressurect to it. The more a lich is slain the
+ longer it will take him to make use of his phylactery and the more likely the
+ crew is to catch him during a vunerable moment.
+ - rscremove: Due to the addition of proper liching, skeletons as a choosable race
+ from magic mirrors has been discontinued. My apologies to the powergamers. A
+ special admin version of the mirror that allows for skeletons has also been
+ added to the code.
+ Miauw:
+ - tweak: 'AIs have received several minor nerfs in order to increase antagonist
+ counterplay:'
+ - tweak: AI tracking is no longer instant, it takes an amount of time that increases
+ with distance from the AI eye, up to 4 seconds. The AI detector item will light
+ up when an AI begins tracking.
+ - tweak: A random camera failure event has been added, which will break one or two
+ random cameras.
+ - tweak: You can no longer keep tracking people that are outside of your camera
+ vision.
+ - tweak: Camera wires have been removed. Screwdriver a camera to open the panel,
+ then use wirecutters to disable it or a multitool to change the focus.
+ - tweak: You can now hit cameras with items to break them. To repair a camera, simply
+ open the panel and use wirecutters on it.
+ - tweak: Camera alerts now only happen after a camera is reactivated.
+ RemieRichards:
+ - rscadd: New optional explosion effect ported from /vg/'s DeityLink, Explosions
+ that are affected by Walls and Doors
+2015-06-14:
+ Ikarrus:
+ - rscadd: White suits added to gang outfits
+ - tweak: Gang outfits are now free, but are now limited in stock (that replenishes
+ over time)
+ - tweak: While attempting a Hostile Takeover, gangs do not gain influence. Instead,
+ the takeover timer will be reduced by how many territories they control.
+ - tweak: Spraycan cost reduced to 5 influence.
+ - tweak: Recruitment Pen cooldown increased to 2 minutes, but is reduced if the
+ enemy gang has more members than yours.
+ - tweak: Tommy guns no longer deal stamina damage.
+ - rscdel: Gangtools can no longer recall the shuttle if the game mode is not Gang
+ War
+2015-06-15:
+ Incoming5643:
+ - rscadd: Lizards can now choose from a wide varity of physical appearances in character
+ creation! Sprites made by WJohn. Hiss Responsibly.
+ Kor:
+ - rscadd: A terrible new creature stalks the halls of SS13.
+ - rscadd: The wizard has a new artefact related to said creature.
+ - rscadd: Added a new sepia slime plasma reaction. Try it out!
+ spasticVerbalizer:
+ - bugfix: Drones can now properly quick-equip.
+2015-06-18:
+ AnturK:
+ - rscadd: Added new photo-over-pda function. Apply the photo to PDA to send it with
+ your next message!
+ Ikarrus:
+ - rscadd: Department Management consoles have been added to Head of Staff offices.
+ These will enable heads to modify ID's access to their department, as well as
+ preform demotions.
+ Miauw:
+ - tweak: Bullets can now damage cameras.
+ - tweak: Camera alarms now trigger 90 seconds after the first EMP pulse, instead
+ of when all EMP pulses run out.
+ - tweak: Makes the force required to damage cameras greater than or equal to ten
+ instead of greater than ten.
+ - tweak: Camera alarms now trigger when cameras are disabled with brute force or
+ bullets.
+ Xhuis:
+ - rscadd: Nanotrasen scientists have determined that a delaminating supermatter
+ shard combining with a gravitational singularity is an extremely bad idea. They
+ advise keeping the two as far apart as possible.
+ phil235:
+ - rscdel: Nerfed the xray gun. Its range is now 15 tiles.
+2015-06-20:
+ Dorsisdwarf:
+ - tweak: Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default
+ - rscadd: Nuke Ops can now buy team grab-bags of bulldog ammo at a discount.
+ Ikarrus:
+ - rscadd: Wearing your gang's outfit now increases influence and shortens takeover
+ time faster.
+ - rscadd: Added several more options for gang outfits
+ - rscadd: Pinpointers will now point at active dominators.
+ - tweak: Gang outfits are now slightly armored
+ - tweak: Gang tags are now named 'graffiti' to make them harder to detect
+ - tweak: Initial takeover timer is now capped at 5 minutes (50% control)
+ - tweak: 'Server Operators: The default Delta Alert texts have changed. Please check
+ if your game_options.txt is up to date.'
+ - rscdel: Loyalty implants now treat gangs as it treats cultists. Implants can no
+ longer deconvert gangsters, but it can still prevent recruitments.
+ - tweak: Replaced tommy guns with 9mm 2-burst 32 mag uzis that costs 40 influence.
+ Unlike tommy guns gangs will be able to purchase ammo for uzis.
+ Jordie0608:
+ - tweak: 'For Admins: Jump-to-Mob (JMP) notification command replaced with Follow
+ (FLW).'
+ - rscadd: Message and Follow links added to many notifications.
+ - rscadd: New buttons to toggle nuke and set security level.
+ - spellcheck: Flamethrowers are logged in attack_log.
+ Thunder12345:
+ - rscadd: Combat shotguns are now semi automatic, and will be pumped automatically
+ after firing.
+ - tweak: Combat shotgun capacity has been reduced to six shells.
+ Xhuis:
+ - rscadd: You will now trip over securitrons if you run over them whilst they are
+ chasing a target.
+ - rscadd: An admin-spawnable drone dispenser has been added that will automatically
+ create drone shells when supplied with materials.
+ - rscadd: Airlock charges are available to traitors and will cause a lethal explosion
+ on the next person to open the door.
+ - rscadd: Nuclear operatives can now buy drum magazines for their Bulldog shotguns
+ filled with lethal poison-filled darts.
+ - rscadd: When a malfunctioning AI declares Delta, all blue tiles in its core will
+ begin flashing red.
+ - rscadd: Back-worn cloaks have been added for all heads except the HoP. LARPers
+ rejoice!
+ - rscadd: More suicide messages have been added for a few items.
+2015-06-21:
+ GunHog:
+ - tweak: The Hostile Lockdown ability for Malfunctioning AIs has been nerfed. It
+ now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds.
+ - tweak: Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy
+ lasers instead of simply shooting faster.
+ - rscadd: Nanotrasen has released an Artificial Intelligence firmware upgrade under
+ the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants
+ of exosuit technology, from the Ripley APLU design to even experimental Phazon
+ units. Simply upload your AI to the exosuit's internal computer via the InteliCard
+ device. Per safety regulations, the exosuit must have maintenance protocols
+ enabled in order to remove an AI from it.
+ - rscadd: Malfunctioning AIs may wirelessly steal mechs via a new power, Mech Domination.
+ For 30 CPU, a Malf AI may permanently upload itself to a mech, ejecting any
+ pilots. Malf AIs will still lose if they leave the Z-level, and the Malf will
+ be gibbed if the mech is destroyed - they cannot be carded out of the mech or
+ shunt to an APC.
+ Iamgoofball:
+ - rscdel: Blobs can no longer have Morphine as their chemical.
+ duncathan:
+ - tweak: Heat exchangers now update their color to match that of the pipe connected
+ to them.
+ - tweak: Heat exchangers are on longer dense.
+2015-06-22:
+ Iamgoofball:
+ - rscdel: Removed failure chance and delay when emagging an APC.
+ KorPhaeron:
+ - tweak: Rebalanced armor to be less effective, reducing the melee, bullet and/or
+ laser damage reduction of all armor suits.
+ LaharlMontogmmery:
+ - rscadd: You can now click and drag a storage container to empty it's contents
+ into another container, disposal bin or floor tile.
+ Xhuis:
+ - experiment: Revenants have received a considerable overhaul.
+ - rscadd: Revenants will no longer share spawn points with space carp and will spawn
+ in locations like the morgue and prisoner transfer center.
+ - rscadd: Revenants can no longer cross tiles covered in holy water.
+ - rscadd: Revenants have a new ability called Defile for 30E. It will cause robots
+ to malfunction, holy water over tiles to evaporate, and a few other effects.
+ - rscadd: Upon death, revenants will appear and play a sound before rapidly fading
+ away and leaving behind glimmering residue as evidence of their demise.
+ - rscadd: This residue lingers with the essence of the revenant. If left unattended,
+ it may reform into a new revenant. Simply scattering it is enough to stop this,
+ but it also has high research levels.
+ - rscadd: Revenants now have fluff objectives as well as a set essence goal.
+ - tweak: Revenanants will be revealed for longer when using abilities and also receive
+ feedback on this revealing.
+ - tweak: Revenants can now only spawn via random event with a specific amount of
+ dead mobs on the station. The default for this is 10.
+ - bugfix: Revenants can no longer use abilities from inside walls.
+ - rscdel: Directly lethal abilities have been removed from revenants. In addition,
+ they can no longer harvest unconscious people, only the dead.
+2015-06-23:
+ Fayrik:
+ - rscadd: NanoUI is now Telekenesis aware, but due to other constraints, NanoUI
+ interfaces are read only at a distance.
+ - tweak: Refactored all NanoUI interfaces to use a more universal proc.
+ - tweak: Adjusted the refresh time of the NanoUI SubSystem. All interfaces will
+ update less, but register mouse clicks faster.
+ - bugfix: Removed automatic updates on atmospheric pumps, canisters and tanks, making
+ them respond to button clicks much faster.
+ - bugfix: Atmos alarm reset buttons work now. Probably.
+ Iamgoofball:
+ - rscadd: Adds a progress bar when performing actions.
+ Ikarrus:
+ - rscadd: New gang names with tags created by Joan
+ - rscadd: C4 explosive can be purchased by gangs for 10 influence.
+ - tweak: Recruitment pen cost increased to 50.
+ - rscadd: Lieutenants recieve one free recruitment pen.
+ - tweak: Recruitment pens are now stealthy and no longer give a tiny prick message.
+ - tweak: Increased chance of deconversion with head trauma
+ - tweak: Recalling the shuttle now takes about a minute to work, during which you
+ won't be able to use your gangtool.
+ - rscadd: Pinpointers no longer point at dominators. Instead, dominators will beep
+ while active.
+ - rscadd: Added puffer jackets and vests.
+ - tweak: Increased gang outfit armor. It is moderately resistant to bullets now.
+ - rscdel: Removed bulletproof vests from gangtool menu.
+ Jordie0608:
+ - rscadd: Admins can now flag ckeys to be alerted when they connect to the server.
+ N3X15:
+ - rscadd: Admins can now reject poor adminhelps. This will tell the player how to
+ construct a useful adminhelp and give them back their adminhelp verb
+ RemieRichards:
+ - tweak: Cumulative armour damage resistance is now capped at 90%, you will now
+ always take at bare minimum, 10% of the incoming damage.
+ - rscadd: Added a system for Armour Penetration to items, it works by temporarily
+ (It does NOT damage the armour or anything) reducing the armour values by the
+ AP value during the attack instance.
+ - rscadd: 'The formula for AP is Armour-ArmourPenetration = AdjustedArmour and AdjustedArmour
+ is used for all the remaining calculations instead of Armour (Eg: 80 Melee -
+ 15 AP = 65 Melee).'
+ - rscadd: The Ninja's Energy Katana has 15 AP, Xenomorphs have an inbuilt AP of
+ 10.
+ - tweak: You can now unwrench pipes who's internal pressures are greater than that
+ of their environment...
+ - rscadd: However it will throw you away from the pipe at extreme speed! (You are
+ warned beforehand if the pipe will do this, allowing you to cancel)
+ Vekter:
+ - bugfix: Finally fixed immovable rods! They will now properly bisect the station
+ (and crit anyone unlucky enough to be in their path).
+ - tweak: Increased Meteor activity detected in the vicinity of the station. Be advised
+ that many storms may be more violent than they once were.
+ - rscadd: Gravitational anomalies will now throw items at mobs in their vicinity.
+ Take care while scanning them.
+ - rscadd: Flux anomalies explode much more violently now. Get there and destroy
+ them, or risk losing half a department.
+ xxalpha:
+ - rscadd: 'Added a new Reviver implant: now it revives you from unconsciousness
+ rather than death.'
+ - rscadd: Added cybernetic implants and a cybernetic implants bundle to the Nuke
+ Ops uplink.
+ - bugfix: Fixed Nutriment pump implant printing.
+ - tweak: Health Analyzers now have the ability to detect cybernetic implants.
+ - tweak: X-Ray implants are now much harder to unlock.
+2015-06-24:
+ Ikarrus:
+ - rscadd: Request Console message sent to major departments will now be broadcasted
+ on that department's radio.
+ - rscadd: Request Consoles can be used to quicly declare a security, medical, or
+ engineering emergency.
diff --git a/html/changelogs/goofball-microbombs.yml b/html/changelogs/goofball-microbombs.yml
new file mode 100644
index 00000000000..495ec2b481f
--- /dev/null
+++ b/html/changelogs/goofball-microbombs.yml
@@ -0,0 +1,11 @@
+# Your name.
+author: Iamgoofball
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+changes:
+ - rscadd: "Changes up how Explosive Implants work."
+ - rscadd: "They have become Microbomb Implants. They cost 1 TC each. Each implant you inject increases the size of the explosion. You gib on usage, regardless of explosion size."
+ - rscadd: "A Macrobomb implant was added for 20 TC. It is the equivalent of injecting 20 microbombs."
+ - rscadd: "Nuke Ops start with microbomb implants again."
\ No newline at end of file
diff --git a/icons/effects/160x160.dmi b/icons/effects/160x160.dmi
index 57e3a81edf1..8c733232f93 100644
Binary files a/icons/effects/160x160.dmi and b/icons/effects/160x160.dmi differ
diff --git a/icons/effects/352x352.dmi b/icons/effects/352x352.dmi
new file mode 100644
index 00000000000..86b40959d56
Binary files /dev/null and b/icons/effects/352x352.dmi differ
diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi
index 5525d3b1cbf..3be0a965e70 100644
Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ
diff --git a/icons/effects/doafter_icon.dmi b/icons/effects/doafter_icon.dmi
new file mode 100644
index 00000000000..0add263e976
Binary files /dev/null and b/icons/effects/doafter_icon.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 39df26748eb..62170e230e6 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index a885e76d549..089427111f2 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
index bc98f542874..4ced7caebed 100644
Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index c59228819bb..0e417793b0c 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 522826b5530..934435bd835 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index a8e2032719a..a536f9f7919 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi
index 7b47bec0962..8f924ee6632 100644
Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index ee03734f007..3bbd054bce7 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi
index 6221fbad9e7..94acba1cbc5 100644
Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 7a0c7a6599a..0ed43592376 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index dd1f96dcbfe..5eef24236dd 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 1ffa26810ac..ea688d4249d 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 3258cb936d1..1c9beb6551c 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/atmospherics/binary_devices.dmi b/icons/obj/atmospherics/binary_devices.dmi
index 76b9f874a9d..d127cabed58 100644
Binary files a/icons/obj/atmospherics/binary_devices.dmi and b/icons/obj/atmospherics/binary_devices.dmi differ
diff --git a/icons/obj/atmospherics/cold_sink.dmi b/icons/obj/atmospherics/cold_sink.dmi
deleted file mode 100644
index 09f9be43514..00000000000
Binary files a/icons/obj/atmospherics/cold_sink.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/digital_valve.dmi b/icons/obj/atmospherics/digital_valve.dmi
deleted file mode 100644
index db27b43f849..00000000000
Binary files a/icons/obj/atmospherics/digital_valve.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/dp_vent_pump.dmi b/icons/obj/atmospherics/dp_vent_pump.dmi
deleted file mode 100644
index e9d5ddb707c..00000000000
Binary files a/icons/obj/atmospherics/dp_vent_pump.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/heat_exchanger.dmi b/icons/obj/atmospherics/heat_exchanger.dmi
deleted file mode 100644
index 4d11d89ff56..00000000000
Binary files a/icons/obj/atmospherics/heat_exchanger.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/oxygen_generator.dmi b/icons/obj/atmospherics/oxygen_generator.dmi
deleted file mode 100644
index 0c94506c368..00000000000
Binary files a/icons/obj/atmospherics/oxygen_generator.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/pipe_vent.dmi b/icons/obj/atmospherics/pipe_vent.dmi
deleted file mode 100644
index 3de36bef6fb..00000000000
Binary files a/icons/obj/atmospherics/pipe_vent.dmi and /dev/null differ
diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/atmospherics/pipes/disposal.dmi
similarity index 100%
rename from icons/obj/pipes/disposal.dmi
rename to icons/obj/atmospherics/pipes/disposal.dmi
diff --git a/icons/obj/pipes/heat.dmi b/icons/obj/atmospherics/pipes/heat.dmi
similarity index 100%
rename from icons/obj/pipes/heat.dmi
rename to icons/obj/atmospherics/pipes/heat.dmi
diff --git a/icons/obj/atmospherics/pipes/junction.dmi b/icons/obj/atmospherics/pipes/junction.dmi
new file mode 100644
index 00000000000..f3ff732c56c
Binary files /dev/null and b/icons/obj/atmospherics/pipes/junction.dmi differ
diff --git a/icons/obj/pipes/large.dmi b/icons/obj/atmospherics/pipes/large.dmi
similarity index 100%
rename from icons/obj/pipes/large.dmi
rename to icons/obj/atmospherics/pipes/large.dmi
diff --git a/icons/obj/atmospherics/pipe_manifold.dmi b/icons/obj/atmospherics/pipes/manifold.dmi
similarity index 100%
rename from icons/obj/atmospherics/pipe_manifold.dmi
rename to icons/obj/atmospherics/pipes/manifold.dmi
diff --git a/icons/obj/atmospherics/pipes/pipe_item.dmi b/icons/obj/atmospherics/pipes/pipe_item.dmi
new file mode 100644
index 00000000000..376fb40b49f
Binary files /dev/null and b/icons/obj/atmospherics/pipes/pipe_item.dmi differ
diff --git a/icons/obj/atmospherics/pipe_tank.dmi b/icons/obj/atmospherics/pipes/pressure_tank.dmi
similarity index 100%
rename from icons/obj/atmospherics/pipe_tank.dmi
rename to icons/obj/atmospherics/pipes/pressure_tank.dmi
diff --git a/icons/obj/atmospherics/pipes/simple.dmi b/icons/obj/atmospherics/pipes/simple.dmi
new file mode 100644
index 00000000000..6bb4a9ad0eb
Binary files /dev/null and b/icons/obj/atmospherics/pipes/simple.dmi differ
diff --git a/icons/obj/pipes/transit_tube.dmi b/icons/obj/atmospherics/pipes/transit_tube.dmi
similarity index 100%
rename from icons/obj/pipes/transit_tube.dmi
rename to icons/obj/atmospherics/pipes/transit_tube.dmi
diff --git a/icons/obj/pipes/transit_tube_pod.dmi b/icons/obj/atmospherics/pipes/transit_tube_pod.dmi
similarity index 100%
rename from icons/obj/pipes/transit_tube_pod.dmi
rename to icons/obj/atmospherics/pipes/transit_tube_pod.dmi
diff --git a/icons/obj/pipes/transit_tube_station.dmi b/icons/obj/atmospherics/pipes/transit_tube_station.dmi
similarity index 100%
rename from icons/obj/pipes/transit_tube_station.dmi
rename to icons/obj/atmospherics/pipes/transit_tube_station.dmi
diff --git a/icons/obj/atmospherics/portables_connector.dmi b/icons/obj/atmospherics/portables_connector.dmi
deleted file mode 100644
index 2ac06a96b84..00000000000
Binary files a/icons/obj/atmospherics/portables_connector.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/trinary_devices.dmi b/icons/obj/atmospherics/trinary_devices.dmi
index 13f9a6e4f49..7eabbd65d01 100644
Binary files a/icons/obj/atmospherics/trinary_devices.dmi and b/icons/obj/atmospherics/trinary_devices.dmi differ
diff --git a/icons/obj/atmospherics/unary_devices.dmi b/icons/obj/atmospherics/unary_devices.dmi
index bc43f452e17..6681804dd4f 100644
Binary files a/icons/obj/atmospherics/unary_devices.dmi and b/icons/obj/atmospherics/unary_devices.dmi differ
diff --git a/icons/obj/atmospherics/valve.dmi b/icons/obj/atmospherics/valve.dmi
deleted file mode 100644
index 8df0d933d90..00000000000
Binary files a/icons/obj/atmospherics/valve.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/vent_pump.dmi b/icons/obj/atmospherics/vent_pump.dmi
deleted file mode 100644
index 9ba74046416..00000000000
Binary files a/icons/obj/atmospherics/vent_pump.dmi and /dev/null differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 9c5ddae42c1..42e1b95b2c0 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/clothing/cloaks.dmi b/icons/obj/clothing/cloaks.dmi
new file mode 100644
index 00000000000..3677fa15258
Binary files /dev/null and b/icons/obj/clothing/cloaks.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index f4d22e41ee2..59ac6436d18 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index b56aa44170d..8341dc15262 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 28247e78c06..4fbc9bd674a 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi
index 4a7846286da..6c8fd8bc903 100644
Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ
diff --git a/icons/obj/crayons.dmi b/icons/obj/crayons.dmi
index a3966103053..7d3489285c3 100644
Binary files a/icons/obj/crayons.dmi and b/icons/obj/crayons.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 473e51f6964..092eb92a6ce 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index ff23c626c9f..09fa557ac1a 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index c613bee4949..61e622a2135 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index fabc21f2d9e..787f929e923 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/machines/dominator.dmi b/icons/obj/machines/dominator.dmi
new file mode 100644
index 00000000000..7671dedff86
Binary files /dev/null and b/icons/obj/machines/dominator.dmi differ
diff --git a/icons/obj/machines/droneDispenser.dmi b/icons/obj/machines/droneDispenser.dmi
new file mode 100644
index 00000000000..a78990d8a1a
Binary files /dev/null and b/icons/obj/machines/droneDispenser.dmi differ
diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi
deleted file mode 100644
index ced78f92214..00000000000
Binary files a/icons/obj/pipe-item.dmi and /dev/null differ
diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi
deleted file mode 100644
index 79e6661e386..00000000000
Binary files a/icons/obj/pipes.dmi and /dev/null differ
diff --git a/icons/obj/pipes/junction.dmi b/icons/obj/pipes/junction.dmi
deleted file mode 100644
index 0b1625f563f..00000000000
Binary files a/icons/obj/pipes/junction.dmi and /dev/null differ
diff --git a/icons/obj/pipes/regular.dmi b/icons/obj/pipes/regular.dmi
deleted file mode 100644
index 3bc0f0b7649..00000000000
Binary files a/icons/obj/pipes/regular.dmi and /dev/null differ
diff --git a/icons/obj/pipes2.dmi b/icons/obj/pipes2.dmi
deleted file mode 100644
index 6e800711aa6..00000000000
Binary files a/icons/obj/pipes2.dmi and /dev/null differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 52619ce1640..cc0325cdfae 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index 1797ac7cee0..91fac6c336d 100644
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 682103c7dcb..1a7b8fb091c 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi
index edd89610bac..67d05103da0 100644
Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index e3eec0a88ac..3624a9b4bff 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 56c0c7d5afa..f988d836e36 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl
index f3a64d9efd8..a5556180308 100644
--- a/nano/templates/air_alarm.tmpl
+++ b/nano/templates/air_alarm.tmpl
@@ -91,7 +91,7 @@ Used In File(s): \code\game\machinery\alarm.dm
{{if mode==3}}
{{:~link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}}
- {{else}}
+ {{else}}
{{:~link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}}
{{/if}}
{{else screen == 2}}
diff --git a/sound/arcade/Boom.ogg b/sound/arcade/Boom.ogg
new file mode 100644
index 00000000000..8adfb2bc430
Binary files /dev/null and b/sound/arcade/Boom.ogg differ
diff --git a/sound/arcade/Heal.ogg b/sound/arcade/Heal.ogg
new file mode 100644
index 00000000000..26f47195c65
Binary files /dev/null and b/sound/arcade/Heal.ogg differ
diff --git a/sound/arcade/Hit.ogg b/sound/arcade/Hit.ogg
new file mode 100644
index 00000000000..0bf18679a65
Binary files /dev/null and b/sound/arcade/Hit.ogg differ
diff --git a/sound/arcade/Lose.ogg b/sound/arcade/Lose.ogg
new file mode 100644
index 00000000000..dd2145737cd
Binary files /dev/null and b/sound/arcade/Lose.ogg differ
diff --git a/sound/arcade/Mana.ogg b/sound/arcade/Mana.ogg
new file mode 100644
index 00000000000..7f26ae53fe7
Binary files /dev/null and b/sound/arcade/Mana.ogg differ
diff --git a/sound/arcade/Steal.ogg b/sound/arcade/Steal.ogg
new file mode 100644
index 00000000000..9c7b3be2a5a
Binary files /dev/null and b/sound/arcade/Steal.ogg differ
diff --git a/sound/arcade/Win.ogg b/sound/arcade/Win.ogg
new file mode 100644
index 00000000000..27fb9725f20
Binary files /dev/null and b/sound/arcade/Win.ogg differ
diff --git a/sound/effects/pray.ogg b/sound/effects/pray.ogg
new file mode 100644
index 00000000000..beadd3916f1
Binary files /dev/null and b/sound/effects/pray.ogg differ
diff --git a/sound/effects/pray_chaplain.ogg b/sound/effects/pray_chaplain.ogg
new file mode 100644
index 00000000000..1b543275311
Binary files /dev/null and b/sound/effects/pray_chaplain.ogg differ
diff --git a/sound/machines/lockenable.ogg b/sound/machines/lockenable.ogg
deleted file mode 100644
index 5003b3fe155..00000000000
Binary files a/sound/machines/lockenable.ogg and /dev/null differ
diff --git a/sound/machines/lockreset.ogg b/sound/machines/lockreset.ogg
deleted file mode 100644
index 6f61430ad73..00000000000
Binary files a/sound/machines/lockreset.ogg and /dev/null differ
diff --git a/sound/machines/locktoggle.ogg b/sound/machines/locktoggle.ogg
new file mode 100644
index 00000000000..d8af48d9318
Binary files /dev/null and b/sound/machines/locktoggle.ogg differ
diff --git a/sound/magic/Demon_consume.ogg b/sound/magic/Demon_consume.ogg
new file mode 100644
index 00000000000..ef9276e74c0
Binary files /dev/null and b/sound/magic/Demon_consume.ogg differ
diff --git a/sound/magic/TIMEPARADOX2.ogg b/sound/magic/TIMEPARADOX2.ogg
new file mode 100644
index 00000000000..1a025a895b0
Binary files /dev/null and b/sound/magic/TIMEPARADOX2.ogg differ
diff --git a/sound/magic/demon_attack1.ogg b/sound/magic/demon_attack1.ogg
new file mode 100644
index 00000000000..e3c765afd0c
Binary files /dev/null and b/sound/magic/demon_attack1.ogg differ
diff --git a/sound/magic/demon_dies.ogg b/sound/magic/demon_dies.ogg
new file mode 100644
index 00000000000..ad2a95f397d
Binary files /dev/null and b/sound/magic/demon_dies.ogg differ
diff --git a/sound/magic/enter_blood.ogg b/sound/magic/enter_blood.ogg
new file mode 100644
index 00000000000..4deba11b465
Binary files /dev/null and b/sound/magic/enter_blood.ogg differ
diff --git a/sound/magic/exit_blood.ogg b/sound/magic/exit_blood.ogg
new file mode 100644
index 00000000000..c4399a2ecc6
Binary files /dev/null and b/sound/magic/exit_blood.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 4d3906f5e6b..0bb932a94c9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -141,6 +141,7 @@
#include "code\controllers\subsystem\shuttles.dm"
#include "code\controllers\subsystem\sun.dm"
#include "code\controllers\subsystem\ticker.dm"
+#include "code\controllers\subsystem\timer.dm"
#include "code\controllers\subsystem\voting.dm"
#include "code\controllers\subsystem\shuttles\emergency.dm"
#include "code\controllers\subsystem\shuttles\supply.dm"
@@ -227,6 +228,7 @@
#include "code\datums\spells\genetic.dm"
#include "code\datums\spells\inflict_handler.dm"
#include "code\datums\spells\knock.dm"
+#include "code\datums\spells\lichdom.dm"
#include "code\datums\spells\lightning.dm"
#include "code\datums\spells\mime.dm"
#include "code\datums\spells\mind_transfer.dm"
@@ -240,7 +242,6 @@
#include "code\datums\wires\alarm.dm"
#include "code\datums\wires\apc.dm"
#include "code\datums\wires\autolathe.dm"
-#include "code\datums\wires\camera.dm"
#include "code\datums\wires\explosive.dm"
#include "code\datums\wires\mulebot.dm"
#include "code\datums\wires\particle_accelerator.dm"
@@ -326,7 +327,10 @@
#include "code\game\gamemodes\cult\runes.dm"
#include "code\game\gamemodes\cult\talisman.dm"
#include "code\game\gamemodes\extended\extended.dm"
+#include "code\game\gamemodes\gang\dominator.dm"
#include "code\game\gamemodes\gang\gang.dm"
+#include "code\game\gamemodes\gang\gang_pen.dm"
+#include "code\game\gamemodes\gang\recaller.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
#include "code\game\gamemodes\malfunction\malfunction.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
@@ -379,6 +383,7 @@
#include "code\game\machinery\deployable.dm"
#include "code\game\machinery\door_control.dm"
#include "code\game\machinery\doppler_array.dm"
+#include "code\game\machinery\droneDispenser.dm"
#include "code\game\machinery\flasher.dm"
#include "code\game\machinery\Freezer.dm"
#include "code\game\machinery\hologram.dm"
@@ -431,7 +436,6 @@
#include "code\game\machinery\camera\motion.dm"
#include "code\game\machinery\camera\presets.dm"
#include "code\game\machinery\camera\tracking.dm"
-#include "code\game\machinery\computer\ai_core.dm"
#include "code\game\machinery\computer\aifixer.dm"
#include "code\game\machinery\computer\arcade.dm"
#include "code\game\machinery\computer\atmos_alert.dm"
@@ -551,6 +555,7 @@
#include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm"
#include "code\game\objects\effects\spawners\lootdrop.dm"
+#include "code\game\objects\effects\spawners\structure.dm"
#include "code\game\objects\effects\spawners\vaultspawner.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm"
@@ -568,6 +573,7 @@
#include "code\game\objects\items\devices\aicard.dm"
#include "code\game\objects\items\devices\camera_bug.dm"
#include "code\game\objects\items\devices\chameleonproj.dm"
+#include "code\game\objects\items\devices\doorCharge.dm"
#include "code\game\objects\items\devices\flash.dm"
#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\instruments.dm"
@@ -579,7 +585,6 @@
#include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\pizza_bomb.dm"
#include "code\game\objects\items\devices\powersink.dm"
-#include "code\game\objects\items\devices\recaller.dm"
#include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\sensor_device.dm"
#include "code\game\objects\items\devices\taperecorder.dm"
@@ -685,6 +690,7 @@
#include "code\game\objects\items\weapons\tanks\tank_types.dm"
#include "code\game\objects\items\weapons\tanks\tanks.dm"
#include "code\game\objects\items\weapons\tanks\watertank.dm"
+#include "code\game\objects\structures\ai_core.dm"
#include "code\game\objects\structures\artstuff.dm"
#include "code\game\objects\structures\barsigns.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
@@ -694,6 +700,7 @@
#include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\false_walls.dm"
+#include "code\game\objects\structures\fireaxe.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm"
@@ -728,7 +735,6 @@
#include "code\game\objects\structures\crates_lockers\crates.dm"
#include "code\game\objects\structures\crates_lockers\largecrate.dm"
#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm"
-#include "code\game\objects\structures\crates_lockers\closets\fireaxe.dm"
#include "code\game\objects\structures\crates_lockers\closets\fitness.dm"
#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"
#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm"
@@ -801,6 +807,7 @@
#include "code\modules\admin\newbanjob.dm"
#include "code\modules\admin\player_notes.dm"
#include "code\modules\admin\player_panel.dm"
+#include "code\modules\admin\secrets.dm"
#include "code\modules\admin\topic.dm"
#include "code\modules\admin\DB ban\functions.dm"
#include "code\modules\admin\permissionverbs\permissionedit.dm"
@@ -868,6 +875,7 @@
#include "code\modules\client\preferences.dm"
#include "code\modules\client\preferences_savefile.dm"
#include "code\modules\client\preferences_toggles.dm"
+#include "code\modules\clothing\cloaks.dm"
#include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\glasses\engine_goggles.dm"
#include "code\modules\clothing\glasses\glasses.dm"
@@ -931,6 +939,7 @@
#include "code\modules\events\anomaly_vortex.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\brand_intelligence.dm"
+#include "code\modules\events\camerafailure.dm"
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\communications_blackout.dm"
#include "code\modules\events\disease_outbreak.dm"
@@ -1245,6 +1254,8 @@
#include "code\modules\mob\living\simple_animal\revenant\revenant.dm"
#include "code\modules\mob\living\simple_animal\revenant\revenant_abilities.dm"
#include "code\modules\mob\living\simple_animal\revenant\revenant_spawn_event.dm"
+#include "code\modules\mob\living\simple_animal\slaughter\slaughter.dm"
+#include "code\modules\mob\living\simple_animal\slaughter\slaughterevent.dm"
#include "code\modules\mob\living\simple_animal\slime\death.dm"
#include "code\modules\mob\living\simple_animal\slime\emote.dm"
#include "code\modules\mob\living\simple_animal\slime\life.dm"
@@ -1337,8 +1348,12 @@
#include "code\modules\procedural mapping\mapGenerator.dm"
#include "code\modules\procedural mapping\mapGeneratorModule.dm"
#include "code\modules\procedural mapping\mapGeneratorReadme.dm"
+#include "code\modules\procedural mapping\mapGeneratorModules\helpers.dm"
#include "code\modules\procedural mapping\mapGeneratorModules\nature.dm"
+#include "code\modules\procedural mapping\mapGenerators\asteroid.dm"
#include "code\modules\procedural mapping\mapGenerators\nature.dm"
+#include "code\modules\procedural mapping\mapGenerators\shuttle.dm"
+#include "code\modules\procedural mapping\mapGenerators\syndicate.dm"
#include "code\modules\projectiles\ammunition.dm"
#include "code\modules\projectiles\firing.dm"
#include "code\modules\projectiles\gun.dm"
diff --git a/tools/dmifonts/DmiFonts.exe b/tools/dmifonts/DmiFonts.exe
new file mode 100644
index 00000000000..ce1d694147a
Binary files /dev/null and b/tools/dmifonts/DmiFonts.exe differ
diff --git a/tools/dmifonts/DmiFonts.int b/tools/dmifonts/DmiFonts.int
new file mode 100644
index 00000000000..b82874fded5
--- /dev/null
+++ b/tools/dmifonts/DmiFonts.int
@@ -0,0 +1,6 @@
+// BEGIN_INTERNALS
+/*
+MAP_ICON_TYPE: 0
+AUTO_FILE_DIR: OFF
+*/
+// END_INTERNALS
diff --git a/tools/dmifonts/DmiFonts.lk b/tools/dmifonts/DmiFonts.lk
new file mode 100644
index 00000000000..e69de29bb2d