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()