diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 916a750b35..c5b1c7de61 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -11,6 +11,7 @@ var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacon var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons. var/global/list/nuke_list = list() var/global/list/alarmdisplay = list() //list of all machines or programs that can display station alerts +var/global/list/singularities = list() //list of all singularities on the station (actually technically all engines) var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 82726f0598..232fe649e6 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -42,9 +42,10 @@ if(istype(loc, /obj/item/device/aicard) && (pixel_turf in view(client.view, loc))) turf_visible = TRUE else - log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") - message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))") - send2irc("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") + if (pixel_turf.obscured) + log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") + message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))") + send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") return var/list/modifiers = params2list(params) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index 8b65392a7c..6f446616b4 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -62,7 +62,7 @@ T.ratvar_act(1) var/dir_to_step_in = pick(cardinal) if(!prey) - for(var/obj/singularity/narsie/N in poi_list) + for(var/obj/singularity/narsie/N in singularities) if(N.z == z) prey = N break diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index ca15b73251..04a0d618c1 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -34,7 +34,7 @@ user << "An overwhelming sense of nausea overpowers you!" user.Dizzy(120) else - user << "\"One of Ratvar's toys is trying to play with things [user.gender == FEMALE ? "s" : ""]he shouldn't. Cute.\"" + user << "\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\"" user << "A horrible force yanks at your arm!" user.emote("scream") user.apply_damage(30, BRUTE, pick("l_arm", "r_arm")) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 822d4e92fa..8d4a484d99 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -22,6 +22,7 @@ /obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M) if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) if(obj_integrity < max_integrity) + M.changeNext_move(CLICK_CD_MELEE) obj_integrity = min(max_integrity, obj_integrity + 5) Beam(M, icon_state="sendbeam", time=4) M.visible_message("[M] repairs \the [src].", \ diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 1f0cb9122b..d85e2066eb 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -35,6 +35,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 var/stat_msg1 var/stat_msg2 +/obj/machinery/computer/communications/proc/checkCCcooldown() + var/obj/item/weapon/circuitboard/computer/communications/CM = circuit + if(CM.lastTimeUsed + 600 > world.time) + return FALSE + return TRUE /obj/machinery/computer/communications/New() shuttle_caller_list += src @@ -264,11 +269,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 // OMG CENTCOM LETTERHEAD if("MessageCentcomm") if(src.authenticated==2) - if(CM.lastTimeUsed + 600 > world.time) + if(!checkCCcooldown()) usr << "Arrays recycling. Please stand by." return var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "") - if(!input || !(usr in view(1,src))) + if(!input || !(usr in view(1,src)) || !checkCCcooldown()) return playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) Centcomm_announce(input, usr) @@ -280,12 +285,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 // OMG SYNDICATE ...LETTERHEAD if("MessageSyndicate") if((src.authenticated==2) && (src.emagged)) - if(CM.lastTimeUsed + 600 > world.time) + if(!checkCCcooldown()) usr << "Arrays recycling. Please stand by." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "") - if(!input || !(usr in view(1,src))) + if(!input || !(usr in view(1,src)) || !checkCCcooldown()) return playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) Syndicate_announce(input, usr) @@ -301,11 +306,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if("nukerequest") //When there's no other way if(src.authenticated==2) - if(CM.lastTimeUsed + 600 > world.time) + if(!checkCCcooldown()) usr << "Arrays recycling. Please stand by." return var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") - if(!input || !(usr in view(1,src))) + if(!input || !(usr in view(1,src)) || !checkCCcooldown()) return Nuke_request(input, usr) usr << "Request sent." @@ -687,4 +692,4 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 /obj/machinery/computer/communications/proc/overrideCooldown() var/obj/item/weapon/circuitboard/computer/communications/CM = circuit - CM.lastTimeUsed = 0 + CM.lastTimeUsed = 0 \ No newline at end of file diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index fca58c4a08..99b44016ad 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -11,6 +11,8 @@ density = 1 layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS stat = 0 + verb_say = "states" + var/cooldown = 0 var/active = 0 var/icontype = "beacon" @@ -20,18 +22,17 @@ if(surplus() < 1500) if(user) user << "The connected wire doesn't have enough current." return - for(var/obj/singularity/singulo in world) + for(var/obj/singularity/singulo in singularities) if(singulo.z == z) singulo.target = src icon_state = "[icontype]1" active = 1 - machines |= src if(user) user << "You activate the beacon." /obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) - for(var/obj/singularity/singulo in world) + for(var/obj/singularity/singulo in singularities) if(singulo.target == src) singulo.target = null icon_state = "[icontype]0" @@ -81,12 +82,18 @@ //stealth direct power usage /obj/machinery/power/singularity_beacon/process() if(!active) - return PROCESS_KILL + return + + if(surplus() > 1500) + add_load(1500) + if(cooldown <= world.time) + cooldown = world.time + 100 + for(var/obj/singularity/singulo in singularities) + if(singulo.z == z) + say("The [singulo] is now [get_dist(src,singulo)] standard lengths away to the [dir2text(get_dir(src,singulo))]") else - if(surplus() > 1500) - add_load(1500) - else - Deactivate() + Deactivate() + say("Insufficient charge detected - powering down") /obj/machinery/power/singularity_beacon/syndicate @@ -120,4 +127,4 @@ /obj/item/device/sbeacondrop/powersink desc = "A label on it reads: Warning: Activating this device will send a power draining device to your location." droptype = /obj/item/device/powersink - origin_tech = "bluespace=4;syndicate=5" + origin_tech = "bluespace=4;syndicate=5" \ No newline at end of file diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 763031cdd8..eaef9c6809 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -156,10 +156,7 @@ //BubbleWrap END if (src && usr.machine==src) //do not reopen closed window - spawn( 0 ) - src.interact(usr) - return - return + addtimer(CALLBACK(src, /atom/.proc/interact, usr), 0) /obj/item/stack/proc/building_checks(datum/stack_recipe/R, multiplier) if (src.get_amount() < R.req_amount*multiplier) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ab41b3f511..f9c722cb3f 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -147,7 +147,7 @@ /obj/item/weapon/storage/box/masks name = "box of sterile masks" desc = "This box contains sterile medical masks." - icon_state = "sterile" + illustration = "sterile" /obj/item/weapon/storage/box/masks/New() ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 2f6e5db066..72d8e3987b 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -520,6 +520,7 @@ /obj/structure/sink/puddle //splishy splashy ^_^ name = "puddle" + desc = "A puddle used for washing one's hands and face." icon_state = "puddle" /obj/structure/sink/puddle/attack_hand(mob/M) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index c0190a0fb2..a2df985f7a 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -18,7 +18,7 @@ /turf/open/space/Initialize() icon_state = SPACE_ICON_STATE air = space_gas - + if(initialized) stack_trace("Warning: [src]([type]) initialized multiple times!") initialized = TRUE @@ -60,9 +60,11 @@ /turf/open/space/attack_paw(mob/user) return src.attack_hand(user) -/turf/open/space/attackby(obj/item/C, mob/user, params) +/turf/open/space/attackby(obj/item/C, mob/user, area_restriction) ..() if(istype(C, /obj/item/stack/rods)) + if(area_restriction && !istype(get_area(src), area_restriction)) + return var/obj/item/stack/rods/R = C var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index dd772aa1ac..e2ca23365b 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -57,9 +57,9 @@ AM.loc = T AM.newtonian_move(dir) -//Overwrite because we dont want people building rods in space. -/turf/open/space/transit/attackby() - return +//Overwrite because we dont want people building rods +/turf/open/space/transit/attackby(obj/item/C, mob/user) + ..(C, user, /area/shuttle) /turf/open/space/transit/Initialize() ..() diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 8070a9e58b..d2e50a084c 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -35,7 +35,7 @@ usr << "Bad map file: [map]" return - var/datum/map_template/M = new(map=map, rename="[map]") + var/datum/map_template/M = new(map, "[map]") if(M.preload_size(map)) usr << "Map template '[map]' ready to place ([M.width]x[M.height])" SSmapping.map_templates[M.name] = M diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index b8bea629a1..3b7ef0674a 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -302,19 +302,16 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove() if(!Mport) user << "This station is not equipped with an approprite mining shuttle. Please contact Nanotrasen Support." return - var/search_radius = max(Mport.width, Mport.height)*0.5 - var/list/landing_areas = get_areas_in_range(search_radius, landing_spot) - for(var/area/shuttle/auxillary_base/AB in landing_areas) //You land NEAR the base, not IN it. - user << "The mining shuttle must not land within the mining base itself." - SSshuttle.stationary.Remove(Mport) - qdel(Mport) - return + var/obj/docking_port/mobile/mining_shuttle + var/list/landing_turfs = list() //List of turfs where the mining shuttle may land. for(var/S in SSshuttle.mobile) var/obj/docking_port/mobile/MS = S if(MS.id != "mining") continue mining_shuttle = MS + landing_turfs = mining_shuttle.return_ordered_turfs(x,y,z,dir) + break if(!mining_shuttle) //Not having a mining shuttle is a map issue user << "No mining shuttle signal detected. Please contact Nanotrasen Support." @@ -322,6 +319,13 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove() qdel(Mport) return + for(var/L in landing_turfs) //You land NEAR the base, not IN it. + if(istype(get_area(L), /area/shuttle/auxillary_base)) + user << "The mining shuttle must not land within the mining base itself." + SSshuttle.stationary.Remove(Mport) + qdel(Mport) + return + if(!mining_shuttle.canDock(Mport)) user << "Unable to secure a valid docking zone. Please try again in an open area near, but not within the aux. mining base." SSshuttle.stationary.Remove(Mport) @@ -331,7 +335,7 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove() aux_base_console.set_mining_mode() //Lets the colony park the shuttle there, now that it has a dock. user << "Mining shuttle calibration successful! Shuttle interface available at base console." anchored = 1 //Locks in place to mark the landing zone. - playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + playsound(loc, 'sound/machines/ping.ogg', 50, 0) /obj/structure/mining_shuttle_beacon/proc/clear_cooldown() anti_spam_cd = 0 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d444d7d8ca..8101587519 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -319,7 +319,7 @@ field_generator power level display //I want to avoid using global variables. spawn(1) var/temp = 1 //stops spam - for(var/obj/singularity/O in world) + for(var/obj/singularity/O in singularities) if(O.last_warning && temp) if((world.time - O.last_warning) > 50) //to stop message-spam temp = 0 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 29ce8dc79d..b836d321ca 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -36,6 +36,7 @@ ..() START_PROCESSING(SSobj, src) poi_list |= src + singularities |= src for(var/obj/machinery/power/singularity_beacon/singubeacon in machines) if(singubeacon.active) target = singubeacon @@ -45,6 +46,7 @@ /obj/singularity/Destroy() STOP_PROCESSING(SSobj, src) poi_list.Remove(src) + singularities.Remove(src) return ..() /obj/singularity/Move(atom/newloc, direct) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index ba4798b5d7..83256a27d6 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -138,7 +138,6 @@ iconF = "flight_on" add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) - //Casing /obj/item/ammo_casing/energy/kinetic projectile_type = /obj/item/projectile/kinetic @@ -152,17 +151,6 @@ var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc KA.modify_projectile(BB) - var/turf/proj_turf = get_turf(BB) - if(!isturf(proj_turf)) - return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure > 50) - BB.name = "weakened [BB.name]" - var/obj/item/projectile/kinetic/K = BB - K.damage *= K.pressure_decrease - - //Projectiles /obj/item/projectile/kinetic name = "kinetic force" @@ -178,6 +166,17 @@ var/mob_aoe = 0 var/list/hit_overlays = list() +/obj/item/projectile/kinetic/prehit(atom/target) + var/turf/target_turf = get_turf(target) + if(!isturf(target_turf)) + return + var/datum/gas_mixture/environment = target_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure > 50) + name = "weakened [name]" + damage = damage * pressure_decrease + . = ..() + /obj/item/projectile/kinetic/on_range() strike_thing() ..() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 5fb80efbdf..002112b717 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -119,7 +119,7 @@ name = "Alien Scalpel" desc = "An advanced scalpel obtained through Abductor technology." id = "alien_scalpel" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/scalpel/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) @@ -129,7 +129,7 @@ name = "Alien Hemostat" desc = "An advanced hemostat obtained through Abductor technology." id = "alien_hemostat" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/hemostat/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) @@ -139,7 +139,7 @@ name = "Alien Retractor" desc = "An advanced retractor obtained through Abductor technology." id = "alien_retractor" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/retractor/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) @@ -149,7 +149,7 @@ name = "Alien Circular Saw" desc = "An advanced surgical saw obtained through Abductor technology." id = "alien_saw" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/circular_saw/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) @@ -159,7 +159,7 @@ name = "Alien Drill" desc = "An advanced drill obtained through Abductor technology." id = "alien_drill" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/surgicaldrill/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) @@ -169,7 +169,7 @@ name = "Alien Cautery" desc = "An advanced cautery obtained through Abductor technology." id = "alien_cautery" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/cautery/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)