diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 88a2a16525f..2ca39087c20 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -479,6 +479,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Metal sheets crate"
group = "Engineering"
+/datum/supply_packs/metal200
+ name = "Bulk metal crate"
+ contains = list(/obj/item/stack/material/steel, /obj/item/stack/material/steel, /obj/item/stack/material/steel,/obj/item/stack/material/steel)
+ amount = 50
+ cost = 20
+ containertype = /obj/structure/largecrate
+ containername = "Bulk metal crate"
+ group = "Engineering"
+
/datum/supply_packs/glass50
name = "50 glass sheets"
contains = list(/obj/item/stack/material/glass)
diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm
index af004b00c54..24ebafc5562 100644
--- a/code/game/gamemodes/events/power_failure.dm
+++ b/code/game/gamemodes/events/power_failure.dm
@@ -9,7 +9,7 @@
for(var/obj/machinery/power/apc/C in world)
if(!C.is_critical)
- C.energy_fail(rand(30 * severity,60 * severity))
+ C.energy_fail(rand(40 * severity,150 * severity))
/proc/power_restore(var/announce = 1)
var/list/skipped_areas = list(/area/turret_protected/ai)
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index db495551681..681d84f4a70 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -197,7 +197,9 @@
"BlackOps Commander",
"Supreme Commander",
"Emergency Response Team",
- "Emergency Response Team Leader")
+ "Emergency Response Team Leader",
+ "Emergency Responder",
+ "Central Command Internal Affairs Agent")
/mob/proc/GetIdCard()
return null
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 36699389edd..5709ec64b7b 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -115,6 +115,8 @@
..()
/obj/machinery/computer/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if (!mover)
+ return 1
if(istype(mover,/obj/item/projectile) && density)
if (prob(80))
//Holoscreens are non solid, and the frames of the computers are thin. So projectiles will usually
@@ -122,7 +124,7 @@
return 1
else
return 0
- else if(isanimal(mover) && mover.checkpass(PASSTABLE))
+ else if(mover.checkpass(PASSTABLE))
//Animals can run under them, lots of empty space
return 1
return ..()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 10839a513e6..1ced85e8545 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -331,17 +331,18 @@
qdel(O)
//Handle job slot/tater cleanup.
- var/job = occupant.mind.assigned_role
+ if (occupant.mind)
+ var/job = occupant.mind.assigned_role
- job_master.FreeRole(job)
+ job_master.FreeRole(job)
- if(occupant.mind.objectives.len)
- qdel(occupant.mind.objectives)
- occupant.mind.special_role = null
- //else
- //if(ticker.mode.name == "AutoTraitor")
- //var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
- //current_mode.possible_traitors.Remove(occupant)
+ if(occupant.mind.objectives.len)
+ qdel(occupant.mind.objectives)
+ occupant.mind.special_role = null
+ //else
+ //if(ticker.mode.name == "AutoTraitor")
+ //var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
+ //current_mode.possible_traitors.Remove(occupant)
// Delete them from datacore.
@@ -433,20 +434,16 @@
/obj/machinery/cryopod/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob)
if(!istype(user))
return
-
if(!check_occupant_allowed(O))
return
-
if(occupant)
user << "\The [src] is in use."
return
-
var/mob/living/L = O
if(L.stat == DEAD)
user << "Dead people can not be put into stasis."
return
-
for(var/mob/living/carbon/slime/M in range(1,L))
if(M.Victim == L)
usr << "[L.name] will not fit into the cryo pod because they have a slime latched onto their head."
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 8596ce037d7..8ba8e56c3f4 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -58,3 +58,19 @@
user << "You remove the last piece of meat from \the [victim_name]!"
icon_state = "spike"
occupied = 0
+
+
+/obj/structure/kitchenspike/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if (!mover)
+ return 1
+
+ if(istype(mover,/obj/item/projectile) && density)
+ if (!occupied && prob(80))
+ //Wiry frame, usually wont be cover
+ return 1
+ else
+ return 0
+ else if(mover.checkpass(PASSTABLE))
+//Animals can run under them, lots of empty space
+ return 1
+ return ..()
\ No newline at end of file
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 3049976dfad..50dd8b07eea 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -37,7 +37,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("stealth") rights |= R_STEALTH
if("rejuv","rejuvinate") rights |= R_REJUVINATE
if("varedit") rights |= R_VAREDIT
- if("everything","host","all") rights |= (R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD)
+ if("everything","host","all") rights |= (R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD | R_CCIAA | R_DEV)
if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index be63c13e7bd..555ec36bc89 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -157,7 +157,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 60),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 50, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 100),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 100),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 80),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 45, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 6, ASSIGNMENT_SCIENTIST = 6)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 40, list(ASSIGNMENT_ENGINEER = 13)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_CYBORG = 20),1),
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index d4aa75aad32..9b5425fe3ca 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -131,31 +131,33 @@
switch(vermin)
if(VERM_MICE)
spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
- max_number = 7
+ max_number = 16
+ //Large quantities of mice aren't a potential lag issue since they decompose to
+ //inert skeletons now
vermstring = "mice"
if(VERM_LIZARDS)
spawn_types = list(/mob/living/simple_animal/lizard)
- max_number = 7
+ max_number = 12
vermstring = "lizards"
if(VERM_SPIDERS)
spawn_types = list(/obj/effect/spider/spiderling)
- max_number = 3
+ max_number = 5
vermstring = "spiders"
if (VERM_DIYAAB)
spawn_types = list(/mob/living/simple_animal/hostile/diyaab)
- max_number = 2
+ max_number = 4
vermstring = "strange creatures"
if (VERM_BATS)
spawn_types = list(/mob/living/simple_animal/hostile/scarybat)
- max_number = 2
+ max_number = 4
vermstring = "space bats"
if (VERM_YITHIAN)
spawn_types = list(/mob/living/simple_animal/yithian)
- max_number = 4
+ max_number = 7
vermstring = "strange creatures"
if (VERM_TINDALOS)
spawn_types = list(/mob/living/simple_animal/tindalos)
- max_number = 4
+ max_number = 7
vermstring = "strange creatures"
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index b4c212e73ac..a016d6200e2 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -1,8 +1,8 @@
/datum/event/radiation_storm
- var/const/enterBelt = 30
- var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation
- var/const/leaveBelt = 80
- var/const/revokeAccess = 135
+ var/const/enterBelt = 45
+ var/const/radIntervall = 5 // 20 ticks
+ var/const/leaveBelt = 145
+ var/const/revokeAccess = 200
startWhen = 2
announceWhen = 1
endWhen = revokeAccess
@@ -43,9 +43,9 @@
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/H = C
- H.apply_effect((rand(15,35)),IRRADIATE,0)
- if(prob(5))
- H.apply_effect((rand(40,70)),IRRADIATE,0)
+ H.apply_effect((rand(15,30)),IRRADIATE,0)
+ if(prob(4))
+ H.apply_effect((rand(20,60)),IRRADIATE,0)
if (prob(75))
randmutb(H) // Applies bad mutation
domutcheck(H,null,MUTCHK_FORCED)
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index a44856302f6..9d658858e99 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -1,5 +1,5 @@
/datum/event/rogue_drone
- endWhen = 1000
+ endWhen = 1300
var/list/drones_list = list()
ic_name = "combat drones"
@@ -10,12 +10,7 @@
if(C.name == "carpspawn")
possible_spawns.Add(C)
- //25% chance for this to be a false alarm
- var/num
- if(prob(25))
- num = 0
- else
- num = rand(2,6)
+ var/num = rand(2,10)
for(var/i=0, iJMP)")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(10, 0, spawn_loc)
diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm
index b36f7f93760..d64ebbfcb15 100644
--- a/code/modules/events/wallrot.dm
+++ b/code/modules/events/wallrot.dm
@@ -21,8 +21,8 @@ datum/event/wallrot/start()
// Have a chance to rot lots of other walls.
var/rotcount = 0
- var/actual_severity = severity * rand(5, 10)
- for(var/turf/simulated/wall/W in range(5, center)) if(prob(50))
+ var/actual_severity = severity * rand(10, 20)
+ for(var/turf/simulated/wall/W in range(12, center)) if(prob(30))
W.rot()
rotcount++
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 19107279e83..ab8c15ba23c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -913,6 +913,12 @@
total_phoronloss += vsc.plc.CONTAMINATION_LOSS
if(!(status_flags & GODMODE)) adjustToxLoss(total_phoronloss)
+ if (intoxication)
+ handle_intoxication()
+ else if (alcohol_clumsy)//This var is defined in intoxication.dm, its set true when alcohol has caused clumsiness
+ mutations.Remove(CLUMSY)
+ alcohol_clumsy = 0
+
if(status_flags & GODMODE) return 0 //godmode
diff --git a/code/modules/mob/living/silicon/robot/gripper.dm b/code/modules/mob/living/silicon/robot/gripper.dm
index 541b2f6c7a7..0ab4148a017 100644
--- a/code/modules/mob/living/silicon/robot/gripper.dm
+++ b/code/modules/mob/living/silicon/robot/gripper.dm
@@ -266,7 +266,8 @@
/obj/item/weapon/reagent_containers/glass,
/obj/item/weapon/reagent_containers/food,
/obj/item/seeds,
- /obj/item/weapon/grown
+ /obj/item/weapon/grown,
+ /obj/item/trash
)
/obj/item/weapon/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 4b01b0a5178..9fbdcc6d48e 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -447,7 +447,7 @@ var/global/list/robot_modules = list(
"Sleek" = "sleeksecurity",
"Black Knight" = "securityrobot",
"Bloodhound" = "bloodhound",
- "Bloodhound - Treaded" = "secborg+tread",
+ "Bloodhound - Treaded" = "treadhound",
"Drone" = "drone-sec",
"Classic" = "robotSecy",
"Wide" = "wide",
diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm
index 0f6348deb9c..32f8892a8d3 100644
--- a/code/modules/modular_computers/computers/machinery/modular_console.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_console.dm
@@ -46,6 +46,8 @@
update_icon()
/obj/machinery/modular_computer/console/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if (!mover)
+ return 1
if(istype(mover,/obj/item/projectile) && density)
if (prob(80))
//Holoscreens are non solid, and the frames of the computers are thin. So projectiles will usually
@@ -53,7 +55,7 @@
return 1
else
return 0
- else if(isanimal(mover) && mover.checkpass(PASSTABLE))
+ else if(mover.checkpass(PASSTABLE))
//Animals can run under them, lots of empty space
return 1
return ..()
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index be040b346b4..e66afddfef7 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -365,6 +365,7 @@
M.activate()
/obj/item/projectile/proc/tracer_effect(var/matrix/M)
+
if(ispath(tracer_type))
var/obj/effect/projectile/P = new tracer_type(location.loc)
@@ -378,7 +379,10 @@
P.activate()
/obj/item/projectile/proc/impact_effect(var/matrix/M)
+ if (!location)
+ return//Combat drones sometimes cause a runtime error with null location. Impact effect isnt important
if(ispath(tracer_type))
+
var/obj/effect/projectile/P = new impact_type(location.loc)
if(istype(P))
diff --git a/html/changelogs/Nanako-EventFixes.yml b/html/changelogs/Nanako-EventFixes.yml
new file mode 100644
index 00000000000..e0a039cc32e
--- /dev/null
+++ b/html/changelogs/Nanako-EventFixes.yml
@@ -0,0 +1,43 @@
+################################
+# 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
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Nanako
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - imageadd: "Remade security spiderborg sprite"
+ - tweak: "Rebalanced a wide variety of insignificant events to be a bit more interesting"
+ - tweak: "Fixed computer passability for drones, and made kitchen meatsppikes passable."
+ - bugfix: "Fixed drunkenness not working."
+ - bugfix: "Fixed unusual containers always containing common junk instead of rarer items. Yes this was actually a bug."
+ - tweak: "Service grippers can now pick up trash. Including used plates, bowls, etc"
+ - bugfix: "CCIA and ERT should have the proper security hud icons now."
+ - rscadd: "Added a bulk metal crate to cargo, making it easy to order a large number of metal sheets at once."
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index 38206a33a97..89de2ef19f8 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ