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