diff --git a/baystation12.dme b/baystation12.dme
index 5a0328e42c..373f99cff4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -955,8 +955,10 @@
#include "code\modules\economy\Events.dm"
#include "code\modules\economy\Events_Mundane.dm"
#include "code\modules\economy\TradeDestinations.dm"
+#include "code\modules\events\apc_damage.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\brand_intelligence.dm"
+#include "code\modules\events\camera_damage.dm"
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\comms_blackout.dm"
#include "code\modules\events\communications_blackout.dm"
diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm
index 2d8bb8a36a..9bbdd1380d 100644
--- a/code/game/objects/items/weapons/candle.dm
+++ b/code/game/objects/items/weapons/candle.dm
@@ -1,6 +1,6 @@
/obj/item/weapon/flame/candle
name = "red candle"
- desc = "a candle"
+ desc = "a small pillar candle. Its specially-formulated fuel-oxidizer wax mixture allows continued combustion in airless environments."
icon = 'icons/obj/candle.dmi'
icon_state = "candle1"
item_state = "candle1"
@@ -8,6 +8,10 @@
var/wax = 2000
+/obj/item/weapon/flame/candle/New()
+ wax = rand(800, 1000) // Enough for 27-33 minutes. 30 minutes on average.
+ ..()
+
/obj/item/weapon/flame/candle/update_icon()
var/i
if(wax > 1500)
@@ -80,4 +84,4 @@
/obj/item/weapon/flame/candle/dropped(mob/user)
if(lit)
user.SetLuminosity(user.luminosity - CANDLE_LUM)
- SetLuminosity(CANDLE_LUM)
+ SetLuminosity(CANDLE_LUM)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 304c59fb98..7b2c03ba4a 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -131,6 +131,7 @@
/obj/item/weapon/storage/firstaid/surgery
name = "surgery kit"
desc = "Contains tools for surgery."
+ storage_slots = 10
/obj/item/weapon/storage/firstaid/surgery/New()
..()
@@ -142,6 +143,9 @@
new /obj/item/weapon/retractor(src)
new /obj/item/weapon/scalpel(src)
new /obj/item/weapon/surgicaldrill(src)
+ new /obj/item/weapon/bonegel(src)
+ new /obj/item/weapon/FixOVein(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
return
/*
diff --git a/code/modules/events/apc_damage.dm b/code/modules/events/apc_damage.dm
new file mode 100644
index 0000000000..7eecfa6aef
--- /dev/null
+++ b/code/modules/events/apc_damage.dm
@@ -0,0 +1,54 @@
+/datum/event/apc_damage
+ var/apcSelectionRange = 25
+
+/datum/event/apc_damage/start()
+ var/obj/machinery/power/apc/A = acquire_random_apc()
+
+ var/severity_range = 0
+ switch(severity)
+ if(EVENT_LEVEL_MUNDANE)
+ severity_range = 0
+ if(EVENT_LEVEL_MODERATE)
+ severity_range = 7
+ if(EVENT_LEVEL_MAJOR)
+ severity_range = 15
+
+ for(var/obj/machinery/power/apc/apc in range(severity_range,A))
+ if(is_valid_apc(apc))
+ apc.emagged = 1
+ apc.update_icon()
+
+/datum/event/apc_damage/proc/acquire_random_apc()
+ var/list/possibleEpicentres = list()
+ var/list/apcs = list()
+
+ for(var/obj/effect/landmark/newEpicentre in landmarks_list)
+ if(newEpicentre.name == "lightsout")
+ possibleEpicentres += newEpicentre
+
+ if(!possibleEpicentres.len)
+ return
+
+ var/epicentre = pick(possibleEpicentres)
+ for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange))
+ if(is_valid_apc(apc))
+ apcs += apc
+ // Greatly increase the chance for APCs in maintenance areas to be selected
+ var/area/A = get_area(apc)
+ if(istype(A,/area/maintenance))
+ apcs += apc
+ apcs += apc
+
+ if(!apcs.len)
+ return
+
+ return pick(apcs)
+
+/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc)
+ // Type must be exactly a basic APC.
+ // This generally prevents affecting APCs in critical areas (AI core, engine room, etc.) as they often use higher capacity subtypes.
+ if(apc.type != /obj/machinery/power/apc)
+ return 0
+
+ var/turf/T = get_turf(apc)
+ return !apc.emagged && T && (T.z in config.player_levels)
diff --git a/code/modules/events/camera_damage.dm b/code/modules/events/camera_damage.dm
new file mode 100644
index 0000000000..3143b9585b
--- /dev/null
+++ b/code/modules/events/camera_damage.dm
@@ -0,0 +1,38 @@
+/datum/event/camera_damage/start()
+ var/obj/machinery/camera/C = acquire_random_camera()
+ if(!C)
+ return
+
+ var/severity_range = 0
+ switch(severity)
+ if(EVENT_LEVEL_MUNDANE)
+ severity_range = 0
+ if(EVENT_LEVEL_MODERATE)
+ severity_range = 7
+ if(EVENT_LEVEL_MAJOR)
+ severity_range = 15
+
+ for(var/obj/machinery/camera/cam in range(severity_range,C))
+ if(is_valid_camera(cam))
+ if(prob(2*severity))
+ cam.destroy()
+ else
+ cam.wires.UpdateCut(CAMERA_WIRE_POWER, 0)
+ if(prob(5*severity))
+ cam.wires.UpdateCut(CAMERA_WIRE_ALARM, 0)
+
+/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5)
+ if(!cameranet.cameras.len)
+ return
+ if(!remaining_attempts)
+ return
+
+ var/obj/machinery/camera/C = pick(cameranet.cameras)
+ if(is_valid_camera(C))
+ return C
+ return acquire_random_camera(remaining_attempts--)
+
+/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C)
+ // Only return a functional camera, not installed in a silicon, and that exists somewhere players have access
+ var/turf/T = get_turf(C)
+ return T && C.can_use() && !istype(C.loc, /mob/living/silicon) && (T.z in config.player_levels)
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index fabfdd3336..68f6030425 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -12,9 +12,9 @@
A << "
"
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
- command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=50))
+ command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=25))
/datum/event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in telecomms_list)
- T.emp_act(1)
\ No newline at end of file
+ T.emp_act(1)
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 4a53cc696d..be40542687 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -25,4 +25,4 @@
for(var/obj/effect/landmark/epicentre in epicentreList)
for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange))
- apc.overload_lighting()
\ No newline at end of file
+ apc.overload_lighting()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 900d6f76ec..5cb256e500 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -127,11 +127,13 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
available_events = list(
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 5), 0, 0, 50),
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm
new file mode 100644
index 0000000000..23a52195cf
--- /dev/null
+++ b/code/modules/hydroponics/beekeeping/beehive.dm
@@ -0,0 +1,133 @@
+/obj/machinery/beehive
+ name = "beehive"
+ icon = 'icons/obj/apiary_bees_etc.dmi'
+ icon_state = "apiary"
+ density = 1
+ anchored = 1
+
+ var/closed = 0
+ var/bee_count = 0 // A real hive has 20k - 80k bees... we tone it down
+ var/smoked = 0
+ var/honeycombs = 0
+ var/frames = 0
+ var/maxFrames = 5
+
+/obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user)
+ if(istype(I, /obj/item/weapon/crowbar))
+ closed = !closed
+ user.visible_message("[user] [closed ? "closes" : "opens"] \the [src].", "You [closed ? "close" : "open"] \the [src]")
+ else if(istype(I, /obj/item/weapon/wrench))
+ anchored = !anchored
+ user.visible_message("[user] [closed ? "wrenches" : "unwrenches"] \the [src].", "You [closed ? "wrench" : "unwrench"] \the [src]")
+ else if(istype(I, /obj/item/bee_smoker))
+ if(!closed)
+ user << "You need to open \the [src] with a crowbar before smoking the bees."
+ return
+ user.visible_message("[user] smokes the bees in \the [src].", "You smoke the bees in \the [src].")
+ smoked = 30
+ else if(istype(I, /obj/item/honey_frame))
+ if(closed)
+ user << "You need to open \the [src] with a crowbar before inserting \the [I]."
+ return
+ if(frames >= maxFrames)
+ user << "There is no place for an another frame."
+ return
+ var/obj/item/honey_frame/H = I
+ if(H.honey)
+ user << "\The [I] is full with beeswax and honey, empty it in the extractor first."
+ return
+ ++frames
+ user.visible_message("[user] loads \the [I] into \the [src].", "You load \the [I] into \the [src].")
+ qdel(I)
+
+/obj/machinery/beehive/attack_hand(var/mob/user)
+ if(!closed)
+ if(honeycombs < 1)
+ user << "There are no filled honeycombs."
+ return
+ user.visible_message("[user] starts taking the honeycombs out of \the [src].", "You start taking the honeycombs out of \the [src]...")
+ while(honeycombs > 1 && do_after(user, 30))
+ new /obj/item/honey_frame/filled(loc)
+ --honeycombs
+ --frames
+ user << "You take all filled honeycombs out."
+
+/obj/machinery/beehive/process()
+ if(closed && !smoked)
+ pollinate_flowers()
+ smoked = max(0, smoked - 1)
+
+/obj/machinery/beehive/proc/pollinate_flowers()
+ for(var/obj/machinery/portable_atmospherics/hydroponics/H in view(7, src))
+ if(H.seed && !H.dead)
+ H.health += 0.05
+ honeycombs = max(honeycombs + 0.01, frames) // 100/tray amount ticks per frame, each 20 units of honey
+
+/obj/machinery/honey_extractor
+ name = "honey extractor"
+ desc = "A machine used to turn honeycombs on the frame into honey and wax."
+ icon = 'icons/obj/virology.dmi'
+ icon_state = "centrifuge"
+
+ var/processing = 0
+ var/honey = 0
+
+/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user)
+ if(processing)
+ user << "\The [src] is currently spinning, wait until it's finished."
+ return
+ else if(istype(I, /obj/item/honey_frame))
+ var/obj/item/honey_frame/H = I
+ if(!H.honey)
+ user << "\The [H] is empty, put it into a beehive."
+ return
+ user.visible_message("[user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.")
+ processing = H.honey
+ qdel(H)
+ spawn(50)
+ new /obj/item/honey_frame(loc)
+ //new /obj/item/stack/wax(loc)
+ honey += processing
+ processing = 0
+ else if(istype(I, /obj/item/weapon/reagent_containers/glass))
+ var/obj/item/weapon/reagent_containers/glass/G = I
+ var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey)
+ G.reagents.add_reagent("honey", transferred)
+ honey -= transferred
+ user.visible_message("[user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into the [G].")
+ return 1
+
+/obj/item/bee_smoker
+ name = "bee smoker"
+ desc = "A device used to calm down bees before harvesting honey."
+ icon = 'icons/obj/apiary_bees_etc.dmi'
+ icon_state = "apiary"
+ w_class = 2
+
+/obj/item/honey_frame
+ name = "beehive frame"
+ desc = "A frame for the beehive that the bees will fill with honeycombs."
+ icon = 'icons/obj/apiary_bees_etc.dmi'
+ icon_state = "apiary"
+ w_class = 2
+
+ var/honey = 0
+
+/obj/item/honey_frame/filled
+ name = "filled beehive frame"
+ desc = "A frame for the beehive that the bees have filled with honeycombs."
+ honey = 20
+
+/obj/item/beehive_assembly
+ name = "beehive assembly"
+ desc = "Contains everything you need to build a beehive. Cannot be disassembled once deployed."
+ icon = 'icons/obj/apiary_bees_etc.dmi'
+ icon_state = "apiary"
+
+/obj/item/beehive_assembly/attack_self(var/mob/user)
+ new /obj/machinery/beehive(get_turf(user))
+ qdel(src)
+
+/obj/item/bee_pack
+ name = "bee pack"
+ desc = "A stasis-pack that contains a queen bee and some workers. Put it into the beehive to wake them up."
\ No newline at end of file
diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm
index 2545cfc01c..a4f91ce94c 100644
--- a/code/modules/hydroponics/seed_storage.dm
+++ b/code/modules/hydroponics/seed_storage.dm
@@ -231,12 +231,15 @@
S.remove_from_storage(O, src)
O.loc = src
+ var/newID = 0
for (var/datum/seed_pile/N in piles)
if (N.matches(O))
++N.amount
N.seeds += (O)
return
+ else if(N.ID >= newID)
+ newID = N.ID + 1
- piles += new /datum/seed_pile(O, piles.len)
+ piles += new /datum/seed_pile(O, newID)
return
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 1a9ae03d51..63b781e183 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -10,6 +10,10 @@
sleep(1)
+ for(var/obj/item/I in src)
+ drop_from_inventory(I)
+ I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class))
+
..(species.gibbed_anim)
gibs(loc, viruses, dna, null, species.flesh_color, species.blood_color)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 5e0aee6cb0..31cb465923 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -22,6 +22,7 @@
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
var/fields //Amount of user created fields
+ var/free_space = MAX_PAPER_MESSAGE_LEN
var/list/stamped
var/list/ico[0] //Icons and
var/list/offset_x[0] //offsets stored for later
@@ -51,6 +52,7 @@
spawn(2)
update_icon()
+ update_space(info)
updateinfolinks()
return
@@ -62,6 +64,12 @@
return
icon_state = "paper"
+/obj/item/weapon/paper/proc/update_space(var/new_text)
+ if(!new_text)
+ return
+
+ free_space -= length(strip_html_properly(new_text, 0))
+
/obj/item/weapon/paper/examine(mob/user)
..()
if(in_range(user, src) || istype(user, /mob/dead/observer))
@@ -188,6 +196,7 @@
/obj/item/weapon/paper/proc/clearpaper()
info = null
stamps = null
+ free_space = MAX_PAPER_MESSAGE_LEN
stamped = list()
overlays.Cut()
updateinfolinks()
@@ -327,12 +336,11 @@
var/id = href_list["write"]
//var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as message
- var/textlimit = MAX_PAPER_MESSAGE_LEN - length(info)
- if(textlimit <= 0)
+ if(free_space <= 0)
usr << "There isn't enough space left on \the [src] to write anything."
return
- var/t = sanitize(input("Enter what you want to write:", "Write", null, null) as message, textlimit, extra = 0)
+ var/t = strip_html_properly(input("Enter what you want to write:", "Write", null, null) as message)
if(!t)
return
@@ -378,6 +386,8 @@
info += t // Oh, he wants to edit to the end of the file, let him.
updateinfolinks()
+ update_space(t)
+
usr << browse("[name][info_links][stamps]", "window=[name]") // Update the window
update_icon()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index acf243fc99..ea390427ce 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -9,7 +9,7 @@
#define LIGHT_BROKEN 2
#define LIGHT_BURNED 3
-
+#define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb
/obj/item/light_fixture_frame
name = "light fixture frame"
@@ -487,11 +487,13 @@
var/mob/living/carbon/human/H = user
if(istype(H))
-
- if(H.gloves)
+ if(H.species.heat_level_1 > LIGHT_BULB_TEMPERATURE)
+ prot = 1
+ else if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
if(G.max_heat_protection_temperature)
- prot = (G.max_heat_protection_temperature > 360)
+ if(G.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE)
+ prot = 1
else
prot = 1
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 27f959d9e9..b64e0f4a1c 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -446,9 +446,8 @@
result_amount = 1
/datum/chemical_reaction/phoronsolidification/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/stack/sheet/mineral/phoron(location)
- return
+ new /obj/item/stack/sheet/mineral/phoron(get_turf(holder.my_atom), created_volume)
+ return
/datum/chemical_reaction/plastication
name = "Plastic"
@@ -595,7 +594,7 @@
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out foam!"
+ M << "The solution spews out foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 0)
@@ -614,7 +613,7 @@
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
+ M << "The solution spews out a metalic foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 1)
@@ -632,7 +631,7 @@
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
+ M << "The solution spews out a metalic foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 2)
@@ -1272,7 +1271,8 @@
/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
return
/datum/chemical_reaction/meatball
@@ -1282,8 +1282,10 @@
required_reagents = list("protein" = 3, "flour" = 5)
result_amount = 3
-/datum/chemical_reaction/meatball/on_reaction(var/datum/reagents/holder, var/created_volume)
- new /obj/item/weapon/reagent_containers/food/snacks/meatball(get_turf(holder.my_atom))
+/datum/chemical_reaction/meatball/on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/meatball(location)
return
/datum/chemical_reaction/dough
@@ -1293,8 +1295,10 @@
required_reagents = list("egg" = 3, "flour" = 10)
result_amount = 1
-/datum/chemical_reaction/dough/on_reaction(var/datum/reagents/holder, var/created_volume)
- new /obj/item/weapon/reagent_containers/food/snacks/dough(get_turf(holder.my_atom))
+/datum/chemical_reaction/dough/on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/dough(location)
return
/datum/chemical_reaction/syntiflesh
@@ -1306,7 +1310,8 @@
/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
return
/datum/chemical_reaction/hot_ramen
diff --git a/html/changelog.html b/html/changelog.html
index 308ecb672e..d83bfdb3d1 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,52 @@
-->
+
28 April 2015
+
Jarcolr updated:
+
+ - Added 9 new bar sign designs/sprites.
+
+
Kelenius updated:
+
+ - Good news to the roboticists! The long waited firmware update for the bots has arrived. You can expect the following changes:
+ - Medbots have improved the disease detection algorithms.
+ - Floorbot firmware has been bugtested. In particular, they will no longer get stuck near the windows, hopelessly trying to fix the floor under the glass.
+ - Floorbots have also received an internal low-power metal synthesizer. They will use it to make their own tiles. Slowly.
+ - Following the complains from humanitarian organizations regarding securitron brutality, stength of their stunners has been toned down. They will also politely demand that you get on the floor before arresting you. Except for the taser-mounted guys, they will still tase you down.
+ - Other minor fixes.
+ - The lasertag bots are now forbidden to build and use following the incident #1526672. Please don't let it happen again.
+ - The farmbot design has been finished! Made from a watertank, robot arm, plant analyzer, bucket, minihoe and a proximity sensor, these small (not really) bots will be a useful companion to any gardener and/or xenobotanist.
+ - Spider learning alert: they have learned to recognize the bots and will mercilessly attack them.
+ - An experimental CPU upgrade would theoretically allow any of the bots to function with the same intelligence capacity as the maintenance drones. We still have no idea what causes it to boot up. Science!
+ - INCOMING TRANSMISSION: Greetings to agents, pirates, operatives, and anyone who otherwise uses our equipment. Following the NT update of bot firmware, we have updated the cryptographic sequencer's hacking routines as well. The medbots you emag will not poison you anymore, the clanbots won't clean after themselves immediately, and floorbots... wear a space suit. Oh, and it works on the new farmbots, too.
+
+
PsiOmegaDelta updated:
+
+ - Beware. Airlocks can now crush more things than just mobs.
+ - AIs now have a personal atmospherics control subsystem.
+ - Some borg modules now have additional subsystems.
+ - Improves borg module handling.
+ - Secure airlocks now buzz when access is denied.
+ - The mental health office door now requires psychiatrist access, and the related button now opens/closes the door instead of bolting.
+ - Restores an old soundtrack 'Thunderdome.ogg'.
+ - Some holodeck programs now have custom ambience tracks.
+
+
RavingManiac updated:
+
+ - The phoron research lab has been renovated to include a heat-exchange system, a gas mixer/filter and a waste gas disposal pump.
+ - Candles now burn for about 30 mintutes.
+
+
Yoshax updated:
+
+ - Adds items to the orderable antag surgical kit so its actually useful for surgery.
+ - Adjusts custom loadout costs to be more standardised and balances. Purely cosmetic items, shoes, hats, and all things that do not provide a straight advtange (sterile mask, or pAI, protection from viruses and possible door hacking or records access, respectively), each cost 1 point, items that provide an advantage like those just mentioned, or provide armor or storage cost 2 points.
+ - Adds practice rounds, both .45 for Sec and Detective's guns, also 9mm top mounted for the Saber, and for the Bulldog.
+ - Adds the .45 and 9mm practice rounds to the armory.
+ - Adds all the practice rounds to the autolathe.
+ - Adds r_walls to the back of the firing range, leaves the sides normal.
+ - Fixes HoS' office door to not be CMO locked.
+
+
24 April 2015
Dennok updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index b1f2b697f9..dcdffbe25e 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -1608,3 +1608,63 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Fixes overmap ship speed calculations.
- rscadd: Adds overmap ship rotation.
- rscadd: Added a floorlayer.
+2015-04-28:
+ Jarcolr:
+ - rscadd: Added 9 new bar sign designs/sprites.
+ Kelenius:
+ - rscadd: 'Good news to the roboticists! The long waited firmware update for the
+ bots has arrived. You can expect the following changes:'
+ - rscadd: Medbots have improved the disease detection algorithms.
+ - rscadd: Floorbot firmware has been bugtested. In particular, they will no longer
+ get stuck near the windows, hopelessly trying to fix the floor under the glass.
+ - rscadd: Floorbots have also received an internal low-power metal synthesizer.
+ They will use it to make their own tiles. Slowly.
+ - rscadd: Following the complains from humanitarian organizations regarding securitron
+ brutality, stength of their stunners has been toned down. They will also politely
+ demand that you get on the floor before arresting you. Except for the taser-mounted
+ guys, they will still tase you down.
+ - rscadd: Other minor fixes.
+ - rscdel: 'The lasertag bots are now forbidden to build and use following the incident
+ #1526672. Please don''t let it happen again.'
+ - rscadd: The farmbot design has been finished! Made from a watertank, robot arm,
+ plant analyzer, bucket, minihoe and a proximity sensor, these small (not really)
+ bots will be a useful companion to any gardener and/or xenobotanist.
+ - tweak: 'Spider learning alert: they have learned to recognize the bots and will
+ mercilessly attack them.'
+ - rscadd: An experimental CPU upgrade would theoretically allow any of the bots
+ to function with the same intelligence capacity as the maintenance drones. We
+ still have no idea what causes it to boot up. Science!
+ - rscadd: 'INCOMING TRANSMISSION: Greetings to agents, pirates, operatives, and
+ anyone who otherwise uses our equipment. Following the NT update of bot firmware,
+ we have updated the cryptographic sequencer''s hacking routines as well. The
+ medbots you emag will not poison you anymore, the clanbots won''t clean after
+ themselves immediately, and floorbots... wear a space suit. Oh, and it works
+ on the new farmbots, too.'
+ PsiOmegaDelta:
+ - rscadd: Beware. Airlocks can now crush more things than just mobs.
+ - rscadd: AIs now have a personal atmospherics control subsystem.
+ - rscadd: Some borg modules now have additional subsystems.
+ - tweak: Improves borg module handling.
+ - tweak: Secure airlocks now buzz when access is denied.
+ - tweak: The mental health office door now requires psychiatrist access, and the
+ related button now opens/closes the door instead of bolting.
+ - soundadd: Restores an old soundtrack 'Thunderdome.ogg'.
+ - rscadd: Some holodeck programs now have custom ambience tracks.
+ RavingManiac:
+ - rscadd: The phoron research lab has been renovated to include a heat-exchange
+ system, a gas mixer/filter and a waste gas disposal pump.
+ - tweak: Candles now burn for about 30 mintutes.
+ Yoshax:
+ - tweak: Adds items to the orderable antag surgical kit so its actually useful for
+ surgery.
+ - tweak: Adjusts custom loadout costs to be more standardised and balances. Purely
+ cosmetic items, shoes, hats, and all things that do not provide a straight advtange
+ (sterile mask, or pAI, protection from viruses and possible door hacking or
+ records access, respectively), each cost 1 point, items that provide an advantage
+ like those just mentioned, or provide armor or storage cost 2 points.
+ - rscadd: Adds practice rounds, both .45 for Sec and Detective's guns, also 9mm
+ top mounted for the Saber, and for the Bulldog.
+ - rscadd: Adds the .45 and 9mm practice rounds to the armory.
+ - rscadd: Adds all the practice rounds to the autolathe.
+ - tweak: Adds r_walls to the back of the firing range, leaves the sides normal.
+ - bugfix: Fixes HoS' office door to not be CMO locked.
diff --git a/html/changelogs/Jarcolr-PR-8968.yml b/html/changelogs/Jarcolr-PR-8968.yml
deleted file mode 100644
index dd95d001b2..0000000000
--- a/html/changelogs/Jarcolr-PR-8968.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Jarcolr
-
-delete-after: True
-
-changes:
- - rscadd: "Added 9 new bar sign designs/sprites."
\ No newline at end of file
diff --git a/html/changelogs/PsiOmegaDelta-AirlockPressure.yml b/html/changelogs/PsiOmegaDelta-AirlockPressure.yml
deleted file mode 100644
index 0f64ac3bd2..0000000000
--- a/html/changelogs/PsiOmegaDelta-AirlockPressure.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: PsiOmegaDelta
-changes:
- - rscadd: "Beware. Airlocks can now crush more things than just mobs."
-delete-after: True
diff --git a/html/changelogs/PsiOmegaDelta-PR-8905.yml b/html/changelogs/PsiOmegaDelta-PR-8905.yml
deleted file mode 100644
index b984448b32..0000000000
--- a/html/changelogs/PsiOmegaDelta-PR-8905.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: PsiOmegaDelta
-delete-after: True
-changes:
- - rscadd: "AIs now have a personal atmospherics control subsystem."
- - rscadd: "Some borg modules now have additional subsystems."
- - tweak: "Improves borg module handling."
diff --git a/html/changelogs/PsiOmegaDelta-PR-8996.yml b/html/changelogs/PsiOmegaDelta-PR-8996.yml
deleted file mode 100644
index f2b71c0590..0000000000
--- a/html/changelogs/PsiOmegaDelta-PR-8996.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: PsiOmegaDelta
-delete-after: True
-changes:
- - tweak: "Secure airlocks now buzz when access is denied."
diff --git a/html/changelogs/PsiOmegaDelta-PR-9008.yml b/html/changelogs/PsiOmegaDelta-PR-9008.yml
new file mode 100644
index 0000000000..298f0e4d68
--- /dev/null
+++ b/html/changelogs/PsiOmegaDelta-PR-9008.yml
@@ -0,0 +1,4 @@
+author: PsiOmegaDelta
+delete-after: True
+changes:
+ - rscadd: "Two new events which will cause damage to APCs or cameras when triggered."
diff --git a/html/changelogs/PsiOmegaDelta.yml b/html/changelogs/PsiOmegaDelta.yml
index 20e7f6d2c3..6fdea55f54 100644
--- a/html/changelogs/PsiOmegaDelta.yml
+++ b/html/changelogs/PsiOmegaDelta.yml
@@ -1,6 +1,3 @@
author: PsiOmegaDelta
-changes:
- - tweak: "The mental health office door now requires psychiatrist access, and the related button now opens/closes the door instead of bolting."
- - soundadd: "Restores an old soundtrack 'Thunderdome.ogg'."
- - rscadd: "Some holodeck programs now have custom ambience tracks."
+changes: []
delete-after: false
diff --git a/html/changelogs/RavingManiac-dev-2.yml b/html/changelogs/RavingManiac-dev-2.yml
deleted file mode 100644
index ea89ad9923..0000000000
--- a/html/changelogs/RavingManiac-dev-2.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# wip (For works in progress)
-# tweak
-# soundadd
-# sounddel
-# rscadd (general adding of nice things)
-# rscdel (general deleting of nice things)
-# imageadd
-# imagedel
-# spellcheck (typo fixes)
-# experiment
-#################################
-
-# Your name.
-author: RavingManiac
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
-# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
-changes:
- - rscadd: "The phoron research lab has been renovated to include a heat-exchange system, a gas mixer/filter and a waste gas disposal pump."
diff --git a/html/changelogs/Yoshax-LoadoutPoints.YML b/html/changelogs/Yoshax-LoadoutPoints.YML
deleted file mode 100644
index 051e156a2d..0000000000
--- a/html/changelogs/Yoshax-LoadoutPoints.YML
+++ /dev/null
@@ -1,5 +0,0 @@
-author: Yoshax
-delete-after: True
-
-changes:
- - tweak: "Adjusts custom loadout costs to be more standardised and balances. Purely cosmetic items, shoes, hats, and all things that do not provide a straight advtange (sterile mask, or pAI, protection from viruses and possible door hacking or records access, respectively), each cost 1 point, items that provide an advantage like those just mentioned, or provide armor or storage cost 2 points."
\ No newline at end of file
diff --git a/html/changelogs/Yoshax-MoreFunPracticeShoot.YML b/html/changelogs/Yoshax-MoreFunPracticeShoot.YML
deleted file mode 100644
index 0ee6e60259..0000000000
--- a/html/changelogs/Yoshax-MoreFunPracticeShoot.YML
+++ /dev/null
@@ -1,8 +0,0 @@
-author: Yoshax
-delete-after: True
-
-changes:
- - rscadd: "Adds practice rounds, both .45 for Sec and Detective's guns, also 9mm top mounted for the Saber, and for the Bulldog
- - rscadd: "Adds the .45 and 9mm practice rounds to the armory."
- - rscadd: "Adds all the practice rounds to the autolathe."
- - tweak: "Adds r_walls to the back of the firing range, leaves the sides normal."
diff --git a/html/changelogs/Yoshax-OpenPls.YML b/html/changelogs/Yoshax-OpenPls.YML
deleted file mode 100644
index eb85bc81d8..0000000000
--- a/html/changelogs/Yoshax-OpenPls.YML
+++ /dev/null
@@ -1,5 +0,0 @@
-author: Yoshax
-delete-after: True
-
-changes:
- - bugfix: "Fixes HoS' office door to not be CMO locked."
diff --git a/html/changelogs/kelenius-PR-8991.yml b/html/changelogs/kelenius-PR-8991.yml
deleted file mode 100644
index f85183c240..0000000000
--- a/html/changelogs/kelenius-PR-8991.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# wip (For works in progress)
-# tweak
-# soundadd
-# sounddel
-# rscadd (general adding of nice things)
-# rscdel (general deleting of nice things)
-# imageadd
-# imagedel
-# spellcheck (typo fixes)
-# experiment
-#################################
-
-# Your name.
-author: Kelenius
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-changes:
- - rscadd: "Good news to the roboticists! The long waited firmware update for the bots has arrived. You can expect the following changes:"
- - rscadd: "Medbots have improved the disease detection algorithms."
- - rscadd: "Floorbot firmware has been bugtested. In particular, they will no longer get stuck near the windows, hopelessly trying to fix the floor under the glass."
- - rscadd: "Floorbots have also received an internal low-power metal synthesizer. They will use it to make their own tiles. Slowly."
- - rscadd: "Following the complains from humanitarian organizations regarding securitron brutality, stength of their stunners has been toned down. They will also politely demand that you get on the floor before arresting you. Except for the taser-mounted guys, they will still tase you down."
- - rscadd: "Other minor fixes."
- - rscdel: "The lasertag bots are now forbidden to build and use following the incident #1526672. Please don't let it happen again."
- - scaadd: "The farmbot design has been finished! Made from a watertank, robot arm, plant analyzer, bucket, minihoe and a proximity sensor, these small (not really) bots will be a useful companion to any gardener and/or xenobotanist."
- - tweak: "Spider learning alert: they have learned to recognize the bots and will mercilessly attack them."
- - scadd: "An experimental CPU upgrade would theoretically allow any of the bots to function with the same intelligence capacity as the maintenance drones. We still have no idea what causes it to boot up. Science!"
- - scadd: "INCOMING TRANSMISSION: Greetings to agents, pirates, operatives, and anyone who otherwise uses our equipment. Following the NT update of bot firmware, we have updated the cryptographic sequencer's hacking routines as well. The medbots you emag will not poison you anymore, the clanbots won't clean after themselves immediately, and floorbots... wear a space suit. Oh, and it works on the new farmbots, too."