diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index 67ace07fe2a..5d63512c144 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -103,7 +103,7 @@ obj/item/check_airflow_movable(n) density = 1 od = 1 while(airflow_speed > 0) - if(airflow_speed <= 0) return + if(airflow_speed <= 0) break airflow_speed = min(airflow_speed,15) airflow_speed -= vsc.airflow_speed_decay if(airflow_speed > 7) @@ -120,9 +120,9 @@ obj/item/check_airflow_movable(n) if ((!( src.airflow_dest ) || src.loc == src.airflow_dest)) src.airflow_dest = locate(min(max(src.x + xo, 1), world.maxx), min(max(src.y + yo, 1), world.maxy), src.z) if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) - return + break if(!istype(loc, /turf)) - return + break step_towards(src, src.airflow_dest) if(ismob(src) && src:client) src:client:move_delay = world.time + vsc.airflow_mob_slowdown diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index e3a28fe3d47..9d031ce3d39 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -5,9 +5,9 @@ /turf/var/datum/gas_mixture/air /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add) + if(graphic_add && graphic_add.len) overlays += graphic_add - if(graphic_remove) + if(graphic_remove && graphic_remove.len) overlays -= graphic_remove /turf/proc/update_air_properties() diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm index e794c36b02a..1f2cbee8d33 100644 --- a/code/ZAS/Zone.dm +++ b/code/ZAS/Zone.dm @@ -118,6 +118,7 @@ Class Procs: if(invalid) return //Short circuit for explosions where rebuild is called many times over. c_invalidate() for(var/turf/simulated/T in contents) + T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt //T.dbg(invalid_zone) T.needs_air_update = 0 //Reset the marker so that it will be added to the list. air_master.mark_for_update(T) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index a9056ef8374..d19c6138fc5 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -56,7 +56,7 @@ var/dx = abs(Ax - Bx) //sides of right-angled triangle var/dy = abs(Ay - By) if(dx>=dy) return (k1*dx) + (k2*dy) //No sqrt or powers :) - else return (k1*dx) + (k2*dy) + else return (k2*dx) + (k1*dy) #undef k1 #undef k2 @@ -90,6 +90,14 @@ //turfs += centerturf return atoms +/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive) + if(!centre) + return + + var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z) + var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z) + return block(x1y1,x2y2) + /proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) var/dx = Loc1.x - Loc2.x var/dy = Loc1.y - Loc2.y diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 41e8e3bd2e4..7ca8216bf21 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -109,7 +109,7 @@ src.l_hand_hud_object = inv_box src.adding += inv_box - using = new /obj/screen() + using = new /obj/screen/inventory() using.name = "hand" using.dir = SOUTH using.icon = ui_style @@ -118,7 +118,7 @@ using.layer = 19 src.adding += using - using = new /obj/screen() + using = new /obj/screen/inventory() using.name = "hand" using.dir = SOUTH using.icon = ui_style diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 06f1faf0db9..d1398402fc5 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -17,6 +17,7 @@ var/ckey=null var/mind=null var/languages=null + var/list/flavor=null /datum/dna2/record/proc/GetData() var/list/ser=list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 094f3ff7006..19bc7d3b912 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -722,13 +722,13 @@ Auto Patrol: []"}, threatcount += 2 if(src.check_records) - for(var/datum/data/record/E in data_core.general) - var/perpname = perp.name - if(perp.wear_id) - var/obj/item/weapon/card/id/id = perp.wear_id.GetID() - if(id) - perpname = id.registered_name + var/perpname = perp.name + if(perp.wear_id) + var/obj/item/weapon/card/id/id = perp.wear_id.GetID() + if(id) + perpname = id.registered_name + for (var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.security) if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 5e1fbbe50da..8cc6220ad07 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -213,6 +213,7 @@ for(var/datum/language/L in R.languages) H.add_language(L.name) + H.flavor_texts = R.flavor.Copy() H.suiciding = 0 src.attempting = 0 return 1 diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 06527e3f97f..244598dacda 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -44,13 +44,13 @@ /obj/item/weapon/circuitboard/message_monitor name = "Circuit board (Message Monitor)" - build_path = "/obj/machinery/computer/message_monitor" + build_path = /obj/machinery/computer/message_monitor origin_tech = "programming=3" //TODO: Move these into computer/camera.dm /obj/item/weapon/circuitboard/security name = "Circuit board (Security Camera Monitor)" - build_path = "/obj/machinery/computer/security" + build_path = /obj/machinery/computer/security var/network = list("SS13") req_access = list(access_security) var/locked = 1 @@ -66,12 +66,12 @@ /obj/item/weapon/circuitboard/security/engineering name = "Circuit board (Engineering Camera Monitor)" - build_path = "/obj/machinery/computer/security/engineering" + build_path = /obj/machinery/computer/security/engineering network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") req_access = list() /obj/item/weapon/circuitboard/security/mining name = "Circuit board (Mining Camera Monitor)" - build_path = "/obj/machinery/computer/security/mining" + build_path = /obj/machinery/computer/security/mining network = list("MINE") req_access = list() /obj/item/weapon/circuitboard/aicore @@ -80,67 +80,67 @@ board_type = "other" /obj/item/weapon/circuitboard/aiupload name = "Circuit board (AI Upload)" - build_path = "/obj/machinery/computer/aiupload" + build_path = /obj/machinery/computer/aiupload origin_tech = "programming=4" /obj/item/weapon/circuitboard/borgupload name = "Circuit board (Cyborg Upload)" - build_path = "/obj/machinery/computer/borgupload" + build_path = /obj/machinery/computer/borgupload origin_tech = "programming=4" /obj/item/weapon/circuitboard/med_data name = "Circuit board (Medical Records)" - build_path = "/obj/machinery/computer/med_data" + build_path = /obj/machinery/computer/med_data /obj/item/weapon/circuitboard/pandemic name = "Circuit board (PanD.E.M.I.C. 2200)" - build_path = "/obj/machinery/computer/pandemic" + build_path = /obj/machinery/computer/pandemic origin_tech = "programming=2;biotech=2" /obj/item/weapon/circuitboard/scan_consolenew name = "Circuit board (DNA Machine)" - build_path = "/obj/machinery/computer/scan_consolenew" + build_path = /obj/machinery/computer/scan_consolenew origin_tech = "programming=2;biotech=2" /obj/item/weapon/circuitboard/communications name = "Circuit board (Communications)" - build_path = "/obj/machinery/computer/communications" + build_path = /obj/machinery/computer/communications origin_tech = "programming=2;magnets=2" /obj/item/weapon/circuitboard/card name = "Circuit board (ID Computer)" - build_path = "/obj/machinery/computer/card" + build_path = /obj/machinery/computer/card /obj/item/weapon/circuitboard/card/centcom name = "Circuit board (CentCom ID Computer)" - build_path = "/obj/machinery/computer/card/centcom" + build_path = /obj/machinery/computer/card/centcom //obj/item/weapon/circuitboard/shield // name = "Circuit board (Shield Control)" // build_path = "/obj/machinery/computer/stationshield" /obj/item/weapon/circuitboard/teleporter name = "Circuit board (Teleporter)" - build_path = "/obj/machinery/computer/teleporter" + build_path = /obj/machinery/computer/teleporter origin_tech = "programming=2;bluespace=2" /obj/item/weapon/circuitboard/secure_data name = "Circuit board (Security Records)" - build_path = "/obj/machinery/computer/secure_data" + build_path = /obj/machinery/computer/secure_data /obj/item/weapon/circuitboard/skills name = "Circuit board (Employment Records)" - build_path = "/obj/machinery/computer/skills" + build_path = /obj/machinery/computer/skills /obj/item/weapon/circuitboard/stationalert name = "Circuit board (Station Alerts)" - build_path = "/obj/machinery/computer/station_alert" -/obj/item/weapon/circuitboard/atmospheresiphonswitch - name = "Circuit board (Atmosphere Siphon Control)" - build_path = "/obj/machinery/computer/atmosphere/siphonswitch" + build_path = /obj/machinery/computer/station_alert +///obj/item/weapon/circuitboard/atmospheresiphonswitch +// name = "Circuit board (Atmosphere Siphon Control)" +// build_path = /obj/machinery/computer/atmosphere/siphonswitch /obj/item/weapon/circuitboard/air_management name = "Circuit board (Atmospheric Monitor)" - build_path = "/obj/machinery/computer/general_air_control" + build_path = /obj/machinery/computer/general_air_control var/frequency = 1439 /obj/item/weapon/circuitboard/air_management/tank_control name = "Circuit board (Tank Control)" - build_path = "/obj/machinery/computer/general_air_control/large_tank_control" + build_path = /obj/machinery/computer/general_air_control/large_tank_control frequency = 1441 /obj/item/weapon/circuitboard/air_management/supermatter_core name = "Circuit board (Core Control)" - build_path = "/obj/machinery/computer/general_air_control/supermatter_core" + build_path = /obj/machinery/computer/general_air_control/supermatter_core frequency = 1438 /obj/item/weapon/circuitboard/air_management/injector_control name = "Circuit board (Injector Control)" - build_path = "/obj/machinery/computer/general_air_control/fuel_injection" + build_path = /obj/machinery/computer/general_air_control/fuel_injection /obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C) if (..(C)) @@ -152,73 +152,73 @@ /obj/item/weapon/circuitboard/atmos_alert name = "Circuit board (Atmospheric Alert)" - build_path = "/obj/machinery/computer/atmos_alert" + build_path = /obj/machinery/computer/atmos_alert /obj/item/weapon/circuitboard/pod name = "Circuit board (Massdriver control)" - build_path = "/obj/machinery/computer/pod" + build_path = /obj/machinery/computer/pod /obj/item/weapon/circuitboard/robotics name = "Circuit board (Robotics Control)" - build_path = "/obj/machinery/computer/robotics" + build_path = /obj/machinery/computer/robotics origin_tech = "programming=3" /obj/item/weapon/circuitboard/drone_control name = "Circuit board (Drone Control)" - build_path = "/obj/machinery/computer/drone_control" + build_path = /obj/machinery/computer/drone_control origin_tech = "programming=3" /obj/item/weapon/circuitboard/cloning name = "Circuit board (Cloning)" - build_path = "/obj/machinery/computer/cloning" + build_path = /obj/machinery/computer/cloning origin_tech = "programming=3;biotech=3" /obj/item/weapon/circuitboard/arcade name = "Circuit board (Arcade)" - build_path = "/obj/machinery/computer/arcade" + build_path = /obj/machinery/computer/arcade origin_tech = "programming=1" /obj/item/weapon/circuitboard/turbine_control name = "Circuit board (Turbine control)" - build_path = "/obj/machinery/computer/turbine_computer" + build_path = /obj/machinery/computer/turbine_computer /obj/item/weapon/circuitboard/solar_control name = "Circuit board (Solar Control)" - build_path = "/obj/machinery/power/solar_control" + build_path = /obj/machinery/power/solar_control origin_tech = "programming=2;powerstorage=2" /obj/item/weapon/circuitboard/powermonitor name = "Circuit board (Power Monitor)" - build_path = "/obj/machinery/power/monitor" + build_path = /obj/machinery/power/monitor /obj/item/weapon/circuitboard/olddoor name = "Circuit board (DoorMex)" - build_path = "/obj/machinery/computer/pod/old" + build_path = /obj/machinery/computer/pod/old /obj/item/weapon/circuitboard/syndicatedoor name = "Circuit board (ProComp Executive)" - build_path = "/obj/machinery/computer/pod/old/syndicate" + build_path = /obj/machinery/computer/pod/old/syndicate /obj/item/weapon/circuitboard/swfdoor name = "Circuit board (Magix)" - build_path = "/obj/machinery/computer/pod/old/swf" + build_path = /obj/machinery/computer/pod/old/swf /obj/item/weapon/circuitboard/prisoner name = "Circuit board (Prisoner Management)" - build_path = "/obj/machinery/computer/prisoner" + build_path = /obj/machinery/computer/prisoner /obj/item/weapon/circuitboard/rdconsole name = "Circuit Board (RD Console)" - build_path = "/obj/machinery/computer/rdconsole/core" + build_path = /obj/machinery/computer/rdconsole/core /obj/item/weapon/circuitboard/mecha_control name = "Circuit Board (Exosuit Control Console)" - build_path = "/obj/machinery/computer/mecha" + build_path = /obj/machinery/computer/mecha /obj/item/weapon/circuitboard/rdservercontrol name = "Circuit Board (R&D Server Control)" - build_path = "/obj/machinery/computer/rdservercontrol" + build_path = /obj/machinery/computer/rdservercontrol /obj/item/weapon/circuitboard/crew name = "Circuit board (Crew monitoring computer)" - build_path = "/obj/machinery/computer/crew" + build_path = /obj/machinery/computer/crew origin_tech = "programming=3;biotech=2;magnets=2" /obj/item/weapon/circuitboard/mech_bay_power_console name = "Circuit board (Mech Bay Power Control Console)" - build_path = "/obj/machinery/computer/mech_bay_power_console" + build_path = /obj/machinery/computer/mech_bay_power_console origin_tech = "programming=2;powerstorage=3" /obj/item/weapon/circuitboard/ordercomp name = "Circuit board (Supply ordering console)" - build_path = "/obj/machinery/computer/ordercomp" + build_path = /obj/machinery/computer/ordercomp origin_tech = "programming=2" /obj/item/weapon/circuitboard/supplycomp name = "Circuit board (Supply shuttle console)" - build_path = "/obj/machinery/computer/supplycomp" + build_path = /obj/machinery/computer/supplycomp origin_tech = "programming=3" var/contraband_enabled = 0 @@ -232,54 +232,54 @@ /obj/item/weapon/circuitboard/operating name = "Circuit board (Operating Computer)" - build_path = "/obj/machinery/computer/operating" + build_path = /obj/machinery/computer/operating origin_tech = "programming=2;biotech=2" /obj/item/weapon/circuitboard/comm_monitor name = "Circuit board (Telecommunications Monitor)" - build_path = "/obj/machinery/computer/telecomms/monitor" + build_path = /obj/machinery/computer/telecomms/monitor origin_tech = "programming=3" /obj/item/weapon/circuitboard/comm_server name = "Circuit board (Telecommunications Server Monitor)" - build_path = "/obj/machinery/computer/telecomms/server" + build_path = /obj/machinery/computer/telecomms/server origin_tech = "programming=3" /obj/item/weapon/circuitboard/comm_traffic name = "Circuitboard (Telecommunications Traffic Control)" - build_path = "/obj/machinery/computer/telecomms/traffic" + build_path = /obj/machinery/computer/telecomms/traffic origin_tech = "programming=3" /obj/item/weapon/circuitboard/curefab name = "Circuit board (Cure fab)" - build_path = "/obj/machinery/computer/curer" + build_path = /obj/machinery/computer/curer /obj/item/weapon/circuitboard/splicer name = "Circuit board (Disease Splicer)" - build_path = "/obj/machinery/computer/diseasesplicer" + build_path = /obj/machinery/computer/diseasesplicer /obj/item/weapon/circuitboard/mining_shuttle name = "Circuit board (Mining Shuttle)" - build_path = "/obj/machinery/computer/shuttle_control/mining" + build_path = /obj/machinery/computer/shuttle_control/mining origin_tech = "programming=2" /obj/item/weapon/circuitboard/engineering_shuttle name = "Circuit board (Engineering Shuttle)" - build_path = "/obj/machinery/computer/shuttle_control/engineering" + build_path = /obj/machinery/computer/shuttle_control/engineering origin_tech = "programming=2" /obj/item/weapon/circuitboard/research_shuttle name = "Circuit board (Research Shuttle)" - build_path = "/obj/machinery/computer/shuttle_control/research" + build_path = /obj/machinery/computer/shuttle_control/research origin_tech = "programming=2" /obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future name = "Circuit board (Holodeck Control)" - build_path = "/obj/machinery/computer/HolodeckControl" + build_path = /obj/machinery/computer/HolodeckControl origin_tech = "programming=4" /obj/item/weapon/circuitboard/aifixer name = "Circuit board (AI Integrity Restorer)" - build_path = "/obj/machinery/computer/aifixer" + build_path = /obj/machinery/computer/aifixer origin_tech = "programming=3;biotech=2" /obj/item/weapon/circuitboard/area_atmos name = "Circuit board (Area Air Control)" - build_path = "/obj/machinery/computer/area_atmos" + build_path = /obj/machinery/computer/area_atmos origin_tech = "programming=2" /obj/item/weapon/circuitboard/prison_shuttle name = "Circuit board (Prison Shuttle)" - build_path = "/obj/machinery/computer/prison_shuttle" + build_path = /obj/machinery/computer/prison_shuttle origin_tech = "programming=2" @@ -342,13 +342,13 @@ /obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) if(istype(I,/obj/item/weapon/screwdriver)) user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.") - if(src.build_path == "/obj/machinery/computer/rdconsole/core") + if(src.build_path == /obj/machinery/computer/rdconsole/core) src.name = "Circuit Board (RD Console - Robotics)" - src.build_path = "/obj/machinery/computer/rdconsole/robotics" + src.build_path = /obj/machinery/computer/rdconsole/robotics user << "\blue Access protocols set to robotics." else src.name = "Circuit Board (RD Console)" - src.build_path = "/obj/machinery/computer/rdconsole/core" + src.build_path = /obj/machinery/computer/rdconsole/core user << "\blue Access protocols set to default." return diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 9ce8ccb4fc6..70a0bb50094 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -349,6 +349,9 @@ if (NOCLONE in subject.mutations) scantemp = "Error: Mental interface failure." return + if (subject.species && subject.species.flags & NO_SCAN) + scantemp = "Error: Mental interface failure." + return if (!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." return @@ -362,6 +365,7 @@ R.name=R.dna.real_name R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE R.languages=subject.languages + R.flavor=subject.flavor_texts.Copy() //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 3166774f96f..6cdedefe7f7 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -17,11 +17,11 @@ obj/machinery/recharger obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(istype(user,/mob/living/silicon)) return - + var/allowed = 0 for (var/allowed_type in allowed_devices) if (istype(G, allowed_type)) allowed = 1 - + if(allowed) if(charging) user << "\red \A [charging] is already charging here." @@ -54,6 +54,9 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) obj/machinery/recharger/attack_hand(mob/user as mob) + if(istype(user,/mob/living/silicon)) + return + add_fingerprint(user) if(charging) @@ -85,7 +88,7 @@ obj/machinery/recharger/process() icon_state = icon_state_charged update_use_power(1) return - + if(istype(charging, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = charging if(B.bcell) @@ -100,7 +103,7 @@ obj/machinery/recharger/process() icon_state = icon_state_idle update_use_power(1) return - + if(istype(charging, /obj/item/device/laptop)) var/obj/item/device/laptop/L = charging if(!L.stored_computer.battery.fully_charged()) @@ -111,7 +114,7 @@ obj/machinery/recharger/process() icon_state = icon_state_charged update_use_power(1) return - + if(istype(charging, /obj/item/weapon/cell)) var/obj/item/weapon/cell/C = charging if(!C.fully_charged()) diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index b93e01e7cb3..50a2c8a2e4d 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -27,6 +27,10 @@ user << "You need at least four rods to reinforce the [name]." /obj/item/weapon/table_parts/attack_self(mob/user as mob) + if(locate(/obj/structure/table) in user.loc) + user << "There is already a table here." + return + new /obj/structure/table( user.loc ) user.drop_item() del(src) @@ -43,6 +47,10 @@ del(src) /obj/item/weapon/table_parts/reinforced/attack_self(mob/user as mob) + if(locate(/obj/structure/table/reinforced) in user.loc) + user << "There is already a table here." + return + new /obj/structure/table/reinforced( user.loc ) user.drop_item() del(src) @@ -65,6 +73,10 @@ del(src) /obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) + if(locate(/obj/structure/table/woodentable) in user.loc) + user << "There is already a table here." + return + new /obj/structure/table/woodentable( user.loc ) user.drop_item() del(src) @@ -101,6 +113,10 @@ return /obj/item/weapon/rack_parts/attack_self(mob/user as mob) + if(locate(/obj/structure/rack) in user.loc) + user << "There is already a rack here." + return + var/obj/structure/rack/R = new /obj/structure/rack( user.loc ) R.add_fingerprint(user) user.drop_item() diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index fa6b52c4acf..93f4777adbb 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -25,8 +25,7 @@ if(do_after(user,40)) if(!src) return user << "\blue You dissasembled the girder!" - new /obj/item/stack/sheet/metal(get_turf(src)) - del(src) + dismantle() else if(!anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) user << "\blue Now securing the girder" @@ -40,13 +39,11 @@ if(do_after(user,30)) if(!src) return user << "\blue You slice apart the girder!" - new /obj/item/stack/sheet/metal(get_turf(src)) - del(src) + dismantle() else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) user << "\blue You drill through the girder!" - new /obj/item/stack/sheet/metal(get_turf(src)) - del(src) + dismantle() else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) @@ -161,6 +158,23 @@ else ..() + proc/dismantle() + new /obj/item/stack/sheet/metal(get_turf(src)) + del(src) + + attack_hand(mob/user as mob) + if (HULK in user.mutations) + visible_message("[user] smashes [src] apart!") + dismantle() + return + return ..() + + attack_animal(mob/living/simple_animal/user) + if(user.wall_smash) + visible_message("[user] smashes [src] apart!") + dismantle() + return + return ..() blob_act() if(prob(40)) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 64317a1ac08..33235ae124b 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -379,8 +379,8 @@ user << "\red Someone's already washing here." return - if (istype(O, /obj/item/weapon/reagent_containers)) - var/obj/item/weapon/reagent_containers/RG = O + var/obj/item/weapon/reagent_containers/RG = O + if (istype(RG) && RG.is_open_container()) RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) user.visible_message("\blue [user] fills \the [RG] using \the [src].","\blue You fill \the [RG] using \the [src].") return diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 6877ed4b854..b2deeae4672 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -47,9 +47,13 @@ /obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H) + /* + Positronic brains should have posibrain-like name, instead of human-MMIlike names. -- ATL + name = "positronic brain ([H])" brainmob.name = H.real_name brainmob.real_name = H.real_name + */ brainmob.dna = H.dna brainmob.timeofhostdeath = H.timeofdeath brainmob.stat = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 822d4e65fa6..3fa82adfcfa 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -72,9 +72,9 @@ say("Nom") /mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) + var/obj/item/weapon/reagent_containers/glass/G = O + if(stat == CONSCIOUS && istype(G) && G.is_open_container()) user.visible_message("[user] milks [src] using \the [O].") - var/obj/item/weapon/reagent_containers/glass/G = O var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) if(G.reagents.total_volume >= G.volume) user << "\red The [O] is full." @@ -112,9 +112,9 @@ ..() /mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) + var/obj/item/weapon/reagent_containers/glass/G = O + if(stat == CONSCIOUS && istype(G) && G.is_open_container()) user.visible_message("[user] milks [src] using \the [O].") - var/obj/item/weapon/reagent_containers/glass/G = O var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) if(G.reagents.total_volume >= G.volume) user << "\red The [O] is full." diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 2307d00bcb7..200d3e342b6 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -172,7 +172,8 @@ else O.mmi = new /obj/item/device/mmi(O) - if(O.mmi) O.mmi.transfer_identity(src) //Does not transfer key/client. + if(O.mmi) + O.mmi.transfer_identity(src) callHook("borgify", list(O)) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index ac4799381b3..7381a6ea166 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -15,7 +15,7 @@ var/max_energy = 100 var/amount = 30 var/accept_glass = 0 //At 0 ONLY accepts glass containers. Kinda misleading varname. - var/beaker = null + var/atom/beaker = null var/recharged = 0 var/hackedcheck = 0 var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", @@ -132,7 +132,7 @@ amount = 120 if(href_list["dispense"]) - if (dispensable_reagents.Find(href_list["dispense"]) && beaker != null) + if (dispensable_reagents.Find(href_list["dispense"]) && beaker != null && beaker.is_open_container()) var/obj/item/weapon/reagent_containers/B = src.beaker var/datum/reagents/R = B.reagents var/space = R.maximum_volume - R.total_volume diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index b1858cd6987..6501283f3c2 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -3390,7 +3390,7 @@ datum ethanol/toxins_special name = "Toxins Special" - id = "toxinsspecial" + id = "phoronspecial" description = "This thing is ON FIRE! CALL THE DAMN SHUTTLE!" reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm index 254be3f3d09..8eca5f355d2 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm @@ -13,10 +13,11 @@ var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(user)) sparks.start() - // - user.loc = pick(orange(get_turf(holder), 50)) + + user.Move(pick(trange(50, get_turf(holder)))) + sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(user)) + sparks.set_up(3, 0, user.loc) sparks.start() /datum/artifact_effect/teleport/DoEffectAura() diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index a33f067c8ec..82f921ff90f 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -9,7 +9,7 @@ var/max_late_time = 300 /datum/shuttle/ferry/supply/short_jump(var/area/origin,var/area/destination) - if(moving_status != SHUTTLE_IDLE) + if(moving_status != SHUTTLE_IDLE) return if(isnull(location)) @@ -20,9 +20,6 @@ if(!origin) origin = get_location_area(location) - if (!at_station()) //at centcom - supply_controller.buy() - //it would be cool to play a sound here moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) @@ -34,11 +31,15 @@ moving_status = SHUTTLE_IDLE return + if (!at_station()) //at centcom + supply_controller.buy() + //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. var/area/away_area = get_location_area(away_location) - if (origin == away_area) - moving_status = SHUTTLE_INTRANSIT //pretend - else + moving_status = SHUTTLE_INTRANSIT + + //If we are at the away_area then we are just pretending to move, otherwise actually do the move + if (origin != away_area) move(origin, away_area) //wait ETA here. diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 8736486734d..b8604b67f86 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -58,12 +58,11 @@ return ..() if(prob(50)) - user << "\The [src] shatters!" + user << "\The [src] shatters!" if(virus2.infectionchance > 0) for(var/mob/living/carbon/target in view(1, get_turf(src))) if(airborne_can_reach(get_turf(src), get_turf(target))) - if(get_infection_chance(target)) - infect_virus2(target,src.virus2) + infect_virus2(target, src.virus2) del src /obj/item/weapon/virusdish/examine()