diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index b0f6c5099be..43f79bd5dac 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -12,7 +12,10 @@ var/global/pipe_processing_killed = 0 datum/controller/game_controller var/list/shuttle_list // For debugging and VV + +#ifdef TESTING //This is just lagging start times and is never used on a live server. var/datum/random_map/ore/asteroid_ore_map // For debugging and VV. +#endif datum/controller/game_controller/New() //There can be only one master_controller. Out with the old and in with the new. @@ -70,10 +73,13 @@ datum/controller/game_controller/proc/setup_objects() var/obj/machinery/atmospherics/unary/vent_scrubber/T = U T.broadcast_status() + // Create the mining ore distribution map. // These values determine the specific area that the map is applied to. // If you do not use the official Baycode asteroid map, you will need to change them. +#ifdef TESTING asteroid_ore_map = new /datum/random_map/ore(null,13,32,5,217,223) +#endif // Set up antagonists. populate_antag_type_list() diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index a734c4746a7..4a2ea39f8d2 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -339,7 +339,10 @@ datum/controller/vote . += "Restart (Disallowed)" . += "
  • " if(is_staff || config.allow_vote_restart) - . += "Crew Transfer" + if (get_security_level() == "red" || get_security_level() == "delta") + . += "Crew Transfer (Disallowed, Code Red or above)" + else + . += "Crew Transfer" else . += "Crew Transfer (Disallowed)" if(is_staff) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f0e850bbf5c..0b0a6dea052 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -238,10 +238,11 @@ its easier to just keep the beam vertical. AM.throwing = 0 return -/atom/proc/add_hiddenprint(mob/living/M as mob) +/atom/proc/add_hiddenprint(mob/living/M) if(isnull(M)) return + if(!istype(M, /mob)) return if(isnull(M.key)) return - if (ishuman(M)) + if(ishuman(M)) var/mob/living/carbon/human/H = M if (!istype(H.dna, /datum/dna)) return 0 @@ -261,8 +262,9 @@ its easier to just keep the beam vertical. src.fingerprintslast = M.key return -/atom/proc/add_fingerprint(mob/living/M as mob, ignoregloves = 0) +/atom/proc/add_fingerprint(mob/living/M, ignoregloves = 0) if(isnull(M)) return + if(!istype(M, /mob)) return if(isAI(M)) return if(isnull(M.key)) return if (ishuman(M)) @@ -387,7 +389,7 @@ its easier to just keep the beam vertical. //returns 1 if made bloody, returns 0 otherwise -/atom/proc/add_blood(mob/living/carbon/human/M as mob) +/atom/proc/add_blood(mob/living/carbon/human/M) if(flags & NOBLOODY) return 0 @@ -407,7 +409,7 @@ its easier to just keep the beam vertical. . = 1 return 1 -/atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0) +/atom/proc/add_vomit_floor(mob/living/carbon/M, var/toxvomit = 0) if( istype(src, /turf/simulated) ) var/obj/effect/decal/cleanable/vomit/this = new /obj/effect/decal/cleanable/vomit(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 866f521e5ae..fddccf77dbb 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -162,27 +162,25 @@ var/obj/item/device/pda/P = null var/itemname = "" - var/info = "" if(istype(W, /obj/item/weapon/paper)) X = W itemname = X.name - info = X.info else P = W itemname = P.name - info = P.notehtml U << "You hold \a [itemname] up to the camera ..." for(var/mob/living/silicon/ai/O in living_mob_list) if(!O.client) continue - if(U.name == "Unknown") O << "[U] holds \a [itemname] up to one of your cameras ..." - else O << "[U] holds \a [itemname] up to one of your cameras ..." - O << browse(text("[][]", itemname, info), text("window=[]", itemname)) + if(U.name == "Unknown") + O << "[U] holds \a [itemname] up to one of your cameras ...view message" + else + O << "[U] holds \a [itemname] up to one of your cameras ...view message" + for(var/mob/O in player_list) if (istype(O.machine, /obj/machinery/computer/security)) var/obj/machinery/computer/security/S = O.machine if (S.current == src) - O << "[U] holds \a [itemname] up to one of the cameras ..." - O << browse(text("[][]", itemname, info), text("window=[]", itemname)) + O << "[U] holds \a [itemname] up to one of the cameras ...view message" else if (istype(W, /obj/item/weapon/camera_bug)) if (!src.can_use()) @@ -463,3 +461,18 @@ wires.MendAll() update_icon() update_coverage() + +/obj/machinery/camera/Topic(href, href_list) + ..() + if (href_list["readcapturedpaper"]) //Yep stolen from admin faxes + var/obj/item/fax = locate(href_list["readcapturedpaper"]) + if(!fax) + usr << "" + if (istype(fax, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = fax + P.show_content(usr,1) + else if (istype(fax, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = fax + H.show(usr) + return + return diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm index a1beabbea6b..ee763ce82ad 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -1,12 +1,27 @@ #ifndef T_BOARD -#error T_BOARD macro is not defined but we need it! +#error T_BOARD macro is not defined but we need it! #endif /obj/item/weapon/circuitboard/unary_atmos board_type = "machine" + var/machine_dir = SOUTH + var/init_dirs = SOUTH + +/obj/item/weapon/circuitboard/unary_atmos/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/weapon/screwdriver)) + machine_dir = turn(machine_dir, 90) + init_dirs = machine_dir + user.visible_message("\blue \The [user] adjusts the jumper on the [src]'s port configuration pins.", "\blue You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].") + return + +/obj/item/weapon/circuitboard/unary_atmos/examine() + ..() + usr << "The jumper is connecting the [dir2text(machine_dir)] pins." /obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. + U.dir = src.machine_dir + U.initialize_directions = src.init_dirs U.initialize() U.build_network() if (U.node) diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 9c160f028d4..9cf88b630a2 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -35,13 +35,22 @@ return ..() if (reagents.total_volume > 0) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) if(M == user) - M.visible_message("\The [user] eats some [loaded] from \the [src].") + if(M.get_species() == "Machine") + M.visible_message("\The [user] smudges some [loaded] from \the [src] on their screen.","You smudge some [loaded] from \the [src] on your screen.") + else + M.visible_message("\The [user] eats some [loaded] from \the [src].","You eat some [loaded] from \the [src].") + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) + overlays.Cut() else - M.visible_message("\The [user] feeds some [loaded] to \the [M] with \the [src].") - playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) - overlays.Cut() + if(M.get_species() == "Machine") + M.visible_message("\The [user] smudges some [loaded] onto [M].","You smudge some [loaded] from \the [src] onto [M].") + else + M.visible_message("\The [user] feeds some [loaded] to \the [M] with \the [src].","You feed \the [M] some [loaded] with \the [src].") + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) + overlays.Cut() return else user << "You don't have anything on \the [src]." //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK GODDAMNIT @@ -112,4 +121,4 @@ user.take_organ_damage(10) user.Paralyse(2) return - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index 6a3b720e336..462263a9537 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -11,7 +11,7 @@ icon_state = "tray" desc = "A metal tray to lay food on." throwforce = 12.0 - throwforce = 10.0 + force = 10.0 throw_speed = 1 throw_range = 5 w_class = 3.0 @@ -315,4 +315,4 @@ if (!safedrop) spill(user, src.loc) - safedrop = 0 \ No newline at end of file + safedrop = 0 diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 7c7fdf8ce6b..3d65ce02c03 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -18,6 +18,9 @@ user.visible_message("[user] pries \the [src] open.", \ "You pry open \the [src].", \ "You hear splitting wood.") + for(var/obj/vehicle/V in T.contents) + if(V) + V.unload(user) qdel(src) else return attack_hand(user) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index beafc8109fa..91d11812038 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -598,6 +598,10 @@ Traitors and the like can also be revived with the previous role mostly intact. return if (alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes") + if (istype(O, /mob/dead/observer)) + var/mob/dead/observer/M = O + if (M.client && alert(src, "They are still connected. Are you sure, they will loose connection.", "Confirmation", "Yes", "No") != "Yes") + return log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1) feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index ed508c7209e..d2733d1d0da 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -38,6 +38,9 @@ set name = "Adjust welding mask" set src in usr + if(!base_state) + base_state = icon_state + if(usr.canmove && !usr.stat && !usr.restrained()) if(src.up) src.up = !src.up @@ -150,7 +153,7 @@ var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner") ears.Blend(earbit, ICON_OVERLAY) - + item_icons[icon_head] = ears /obj/item/clothing/head/richard @@ -158,4 +161,4 @@ desc = "You can hear the distant sounds of rhythmic electronica." icon_state = "richard" body_parts_covered = HEAD|FACE - flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR \ No newline at end of file + flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index 0d88f749667..e73a0cba7c1 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -1,6 +1,6 @@ /mob/living/carbon/human/proc/handle_strip(var/slot_to_strip,var/mob/living/user) - if(!slot_to_strip || !istype(user)) + if(!slot_to_strip || !istype(user) || isanimal(user) || !istype(user, /mob/living/simple_animal/hostile)) return 0 // TODO : Change to incapacitated() on merge. @@ -72,7 +72,7 @@ else visible_message("\The [user] is trying to put \a [held] on \the [src]!") - if(!do_after(user,HUMAN_STRIP_DELAY)) + if(!do_mob(user,src,HUMAN_STRIP_DELAY)) return 0 if(!stripping && user.get_active_hand() != held) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index bceb3be0920..fdb8df5aab1 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -280,6 +280,21 @@ return ..() +/mob/living/silicon/robot/drone/Bump(var/atom/movable/AM, yes) + + if(istype(AM,/obj/machinery/door)) // check for doors first as that will be most common + return ..(AM,yes) + + if(!(istype(AM,/obj/item/pipe) || istype(AM,/obj/structure/disposalconstruct))) + if(istype(AM,/obj/item)) //Would this even be possible? Someone try to activate that message + var/obj/item/O = AM + if(O.w_class > can_pull_size) + src << "You are too small to push that." + return 0 + else if(istype(AM,/obj)) + return 0 + ..(AM,yes) + /mob/living/silicon/robot/drone/add_robot_verbs() src.verbs |= silicon_subsystems diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 5df6f1a5ce0..4392bfc391c 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -107,9 +107,11 @@ else set_dir(SOUTH) - if(isturf(movement_target.loc) ) - - UnarmedAttack(movement_target) + if(isturf(movement_target.loc)) + for(var/direction in alldirs) + var/turf/T = get_step(src, direction) + if(T == movement_target.loc) + UnarmedAttack(movement_target) else if(ishuman(movement_target.loc) && prob(20)) visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.") else diff --git a/code/modules/mob/mob_cleanup.dm b/code/modules/mob/mob_cleanup.dm index cdc734c49a7..1baebf35706 100644 --- a/code/modules/mob/mob_cleanup.dm +++ b/code/modules/mob/mob_cleanup.dm @@ -38,10 +38,10 @@ Put (mob/proc)s here that are in dire need of a code cleanup. if(force_species_check) var/fail = 1 for(var/name in virus.affected_species) - var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]") - if(mob_type && istype(src, mob_type)) - fail = 0 - break + if(istype(src, /mob/living/carbon)) + if(src:species && src:species.name == name) + fail = 0 + break if(fail) return if(skip_this == 1) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index d3629f10945..35e84f9c65b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -580,7 +580,7 @@ proc/is_blind(A) name = realname for(var/mob/M in player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && check_rights(R_MOD|R_ADMIN, 0, M))) && (M.client.prefs.toggles & CHAT_DEAD)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && check_rights(R_DEV|R_MOD|R_ADMIN, 0, M))) && (M.client.prefs.toggles & CHAT_DEAD)) var/follow var/lname if(subject) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 75b1328ef59..05ba1fc2bd1 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -310,6 +310,9 @@ return 1 +/obj/vehicle/user_unbuckle_mob(var/mob/user) + unload(user) + return /obj/vehicle/proc/unload(var/mob/user, var/direction) if(!load) diff --git a/html/changelogs/SoundScopes-bugfixes.yml b/html/changelogs/SoundScopes-bugfixes.yml new file mode 100644 index 00000000000..32e1866adec --- /dev/null +++ b/html/changelogs/SoundScopes-bugfixes.yml @@ -0,0 +1,19 @@ +author: SoundScopes + +delete-after: True + +changes: + - bugfix: "Stripping mobs now requires both mobs to stay still." + - tweak: "Drones can no longer push objects they can't pull." + - bugfix: "Vairous runtimes, given a healthy home." + - tweak: "Simple Animals can no longer take items of people." + - bugfix: "resisting on cargo trains actually unbuckles you properly, no more bluespace teleport" + - bugfix: "breaking a crate on a cargo tug no longer leaves a hidden crate on the trolly" + - tweak: "Holding items up to cameras no longer forces a window in the AI players face." + - bugfix: "Having ' in your name no longer breaks when holding items up to cameras" + - bugfix: "Ian now needs to stand next to something to eat. No more eating through doors(single side windows are an issue)" + - bugfix: "Welding mask toggle verb when first used now displays the correct icon" + - bugfix: "Voting on code red or above notifys when it isn't allowed" + - tweak: "Using a screwdriver on heater/cooler circuitboards now changes the direction." + - bugfix: "Viruses only affect the correct species." + - bugfix: "IPC's can't eat from forks."