= 100)
if(!dirtoverlay)
dirtoverlay = new/obj/effect/decal/cleanable/dirt(src)
dirtoverlay.alpha = 10
else if(dirt > 100)
- dirtoverlay.alpha = min(dirtoverlay.alpha+10, 200)
- if(istype(M.shoes, /obj/item/clothing/shoes/clown_shoes))
- var/obj/item/clothing/shoes/clown_shoes/O = M.shoes
- if(M.m_intent == "run")
- if(O.footstep >= 2)
- O.footstep = 0
- playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
- else
- O.footstep++
- else
- playsound(src, "clownstep", 20, 1)
- if(istype(M.shoes, /obj/item/clothing/shoes/jackboots))
- var/obj/item/clothing/shoes/jackboots/O = M.shoes
- if(M.m_intent == "run")
- if(O.footstep >= 2)
- O.footstep = 0
- playsound(src, "jackboot", 50, 1) // this will get annoying very fast.
- else
- O.footstep++
- else
- playsound(src, "jackboot", 20, 1)
+ dirtoverlay.alpha = min(dirtoverlay.alpha + 10, 200)
+
+ if(ishuman(A))
+ var/mob/living/carbon/human/M = A
+ if(M.lying)
+ return 1
if(M.flying)
return ..()
// Tracking blood
var/list/bloodDNA = null
- var/bloodcolor=""
+ var/bloodcolor = ""
if(M.shoes)
var/obj/item/clothing/shoes/S = M.shoes
if(S.track_blood && S.blood_DNA)
bloodDNA = S.blood_DNA
- bloodcolor=S.blood_color
+ bloodcolor = S.blood_color
S.track_blood--
else
if(M.track_blood && M.feet_blood_DNA)
bloodDNA = M.feet_blood_DNA
- bloodcolor=M.feet_blood_color
+ bloodcolor = M.feet_blood_color
M.track_blood--
if (bloodDNA)
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 26757340fc8..9b2e9b7064d 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -44,6 +44,14 @@ var/list/wood_icons = list("wood","wood-broken")
else
icon_regular_floor = icon_state
+
+/turf/simulated/floor/Destroy()
+ if(floor_tile)
+ qdel(floor_tile)
+ floor_tile = null
+ return ..()
+
+
//turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt)))
// if (!( locate(/obj/machinery/mass_driver, src) ))
@@ -210,26 +218,7 @@ var/list/wood_icons = list("wood","wood-broken")
var/obj/item/stack/tile/light/T = floor_tile
T.on = !T.on
update_icon()
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
-
-// if(M==user) //temporary hack to stop runtimes. ~Carn
-// user.stop_pulling() //but...fixed the root of the problem
-// return //shoudn't be needed now, unless somebody fucks with pulling again.
-
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
+ ..()
/turf/simulated/floor/proc/gets_drilled()
return
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 03d158b8501..9c74178259f 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -324,7 +324,7 @@
/** ACT UNSIMULATED! **/
/*
assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
- del(giver)
+ qdel(giver)
return 0
return_air()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 82379c9defd..699569bfe87 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -32,12 +32,6 @@
/obj/structure/falsewall/reinforced // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS.
)
-
-/turf/simulated/wall/Del()
- for(var/obj/effect/E in src)
- if(E.name == "Wallrot")
- qdel(E)
-
/turf/simulated/wall/ChangeTurf(var/newtype)
for(var/obj/effect/E in src)
if(E.name == "Wallrot")
@@ -283,6 +277,7 @@
user << "\blue You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
+ ..()
return
/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index 09656143c3c..c7b992ec9b0 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -31,6 +31,7 @@
user << "\blue You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
+ ..()
return
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 9cafaf48198..d2b75dd22c6 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -31,23 +31,6 @@
else
set_light(0)
-/turf/space/attack_hand(mob/user as mob)
- if ((user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
/turf/space/attackby(obj/item/C as obj, mob/user as mob, params)
if (istype(C, /obj/item/stack/rods))
@@ -87,10 +70,10 @@
/turf/space/Entered(atom/movable/A as mob|obj)
..()
- if ((!(A) || src != A.loc))
+ if ((!(A) || src != A.loc))
return
- if(destination_z)
+ if(destination_z)
A.x = destination_x
A.y = destination_y
A.z = destination_z
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 0ad197e085e..85494318fa9 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -1,6 +1,6 @@
/turf
icon = 'icons/turf/floors.dmi'
- level = 1.0
+ level = 1
luminosity = 1
//for floors, use is_plating(), is_plasteel_floor() and is_light_floor()
@@ -20,12 +20,6 @@
var/temperature = T20C
var/blocks_air = 0
- var/icon_old = null
- var/pathweight = 1
-
- //Mining resource generation stuff.
- var/has_resources
- var/list/resources
var/PathNode/PNode = null //associated PathNode in the A* algorithm
@@ -39,13 +33,9 @@
..()
for(var/atom/movable/AM in src)
Entered(AM)
- return
/turf/Destroy()
- return QDEL_HINT_HARDDEL_NOW
-
// Adds the adjacent turfs to the current atmos processing
-/turf/Del()
if(air_master)
for(var/direction in cardinal)
if(atmos_adjacent_turfs & direction)
@@ -53,6 +43,10 @@
if(istype(T))
air_master.add_to_active(T)
..()
+ return QDEL_HINT_HARDDEL_NOW
+
+/turf/attack_hand(mob/user as mob)
+ user.Move_Pulled(src)
/turf/ex_act(severity)
return 0
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index cd36c4a1bb5..b10885c7467 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -3,23 +3,6 @@
icon = 'icons/turf/floors.dmi'
icon_state = "Floor3"
-/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
/turf/unsimulated/floor/grass
icon_state = "grass1"
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index fbb4a981811..d1525fde451 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -71,6 +71,26 @@
spacepods_list += src
/obj/spacepod/Destroy()
+ qdel(equipment_system)
+ equipment_system = null
+ qdel(battery)
+ battery = null
+ qdel(cabin_air)
+ cabin_air = null
+ qdel(internal_tank)
+ internal_tank = null
+ qdel(pr_int_temp_processor)
+ pr_int_temp_processor = null
+ qdel(pr_give_air)
+ pr_give_air = null
+ qdel(ion_trail)
+ ion_trail = null
+ if(occupant)
+ occupant.forceMove(get_turf(src))
+ occupant = null
+ if(occupant2)
+ occupant2.forceMove(get_turf(src))
+ occupant2 = null
spacepods_list -= src
return ..()
@@ -108,7 +128,7 @@
/obj/spacepod/attack_animal(mob/living/simple_animal/user as mob)
if(user.melee_damage_upper == 0)
- user.emote("[user.friendly] [src]")
+ user.custom_emote(1, "[user.friendly] [src]")
else
var/damage = rand(user.melee_damage_lower, user.melee_damage_upper)
deal_damage(damage)
diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm
index a61015cf6d6..04413a62f44 100644
--- a/code/game/vehicles/vehicle.dm
+++ b/code/game/vehicles/vehicle.dm
@@ -74,7 +74,6 @@
add_cell()
add_iterators()
removeVerb(/obj/mecha/verb/disconnect_from_port)
- removeVerb(/atom/movable/verb/pull)
log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
loc.Entered(src)
return
diff --git a/code/game/verbs/atom_verbs.dm b/code/game/verbs/atom_verbs.dm
deleted file mode 100644
index 4f77bf52f4c..00000000000
--- a/code/game/verbs/atom_verbs.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/atom/movable/verb/pull()
- set name = "Pull"
- set category = null
- set src in oview(1)
-
- if(Adjacent(usr))
- usr.start_pulling(src)
- return
diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm
index 88077425c67..b7b2a0d3683 100644
--- a/code/modules/admin/buildmode.dm
+++ b/code/modules/admin/buildmode.dm
@@ -50,6 +50,12 @@
icon = 'icons/misc/buildmode.dmi'
var/obj/effect/bmode/buildholder/master = null
+/obj/effect/bmode/Destroy()
+ if(master && master.cl)
+ master.cl.screen -= src
+ master = null
+ return ..()
+
/obj/effect/bmode/builddir
icon_state = "build"
screen_loc = "NORTH,WEST"
@@ -133,6 +139,19 @@
var/turf/cornerB = null
var/generator_path = null
+/obj/effect/bmode/buildholder/Destroy()
+ qdel(builddir)
+ builddir = null
+ qdel(buildhelp)
+ buildhelp = null
+ qdel(buildmode)
+ buildmode = null
+ qdel(buildquit)
+ buildquit = null
+ throw_atom = null
+ cl = null
+ return ..()
+
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 17a2fc42239..9a62cc44a34 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -16,7 +16,7 @@ var/list/admin_datums = list()
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
if(!ckey)
error("Admin datum created without a ckey argument. Datum has been deleted")
- del(src)
+ qdel(src)
return
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
rank = initial_rank
@@ -86,7 +86,7 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself.
holder.disassociate()
del(holder)
return 1
-
+
//This proc checks whether subject has at least ONE of the rights specified in rights_required.
/proc/check_rights_for(client/subject, rights_required)
if(subject && subject.holder)
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 92691e78d69..064878a7696 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -477,22 +477,6 @@
dat += "| Head not found! |
"
dat += ""
- if(ticker.mode.name == "nations")
- dat += "
| Flags(s) |
"
- for(var/obj/item/flag/nation/N in world)
- dat += "| [N.name], "
- var/atom/flag_loc = N.loc
- while(!istype(flag_loc, /turf))
- if(istype(flag_loc, /mob))
- var/mob/M = flag_loc
- dat += "carried by [M.real_name] "
- if(istype(flag_loc, /obj))
- var/obj/O = flag_loc
- dat += "in \a [O.name] "
- flag_loc = flag_loc.loc
- dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z]) |
"
- dat += "
"
-
if(istype(ticker.mode, /datum/game_mode/blob))
var/datum/game_mode/blob/mode = ticker.mode
dat += "
| Blob | | |
"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1b21829f739..c58d9edf765 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -25,7 +25,7 @@
message_admins("[key_name_admin(usr)] rejected [key_name_admin(C.mob)]'s admin help")
log_admin("[key_name(usr)] rejected [key_name(C.mob)]'s admin help")
-
+
if(href_list["stickyban"])
stickyban(href_list["stickyban"],href_list)
@@ -1062,7 +1062,7 @@
message_admins("\blue [key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
del(M.client)
- //del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
+ //qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
if("No")
var/reason = input(usr,"Please state the reason","Reason") as message|null
if(!reason)
@@ -1086,7 +1086,7 @@
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
del(M.client)
- //del(M)
+ //qdel(M)
if("Cancel")
return
@@ -2173,7 +2173,7 @@
log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
else
usr << "You may only use this when the game is running."
-
+
else if(href_list["memoeditlist"])
if(!check_rights(R_SERVER)) return
var/sql_key = sanitizeSQL("[href_list["memoeditlist"]]")
@@ -2216,7 +2216,7 @@
if (M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
- del(O)
+ qdel(O)
ok = 1*/
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 5fcfa3a12c3..3442edb9298 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -17,7 +17,7 @@
/client/proc/SDQL2_query(query_text as message)
set category = "Debug"
-
+
if(!check_rights(R_PROCCALL)) //Shouldn't happen... but just to be safe.
message_admins("ERROR: Non-admin [key_name_admin(usr)] attempted to execute a SDQL query!")
log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!")
@@ -95,7 +95,7 @@
if("delete")
for(var/datum/d in objs)
- del d
+ del(d)
if("select")
var/text = ""
@@ -474,4 +474,3 @@
if(word != "")
query_list += word
return query_list
-
\ No newline at end of file
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index cc7f9f1befa..e46d72c338e 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -40,8 +40,8 @@ var/intercom_range_display_status = 0
/client/proc/camera_view()
set category = "Mapping"
set name = "Camera Range Display"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
if(camera_range_display_status)
@@ -50,7 +50,7 @@ var/intercom_range_display_status = 0
camera_range_display_status = 1
for(var/obj/effect/debugging/camera_range/C in world)
- del(C)
+ qdel(C)
if(camera_range_display_status)
for(var/obj/machinery/camera/C in cameranet.cameras)
@@ -60,8 +60,8 @@ var/intercom_range_display_status = 0
/client/proc/sec_camera_report()
set category = "Mapping"
set name = "Camera Report"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
var/list/obj/machinery/camera/CL = list()
@@ -99,8 +99,8 @@ var/intercom_range_display_status = 0
/client/proc/intercom_view()
set category = "Mapping"
set name = "Intercom Range Display"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
if(intercom_range_display_status)
@@ -109,17 +109,17 @@ var/intercom_range_display_status = 0
intercom_range_display_status = 1
for(var/obj/effect/debugging/marker/M in world)
- del(M)
+ qdel(M)
if(intercom_range_display_status)
for(var/obj/item/device/radio/intercom/I in world)
for(var/turf/T in orange(7,I))
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
if (!(F in view(7,I.loc)))
- del(F)
+ qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-var/list/admin_verbs_show_debug_verbs = list(
+var/list/admin_verbs_show_debug_verbs = list(
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
@@ -128,7 +128,7 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/powerdebug, //check power
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
- /client/proc/cmd_assume_direct_control,
+ /client/proc/cmd_assume_direct_control,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
@@ -140,12 +140,12 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/forceEvent,
/client/proc/nanomapgen_DumpImage
)
-
+
/client/proc/enable_debug_verbs()
set category = "Debug"
set name = "Debug verbs"
- if(!check_rights(R_DEBUG))
+ if(!check_rights(R_DEBUG))
return
verbs += admin_verbs_show_debug_verbs
@@ -155,10 +155,10 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/count_objects_on_z_level()
set category = "Mapping"
set name = "Count Objects On Level"
-
- if(!check_rights(R_DEBUG))
- return
-
+
+ if(!check_rights(R_DEBUG))
+ return
+
var/level = input("Which z-level?","Level?") as text
if(!level) return
var/num_level = text2num(level)
@@ -193,8 +193,8 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/count_objects_all()
set category = "Mapping"
set name = "Count Objects All"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
var/type_text = input("Which type path?","") as text
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 93e5bb5c078..ad25fab49ce 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -279,12 +279,12 @@ client/proc/one_click_antag()
for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve
if (A.name == "Syndicate-Gear-Closet")
new /obj/structure/closet/syndicate/personal(A.loc)
- del(A)
+ qdel(A)
continue
if (A.name == "Syndicate-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(A.loc)
- del(A)
+ qdel(A)
continue
for(var/datum/mind/synd_mind in ticker.mode.syndicates)
diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm
index 23f4df6116b..016b4c891a0 100644
--- a/code/modules/admin/verbs/onlyoneteam.dm
+++ b/code/modules/admin/verbs/onlyoneteam.dm
@@ -2,12 +2,12 @@
if(!ticker)
alert("The game hasn't started yet!")
return
-
+
var/list/incompatible_species = list("Plasmaman")
for(var/mob/living/carbon/human/H in player_list)
- if(H.stat == DEAD || !(H.client))
+ if(H.stat == DEAD || !(H.client))
continue
- if(is_special_character(H))
+ if(is_special_character(H))
continue
if(H.species.name in incompatible_species)
H.set_species("Human")
@@ -55,7 +55,7 @@
H.species.equip(H)
H.regenerate_icons()
-
+
message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
log_admin("[key_name(usr)] used dodgeball.")
nologevent = 1
@@ -85,6 +85,6 @@
return
else
playsound(src, 'sound/items/dodgeball.ogg', 50, 1)
- visible_message("[H] HAS BEEN ELIMINATED!", 3)
+ visible_message("[H] HAS BEEN ELIMINATED!")
H.melt()
return
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index adea7ceaad6..9d4f9565e50 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -84,7 +84,7 @@ var/global/sent_strike_team = 0
var/obj/item/weapon/paper/P = new(L.loc)
P.info = "Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.
In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.
Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.
The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]
Good luck, soldier!
"
P.name = "Spec. Ops Manual"
- P.icon = "pamphlet-ds"
+ P.icon = "pamphlet-ds"
var/obj/item/weapon/stamp/centcom/stamp = new
P.stamp(stamp)
qdel(stamp)
@@ -92,7 +92,7 @@ var/global/sent_strike_team = 0
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
- del(L)
+ qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a CentCom strike squad.", 1)
log_admin("[key_name(usr)] used Spawn Death Squad.")
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index 03992278776..d609b5f8ac7 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -93,7 +93,7 @@ var/global/sent_syndicate_strike_team = 0
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Syndicate-Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
- del(L)
+ qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1)
log_admin("[key_name(usr)] used Spawn Syndicate Squad.")
@@ -121,7 +121,7 @@ var/global/sent_syndicate_strike_team = 0
new_syndicate_commando.mind.special_role = "Syndicate Commando"
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
- del(spawn_location)
+ qdel(spawn_location)
return new_syndicate_commando
/mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0)
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index ceb621e2e18..29c13f4a6bc 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -3,34 +3,43 @@
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
materials = list(MAT_METAL=500, MAT_GLASS=50)
- w_amt = 10
origin_tech = "magnets=1"
+ var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread
- describe()
- return "The igniter is [secured?"secured.":"unsecured."]"
+/obj/item/device/assembly/igniter/New()
+ ..()
+ sparks.set_up(2, 0, src)
+ sparks.attach(src)
+/obj/item/device/assembly/igniter/Destroy()
+ qdel(sparks)
+ sparks = null
+ return ..()
+
+
+/obj/item/device/assembly/igniter/describe()
+ return "The igniter is [secured?"secured.":"unsecured."]"
+
+
+/obj/item/device/assembly/igniter/activate()
+ if(!..()) return 0//Cooldown check
+ var/turf/location = get_turf(loc)
+ if(location) location.hotspot_expose(1000,1000)
+ if (istype(src.loc,/obj/item/device/assembly_holder))
+ if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
+ var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
+ if (tank)
+ tank.explode()
+ if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
+ var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
+ if(beakerbomb)
+ beakerbomb.heat_beaker()
+
+ sparks.start()
+ return 1
+
+
+/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
activate()
- if(!..()) return 0//Cooldown check
- var/turf/location = get_turf(loc)
- if(location) location.hotspot_expose(1000,1000)
- if (istype(src.loc,/obj/item/device/assembly_holder))
- if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
- var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
- if (tank)
- tank.explode()
- if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
- var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
- if(beakerbomb)
- beakerbomb.heat_beaker()
-
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
-
- return 1
-
-
- attack_self(mob/user as mob)
- activate()
- add_fingerprint(user)
- return
\ No newline at end of file
+ add_fingerprint(user)
+ return
\ No newline at end of file
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 70a822cd8fb..d34dc9e4c76 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -11,7 +11,9 @@
/obj/item/assembly/shock_kit/Destroy()
qdel(part1)
+ part1 = null
qdel(part2)
+ part2 = null
return ..()
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 86b4037b1b9..fe33be50f48 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -27,6 +27,12 @@
spawn(1) // For things that set the frequency directly
set_frequency(frequency)
return
+
+ Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src,frequency)
+ return ..()
+
describe()
return "\The [src]'s power light is [receiving?"on":"off"]"
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index f472b070830..4612979c125 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -84,7 +84,7 @@
if(src.coffin == 1)
var/obj/structure/closet/coffin/sarcophagus/sarc = locate(/obj/structure/closet/coffin/sarcophagus) in loc
if(sarc) M.loc = sarc
- del(src)
+ qdel(src)
diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm
index 5c2ccfe7166..3ae2da35068 100644
--- a/code/modules/awaymissions/loot.dm
+++ b/code/modules/awaymissions/loot.dm
@@ -21,4 +21,4 @@
continue
new loot_path(get_turf(src))
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm
index daf34508f5b..0ec790896f6 100644
--- a/code/modules/awaymissions/maploader/reader.dm
+++ b/code/modules/awaymissions/maploader/reader.dm
@@ -321,7 +321,7 @@ var/global/dmm_suite/preloader/_preloader = null
/dmm_suite/preloader/New(var/list/the_attributes, var/path)
.=..()
if(!the_attributes.len)
- Del()
+ del(src)
return
attributes = the_attributes
target_path = path
@@ -329,4 +329,4 @@ var/global/dmm_suite/preloader/_preloader = null
/dmm_suite/preloader/proc/load(atom/what)
for(var/attribute in attributes)
what.vars[attribute] = attributes[attribute]
- Del()
\ No newline at end of file
+ del(src)
\ No newline at end of file
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 19ab6d2a366..a642bb0e823 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -2,6 +2,7 @@
name = "clothing"
var/list/species_restricted = null //Only these species can wear this kit.
var/rig_restrict_helmet = 0 // Stops the user from equipping a rig helmet without attaching it to the suit first.
+ var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
/*
Sprites used when the clothing item is refit. This is done by setting icon_override.
@@ -245,7 +246,6 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/hats.dmi'
body_parts_covered = HEAD
slot_flags = SLOT_HEAD
- var/loose = 10 // probability (0..100) of coming off your head when you fall over or lay down
var/blockTracking // Do we block AI tracking?
var/flash_protect = 0
var/tint = 0
@@ -346,7 +346,6 @@ BLIND // can't see anything
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona","Vox","Wryn")
- loose = 0 // What kind of idiot designs a pressurized suit where the helmet can fall off?
flash_protect = 2
/obj/item/clothing/suit/space
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 209ce95acbe..f2b3dad9843 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -78,10 +78,29 @@
prescription_upgradable = 0
/obj/item/clothing/glasses/science
- name = "Science Goggles"
- desc = "nothing"
+ name = "science goggles"
+ desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents."
icon_state = "purple"
item_state = "glasses"
+ prescription_upgradable = 0
+ scan_reagents = 1 //You can see reagents while wearing science goggles
+
+/obj/item/clothing/glasses/science/equipped(mob/user, slot)
+ if(slot == slot_glasses)
+ user.scanner.Grant(user)
+ ..(user, slot)
+
+/obj/item/clothing/glasses/science/dropped(mob/user)
+ user.scanner.devices -= 1
+ ..(user)
+
+/obj/item/clothing/glasses/science/night
+ name = "Night Vision Science Goggle"
+ desc = "Now you can science in darkness."
+ icon_state = "nvpurple"
+ item_state = "glasses"
+ darkness_view = 8
+ see_darkness = 0
/obj/item/clothing/glasses/janitor
name = "Janitorial Goggles"
@@ -176,6 +195,11 @@
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
+/obj/item/clothing/glasses/sunglasses/reagent
+ name = "sunscanners"
+ desc = "Strangely ancient technology used to help provide rudimentary eye color. Outfitted with apparatus to scan individual reagents."
+ scan_reagents = 1
+
/obj/item/clothing/glasses/virussunglasses
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes."
name = "sunglasses"
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 1cec0a26bb8..d1376bf3b8a 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -9,46 +9,39 @@
name = "ultra rare Pete's hat!"
desc = "It smells faintly of plasma"
icon_state = "petehat"
- loose = 0
/obj/item/clothing/head/collectable/slime
name = "collectable slime cap!"
desc = "It just latches right in place!"
icon_state = "slime"
- loose = 0
/obj/item/clothing/head/collectable/xenom
name = "collectable xenomorph helmet!"
desc = "Hiss hiss hiss!"
icon_state = "xenom"
- loose = 35 // Zoinks! It was old man McGrief all along!
/obj/item/clothing/head/collectable/chef
name = "collectable chef's hat"
desc = "A rare Chef's Hat meant for hat collectors!"
icon_state = "chef"
item_state = "chef"
- loose = 45 // Mama mia!
/obj/item/clothing/head/collectable/paper
name = "collectable paper hat"
desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians."
icon_state = "paper"
- loose = 99 // fucking paper
/obj/item/clothing/head/collectable/tophat
name = "collectable top hat"
desc = "A top hat worn by only the most prestigious hat collectors."
icon_state = "tophat"
item_state = "that"
- loose = 70 // I say!
/obj/item/clothing/head/collectable/captain
name = "collectable captain's hat"
desc = "A Collectable Hat that'll make you look just like a real comdom!"
icon_state = "captain"
item_state = "caphat"
- loose = 55
/obj/item/clothing/head/collectable/police
name = "collectable police officer's hat"
@@ -65,7 +58,6 @@
desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!"
icon_state = "welding"
item_state = "welding"
- loose = 0
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
@@ -76,68 +68,58 @@
desc = "Just like a real Brain Slug!"
icon_state = "headslime"
item_state = "headslime"
- loose = 5
/obj/item/clothing/head/collectable/flatcap
name = "collectable flat cap"
desc = "A Collectible farmer's Flat Cap!"
icon_state = "flat_cap"
item_state = "detective"
- loose = 5
/obj/item/clothing/head/collectable/pirate
name = "collectable pirate hat"
desc = "You'd make a great Dread Syndie Roberts!"
icon_state = "pirate"
item_state = "pirate"
- loose = 55 // yar
/obj/item/clothing/head/collectable/kitty
name = "collectable kitty ears"
desc = "The fur feels.....a bit too realistic."
icon_state = "kitty"
item_state = "kitty"
- loose = 2 // meow
/obj/item/clothing/head/collectable/rabbitears
name = "collectable rabbit ears"
desc = "Not as lucky as the feet!"
icon_state = "bunny"
item_state = "bunny"
- loose = 4 // little bunny foo foo
/obj/item/clothing/head/collectable/wizard
name = "collectable wizard's hat"
desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental."
icon_state = "wizard"
- loose = 4
/obj/item/clothing/head/collectable/hardhat
name = "collectable hard hat"
desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!"
icon_state = "hardhat0_yellow"
item_state = "hardhat0_yellow"
- loose = 9
/obj/item/clothing/head/collectable/HoS
name = "collectable HoS hat"
desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!"
icon_state = "hoscap"
- loose = 29
/obj/item/clothing/head/collectable/thunderdome
name = "collectable Thunderdome helmet"
desc = "Go Red! I mean Green! I mean Red! No Green!"
icon_state = "thunderdome"
item_state = "thunderdome"
- loose = 6
/obj/item/clothing/head/collectable/swat
name = "collectable SWAT helmet"
desc = "Now you can be in the Deathsquad too!"
icon_state = "swat"
item_state = "swat"
- loose = 3
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi'
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index ca24ab55d80..27afdc3ac0b 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -11,7 +11,6 @@
flags_inv = 0
action_button_name = "Toggle Helmet Light"
siemens_coefficient = 0.9
- loose = 4
attack_self(mob/user)
if(!isturf(user.loc))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 3925c983f30..5a98a894fee 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -11,7 +11,6 @@
heat_protection = HEAD
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
siemens_coefficient = 0.7
- loose = 4 // generally well seated
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi'
@@ -126,7 +125,6 @@
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 1
- loose = 0 // full head, won't fall off
obj/item/clothing/head/helmet/redtaghelm
name = "red laser tag helmet"
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 7eedccf7345..69e6cf767e5 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -7,7 +7,6 @@
item_state = "chef"
desc = "The commander in chef's head wear."
siemens_coefficient = 0.9
- loose = 35 // why-a do people always push-a me over
//Captain
/obj/item/clothing/head/caphat
@@ -17,7 +16,6 @@
item_state = "caphat"
siemens_coefficient = 0.9
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
- loose = 43 // not the answer
//Captain: no longer space-worthy
/obj/item/clothing/head/caphat/parade
@@ -32,7 +30,6 @@
desc = "The symbol of true bureaucratic micromanagement."
siemens_coefficient = 0.9
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
- loose = 43 // not the answer
//Nanotrasen Representative
/obj/item/clothing/head/ntrep
@@ -48,7 +45,6 @@
icon_state = "chaplain_hood"
flags = HEADCOVERSEYES | BLOCKHAIR
siemens_coefficient = 0.9
- loose = 2
//Chaplain
/obj/item/clothing/head/nun_hood
@@ -57,7 +53,6 @@
icon_state = "nun_hood"
flags = HEADCOVERSEYES | BLOCKHAIR
siemens_coefficient = 0.9
- loose = 2
/obj/item/clothing/head/det_hat
name = "hat"
@@ -73,7 +68,6 @@
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
siemens_coefficient = 0.9
- loose = 16
//Security
/obj/item/clothing/head/HoS
@@ -128,7 +122,6 @@
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
flags = BLOCKHEADHAIR
- loose = 13
/obj/item/clothing/head/surgery/purple
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple."
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index a4209c48722..d3dcbcdd561 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -18,14 +18,12 @@
icon_state = "hairflowerp"
item_state = "hairflowerp"
item_state = "that"
- loose = 0 // centcom
/obj/item/clothing/head/powdered_wig
name = "powdered wig"
desc = "A powdered wig."
icon_state = "pwig"
item_state = "pwig"
- loose = 90 // fucking whigs
/obj/item/clothing/head/that
name = "top-hat"
@@ -33,19 +31,16 @@
icon_state = "tophat"
item_state = "that"
siemens_coefficient = 0.9
- loose = 70
/obj/item/clothing/head/redcoat
name = "redcoat's hat"
icon_state = "redcoat"
desc = "'I guess it's a redhead.'"
- loose = 45
/obj/item/clothing/head/mailman
name = "mailman's hat"
icon_state = "mailman"
desc = "'Right-on-time' mail service head wear."
- loose = 65
/obj/item/clothing/head/plaguedoctorhat
name = "plague doctor's hat"
@@ -53,21 +48,18 @@
icon_state = "plaguedoctor"
permeability_coefficient = 0.01
siemens_coefficient = 0.9
- loose = 30
/obj/item/clothing/head/hasturhood
name = "hastur's hood"
desc = "It's unspeakably stylish"
icon_state = "hasturhood"
flags = HEADCOVERSEYES | BLOCKHAIR
- loose = 1
/obj/item/clothing/head/nursehat
name = "nurse's hat"
desc = "It allows quick identification of trained medical personnel."
icon_state = "nursehat"
siemens_coefficient = 0.9
- loose = 80 // allowing for awkward come-ons when he/she drops his/her hat and you get it for him/her.
/obj/item/clothing/head/syndicatefake
name = "black and red space-helmet replica"
@@ -77,7 +69,6 @@
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
- loose = 15 // not a very good replica
/obj/item/clothing/head/cueball
name = "cueball helmet"
@@ -86,7 +77,6 @@
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
item_state="cueball"
flags_inv = 0
- loose = 0
/obj/item/clothing/head/that
name = "sturdy top-hat"
@@ -94,7 +84,6 @@
icon_state = "tophat"
item_state = "that"
flags_inv = 0
- loose = 70
/obj/item/clothing/head/greenbandana
@@ -103,7 +92,6 @@
icon_state = "greenbandana"
item_state = "greenbandana"
flags_inv = 0
- loose = 1
/obj/item/clothing/head/cardborg
name = "cardborg helmet"
@@ -112,7 +100,6 @@
item_state = "cardborg_h"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
- loose = 20
/obj/item/clothing/head/justice
name = "justice hat"
@@ -120,7 +107,6 @@
icon_state = "justicered"
item_state = "justicered"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
- loose = 0
/obj/item/clothing/head/justice/blue
icon_state = "justiceblue"
@@ -142,7 +128,6 @@
name = "rabbit ears"
desc = "Wearing these makes you looks useless, and only good for your sex appeal."
icon_state = "bunny"
- loose = 4
/obj/item/clothing/head/flatcap
name = "flat cap"
@@ -150,28 +135,24 @@
icon_state = "flat_cap"
item_state = "detective"
siemens_coefficient = 0.9
- loose = 1
/obj/item/clothing/head/pirate
name = "pirate hat"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
- loose = 18
/obj/item/clothing/head/hgpiratecap
name = "pirate hat"
desc = "Yarr."
icon_state = "hgpiratecap"
item_state = "hgpiratecap"
- loose = 36
/obj/item/clothing/head/bandana
name = "pirate bandana"
desc = "Yarr."
icon_state = "bandana"
item_state = "bandana"
- loose = 0
//stylish bs12 hats
@@ -222,7 +203,6 @@
item_state = "witch"
flags = BLOCKHAIR
siemens_coefficient = 2.0
- loose = 1
/obj/item/clothing/head/chicken
name = "chicken suit head"
@@ -251,7 +231,6 @@
item_state = "bearpelt"
flags = BLOCKHAIR
siemens_coefficient = 2.0
- loose = 0 // grrrr
/obj/item/clothing/head/xenos
name = "xenos helmet"
@@ -281,7 +260,6 @@
/obj/item/clothing/head/fedora/brownfedora
name = "brown fedora"
icon_state = "bfedora"
- loose = 35
/obj/item/clothing/head/stalhelm
name = "Clown Stalhelm"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 7ca5f2ce444..430b1a54341 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -25,7 +25,6 @@
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
action_button_name = "flip welding helmet"
siemens_coefficient = 0.9
- loose = 4
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
@@ -84,7 +83,6 @@
var/status = 0
var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
var/processing = 0 //I dont think this is used anywhere.
- loose = 60
/obj/item/clothing/head/cakehat/process()
if(!onfire)
@@ -126,7 +124,6 @@
flags_inv = HIDEEARS
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
- loose = 1 // too warm, your head doesn't want to leave
/obj/item/clothing/head/ushanka/attack_self(mob/user as mob)
if(src.icon_state == "ushankadown")
@@ -153,7 +150,6 @@
action_button_name = "Toggle Pumpkin Light"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 2 //luminosity when on
- loose = 80
/obj/item/clothing/head/hardhat/reindeer
@@ -177,7 +173,6 @@
icon_state = "kitty"
var/icon/mob
siemens_coefficient = 1.5
- loose = 33
/obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user)
if(!istype(user)) return
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 7a07fe249a2..46df4374a99 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,3 +1,5 @@
+/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek
+
/obj/item/clothing/shoes/syndigaloshes
desc = "A pair of brown shoes. They seem to have extra grip."
name = "brown shoes"
@@ -61,6 +63,18 @@
var/footstep = 1 //used for squeeks whilst walking
species_restricted = null
+/obj/item/clothing/shoes/clown_shoes/step_action(var/mob/living/carbon/human/H)
+ if(!istype(H)) return 0
+
+ if(H.m_intent == "run")
+ if(footstep >= 2)
+ playsound(src, "clownstep", 50, 1)
+ footstep = 0
+ else
+ footstep++
+ else
+ playsound(src, "clownstep", 20, 1)
+
/obj/item/clothing/shoes/jackboots
name = "jackboots"
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
@@ -68,7 +82,19 @@
item_state = "jackboots"
item_color = "hosred"
siemens_coefficient = 0.7
- var/footstep=1
+ var/footstep = 1
+
+/obj/item/clothing/shoes/jackboots/step_action(var/mob/living/carbon/human/H)
+ if(!istype(H)) return 0
+
+ if(H.m_intent == "run")
+ if(footstep >= 2)
+ playsound(src, "jackboot", 50, 1)
+ footstep = 0
+ else
+ footstep++
+ else
+ playsound(src, "jackboot", 20, 1)
/obj/item/clothing/shoes/jackboots/jacksandals
name = "jacksandals"
@@ -132,11 +158,10 @@
icon_state = "griffinboots"
item_state = "griffinboots"
flags = NODROP
-
+
/obj/item/clothing/shoes/fluff/noble_boot
name = "noble boots"
desc = "The boots are economically designed to balance function and comfort, so that you can step on peasants without having to worry about blisters. The leather also resists unwanted blood stains."
icon_state = "noble_boot"
item_color = "noble_boot"
item_state = "noble_boot"
-
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index d5f09cdc741..d09363f7229 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -37,14 +37,14 @@
on = !on
icon_state = "rig[on]-[item_color]"
- if(on)
+ if(on)
set_light(brightness_on)
- else
+ else
set_light(0)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- H.update_inv_head()
+ H.update_inv_head()
/obj/item/clothing/suit/space/rig
name = "hardsuit"
@@ -135,13 +135,13 @@
boots.flags &= ~NODROP
H.unEquip(boots)
boots.forceMove(src)
-
+
/obj/item/clothing/suit/space/rig/verb/toggle_helmet()
set name = "Toggle Helmet"
set category = "Object"
set src in usr
- if(!isliving(usr))
+ if(!isliving(usr))
return
if(!helmet)
@@ -300,7 +300,7 @@
if(!isturf(user.loc))
user << "You cannot toggle your helmet while in this [user.loc]." //To prevent some lighting anomalities.
return
-
+
on = !on
if(on)
user << "You switch your helmet to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor."
@@ -404,6 +404,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
flash_protect = 0
+ scan_reagents = 1 //Generally worn by the CMO, so they'd get utility off of seeing reagents
/obj/item/clothing/suit/space/rig/medical
icon_state = "rig-medical"
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 6764838430b..57f61d34bbc 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -8,7 +8,6 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 0.9
- loose = 7
/obj/item/clothing/suit/bio_suit
name = "bio suit"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index c56779b1b6a..45e44128ccb 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -445,7 +445,6 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 0.9
- loose = 7
/obj/item/clothing/suit/jacket
name = "bomber jacket"
@@ -505,11 +504,10 @@
icon_state = "lordadmiral"
item_state = "lordadmiral"
allowed = list (/obj/item/weapon/gun)
-
+
/obj/item/clothing/suit/fluff/noble_coat
name = "noble coat"
desc = "The livid blues, purples and greens are awesome enough to evoke a visceral response in you; it is not dissimilar to indigestion."
icon_state = "noble_coat"
item_state = "noble_coat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
-
\ No newline at end of file
diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm
index 12c21e2a70e..8ff83a239a8 100644
--- a/code/modules/clothing/suits/storage.dm
+++ b/code/modules/clothing/suits/storage.dm
@@ -8,6 +8,11 @@
pockets.max_w_class = 2 //fit only pocket sized items
pockets.max_combined_w_class = 4
+/obj/item/clothing/suit/storage/Destroy()
+ qdel(pockets)
+ pockets = null
+ return ..()
+
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
if (pockets.handle_attack_hand(user))
..(user)
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index f1dde170997..9b30dafcf12 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -63,7 +63,6 @@
heat_protection = HEAD
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
siemens_coefficient = 0
- loose = 5
/obj/item/clothing/suit/bomb_suit
@@ -105,7 +104,6 @@
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR|THICKMATERIAL
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
- loose = 8
/obj/item/clothing/suit/radiation
name = "Radiation suit"
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index beb206e4864..4a631cb7e10 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -6,7 +6,6 @@
permeability_coefficient = 0.01
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
unacidable = 1
- loose = 0 // magic
//Not given any special protective value since the magic robes are full-body protection --NEO
siemens_coefficient = 0.8
diff --git a/code/modules/computer3/laptop.dm b/code/modules/computer3/laptop.dm
index b0789d6a740..037b505d779 100644
--- a/code/modules/computer3/laptop.dm
+++ b/code/modules/computer3/laptop.dm
@@ -52,7 +52,7 @@
O.forceMove(loc)
usr << "\The [src] crumbles to pieces."
spawn(5)
- qdel(src)
+ qdel(src)
return
if(!stored_computer.manipulating)
@@ -65,7 +65,7 @@
spawn(5)
stored_computer.manipulating = 0
- qdel(src)
+ qdel(src)
else
usr << "\red You are already opening the computer!"
@@ -73,8 +73,9 @@
AltClick()
if(Adjacent(usr))
open_computer()
-
+
Destroy()
+ ..()
return QDEL_HINT_HARDDEL_NOW // Warning: GC'ing will cause the laptop to vanish when it next closes
//Quickfix until Snapshot works out how he wants to redo power. ~Z
diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm
index c3f9b9b21fa..c8842c21bc7 100644
--- a/code/modules/examine/descriptions/engineering.dm
+++ b/code/modules/examine/descriptions/engineering.dm
@@ -1,4 +1,4 @@
-/obj/machinery/power/supermatter
+/obj/machinery/power/supermatter_shard
description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \
After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \
Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.
\
diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm
index 72407ae289c..b1c01eb9c76 100644
--- a/code/modules/fish/fishtank.dm
+++ b/code/modules/fish/fishtank.dm
@@ -366,7 +366,7 @@
else //We are deconstructing, make glass sheets instead of shards
var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank
new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack
- qdel(src) //QDel the tank and it's contents
+ qdel(src) //qdel the tank and it's contents
T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks
/obj/machinery/fishtank/proc/spill_water()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index a8045fdbd38..0151136b580 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -442,18 +442,18 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/fake_attacker/proc/updateimage()
-// del src.currentimage
+// qdel(src.currentimage)
if(src.dir == NORTH)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(left,src)
my_target << currentimage
diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm
index 7512209fc1b..e50cdac3dec 100644
--- a/code/modules/food/cooker.dm
+++ b/code/modules/food/cooker.dm
@@ -125,7 +125,7 @@
setCooked(I, newfood)
newfood.cooktype[thiscooktype] = 1
turnoff(I)
- //del(I)
+ //qdel(I)
// MAKE SURE TO OVERRIDE THESE ON THE MACHINE IF IT HAS SPECIAL FOOD INTERACTIONS!
// FAILURE TO OVERRIDE WILL RESULT IN FAILURE TO PROPERLY HANDLE SPECIAL INTERACTIONS! --FalseIncarnate
diff --git a/code/modules/garbage_collection/garbage_collector.dm b/code/modules/garbage_collection/garbage_collector.dm
index 4810eadfb7b..f6675365f8d 100644
--- a/code/modules/garbage_collection/garbage_collector.dm
+++ b/code/modules/garbage_collection/garbage_collector.dm
@@ -160,7 +160,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
*/
/datum/proc/Destroy()
tag = null
- return QDEL_HINT_HARDDEL_NOW // By default, assume that queueing any given datum is unsafe
+ return QDEL_HINT_QUEUE // Garbage Collect everything.
// If something gets deleted directly, make sure its Destroy proc is still called
/datum/Del()
@@ -181,4 +181,3 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
/proc/gcwarning(msg)
log_to_dd("## GC WARNING: [msg]")
-
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 9f0f22f8bcc..033221ce5f2 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -395,13 +395,13 @@
var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc)
poultice.heal_brute = potency
user << "You mash the leaves into a poultice."
- del(src)
+ qdel(src)
return
if("mtear")
var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc)
poultice.heal_burn = potency
user << "You mash the petals into a poultice."
- del(src)
+ qdel(src)
return
*/
diff --git a/code/modules/jungle/jungle.dm b/code/modules/jungle/jungle.dm
index 54819de1dda..f22f0dede9a 100644
--- a/code/modules/jungle/jungle.dm
+++ b/code/modules/jungle/jungle.dm
@@ -93,7 +93,7 @@
//world << "falsewall_spawner found in wall"
var/obj/structure/temple_falsewall/fwall = new(F.loc)
fwall.mineral = mineral
- del(F)
+ qdel(F)
for(var/obj/effect/landmark/door_spawner/D in T.contents)
//world << "door_spawner found in wall"
@@ -101,7 +101,7 @@
T.icon_state = "dark"
var/spawn_type = text2path("/obj/machinery/door/airlock/[door_mineral]")
new spawn_type(T)
- del(D)*/
+ qdel(D)*/
//a shuttle has crashed somewhere on the map, it should have a power cell to let the adventurers get home
/area/jungle/crash_ship_source
diff --git a/code/modules/jungle/jungle_temple.dm b/code/modules/jungle/jungle_temple.dm
index 1ecdab55973..a021631bb64 100644
--- a/code/modules/jungle/jungle_temple.dm
+++ b/code/modules/jungle/jungle_temple.dm
@@ -49,7 +49,7 @@
New()
if(prob(10))
new /obj/effect/glowshroom(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/loot_spawn
name = "loot spawner"
@@ -267,7 +267,7 @@
for(var/i=0,i(range*0.60))
- deep_count++
- else if(cell>(range*0.40))
- rare_count++
- else
- surface_count++
-
- if(surface_count < MIN_SURFACE_COUNT || surface_count > MAX_SURFACE_COUNT) return 0
- if(rare_count < MIN_RARE_COUNT || rare_count > MAX_RARE_COUNT) return 0
- if(deep_count < MIN_DEEP_COUNT || deep_count > MAX_DEEP_COUNT) return 0
- return 1
-
-//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
-/datum/ore_distribution/proc/populate_distribution_map()
-
- //Announce it!
- world << "Generating resource distribution map."
-
- //Seed beginning values.
- var/x = 1
- var/y = 1
- var/size = real_size-1
- map[MAP_TOP_LEFT] = (range/3)+rand(range/5)
- map[MAP_TOP_RIGHT] = (range/3)+rand(range/5)
- map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5)
- map[MAP_BOTTOM_RIGHT] = (range/3)+rand(range/5)
-
- //Fill in and smooth it out.
- var/attempts = 0
- do
- attempts++
- generate_distribution_map(1,1,size)
- while(attempts < ITERATE_BEFORE_FAIL && !map_is_sane())
-
- if(attempts >= ITERATE_BEFORE_FAIL)
- world << "Could not generate a sane distribution map. Aborting."
- map = null
- return
- else
- apply_to_asteroid()
-
-/datum/ore_distribution/proc/clear_distribution_map()
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- map[MAP_CELL] = 0
-
-/datum/ore_distribution/proc/print_distribution_map()
- var/line = ""
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- line += num2text(round(map[MAP_CELL]/25.5))
- world << line
- line = ""
-
-/datum/ore_distribution/proc/generate_distribution_map(var/x,var/y,var/input_size)
-
- var/size = input_size
-
- map[MAP_MID_TOP] = (map[MAP_TOP_LEFT] + map[MAP_TOP_RIGHT])/2
- map[MAP_MID_RIGHT] = (map[MAP_BOTTOM_RIGHT] + map[MAP_TOP_RIGHT])/2
- map[MAP_MID_BOTTOM] = (map[MAP_BOTTOM_LEFT] + map[MAP_BOTTOM_RIGHT])/2
- map[MAP_MID_LEFT] = (map[MAP_TOP_LEFT] + map[MAP_BOTTOM_RIGHT])/2
- map[MAP_CENTRE] = (map[MAP_MID_LEFT]+map[MAP_MID_RIGHT]+map[MAP_MID_BOTTOM]+map[MAP_MID_TOP])/4
-
- if(prob(random_variance_chance))
- map[MAP_CENTRE] *= (rand(1) ? (1.0-random_element) : (1.0+random_element))
- map[MAP_CENTRE] = max(0,min(range,map[MAP_CENTRE]))
-
- if(size>3)
- generate_distribution_map(x,y,input_size/2)
- generate_distribution_map(x+(input_size/2),y,input_size/2)
- generate_distribution_map(x,y+(input_size/2),input_size/2)
- generate_distribution_map(x+(input_size/2),y+(input_size/2),input_size/2)
-
-/datum/ore_distribution/proc/apply_to_asteroid()
-
- // THESE VALUES DETERMINE THE AREA THAT THE DISTRIBUTION MAP IS APPLIED TO.
- // IF YOU DO NOT RUN OFFICIAL BAYCODE ASTEROID MAP YOU NEED TO CHANGE THEM.
- // ORIGIN IS THE BOTTOM LEFT CORNER OF THE SQUARE CONTAINING ALL ASTEROID
- // TILES YOU WISH TO APPLY THE DISTRIBUTION MAP TO.
-
- var/origin_x = 13 //We start here...
- var/origin_y = 32 //...and here...
- var/limit_x = 217 //...and iterate until here...
- var/limit_y = 223 //...and here...
- var/asteroid_z = 5 //...on this Z-level.
-
- var/tx = origin_x
- var/ty = origin_y
-
- for(var/y = 1, y <= real_size, y++)
-
- for(var/x = 1, x <= real_size, x++)
-
- var/turf/target_turf
-
- for(var/i=0,i limit_x || ty+i > limit_y)
- continue
-
- target_turf = locate(tx+j, ty+i, asteroid_z)
-
- if(target_turf && target_turf.has_resources)
-
- target_turf.resources = list()
- target_turf.resources["silicates"] = rand(3,5)
- target_turf.resources["carbonaceous rock"] = rand(3,5)
-
- switch(map[MAP_CELL])
- if(0 to 100)
- target_turf.resources["iron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["diamond"] = 0
- target_turf.resources["plasma"] = 0
- target_turf.resources["osmium"] = 0
- target_turf.resources["hydrogen"] = 0
- if(100 to 124)
- target_turf.resources["iron"] = 0
- target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["diamond"] = 0
- target_turf.resources["plasma"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["hydrogen"] = 0
- if(125 to 255)
- target_turf.resources["iron"] = 0
- target_turf.resources["gold"] = 0
- target_turf.resources["silver"] = 0
- target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["plasma"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
-
- tx += chunk_size
- tx = origin_x
- ty += chunk_size
-
- world << "Resource map generation complete."
- return
-
-#undef MAP_CELL
-#undef MAP_CENTRE
-#undef MAP_TOP_LEFT
-#undef MAP_TOP_RIGHT
-#undef MAP_BOTTOM_LEFT
-#undef MAP_BOTTOM_RIGHT
-#undef MAP_MID_TOP
-#undef MAP_MID_BOTTOM
-#undef MAP_MID_LEFT
-#undef MAP_MID_RIGHT
-
-#undef MIN_SURFACE_COUNT
-#undef MAX_SURFACE_COUNT
-#undef MIN_RARE_COUNT
-#undef MAX_RARE_COUNT
-#undef MIN_DEEP_COUNT
-#undef MAX_DEEP_COUNT
-#undef ITERATE_BEFORE_FAIL
-
-#undef RESOURCE_HIGH_MAX
-#undef RESOURCE_HIGH_MIN
-#undef RESOURCE_MID_MAX
-#undef RESOURCE_MID_MIN
-#undef RESOURCE_LOW_MAX
-#undef RESOURCE_LOW_MIN
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
deleted file mode 100644
index 09888cdb3fa..00000000000
--- a/code/modules/mining/drilling/drill.dm
+++ /dev/null
@@ -1,392 +0,0 @@
-/obj/machinery/mining
- icon = 'icons/obj/mining_drill.dmi'
- anchored = 0
- use_power = 0 //The drill takes power directly from a cell.
- density = 1
- layer = MOB_LAYER+0.1 //So it draws over mobs in the tile north of it.
-
-/obj/machinery/mining/drill
- name = "mining drill head"
- desc = "An enormous drill."
- icon_state = "mining_drill"
- var/braces_needed = 2
- var/list/supports = list()
- var/supported = 0
- var/active = 0
- var/list/resource_field = list()
- var/open = 0
-
- var/ore_types = list(
- "iron" = /obj/item/weapon/ore/iron,
- "uranium" = /obj/item/weapon/ore/uranium,
- "gold" = /obj/item/weapon/ore/gold,
- "silver" = /obj/item/weapon/ore/silver,
- "diamond" = /obj/item/weapon/ore/diamond,
- "plasma" = /obj/item/weapon/ore/plasma,
- "osmium" = /obj/item/weapon/ore/osmium,
- "hydrogen" = /obj/item/weapon/ore/hydrogen,
- "silicates" = /obj/item/weapon/ore/glass,
- "carbonaceous rock" = /obj/item/weapon/ore/coal
- )
-
- //Upgrades
- var/obj/item/weapon/stock_parts/matter_bin/storage
- var/obj/item/weapon/stock_parts/micro_laser/cutter
- var/obj/item/weapon/stock_parts/capacitor/cellmount
- var/obj/item/weapon/stock_parts/cell/cell
-
- //Flags
- var/need_update_field = 0
- var/need_player_check = 0
-
-/obj/machinery/mining/drill/New()
-
- ..()
-
- storage = new(src)
- cutter = new(src)
- cellmount = new(src)
-
- cell = new(src)
- cell.maxcharge = 10000
- cell.charge = cell.maxcharge
-
-/obj/machinery/mining/drill/process()
-
- if(need_player_check)
- return
-
- check_supports()
-
- if(!active) return
-
- if(!anchored || !use_cell_power())
- system_error("system configuration or charge error")
- return
-
- if(need_update_field)
- get_resource_field()
-
- if(world.time % 10 == 0)
- update_icon()
-
- if(!active)
- return
-
- //Drill through the flooring, if any.
- if(istype(get_turf(src),/turf/simulated/floor/plating/airless/asteroid))
- var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
- if(!T.dug)
- T.gets_dug()
- else if(istype(get_turf(src),/turf/simulated/floor))
- var/turf/simulated/floor/T = get_turf(src)
- T.ex_act(2.0)
-
- //Dig out the tasty ores.
- if(resource_field.len)
- var/turf/harvesting = pick(resource_field)
-
- while(resource_field.len && !harvesting.resources)
- harvesting.has_resources = 0
- harvesting.resources = null
- resource_field -= harvesting
- harvesting = pick(resource_field)
-
- if(!harvesting) return
-
- var/total_harvest = get_harvest_capacity() //Ore harvest-per-tick.
- var/found_resource = 0 //If this doesn't get set, the area is depleted and the drill errors out.
-
- for(var/metal in ore_types)
-
- if(contents.len >= get_storage_capacity())
- system_error("insufficient storage space")
- active = 0
- need_player_check = 1
- update_icon()
- return
-
- if(contents.len + total_harvest >= get_storage_capacity())
- total_harvest = get_storage_capacity() - contents.len
-
- if(total_harvest <= 0) break
- if(harvesting.resources[metal])
-
- found_resource = 1
-
- var/create_ore = 0
- if(harvesting.resources[metal] >= total_harvest)
- harvesting.resources[metal] -= total_harvest
- create_ore = total_harvest
- total_harvest = 0
- else
- total_harvest -= harvesting.resources[metal]
- create_ore = harvesting.resources[metal]
- harvesting.resources[metal] = 0
-
- for(var/i=1,i<=create_ore,i++)
- var/oretype = ore_types[metal]
- new oretype(src)
-
- if(!found_resource)
- harvesting.has_resources = 0
- harvesting.resources = null
- resource_field -= harvesting
- else
- active = 0
- need_player_check = 1
- update_icon()
-
-/obj/machinery/mining/drill/attack_ai(var/mob/user as mob)
- return src.attack_hand(user)
-
-/obj/machinery/mining/drill/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W,/obj/item/weapon/screwdriver))
- if(active) return
- open = !open
- user << "\blue You [open ? "open" : "close"] the maintenance panel." //TODO: Sprite.
- return
- else
- if(!open || active) return ..()
- if(istype(W,/obj/item/weapon/crowbar))
- if(cell)
- user << "You pry out \the [cell]."
- cell.loc = get_turf(src)
- cell = null
- else if(storage)
- user << "You slip the bolt and pry out \the [storage]."
- storage.loc = get_turf(src)
- storage = null
- else if(cutter)
- user << "You carefully detatch and pry out \the [cutter]."
- cutter.loc = get_turf(src)
- cutter = null
- else if(cellmount)
- user << "You yank out a few wires and pry out \the [cellmount]."
- cellmount.loc = get_turf(src)
- cellmount = null
- else
- user << "There's nothing inside the drilling rig to remove."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/matter_bin))
- if(storage)
- user << "The drill already has a matter bin installed."
- else
- user.drop_item()
- W.loc = src
- storage = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/micro_laser))
- if(cutter)
- user << "The drill already has a cutting head installed."
- else
- user.drop_item()
- W.loc = src
- cutter = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/capacitor))
- if(cellmount)
- user << "The drill already has a cell capacitor installed."
- else
- user.drop_item()
- W.loc = src
- cellmount = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/cell))
- if(cell)
- user << "The drill already has a cell installed."
- else
- user.drop_item()
- W.loc = src
- cell = W
- user << "You install \the [W]."
- return
- ..()
-/obj/machinery/mining/drill/attack_hand(mob/user as mob)
- check_supports()
-
- if(need_player_check)
- user << "You hit the manual override and reset the drill's error checking."
- need_player_check = 0
- if(anchored) get_resource_field()
- update_icon()
- return
-
- else if(supported)
- if(use_cell_power())
- active = !active
- if(active)
- user << "\blue You engage \the [src] and it lurches downwards, grinding noisily."
- need_update_field = 1
- else
- user << "\blue You disengage \the [src] and it shudders to a grinding halt."
- else
- user << "\blue The drill is unpowered."
- else
- user << "\blue Turning on a piece of industrial machinery without sufficient bracing is a bad idea."
-
- update_icon()
-
-/obj/machinery/mining/drill/update_icon()
- if(need_player_check)
- icon_state = "mining_drill_error"
- else if(active)
- icon_state = "mining_drill_active"
- else if(supported)
- icon_state = "mining_drill_braced"
- else
- icon_state = "mining_drill"
- return
-
-/obj/machinery/mining/drill/proc/check_supports()
-
- supported = 0
-
- if((!supports || !supports.len) && initial(anchored) == 0)
- icon_state = "mining_drill"
- anchored = 0
- active = 0
- else
- anchored = 1
-
- if(supports && supports.len >= braces_needed)
- supported = 1
-
- update_icon()
-
-/obj/machinery/mining/drill/proc/system_error(var/error)
-
- if(error) src.visible_message("\red \The [src] flashes a '[error]' warning.")
- need_player_check = 1
- active = 0
- update_icon()
-
-/obj/machinery/mining/drill/proc/get_harvest_capacity()
- return (cutter ? cutter.rating : 0)
-
-/obj/machinery/mining/drill/proc/get_storage_capacity()
- return 200 * (storage ? storage.rating : 0)
-
-/obj/machinery/mining/drill/proc/get_charge_use()
- return 50 - (10 * (cellmount ? cellmount.rating : 0))
-
-/obj/machinery/mining/drill/proc/get_resource_field()
-
- resource_field = list()
- need_update_field = 0
-
- var/turf/T = get_turf(src)
- if(!istype(T)) return
-
- var/tx = T.x-2
- var/ty = T.y-2
- var/turf/mine_turf
- for(var/iy=0,iy<5,iy++)
- for(var/ix=0,ix<5,ix++)
- mine_turf = locate(tx+ix,ty+iy,T.z)
- if(mine_turf && istype(mine_turf) && mine_turf.has_resources)
- resource_field += mine_turf
-
- if(!resource_field.len)
- system_error("resources depleted")
-
-/obj/machinery/mining/drill/proc/use_cell_power()
- if(!cell) return 0
- var/req = get_charge_use()
- if(cell.charge >= req)
- cell.use(req)
- return 1
- return 0
-
-/obj/machinery/mining/drill/verb/unload()
- set name = "Unload Drill"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat) return
-
- var/obj/structure/ore_box/B = locate() in orange(1)
- if(B)
- for(var/obj/item/weapon/ore/O in contents)
- O.loc = B
- usr << "\red You unload the drill's storage cache into the ore box."
- else
- usr << "\red You must move an ore box up to the drill before you can unload it."
-
-
-/obj/machinery/mining/brace
- name = "mining drill brace"
- desc = "A machinery brace for an industrial drill. It looks easily two feet thick."
- icon_state = "mining_brace"
- var/obj/machinery/mining/drill/connected
-
-/obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W,/obj/item/weapon/wrench))
-
- if(istype(get_turf(src),/turf/space))
- user << "\blue You can't anchor something to empty space. Idiot."
- return
-
- if(connected && connected.active)
- user << "\blue You can't unanchor the brace of a running drill!"
- return
-
- playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
- user << "\blue You [anchored ? "un" : ""]anchor the brace."
-
- anchored = !anchored
- if(anchored)
- connect()
- else
- disconnect()
-
-/obj/machinery/mining/brace/proc/connect()
-
- var/turf/T = get_step(get_turf(src), src.dir)
-
- if(!T.has_resources)
- src.visible_message("\red The terrain near the brace is unsuitable!")
- return
-
- for(var/thing in T.contents)
- if(istype(thing,/obj/machinery/mining/drill))
- connected = thing
- break
-
- if(!connected) return
-
- if(!connected.supports) connected.supports = list()
-
- icon_state = "mining_brace_active"
-
- connected.supports += src
- connected.check_supports()
-
-/obj/machinery/mining/brace/proc/disconnect()
-
- if(!connected) return
-
- if(!connected.supports) connected.supports = list()
-
- icon_state = "mining_brace"
-
- connected.supports -= src
- connected.check_supports()
- connected = null
-
-/obj/machinery/mining/brace/verb/rotate()
- set name = "Rotate"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat) return
-
- if (src.anchored)
- usr << "It is anchored in place!"
- return 0
-
- src.dir = turn(src.dir, 90)
- return 1
\ No newline at end of file
diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm
deleted file mode 100644
index 91ff1e12f8e..00000000000
--- a/code/modules/mining/drilling/scanner.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/item/weapon/mining_scanner
- name = "ore detector"
- desc = "A complex device used to locate ore deep underground."
- icon = 'icons/obj/device.dmi'
- icon_state = "forensic0-old" //GET A BETTER SPRITE.
- item_state = "electronic"
-// matter = list("metal" = 150)
-
- origin_tech = "magnets=1;engineering=1"
-
-/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
-
- user << "You begin sweeping \the [src] about, scanning for metal deposits."
-
- if(!do_after(user,50, target = src)) return
-
- if(!user || !src) return
-
- var/list/metals = list(
- "surface minerals" = 0,
- "precious metals" = 0,
- "nuclear fuel" = 0,
- "exotic matter" = 0
- )
-
- for(var/turf/T in oview(3,get_turf(user)))
-
- if(!T.has_resources)
- continue
-
- for(var/metal in T.resources)
-
- var/ore_type
-
- switch(metal)
- if("silicates" || "carbonaceous rock" || "iron") ore_type = "surface minerals"
- if("gold" || "silver" || "diamond") ore_type = "precious metals"
- if("uranium") ore_type = "nuclear fuel"
- if("plasma" || "osmium" || "hydrogen") ore_type = "exotic matter"
-
- if(ore_type) metals[ore_type] += T.resources[metal]
-
- user << "\icon[src] \blue The scanner beeps and displays a readout."
-
- for(var/ore_type in metals)
-
- var/result = "no sign"
-
- switch(metals[ore_type])
- if(1 to 50) result = "trace amounts"
- if(51 to 150) result = "significant amounts"
- if(151 to INFINITY) result = "huge quantities"
-
- user << "- [result] of [ore_type]."
\ No newline at end of file
diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm
index 4b293e71350..41d54ca1279 100644
--- a/code/modules/mining/laborcamp/laborshuttle.dm
+++ b/code/modules/mining/laborcamp/laborshuttle.dm
@@ -40,7 +40,7 @@ proc/move_labor_shuttle() //TODO: Security Access only; add moving the shuttle t
*/
if(istype(T, /turf/simulated))
- del(T)
+ qdel(T)
for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area...
bug.gib()
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 7d68a50340f..ed5441c06f1 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -87,6 +87,10 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
..()
/mob/dead/observer/Destroy()
+ if(ismob(following))
+ var/mob/M = following
+ M.following_mobs -= src
+ following = null
if (ghostimage)
ghost_darkness_images -= ghostimage
qdel(ghostimage)
@@ -115,7 +119,7 @@ Works together with spawning an observer, noted above.
if(antagHUD)
var/list/target_list = list()
for(var/mob/living/target in oview(src, 14))
- if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation))
+ if(target.mind && (target.mind.special_role || issilicon(target)))
target_list += target
if(target_list.len)
assess_targets(target_list, src)
@@ -142,7 +146,6 @@ Works together with spawning an observer, noted above.
var/client/C = U.client
for(var/mob/living/carbon/human/target in target_list)
C.images += target.hud_list[SPECIALROLE_HUD]
- C.images += target.hud_list[NATIONS_HUD] // ??? THE SNOWFLAKE IS KILLING ME
for(var/mob/living/silicon/target in target_list)
C.images += target.hud_list[SPECIALROLE_HUD]
@@ -168,10 +171,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
- if(ticker && ticker.mode.name == "nations")
- usr << "\blue Ghosting is disabled."
- return
-
var/mob/M = src
if(stat == DEAD)
@@ -382,19 +381,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob
var/list/following_mobs = list()
-/mob/Destroy()
- for(var/mob/dead/observer/M in following_mobs)
- M.following = null
- following_mobs = null
- return ..()
-
-/mob/dead/observer/Destroy()
- if(ismob(following))
- var/mob/M = following
- M.following_mobs -= src
- following = null
- return ..()
-
/mob/Move()
. = ..()
if(.)
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 937ee9d86d8..a5bb5b1388e 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -125,7 +125,7 @@
name = "Noise"
desc = "Noises"
key = ""
- flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG
+ flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER
/datum/language/noise/format_message(message, verb)
return "[message]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 194e64100e2..d6b8a18fc7b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -86,6 +86,6 @@
else
new_xeno.key = key
new_xeno.mind.name = new_xeno.name
- del(src)
+ qdel(src)
return
*/
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 0fd832ebc0c..dff7ffb59af 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -171,7 +171,7 @@
/mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index ce94cb4c8a2..2b6407398d2 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -230,13 +230,6 @@
else
healths.icon_state = "health6"
- if(pullin)
- if(pulling)
- pullin.icon_state = "pull"
- else
- pullin.icon_state = "pull0"
-
-
if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index eb32d6b974f..f27ac91d398 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -117,7 +117,7 @@
else
new_xeno.key = key
new_xeno.mind.name = new_xeno.name
- del(src)
+ qdel(src)
else
src << "We already have an alive empress."
return
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index f9a2b945410..5bda4880e27 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -107,7 +107,7 @@
/mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -255,4 +255,4 @@
else
var/mob/living/carbon/alien/humanoid/A = new(loc)
A.key = key
- del(src) */
\ No newline at end of file
+ qdel(src) */
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 3981a18f59d..10b8d580447 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -18,6 +18,12 @@
/obj/item/organ/brain/attack_self(mob/user as mob)
return //let's not have players taken out of the round as easily as a click, once you have their brain.
+/obj/item/organ/brain/surgeryize()
+ if(!owner)
+ return
+ owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain.
+ owner.ear_deaf = 0
+
/obj/item/organ/brain/xeno
name = "thinkpan"
desc = "It looks kind of like an enormous wad of purple bubblegum."
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 26d3aa99875..3bcc4fe44a5 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -37,7 +37,6 @@
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
- hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
..()
@@ -404,7 +403,7 @@
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -1840,4 +1839,9 @@
/mob/living/carbon/human/proc/get_full_print()
if(!dna || !dna.uni_identity)
return
- return md5(dna.uni_identity)
+ return md5(dna.uni_identity)
+
+/mob/living/carbon/human/can_see_reagents()
+ for(var/obj/item/clothing/C in src) //If they have some clothing equipped that lets them see reagents, they can see reagents
+ if(C.scan_reagents)
+ return 1
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 09bca41ed3f..25d47867e2b 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -192,16 +192,6 @@
log_attack("[M.name] ([M.ckey]) pushed [src.name] ([src.ckey])")
return
- /* if(randn <= 45 && !lying)
- if(head)
- var/obj/item/clothing/head/H = head
- if(!istype(H) || prob(H.loose))
- if(unEquip(H))
- if(prob(60))
- step_away(H,M)
- visible_message("[M] has knocked [src]'s [H] off!",
- "[M] knocked \the [H] clean off your head!") */
-
var/talked = 0 // BubbleWrap
if(randn <= 60)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index a7056b0abc8..4af3cf88499 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -54,38 +54,6 @@ emp_act
return (..(P , def_zone))
-/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon = null)
- var/obj/item/organ/external/affected = get_organ(check_zone(def_zone))
- var/siemens_coeff = get_siemens_coefficient_organ(affected)
- stun_amount *= siemens_coeff
- agony_amount *= siemens_coeff
-
- switch (def_zone)
- if("head")
- agony_amount *= 1.50
- if("l_hand", "r_hand")
- var/c_hand
- if (def_zone == "l_hand")
- c_hand = l_hand
- else
- c_hand = r_hand
-
- if(c_hand && (stun_amount || agony_amount > 10))
- msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect")
-
- unEquip(c_hand)
- if (affected.status & ORGAN_ROBOT)
- emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!")
- else
- var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and")
- emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!")
-
- if(used_weapon)
- var/obj/item/W = used_weapon
- affected.add_autopsy_data(W.name, agony_amount) // Add the weapon's name to the autopsy data
-
- ..(stun_amount, agony_amount, def_zone, used_weapon)
-
/mob/living/carbon/human/getarmor(var/def_zone, var/type)
var/armorval = 0
var/organnum = 0
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 0e336efad26..c791222d312 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -81,3 +81,12 @@
/mob/living/carbon/human/mob_negates_gravity()
return shoes && shoes.negates_gravity()
+
+/mob/living/carbon/human/Move(NewLoc, direct)
+ . = ..()
+ if(shoes)
+ if(!lying && !buckled)
+ if(!has_gravity(loc))
+ return
+ var/obj/item/clothing/shoes/S = shoes
+ S.step_action(src)
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index 7654b0d2e3b..63ffbf93de8 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -117,7 +117,7 @@
unEquip(r_hand)
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
- emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
+ custom_emote(1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
else if(E.is_malfunctioning())
@@ -130,7 +130,7 @@
continue
unEquip(r_hand)
- emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!")
+ custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 611362f1954..dbb12594803 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1279,9 +1279,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(see_override) //Override all
see_invisible = see_override
- if(ticker && ticker.mode.name == "nations")
- process_nations()
-
if(healths)
if (analgesic)
healths.icon_state = "health_health_numb"
@@ -1334,12 +1331,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(pressure)
pressure.icon_state = "pressure[pressure_alert]"
- if(pullin)
- if(pulling) pullin.icon_state = "pull1"
- else pullin.icon_state = "pull0"
-// if(rest) //Not used with new UI
-// if(resting || lying || sleeping) rest.icon_state = "rest1"
-// else rest.icon_state = "rest0"
if(toxin)
if(hal_screwyhud == 4 || toxins_alert) toxin.icon_state = "tox1"
else toxin.icon_state = "tox0"
@@ -1558,7 +1549,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!")
if(shock_stage >= 30)
- if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
+ if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.")
eye_blurry = max(2, eye_blurry)
stuttering = max(stuttering, 5)
@@ -1566,7 +1557,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
if(shock_stage >=60)
- if(shock_stage == 60) emote("me",1,"'s body becomes limp.")
+ if(shock_stage == 60) custom_emote(1,"falls limp.")
if (prob(2))
src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
Weaken(20)
@@ -1582,7 +1573,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
Paralyse(5)
if(shock_stage == 150)
- emote("me",1,"can no longer stand, collapsing!")
+ custom_emote(1,"can no longer stand, collapsing!")
Weaken(20)
if(shock_stage >= 150)
@@ -1871,34 +1862,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
holder.icon_state = "hudshadowlingthrall"
hud_list[SPECIALROLE_HUD] = holder
-
- if(hud_updateflag & 1 << NATIONS_HUD)
- var/image/holder = hud_list[NATIONS_HUD]
- holder.icon_state = "hudblank"
-
- if(mind && mind.nation)
- switch(mind.nation.name)
- if("Atmosia")
- holder.icon_state = "hudatmosia"
- if("Brigston")
- holder.icon_state = "hudbrigston"
- if("Cargonia")
- holder.icon_state = "hudcargonia"
- if("People's Republic of Commandzakstan")
- holder.icon_state = "hudcommand"
- if("Medistan")
- holder.icon_state = "hudmedistan"
- if("Scientopia")
- holder.icon_state = "hudscientopia"
-
- hud_list[NATIONS_HUD] = holder
hud_updateflag = 0
-/mob/living/carbon/human/proc/process_nations()
- var/client/C = client
- for(var/mob/living/carbon/human/H in view(src, 14))
- C.images += H.hud_list[NATIONS_HUD]
-
/mob/living/carbon/human/handle_silent()
if(..())
speech_problem_flag = 1
@@ -1933,4 +1898,4 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
// Need this in species.
//#undef HUMAN_MAX_OXYLOSS
-//#undef HUMAN_CRIT_MAX_OXYLOSS
+//#undef HUMAN_CRIT_MAX_OXYLOSS
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 9cd0301b885..26ef94d472a 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -462,7 +462,7 @@
if(D.client)
D.loc = H.loc
else
- del(D)
+ qdel(D)
H.visible_message(""
*/
+//mob verbs are a lot faster than object verbs
+//for more info on why this is not atom/pull, see examinate() in mob.dm
+/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
+ set name = "Pull"
+ set category = "Object"
+
+ if(AM.Adjacent(src))
+ src.start_pulling(AM)
+ return
+
//same as above
/mob/living/pointed(atom/A as mob|obj|turf in view())
if(src.stat || !src.canmove || src.restrained())
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 916b5b80195..08be473c4a7 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -65,21 +65,6 @@
apply_damage(P.damage, P.damage_type, def_zone, armor)
return P.on_hit(src, armor, def_zone)
-//Handles the effects of "stun" weapons
-/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
- flash_pain()
-
- if (stun_amount)
- Stun(stun_amount)
- Weaken(stun_amount)
- apply_effect(STUTTER, stun_amount)
- apply_effect(EYE_BLUR, stun_amount)
-
- if (agony_amount)
- apply_damage(agony_amount, HALLOSS, def_zone, 0, used_weapon)
- apply_effect(STUTTER, agony_amount/10)
- apply_effect(EYE_BLUR, agony_amount/10)
-
/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
return 0 //only carbon liveforms have this proc
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 437f9882a99..5e5847c0ab8 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -158,9 +158,10 @@ proc/get_radio_key_from_channel(var/channel)
message = handle_autohiss(message, speaking)
- var/list/handle_s = handle_speech_problems(message, verb)
- message = handle_s[1]
- verb = handle_s[2]
+ if(speaking && !(speaking.flags & NO_STUTTER))
+ var/list/handle_s = handle_speech_problems(message, verb)
+ message = handle_s[1]
+ verb = handle_s[2]
if(!message || message == "")
return 0
@@ -242,13 +243,15 @@ proc/get_radio_key_from_channel(var/channel)
if(M.loc && M.locs[1] in hearturfs)
listening |= M
+ var/list/speech_bubble_recipients = list()
var/speech_bubble_test = say_test(message)
- var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
- spawn(30) qdel(speech_bubble)
for(var/mob/M in listening)
- M << speech_bubble
M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
+ if(M.client)
+ speech_bubble_recipients.Add(M.client)
+ spawn(0)
+ flick_overlay(image('icons/mob/talk.dmi', src, "h[speech_bubble_test]",MOB_LAYER+1), speech_bubble_recipients, 30)
for(var/obj/O in listening_obj)
spawn(0)
@@ -398,19 +401,23 @@ proc/get_radio_key_from_channel(var/channel)
watching -= eavesdropping
//now mobs
+ var/list/speech_bubble_recipients = list()
var/speech_bubble_test = say_test(message)
- var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
- spawn(30) qdel(speech_bubble)
for(var/mob/M in listening)
- M << speech_bubble
M.hear_say(message, verb, speaking, alt_name, italics, src)
+ if(M.client)
+ speech_bubble_recipients.Add(M.client)
if(eavesdropping.len)
var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less.
for(var/mob/M in eavesdropping)
- M << speech_bubble
M.hear_say(new_message, verb, speaking, alt_name, italics, src)
+ if(M.client)
+ speech_bubble_recipients.Add(M.client)
+
+ spawn(0)
+ flick_overlay(image('icons/mob/talk.dmi', src, "h[speech_bubble_test]",MOB_LAYER+1), speech_bubble_recipients, 30)
if(watching.len)
var/rendered = "[src.name] [not_heard]."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 4375c9f3c04..3dd855994ae 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -183,7 +183,6 @@ var/list/ai_verbs_default = list(
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
- hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
ai_list += src
..()
@@ -229,6 +228,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/Destroy()
ai_list -= src
+ qdel(eyeobj) // No AI, no Eye
return ..()
@@ -595,7 +595,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
index 584af962874..d2b23c93eff 100644
--- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
@@ -5,7 +5,7 @@
var/datum/cameranet/cameranet = new()
/datum/cameranet
- // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del().
+ // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Destroy().
var/list/cameras = list()
var/cameras_unsorted = 1
// The chunks of the map, mapping the areas that the cameras can see.
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 89dbeb14740..ef0e1f712f8 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -29,6 +29,7 @@
qdel(ghostimage)
ghostimage = null;
updateallghostimages()
+ ai = null
return ..()
// Movement code. Returns 0 to stop air movement from moving it.
@@ -41,10 +42,6 @@
set src = usr.contents
return 0
-/mob/aiEye/pull()
- set popup_menu = 0
- set src = usr.contents
- return 0
// Use this when setting the aiEye's location.
// It will also stream the chunk that the new loc is in.
@@ -95,11 +92,6 @@
spawn(5)
eyeobj.loc = src.loc
-/mob/living/silicon/ai/Destroy()
- eyeobj.ai = null
- qdel(eyeobj) // No AI, no Eye
- return ..()
-
/atom/proc/move_camera_by_click()
if(istype(usr, /mob/living/silicon/ai))
var/mob/living/silicon/ai/AI = usr
diff --git a/code/modules/mob/living/silicon/ai/freelook/read_me.dm b/code/modules/mob/living/silicon/ai/freelook/read_me.dm
index 53e68ff1377..8ddb0689409 100644
--- a/code/modules/mob/living/silicon/ai/freelook/read_me.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/read_me.dm
@@ -20,7 +20,7 @@
HOW IT WORKS
It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be
- explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Del().
+ explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy().
Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk.
These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index ab4031bab01..d00e209d2fb 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -206,7 +206,7 @@
/mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index cbc449410fc..bd7b023b5b6 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -68,6 +68,7 @@
//Some tidying-up.
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'Nanotrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
+ scanner.Grant(src)
update_icons()
/mob/living/silicon/robot/drone/init()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 25904e27723..7b1810617b4 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -12,7 +12,8 @@
/obj/item/weapon/firealarm_electronics,
/obj/item/weapon/airalarm_electronics,
/obj/item/weapon/airlock_electronics,
- /obj/item/weapon/module/power_control,
+ /obj/item/weapon/intercom_electronics,
+ /obj/item/weapon/apc_electronics,
/obj/item/weapon/stock_parts,
/obj/item/mounted/frame/light_fixture,
/obj/item/mounted/frame/apc_frame,
@@ -366,4 +367,4 @@
stack = stack_plastic
stack.amount++
- decompiler.stored_comms[type]--;
+ decompiler.stored_comms[type]--;
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 5113c719dbb..4d0fc33ca06 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -65,7 +65,7 @@
for(var/V in components)
var/datum/robot_component/C = components[V]
C.consume_power()
-
+
var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick
@@ -287,7 +287,6 @@
src.bodytemp.icon_state = "temp-2"
- if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
//Oxygen and fire does nothing yet!!
// if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]"
// if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]"
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 2e71b85b668..0b80df799ee 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -149,7 +149,7 @@ var/list/robot_verbs_default = list(
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
- hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
+ scanner.Grant(src)
/mob/living/silicon/robot/proc/init(var/alien=0)
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -206,6 +206,10 @@ var/list/robot_verbs_default = list(
connected_ai.connected_robots -= src
qdel(wires)
wires = null
+ qdel(module)
+ module = null
+ camera = null
+ cell = null
return ..()
/mob/living/silicon/robot/proc/pick_module()
@@ -905,7 +909,7 @@ var/list/robot_verbs_default = list(
/mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 4e45d6bc2ba..8546c793876 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -10,7 +10,7 @@
var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null
var/list/subsystems = list()
-
+
var/list/stacktypes
var/channels = list()
@@ -30,7 +30,16 @@
src.modules += new /obj/item/device/flash/cyborg(src)
src.emag = new /obj/item/toy/sword(src)
src.emag.name = "Placeholder Emag Item"
-
+
+/obj/item/weapon/robot_module/Destroy()
+ for(var/module in modules)
+ qdel(module)
+ modules.Cut()
+ qdel(emag)
+ emag = null
+ qdel(jetpack)
+ jetpack = null
+ return ..()
/obj/item/weapon/robot_module/proc/fix_modules()
for(var/obj/item/I in modules)
@@ -83,7 +92,7 @@
R.add_language("Chittin", 0)
R.add_language("Bubblish", 0)
R.add_language("Clownish",0)
-
+
/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
R.verbs |= subsystems
@@ -102,7 +111,7 @@
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.emag = new /obj/item/weapon/melee/energy/sword/cyborg(src)
-
+
fix_modules()
/obj/item/weapon/robot_module/medical
@@ -114,7 +123,7 @@
/obj/item/stack/medical/splint = 5,
/obj/item/stack/nanopaste = 5
)
-
+
/obj/item/weapon/robot_module/medical/New()
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer/advanced(src)
@@ -144,7 +153,7 @@
src.emag.reagents.add_reagent("facid", 250)
src.emag.name = "Polyacid spray"
-
+
fix_modules()
/obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R)
@@ -223,7 +232,7 @@
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src)
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
-
+
fix_modules()
/obj/item/weapon/robot_module/janitor
@@ -240,7 +249,7 @@
src.emag.reagents.add_reagent("lube", 250)
src.emag.name = "Lube spray"
-
+
fix_modules()
/obj/item/weapon/robot_module/butler
@@ -270,7 +279,7 @@
R.my_atom = src.emag
R.add_reagent("beer2", 50)
src.emag.name = "Mickey Finn's Special Brew"
-
+
fix_modules()
/obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R)
@@ -327,7 +336,7 @@
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src)
src.emag = new /obj/item/borg/stun(src)
-
+
fix_modules()
/obj/item/weapon/robot_module/deathsquad
@@ -341,7 +350,7 @@
src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.emag = null
-
+
fix_modules()
/obj/item/weapon/robot_module/syndicate
@@ -357,9 +366,9 @@
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/pinpointer/operative(src)
src.emag = null
-
+
fix_modules()
-
+
/obj/item/weapon/robot_module/syndicate_medical
name = "syndicate medical robot module"
stacktypes = list(
@@ -368,7 +377,7 @@
/obj/item/stack/medical/splint = 25,
/obj/item/stack/nanopaste = 25
)
-
+
/obj/item/weapon/robot_module/syndicate_medical/New()
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer/advanced(src)
@@ -395,7 +404,7 @@
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/pinpointer/operative(src)
src.emag = null
-
+
fix_modules()
/obj/item/weapon/robot_module/combat
@@ -410,7 +419,7 @@
src.modules += new /obj/item/borg/combat/mobility(src)
src.modules += new /obj/item/weapon/wrench(src) //Is a combat android really going to be stopped by a chair?
src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src)
-
+
fix_modules()
/obj/item/weapon/robot_module/alien/hunter
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index c78721f8357..986f6b3c7e1 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -64,8 +64,6 @@
src << "\red Warning: Electromagnetic pulse detected."
..()
-/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount)
- return //immune
/mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0)
return
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 6d5cd3ba6bd..a7d07c8485c 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -30,7 +30,6 @@
/mob/living/simple_animal/bee/New(loc, var/obj/machinery/apiary/new_parent)
..()
parent = new_parent
- verbs -= /atom/movable/verb/pull
/mob/living/simple_animal/bee/Destroy()
if(parent)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 3b6e7320717..875d6cfcf95 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -64,10 +64,10 @@
/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob)
if(istype(M, /mob/living/simple_animal/construct/builder))
health += 5
- M.emote("mends some of \the [src]'s wounds.")
+ M.custom_emote(1,"mends some of \the [src]'s wounds.")
else
if(M.melee_damage_upper <= 0)
- M.emote("[M.friendly] \the [src]")
+ M.custom_emote(1, "[M.friendly] \the [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index ae21a0a3d8f..ef5a8ec3719 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -78,7 +78,7 @@
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
- del(src)
+ qdel(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index b13714ae552..44735915da3 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -39,7 +39,7 @@
if(!stat && !resting && !buckled)
for(var/mob/living/simple_animal/mouse/M in view(1,src))
if(!M.stat && Adjacent(M))
- emote("me", 1, "splats \the [M]!")
+ custom_emote(1, "splats \the [M]!")
M.splat()
movement_target = null
stop_automated_movement = 0
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 0b904097fa3..c6bed1b1c26 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -38,9 +38,6 @@
if(fire)
if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
else fire.icon_state = "fire0"
- if(pullin)
- if(pulling) pullin.icon_state = "pull1"
- else pullin.icon_state = "pull0"
if(oxygen)
if(oxygen_alert) oxygen.icon_state = "oxy1"
else oxygen.icon_state = "oxy0"
@@ -97,7 +94,7 @@
user << "[src] is wearing too much armor! You can't reach \his skin."
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
- emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
+ custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if (istype(O, /obj/item/weapon/razor))
@@ -189,6 +186,7 @@
var/list/allowed_types = list(
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/space/deathsquad,
+ /obj/item/clothing/suit/space/rig/engineering,
/obj/item/device/radio,
/obj/item/device/radio/off,
/obj/item/clothing/suit/cardborg,
@@ -369,6 +367,11 @@
desc = "That's not red paint. That's real corgi blood."
valid = 1
+ if(/obj/item/clothing/head/helmet/space/rig/engineering)
+ name = "Space Explorer [real_name]"
+ desc = "That's one small step for a corgi. One giant yap for corgikind."
+ valid = 1
+
if(/obj/item/clothing/mask/fakemoustache)
name = "Definitely Not [real_name]"
desc = "That's Definitely Not [real_name]"
@@ -461,10 +464,10 @@
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
- emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
+ custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
- emote("me", 1, pick("dances around.","chases its tail!"))
+ custom_emote(1, pick("dances around.","chases its tail!"))
spawn(0)
if (ckey == null)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
@@ -591,7 +594,7 @@
if(!stat && !resting && !buckled)
if(prob(1))
if (ckey == null)
- emote("me", 1, pick("dances around.","chases her tail."))
+ custom_emote(1, pick("dances around.","chases her tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
@@ -609,10 +612,10 @@
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20)
- emote("me", 1, "yaps happily!")
+ custom_emote(1, "yaps happily!")
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
- emote("me", 1, "growls!")
+ custom_emote(1, "growls!")
/mob/living/simple_animal/pet/corgi/Ian/borgi
name = "E-N"
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index f25e44927f8..274326bd78f 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -63,7 +63,7 @@
health = min(maxHealth, health + MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
- del(MED)
+ qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies the [MED] on [src]")
diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm
index 224d46dd8f7..a819602719a 100644
--- a/code/modules/mob/living/simple_animal/friendly/pug.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pug.dm
@@ -24,7 +24,7 @@
if(!stat && !resting && !buckled)
if(prob(1))
- emote("me", 1, pick("chases its tail."))
+ custom_emote(1, pick("chases its tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index a2b56219f56..0c2174d131e 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -50,13 +50,13 @@
/mob/living/simple_animal/hostile/scarybat/FindTarget()
. = ..()
if(.)
- emote("flutters towards [.]")
+ custom_emote(1, "flutters towards [.]")
/mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available
if(istype(A) && A == owner)
return 0
return ..()
-
+
/mob/living/simple_animal/hostile/scarybat/CanAttack(var/atom/the_target)//This is here as a potential override to pick a specific target if available
if(istype(the_target) && the_target == owner)
return 0
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 514d2d313bd..05b8740e671 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -86,7 +86,7 @@
if(stance_step in list(1,4,7)) //every 3 ticks
var/action = pick( list( "growls at [target]", "stares angrily at [target]", "prepares to attack [target]", "closely watches [target]" ) )
if(action)
- emote(action)
+ custom_emote(1, action)
if(!found_mob)
stance_step--
@@ -97,7 +97,7 @@
if(HOSTILE_STANCE_ATTACKING)
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
- emote( "is worn out and needs to rest" )
+ custom_emote(1, "is worn out and needs to rest" )
stance = HOSTILE_STANCE_TIRED
stance_step = 0
walk(src, 0) //This stops the bear's walking
@@ -125,14 +125,14 @@
/mob/living/simple_animal/hostile/bear/FindTarget()
. = ..()
if(.)
- emote("stares alertly at [.]")
+ custom_emote(1, "stares alertly at [.]")
stance = HOSTILE_STANCE_ALERT
/mob/living/simple_animal/hostile/bear/LoseTarget()
..(5)
/mob/living/simple_animal/hostile/bear/AttackingTarget()
- emote( pick( list("slashes at [target]", "bites [target]") ) )
+ custom_emote(1, pick( list("slashes at [target]", "bites [target]") ) )
var/damage = rand(20,30)
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 93b90107133..5c8c80d5bde 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -48,7 +48,7 @@
/mob/living/simple_animal/hostile/carp/FindTarget()
. = ..()
if(.)
- emote("me", 1, "gnashes at [.]!")
+ custom_emote(1, "gnashes at [.]!")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 06988408c83..bbcacd234fe 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -39,7 +39,7 @@
/mob/living/simple_animal/hostile/faithless/FindTarget()
. = ..()
if(.)
- emote("me", 1, "wails at [.]!")
+ custom_emote(1, "wails at [.]!")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index dd42262bdcd..6246b286841 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -41,7 +41,7 @@
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
- emote("growls at [.]")
+ custom_emote(1, "growls at [.]")
/mob/living/simple_animal/hostile/mimic/Die()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index eb3d989cb3e..37f675f532e 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -161,7 +161,7 @@
..()
qdel(src)
-/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
+/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell.
//some random debris left behind
if(has_loot)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -170,16 +170,16 @@
var/obj/O
//shards
- O = PoolOrNew(/obj/item/weapon/shard, loc)
+ O = new /obj/item/weapon/shard(loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
- O = PoolOrNew(/obj/item/weapon/shard, loc)
+ O = new /obj/item/weapon/shard(loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
- O = PoolOrNew(/obj/item/weapon/shard, loc)
+ O = new /obj/item/weapon/shard(loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
- O = PoolOrNew(/obj/item/weapon/shard, loc)
+ O = new /obj/item/weapon/shard(loc)
step_to(O, get_turf(pick(view(7, src))))
//rods
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
index 01178af83f2..93d510de9ff 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
@@ -59,7 +59,7 @@
/mob/living/simple_animal/hostile/retaliate/ghost/FindTarget()
. = ..()
if(.)
- emote("wails at [.]")
+ custom_emote(1, "wails at [.]")
/mob/living/simple_animal/hostile/retaliate/ghost/Life()
if(target)
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 2d49cbf836d..a5138f08d08 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -40,7 +40,7 @@
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
if(.)
- emote("growls at [.]")
+ custom_emote(1, "growls at [.]")
/mob/living/simple_animal/hostile/tree/AttackingTarget()
. =..()
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index c3ab9221a20..84d92ee5985 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -343,7 +343,7 @@
//Search for item to steal
parrot_interest = search_for_item()
if(parrot_interest)
- emote("looks in [parrot_interest]'s direction and takes flight")
+ custom_emote(1,"looks in [parrot_interest]'s direction and takes flight")
parrot_state = PARROT_SWOOP | PARROT_STEAL
icon_state = "parrot_fly"
return
@@ -365,7 +365,7 @@
if(AM)
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
parrot_interest = AM
- emote("turns and flies towards [parrot_interest]")
+ custom_emote(1,"turns and flies towards [parrot_interest]")
parrot_state = PARROT_SWOOP | PARROT_STEAL
return
else //Else it's a perch
@@ -479,11 +479,11 @@
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
- emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
+ custom_emote(1, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
else
L.adjustBruteLoss(damage)
- emote(pick("pecks at [L].", "claws [L]."))
+ custom_emote(1, pick("pecks at [L].", "claws [L]."))
return
//Otherwise, fly towards the mob!
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 8696a4b0f3c..c8c9c8c37c0 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -152,23 +152,23 @@
else
randomValue -= speak.len
if(emote_see && randomValue <= emote_see.len)
- emote(pick(emote_see),1)
+ custom_emote(1, pick(emote_see))
else
- emote(pick(emote_hear),2)
+ custom_emote(2, pick(emote_hear))
else
say(pick(speak))
else
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
- emote(pick(emote_see),1)
+ custom_emote(1, pick(emote_see))
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
- emote(pick(emote_hear),2)
+ custom_emote(2, pick(emote_hear))
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
var/length = emote_hear.len + emote_see.len
var/pick = rand(1,length)
if(pick <= emote_see.len)
- emote(pick(emote_see),1)
+ custom_emote(1, pick(emote_see))
else
- emote(pick(emote_hear),2)
+ custom_emote(2,pick(emote_hear))
//Atmos
@@ -272,7 +272,7 @@
/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
- M.emote("me", 1, "[M.friendly] [src]")
+ M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 1a1304dbd19..a1478496ff7 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -30,7 +30,9 @@
client.images = null //remove the images such as AIs being unable to see runes
client.screen = list() //remove hud items just in case
- if(hud_used) del(hud_used) //remove the hud objects
+ if(hud_used)
+ qdel(hud_used) //remove the hud objects
+ hud_used = null
hud_used = new /datum/hud(src)
next_move = 1
@@ -46,7 +48,7 @@
if(ckey in deadmins)
- verbs += /client/proc/readmin
+ verbs += /client/proc/readmin
//Clear ability list and update from mob.
client.verbs -= ability_verbs
@@ -58,12 +60,12 @@
var/mob/living/carbon/human/H = src
if(H.species && H.species.abilities)
client.verbs |= H.species.abilities
-
+
client.screen += client.void
-
+
CallHook("Login", list("client" = src.client, "mob" = src))
-
+
// Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget().
// Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this.
/mob/proc/update_interface()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ae830d920b3..2c96609324d 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -3,9 +3,13 @@
dead_mob_list -= src
living_mob_list -= src
qdel(hud_used)
+ hud_used = null
if(mind && mind.current == src)
spellremove(src)
ghostize()
+ for(var/mob/dead/observer/M in following_mobs)
+ M.following = null
+ following_mobs = null
return ..()
/mob/New()
@@ -841,6 +845,30 @@ var/list/slot_equipment_priority = list( \
if(istype(M,/mob/living/silicon/ai)) return
show_inv(usr)
+//this and stop_pulling really ought to be /mob/living procs
+/mob/proc/start_pulling(atom/movable/AM)
+ if ( !AM || !src || src==AM || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
+ return
+ if (!( AM.anchored ))
+ AM.add_fingerprint(src)
+
+ // If we're pulling something then drop what we're currently pulling and pull this instead.
+ if(pulling)
+ // Are we trying to pull something we are already pulling? Then just stop here, no need to continue.
+ if(AM == pulling)
+ return
+ stop_pulling()
+
+ src.pulling = AM
+ AM.pulledby = src
+ if(pullin)
+ pullin.update_icon(src)
+ if(ismob(AM))
+ var/mob/M = AM
+ if(!iscarbon(src))
+ M.LAssailant = null
+ else
+ M.LAssailant = usr
/mob/verb/stop_pulling()
@@ -850,37 +878,8 @@ var/list/slot_equipment_priority = list( \
if(pulling)
pulling.pulledby = null
pulling = null
-
-/mob/proc/start_pulling(var/atom/movable/AM)
-
- if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
- return
-
- if (AM.anchored)
- usr << "It won't budge!"
- return
-
- var/mob/M = AM
- if(ismob(AM))
- if(!iscarbon(src))
- M.LAssailant = null
- else
- M.LAssailant = usr
-
- if(pulling)
- var/pulling_old = pulling
- stop_pulling()
- // Are we pulling the same thing twice? Just stop pulling.
- if(pulling_old == AM)
- return
-
- src.pulling = AM
- AM.pulledby = src
-
- //Attempted fix for people flying away through space when cuffed and dragged.
- if(ismob(AM))
- var/mob/pulled = AM
- pulled.inertia_dir = 0
+ if(pullin)
+ pullin.update_icon(src)
/mob/proc/can_use_hands()
return
@@ -1443,4 +1442,9 @@ mob/proc/yank_out_object()
M.pixel_y = initial(M.pixel_y)
/mob/proc/can_unbuckle(mob/user)
- return 1
\ No newline at end of file
+ return 1
+
+
+//Can the mob see reagents inside of containers?
+/mob/proc/can_see_reagents()
+ return 0
\ No newline at end of file
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 37af6e961a9..4f3ad8d2d6b 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -131,6 +131,9 @@
var/datum/hud/hud_used = null
+ var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining.
+ var/datum/action/scan_mode/scanner = new
+
var/list/grabbed_by = list( )
var/list/requests = list( )
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index dce8b3c9ffd..214c6dfa3a9 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -450,5 +450,27 @@
/mob/proc/mob_negates_gravity()
return 0
+/mob/proc/Move_Pulled(atom/A)
+ if (!canmove || restrained() || !pulling)
+ return
+ if (pulling.anchored)
+ return
+ if (!pulling.Adjacent(src))
+ return
+ if (A == loc && pulling.density)
+ return
+ if (!Process_Spacemove(get_dir(pulling.loc, A)))
+ return
+ if (ismob(pulling))
+ var/mob/M = pulling
+ var/atom/movable/t = M.pulling
+ M.stop_pulling()
+ step(pulling, get_dir(pulling.loc, A))
+ if(M)
+ M.start_pulling(t)
+ else
+ step(pulling, get_dir(pulling.loc, A))
+ return
+
/mob/proc/update_gravity()
return
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index da87a2b7537..9624e8fe53b 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -481,6 +481,7 @@
domutcheck(new_character)
new_character.dna.UpdateSE()
+ new_character.sync_organ_dna() //just fucking incase I guess
// Do the initial caching of the player's body icons.
new_character.force_update_limbs()
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 142f350131e..6f9e9ad1440 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -189,9 +189,9 @@ datum/preferences
return clothes_s
proc/update_preview_icon(var/for_observer=0) //seriously. This is horrendous.
- del(preview_icon_front)
- del(preview_icon_side)
- del(preview_icon)
+ qdel(preview_icon_front)
+ qdel(preview_icon_side)
+ qdel(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"
@@ -806,8 +806,8 @@ datum/preferences
preview_icon_front = new(preview_icon, dir = SOUTH)
preview_icon_side = new(preview_icon, dir = WEST)
- del(eyes_s)
- del(underwear_s)
- del(undershirt_s)
- del(socks_s)
- del(clothes_s)
+ qdel(eyes_s)
+ qdel(underwear_s)
+ qdel(undershirt_s)
+ qdel(socks_s)
+ qdel(clothes_s)
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index a93d2a278a8..e7d4fd89eba 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -323,4 +323,7 @@ var/list/organ_cache = list()
if(fingerprintslast) O.fingerprintslast = fingerprintslast
user.put_in_active_hand(O)
- qdel(src)
\ No newline at end of file
+ qdel(src)
+
+/obj/item/organ/proc/surgeryize()
+ return
\ No newline at end of file
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 5438fdd3ec3..46d7f01b0d9 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -33,10 +33,10 @@
if(is_bruised())
if(prob(2))
- spawn owner.emote("me", 1, "coughs up blood!")
+ spawn owner.custom_emote(1, "coughs up blood!")
owner.drip(10)
if(prob(4))
- spawn owner.emote("me", 1, "gasps for air!")
+ spawn owner.custom_emote(1, "gasps for air!")
owner.losebreath += 5
/obj/item/organ/kidneys
@@ -81,6 +81,14 @@
owner.b_eyes ? owner.b_eyes : 0
)
+/obj/item/organ/eyes/surgeryize()
+ if(!owner)
+ return
+ owner.disabilities &= ~NEARSIGHTED
+ owner.sdisabilities &= ~BLIND
+ owner.eye_blurry = 0
+ owner.eye_blind = 0
+
/obj/item/organ/liver
name = "liver"
icon_state = "liver"
diff --git a/code/modules/pooling/pool.dm b/code/modules/pooling/pool.dm
index 048940cfb51..25ff8e3e603 100644
--- a/code/modules/pooling/pool.dm
+++ b/code/modules/pooling/pool.dm
@@ -16,7 +16,7 @@ To put a object back in the pool, call PlaceInPool(object)
This will call destroy on the object, set its loc to null,
and reset all of its vars to their default
-You can override your object's destroy to return QDEL_HINT_PLACEINPOOL
+You can override your object's destroy to return QDEL_HINT_PUTINPOOL
to ensure its always placed in this pool (this will only be acted on if qdel calls destroy, and destroy will not get called twice)
*/
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 41e294eba58..67f5771588a 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -105,6 +105,15 @@
/obj/machinery/power/apc/noalarm
report_power_alarm = 0
+/obj/item/weapon/apc_electronics
+ name = "power control module"
+ desc = "Heavy-duty switching circuits for power control."
+ icon = 'icons/obj/module.dmi'
+ icon_state = "power_mod"
+ w_class = 2.0
+ item_state = "electronic"
+ flags = CONDUCT
+
/obj/machinery/power/apc/connect_to_network()
//Override because the APC does not directly connect to the network; it goes through a terminal.
//The terminal is what the power computer looks for anyway.
@@ -421,7 +430,7 @@
user.visible_message(\
"[user.name] has removed the power control board from [src.name]!",\
"You remove the power control board.")
- new /obj/item/weapon/module/power_control(loc)
+ new /obj/item/weapon/apc_electronics(loc)
else if (opened!=2) //cover isn't removed
opened = 0
update_icon()
@@ -532,7 +541,7 @@
new /obj/item/stack/cable_coil(loc,10)
user << "You cut the cables and dismantle the power terminal."
qdel(terminal) // qdel
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
+ else if (istype(W, /obj/item/weapon/apc_electronics) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
user << "You trying to insert the power control board into the frame..."
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 10, target = src))
@@ -540,7 +549,7 @@
has_electronics = 1
user << "You place the power control board inside the frame."
qdel(W) // qdel
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
+ else if (istype(W, /obj/item/weapon/apc_electronics) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
user << "You cannot put the board inside, the frame is damaged."
return
else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal)
@@ -1046,7 +1055,7 @@
src.occupier.mind.transfer_to(src.occupier.parent)
src.occupier.parent.adjustOxyLoss(src.occupier.getOxyLoss())
src.occupier.parent.cancel_camera()
- del(src.occupier) // qdel
+ qdel(src.occupier) // qdel
if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
for(var/obj/item/weapon/pinpointer/point in world)
for(var/datum/mind/AI_mind in ticker.mode.malf_ai)
@@ -1114,9 +1123,12 @@
if(!area.requires_power)
return
- lastused_light = area.usage(LIGHT)
+ lastused_light = area.usage(STATIC_LIGHT)
+ lastused_light += area.usage(LIGHT)
lastused_equip = area.usage(EQUIP)
+ lastused_equip += area.usage(STATIC_EQUIP)
lastused_environ = area.usage(ENVIRON)
+ lastused_environ += area.usage(STATIC_ENVIRON)
area.clear_usage()
lastused_total = lastused_light + lastused_equip + lastused_environ
@@ -1357,4 +1369,4 @@
else
return 0
-#undef APC_UPDATE_ICON_COOLDOWN
+#undef APC_UPDATE_ICON_COOLDOWN
\ No newline at end of file
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 247c5d5d752..081fd35e3f8 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -610,7 +610,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
if(ismob(loc)) //handle mob icon update
var/mob/M = loc
M.unEquip(src)
- qqdel(src)
+ qdel(src)
return 1
else
amount -= used
diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm
index 614a7393d9a..1d7a97406e4 100644
--- a/code/modules/power/engine.dm
+++ b/code/modules/power/engine.dm
@@ -1,20 +1,6 @@
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
+ user.Move_Pulled(src)
/turf/simulated/floor/engine/ex_act(severity)
switch(severity)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 24373f1b4f5..c75f53905f4 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -136,6 +136,7 @@
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/on = 0 // 1 if on, 0 if off
var/on_gs = 0
+ var/static_power_used = 0
var/brightness_range = 8 // luminosity when on, also used in power calculation
var/brightness_power = 3
var/brightness_color = null
@@ -180,7 +181,6 @@
// create a new lighting fixture
/obj/machinery/light/New()
..()
-
spawn(2)
var/area/A = get_area(src)
if(A && !A.requires_power)
@@ -233,10 +233,8 @@
switchcount++
if(rigged)
if(status == LIGHT_OK && trigger)
-
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
-
explode()
else if( prob( min(60, switchcount*switchcount*0.01) ) )
if(status == LIGHT_OK && trigger)
@@ -251,10 +249,14 @@
use_power = 1
set_light(0)
- active_power_usage = brightness_range * 10
+ active_power_usage = (brightness_range * 10)
if(on != on_gs)
on_gs = on
-
+ if(on)
+ static_power_used = brightness_range * 20 //20W per unit luminosity
+ addStaticPower(static_power_used, STATIC_LIGHT)
+ else
+ removeStaticPower(static_power_used, STATIC_LIGHT)
// attempt to set the light's on/off status
// will not switch on if broken/burned/empty
@@ -556,19 +558,10 @@
// timed process
// use power
-#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
-
-
-/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
- if(on)
- use_power(brightness_range * LIGHTING_POWER_FACTOR, LIGHT)
-
-
// called when area power state changes
/obj/machinery/light/power_change()
- spawn(10)
- var/area/A = get_area_master(src)
- if(A) seton(A.lightswitch && A.power_light)
+ var/area/A = get_area_master(src)
+ if(A) seton(A.lightswitch && A.power_light)
// called when on fire
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 083fe7009c2..d97a8fe7898 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -44,7 +44,7 @@
return powernet.avail
else
return 0
-
+
/obj/machinery/power/proc/load()
if(powernet)
return powernet.load
@@ -77,6 +77,15 @@
chan = power_channel
A.use_power(amount, chan)
+/obj/machinery/proc/addStaticPower(value, powerchannel)
+ var/area/A = get_area(src)
+ if(!A)
+ return
+ A.addStaticPower(value, powerchannel)
+
+/obj/machinery/proc/removeStaticPower(value, powerchannel)
+ addStaticPower(-value, powerchannel)
+
/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change
// by default, check equipment channel & set flag
// can override if needed
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 29d8af7a12f..d40281eae65 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -29,8 +29,7 @@
M.powernet = null
powernets -= src
- ..()
- return QDEL_HINT_QUEUE
+ return ..()
//Returns the amount of excess power (before refunding to SMESs) from last tick.
//This is for machines that might adjust their power consumption using this data.
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 93936f3b06f..d7b8d2bcdd1 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -191,7 +191,7 @@
src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay)
src.shot_number = 0
- var/obj/item/projectile/beam/emitter/A = PoolOrNew(/obj/item/projectile/beam/emitter,src.loc)
+ var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter(src.loc)
A.dir = src.dir
playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index c4170888d3d..338f3830766 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -45,6 +45,7 @@
/obj/singularity/Destroy()
processing_objects.Remove(src)
singularities -= src
+ target = null
return ..()
/obj/singularity/Move(atom/newloc, direct)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index f9b97b7f26a..597a078b320 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -72,6 +72,7 @@
/obj/machinery/power/supermatter_shard/Destroy()
investigate_log("has been destroyed.", "supermatter")
qdel(radio)
+ radio = null
return ..()
/obj/machinery/power/supermatter_shard/proc/explode()
@@ -233,7 +234,7 @@
/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob)
ui_interact(user)
-
+
/obj/machinery/power/supermatter_shard/attack_ghost(mob/user as mob)
ui_interact(user)
@@ -242,16 +243,16 @@
"You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\
"You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")
- playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
-
+ playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
+
Consume(user)
-
+
/obj/machinery/power/supermatter_shard/proc/get_integrity()
var/integrity = damage / explosion_point
integrity = round(100 - integrity * 100)
integrity = integrity < 0 ? 0 : integrity
return integrity
-
+
// This is purely informational UI that may be accessed by AIs or robots
/obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm
index 2bb312c12f0..0f36d7274bf 100644
--- a/code/modules/power/switch.dm
+++ b/code/modules/power/switch.dm
@@ -80,5 +80,5 @@
else
icon_state = icon_state_off
for(var/obj/structure/cable/C in src.loc)
- del(C)
+ qdel(C)
*/
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm
index 8117ff8441c..557407ac8a3 100644
--- a/code/modules/projectiles/ammunition/ammo_casings.dm
+++ b/code/modules/projectiles/ammunition/ammo_casings.dm
@@ -24,7 +24,7 @@
desc = "A 9mm bullet casing."
caliber = "9mm"
projectile_type = "/obj/item/projectile/bullet/weakbullet3"
-
+
/obj/item/ammo_casing/c9mmap
desc = "A 9mm bullet casing."
caliber = "9mm"
@@ -63,6 +63,14 @@
pellets = 5
deviation = 30
+/obj/item/ammo_casing/shotgun/rubbershot
+ name = "rubber shot"
+ desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance."
+ icon_state = "bshell"
+ projectile_type = "/obj/item/projectile/bullet/rpellet"
+ pellets = 5
+ deviation = 30
+ materials = list(MAT_METAL=4000)
/obj/item/ammo_casing/shotgun/beanbag
name = "beanbag slug"
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index d84b9e9dc75..9ef9938071a 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -71,7 +71,7 @@
/obj/item/ammo_box/magazine/internal/shotriot
name = "riot shotgun internal magazine"
desc = "Oh god, this shouldn't be here"
- ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
+ ammo_type = "/obj/item/ammo_casing/shotgun/rubbershot"
caliber = "shotgun"
max_ammo = 6
multiload = 0
@@ -125,26 +125,30 @@
/obj/item/ammo_box/magazine/uzim9mm/update_icon()
..()
- icon_state = "uzi9mm-[round(ammo_count(),4)]"
-
+ icon_state = "uzi9mm-[round(ammo_count(),4)]"
+
/obj/item/ammo_box/magazine/smgm9mm
name = "SMG magazine (9mm)"
icon_state = "smg9mm"
ammo_type = "/obj/item/ammo_casing/c9mm"
caliber = "9mm"
max_ammo = 30
-
+ materials = list(MAT_METAL = 2000)
+
/obj/item/ammo_box/magazine/smgm9mm/ap
name = "SMG magazine (Armour Piercing 9mm)"
ammo_type = /obj/item/ammo_casing/c9mmap
+ materials = list(MAT_METAL = 3000)
/obj/item/ammo_box/magazine/smgm9mm/toxin
name = "SMG magazine (Toxin Tipped 9mm)"
ammo_type = /obj/item/ammo_casing/c9mmtox
+ materials = list(MAT_METAL = 3000)
/obj/item/ammo_box/magazine/smgm9mm/fire
name = "SMG Magazine (Incendiary 9mm)"
ammo_type = /obj/item/ammo_casing/c9mminc
+ materials = list(MAT_METAL = 3000)
/obj/item/ammo_box/magazine/smgm9mm/update_icon()
..()
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index b4462517019..cbe75d884ef 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -75,10 +75,6 @@
/obj/item/projectile/beam/emitter/singularity_pull()
return //don't want the emitters to miss
-/obj/item/projectile/beam/emitter/Destroy()
- ..()
- return QDEL_HINT_PUTINPOOL
-
/obj/item/projectile/lasertag
name = "laser tag beam"
icon_state = "omnilaser"
@@ -233,12 +229,12 @@
f.hotspot_expose(1000,CELL_VOLUME)
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
//world << "deleting"
- //del(src) //Delete if it passes the world edge
+ //qdel(src) //Delete if it passes the world edge
broken = 1
return
if(kill_count < 1)
//world << "deleting"
- //del(src)
+ //qdel(src)
broken = 1
kill_count--
//world << "[x] [y]"
@@ -275,401 +271,4 @@
if(istype(target, /mob/living))
var/mob/living/M = target
M.playsound_local(src, "explosion", 50, 1)
- ..()
-
-/*
-/*
- * Use: Caches beam state images and holds turfs that had these images overlaid.
- * Structure:
- * beam_master
- * icon_states/dirs of beams
- * image for that beam
- * references for fired beams
- * icon_states/dirs for each placed beam image
- * turfs that have that icon_state/dir
- */
-var/list/beam_master = list()
-
-// Special laser the captains gun uses
-/obj/item/projectile/beam/captain
- name = "captain laser"
- damage = 40
-
-/obj/item/projectile/beam/lightning
- invisibility = 101
- name = "lightning"
- damage = 0
- icon = 'icons/obj/lightning.dmi'
- icon_state = "lightning"
- stun = 10
- weaken = 10
- stutter = 50
- eyeblur = 50
- var/tang = 0
- layer = 3
- var/turf/last = null
- kill_count = 6
-
- proc/adjustAngle(angle)
- angle = round(angle) + 45
- if(angle > 180)
- angle -= 180
- else
- angle += 180
- if(!angle)
- angle = 1
- /*if(angle < 0)
- //angle = (round(abs(get_angle(A, user))) + 45) - 90
- angle = round(angle) + 45 + 180
- else
- angle = round(angle) + 45*/
- return angle
-
- process()
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- var/broke = 0
- var/broken
- var/atom/curr = current
- var/Angle=round(Get_Angle(firer,curr))
- var/icon/I=new('icons/obj/zap.dmi',"lightning")
- I.Turn(Angle)
- var/DX=(32*curr.x+curr.pixel_x)-(32*firer.x+firer.pixel_x)
- var/DY=(32*curr.y+curr.pixel_y)-(32*firer.y+firer.pixel_y)
- var/N=0
- var/length=round(sqrt((DX)**2+(DY)**2))
- var/count = 0
- for(N,N= kill_count)
- break
- count++
- var/obj/effect/overlay/beam/X=new(loc)
- X.BeamSource=src
- if(N+32>length)
- var/icon/II=new(icon,icon_state)
- II.DrawBox(null,1,(length-N),32,32)
- II.Turn(Angle)
- X.icon=II
- else X.icon=I
- var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32)
- var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32)
- if(DX==0) Pixel_x=0
- if(DY==0) Pixel_y=0
- if(Pixel_x>32)
- for(var/a=0, a<=Pixel_x,a+=32)
- X.x++
- Pixel_x-=32
- if(Pixel_x<-32)
- for(var/a=0, a>=Pixel_x,a-=32)
- X.x--
- Pixel_x+=32
- if(Pixel_y>32)
- for(var/a=0, a<=Pixel_y,a+=32)
- X.y++
- Pixel_y-=32
- if(Pixel_y<-32)
- for(var/a=0, a>=Pixel_y,a-=32)
- X.y--
- Pixel_y+=32
- X.pixel_x=Pixel_x
- X.pixel_y=Pixel_y
- var/turf/TT = get_turf(X.loc)
- if(TT == firer.loc)
- continue
- if(TT.density)
- del(X)
- break
- for(var/atom/O in TT)
- if(!O.CanPass(src))
- del(X)
- broke = 1
- break
- for(var/mob/living/O in TT.contents)
- if(istype(O, /mob/living))
- if(O.density)
- del(X)
- broke = 1
- break
- if(broke)
- if(X)
- del(X)
- break
- spawn
- while(src) //Move until we hit something
- if(first)
- icon = midicon
- if((!( current ) || loc == current)) //If we pass our target
- broken = 1
- icon = endicon
- tang = adjustAngle(get_angle(original,current))
- if(tang > 180)
- tang -= 180
- else
- tang += 180
- icon_state = "[tang]"
- var/turf/simulated/floor/f = current
- if(f && istype(f))
- f.break_tile()
- f.hotspot_expose(1000,CELL_VOLUME)
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- //world << "deleting"
- //del(src) //Delete if it passes the world edge
- broken = 1
- return
- if(kill_count < 1)
- //world << "deleting"
- //del(src)
- broken = 1
- kill_count--
- //world << "[x] [y]"
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- icon = endicon
- if(!broken)
- tang = adjustAngle(get_angle(original,current))
- if(tang > 180)
- tang -= 180
- else
- tang += 180
- icon_state = "[tang]"
- Bump(original)
- first = 0
- if(broken)
- //world << "breaking"
- break
- else
- last = get_turf(src.loc)
- step_towards(src, current) //Move~
- if(src.loc != current)
- tang = adjustAngle(get_angle(src.loc,current))
- icon_state = "[tang]"
- del(src)
- return
- /*cleanup(reference) //Waits .3 seconds then removes the overlay.
- //world << "setting invisibility"
- sleep(50)
- src.invisibility = 101
- return*/
- on_hit(atom/target, blocked = 0)
- if(istype(target, /mob/living))
- var/mob/living/M = target
- M.playsound_local(src, "explosion", 50, 1)
- ..()
-
-/obj/item/projectile/beam
- name = "laser"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 40
- damage_type = BURN
- hitsound = 'sound/weapons/sear.ogg'
- flag = "laser"
- eyeblur = 4
- var/frequency = 1
-
- process()
- var/reference = "\ref[src]" //So we do not have to recalculate it a ton
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- spawn while(src) //Move until we hit something
-
- if((!( current ) || loc == current)) //If we pass our target
- current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- del(src) //Delete if it passes the world edge
- return
- step_towards(src, current) //Move~
-
- if(kill_count < 1)
- del(src)
- return
- kill_count--
-
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original)
-
- if(!first) //Add the overlay as we pass over tiles
- var/target_dir = get_dir(src, current) //So we don't call this too much
-
- //If the icon has not been added yet
- if( !("[icon_state][target_dir]" in beam_master) )
- var/image/I = image(icon,icon_state,10,target_dir) //Generate it.
- beam_master["[icon_state][target_dir]"] = I //And cache it!
-
- //Finally add the overlay
- src.loc.overlays += beam_master["[icon_state][target_dir]"]
-
- //Add the turf to a list in the beam master so they can be cleaned up easily.
- if(reference in beam_master)
- var/list/turf_master = beam_master[reference]
- if("[icon_state][target_dir]" in turf_master)
- var/list/turfs = turf_master["[icon_state][target_dir]"]
- turfs += loc
- else
- turf_master["[icon_state][target_dir]"] = list(loc)
- else
- var/list/turfs = list()
- turfs["[icon_state][target_dir]"] = list(loc)
- beam_master[reference] = turfs
- else
- first = 0
- cleanup(reference)
- return
- dumbfire(var/dir)
- var/reference = "\ref[src]" //So we do not have to recalculate it a ton
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- if(!dir)
- del(src)
- spawn while(src) //Move until we hit something
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- del(src) //Delete if it passes the world edge
- return
- var/turf/T = get_step(src, dir)
- step_towards(src, T) //Move~
-
- if(kill_count < 1)
- del(src)
- kill_count--
-
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original)
-
- if(!first) //Add the overlay as we pass over tiles
- var/target_dir = dir //So we don't call this too much
-
- //If the icon has not been added yet
- if( !("[icon_state][target_dir]" in beam_master) )
- var/image/I = image(icon,icon_state,10,target_dir) //Generate it.
- beam_master["[icon_state][target_dir]"] = I //And cache it!
-
- //Finally add the overlay
- src.loc.overlays += beam_master["[icon_state][target_dir]"]
-
- //Add the turf to a list in the beam master so they can be cleaned up easily.
- if(reference in beam_master)
- var/list/turf_master = beam_master[reference]
- if("[icon_state][target_dir]" in turf_master)
- var/list/turfs = turf_master["[icon_state][target_dir]"]
- turfs += loc
- else
- turf_master["[icon_state][target_dir]"] = list(loc)
- else
- var/list/turfs = list()
- turfs["[icon_state][target_dir]"] = list(loc)
- beam_master[reference] = turfs
- else
- first = 0
- cleanup(reference)
- return
-
- proc/cleanup(reference) //Waits .3 seconds then removes the overlay.
- src = null // Redundant.
- spawn(3)
- var/list/turf_master = beam_master[reference]
- for(var/laser_state in turf_master)
- var/list/turfs = turf_master[laser_state]
- for(var/turf/T in turfs)
- T.overlays -= beam_master[laser_state]
- return
-
-/obj/item/projectile/beam/practice
- name = "laser"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
- eyeblur = 2
-
-//Heavy lasers now deal slightly more damage, but have a slower firing rate; overall DPS still identical to lasers.
-/obj/item/projectile/beam/heavylaser
- name = "heavy laser"
- icon_state = "heavylaser"
- damage = 50
-
-/obj/item/projectile/beam/xray
- name = "xray beam"
- icon_state = "xray"
- damage = 15
- irradiate = 30
- kill_count = 50
-
-
-/obj/item/projectile/beam/pulse
- name = "pulse"
- icon_state = "u_laser"
- damage = 50
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target,/turf/)||istype(target,/obj/structure/))
- target.ex_act(2)
- ..()
-
-
-/obj/item/projectile/beam/deathlaser
- name = "death laser"
- icon_state = "heavylaser"
- damage = 60
-
-/obj/item/projectile/beam/emitter
- name = "emitter beam"
- icon_state = "emitter"
- damage = 30
-
-
-/obj/item/projectile/beam/lastertag/blue
- name = "lasertag beam"
- icon_state = "bluelaser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
- M.Weaken(5)
- return 1
-
-/obj/item/projectile/beam/lastertag/red
- name = "lasertag beam"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
- M.Weaken(5)
- return 1
-
-/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE
- name = "lasertag beam"
- icon_state = "omnilaser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag)))
- M.Weaken(5)
- return 1
-
-
-/obj/item/projectile/beam/stun
- name = "stun beam"
- icon_state = "stun"
- nodamage = 1
- damage = 0
- agony = 40
- damage_type = HALLOSS
-*/
\ No newline at end of file
+ ..()
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index e23c8653667..2859edc6a3c 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -27,7 +27,7 @@
/obj/item/projectile/bullet/weakbullet3
damage = 20
-
+
/obj/item/projectile/bullet/toxinbullet
damage = 15
@@ -67,6 +67,9 @@
/obj/item/projectile/bullet/heavybullet
damage = 35
+/obj/item/projectile/bullet/rpellet
+ damage = 3
+ stamina = 25
/obj/item/projectile/bullet/stunshot//taser slugs for shotguns, nothing special
name = "stunshot"
@@ -116,7 +119,7 @@
/obj/item/projectile/bullet/incendiary/shell/Move()
..()
var/turf/location = get_turf(src)
- PoolOrNew(/obj/effect/hotspot, location)
+ new /obj/effect/hotspot(location)
location.hotspot_expose(700, 50, 1)
/obj/item/projectile/bullet/incendiary/shell/dragonsbreath
diff --git a/code/modules/projectiles/targeting.dm b/code/modules/projectiles/targeting.dm
index 5b4811a0486..3ef440f6f2e 100644
--- a/code/modules/projectiles/targeting.dm
+++ b/code/modules/projectiles/targeting.dm
@@ -288,7 +288,7 @@ client/verb/ToggleGunMode()
else
usr << "Target may no longer move."
target_can_run = 0
- del(usr.gun_run_icon) //no need for icon for running permission
+ qdel(usr.gun_run_icon) //no need for icon for running permission
//Updating walking permission button
if(usr.gun_move_icon)
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 333dfc97114..f98c01072f6 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -602,12 +602,11 @@ atom/proc/create_reagents(var/max_vol)
reagents.my_atom = src
/datum/reagents/Destroy()
- ..()
+ . = ..()
processing_objects.Remove(src)
for(var/datum/reagent/R in reagent_list)
qdel(R)
reagent_list.Cut()
reagent_list = null
if(my_atom && my_atom.reagents == src)
- my_atom.reagents = null
- return QDEL_HINT_QUEUE
\ No newline at end of file
+ my_atom.reagents = null
\ No newline at end of file
diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm
index f858cc41797..f700ec2aa16 100644
--- a/code/modules/reagents/newchem/drugs.dm
+++ b/code/modules/reagents/newchem/drugs.dm
@@ -95,7 +95,7 @@
/datum/chemical_reaction/crank/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
- PoolOrNew(/obj/effect/hotspot, turf)
+ new /obj/effect/hotspot(turf)
explosion(T,0,0,2)
return
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index e20a8d1c491..9905345926b 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -513,16 +513,25 @@ datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob)
datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- M.eye_blurry = max(M.eye_blurry-5 , 0)
- M.eye_blind = max(M.eye_blind-5 , 0)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
- if(istype(E))
- if(E.damage > 0)
- E.damage -= 1
+ if(prob(80))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
+ if(istype(E))
+ E.damage = max(E.damage-1, 0)
+ M.eye_blurry = max(M.eye_blurry-1 , 0)
+ M.ear_damage = max(M.ear_damage-1, 0)
+ if(prob(50))
+ M.disabilities &= ~NEARSIGHTED
+ if(prob(30))
+ M.sdisabilities &= ~BLIND
+ M.eye_blind = 0
+ if(M.ear_damage <= 25)
+ if(prob(30))
+ M.ear_deaf = 0
..()
return
+
/datum/chemical_reaction/oculine
name = "Oculine"
id = "oculine"
diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm
index 6b63bb397f2..7e1e9899993 100644
--- a/code/modules/reagents/newchem/other.dm
+++ b/code/modules/reagents/newchem/other.dm
@@ -290,7 +290,7 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
M << "Something isn't right!"
M.adjustBruteLoss(1)
if(2)
- M.emote("me",1,"strains, but nothing happens.")
+ M.custom_emote(1,"strains, but nothing happens.")
M.adjustBruteLoss(2)
if(3)
M.emote("scream")
diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm
index 9a978acc26f..a85060132ae 100644
--- a/code/modules/reagents/newchem/pyro.dm
+++ b/code/modules/reagents/newchem/pyro.dm
@@ -46,7 +46,7 @@
/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
- PoolOrNew(/obj/effect/hotspot, turf)
+ new /obj/effect/hotspot(turf)
return
/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume)
@@ -59,13 +59,13 @@
if(prob(volume/10))
F.make_plating()
if(istype(F, /turf/simulated/floor/))
- PoolOrNew(/obj/effect/hotspot, F)
+ new /obj/effect/hotspot(F)
if(istype(T, /turf/simulated/wall/))
var/turf/simulated/wall/W = T
if(prob(volume/10))
W.ChangeTurf(/turf/simulated/floor)
if(istype(T, /turf/simulated/shuttle/))
- PoolOrNew(/obj/effect/hotspot, T)
+ new /obj/effect/hotspot(T)
return
/datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
@@ -429,7 +429,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
return
var/turf/simulated/T = get_turf(holder.my_atom)
for(var/turf/simulated/turf in range(created_volume/10,T))
- PoolOrNew(/obj/effect/hotspot, turf)
+ new /obj/effect/hotspot(turf)
return
/datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob)
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
index 02e1f4a65cd..809a8dfd34d 100644
--- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
@@ -30,13 +30,6 @@
result_amount = 2
mix_message = "The solvent extracts an antibiotic compound from the fungus."
- audioline
- name = "Audioline"
- id = "audioline"
- result = "audioline"
- required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
- result_amount = 3
-
rezadone
name = "Rezadone"
id = "rezadone"
diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
index d2ca7ff569e..0dcf2e98c30 100644
--- a/code/modules/reagents/oldchem/reagents/_reagent_base.dm
+++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
@@ -76,6 +76,5 @@
return
/datum/reagent/Destroy()
- ..()
- holder = null
- return QDEL_HINT_QUEUE
\ No newline at end of file
+ . = ..()
+ holder = null
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm
index 696fa6354a5..a9f2d48bb19 100644
--- a/code/modules/reagents/oldchem/reagents/reagents_med.dm
+++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm
@@ -61,20 +61,6 @@
..()
return
-/datum/reagent/audioline
- name = "Audioline"
- id = "audioline"
- description = "Heals ear damage."
- reagent_state = LIQUID
- color = "#6600FF" // rgb: 100, 165, 255
-
-/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.ear_damage = 0
- M.ear_deaf = 0
- ..()
- return
-
/datum/reagent/mitocholide
name = "Mitocholide"
id = "mitocholide"
@@ -91,7 +77,7 @@
for(var/name in H.internal_organs_by_name)
var/obj/item/organ/I = H.internal_organs_by_name[name]
if(I.damage > 0)
- I.damage -= 0.20
+ I.damage = max(I.damage-0.4, 0)
..()
return
diff --git a/code/modules/reagents/reagent_containers/drugs.dm b/code/modules/reagents/reagent_containers/drugs.dm
index 1829058b294..53d9310f6cc 100644
--- a/code/modules/reagents/reagent_containers/drugs.dm
+++ b/code/modules/reagents/reagent_containers/drugs.dm
@@ -18,15 +18,6 @@
src.pixel_y = rand(-10.0, 10)
base_name = name
-
- examine(mob/user)
- if(..(user, 2))
- user << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- user << "\blue [src.reagents.total_volume] units of powder."
- else
- user << "\blue Nothing."
-
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 9e2bca5edcb..5d4c986539a 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -156,7 +156,7 @@
else if (reagents.total_volume<=src.volume/4)
user << "\blue \The [src] is almost empty!"
else if (reagents.total_volume<=src.volume*0.66)
- user << "\blue \The [src] is half full!"
+ user << "\blue \The [src] is half empty!" // Pessimism is the real order of the day.
else if (reagents.total_volume<=src.volume*0.90)
user << "\blue \The [src] is almost full!"
else
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index 0cf90626ccc..aa304ca9bdc 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -18,7 +18,7 @@
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc)
user.put_in_active_hand(B)
if(prob(33))
- PoolOrNew(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location!
+ new /obj/item/weapon/shard(target.loc) // Create a glass shard at the target's location!
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index 74d939bb49a..caab1e519c1 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -12,7 +12,7 @@
proc/smash(mob/living/target as mob, mob/living/user as mob)
//Creates a shattering noise and replaces the drinking glass with a glass shard
user.drop_item()
- var/obj/item/weapon/shard/S = PoolOrNew(/obj/item/weapon/shard, user.loc)
+ var/obj/item/weapon/shard/S = new /obj/item/weapon/shard(user.loc)
user.put_in_active_hand(S)
playsound(src, "shatter", 70, 1)
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm
index 7b9833e78fd..943c5022dc4 100644
--- a/code/modules/reagents/reagent_containers/food/sandwich.dm
+++ b/code/modules/reagents/reagent_containers/food/sandwich.dm
@@ -5,7 +5,7 @@
if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src))
S.attackby(W,user, params)
- del(src)
+ qdel(src)
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich
@@ -77,7 +77,7 @@
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
- del(O)
+ qdel(O)
return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 6f12c03c6a8..33946f4c4b8 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -551,9 +551,10 @@
throw_impact(atom/hit_atom)
..()
- new/obj/effect/decal/cleanable/egg_smudge(src.loc)
- src.reagents.reaction(hit_atom, TOUCH)
- src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
+ var/turf/T = get_turf(hit_atom)
+ new/obj/effect/decal/cleanable/egg_smudge(T)
+ if(reagents)
+ reagents.reaction(hit_atom, TOUCH)
qdel(src)
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
@@ -1652,82 +1653,40 @@
icon_state = "monkeycube"
bitesize = 12
filling_color = "#ADAC7F"
-
var/monkey_type = "Monkey"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
..()
reagents.add_reagent("protein",10)
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity)
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity)
if(!proximity) return
if(istype(O,/obj/structure/sink) && !wrapped)
- user << "You place [name] under a stream of water..."
- if(loc == user)
- user.unEquip(src)
- forceMove(get_turf(src))
+ user << "You place [src] under a stream of water..."
+ user.drop_item()
+ forceMove(get_turf(O))
return Expand()
..()
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
if(wrapped)
Unwrap(user)
-/*
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
- M << "Something inside of you suddently expands!"
-
-
- if (istype(M, /mob/living/carbon/human))
- //Do not try to understand.
- var/obj/item/weapon/surprise = new/obj/item/weapon(M)
- var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas
- surprise.icon = ook.icon
- surprise.icon_state = ook.icon_state
- surprise.name = "malformed [ook.name]"
- surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life."
- del(ook) //rip nullspace monkey
- surprise.transform *= 0.6
- surprise.add_blood(M)
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/E = H.get_organ("chest")
- E.fracture()
- for (var/obj/item/organ/I in E.internal_organs)
- I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1))
-
- if (!E.hidden && prob(60)) //set it snuggly
- E.hidden = surprise
- E.cavity = 0
- else //someone is having a bad day
- E.createwound(CUT, 30)
- E.embed(surprise)
- else if (issmall(M))
- M.visible_message("[M] suddenly tears in half!")
- var/mob/living/carbon/monkey/ook = new monkey_type(M.loc)
- ook.name = "malformed [ook.name]"
- ook.transform *= 0.6
- ook.add_blood(M)
- M.gib()
- ..()
-*/
-
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
if(volume >= 5)
return Expand()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
- for(var/mob/M in viewers(src,7))
- M << "\red \The [src] expands!"
- var/mob/living/carbon/human/H = new (src)
+ visible_message("[src] expands!")
+ var/mob/living/carbon/human/H = new (get_turf(src))
H.set_species(monkey_type)
qdel(src)
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
icon_state = "monkeycube"
desc = "Just add water!"
- user << "You unwrap the cube."
+ user << "You unwrap the cube."
wrapped = 0
- return
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
desc = "Still wrapped in some paper."
@@ -1737,22 +1696,23 @@
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
name = "farwa cube"
monkey_type = "Farwa"
+
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube
name = "farwa cube"
monkey_type = "Farwa"
-
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube
name = "wolpin cube"
monkey_type = "Wolpin"
+
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube
name = "wolpin cube"
monkey_type = "Wolpin"
-
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube
name = "stok cube"
monkey_type = "Stok"
+
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube
name = "stok cube"
monkey_type = "Stok"
diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm
index ac20303584d..1245bfe4e01 100644
--- a/code/modules/reagents/reagent_containers/glass_containers.dm
+++ b/code/modules/reagents/reagent_containers/glass_containers.dm
@@ -49,11 +49,6 @@
examine(mob/user)
if(!..(user, 2))
return
- user << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- user << "\blue [src.reagents.total_volume] units of liquid."
- else
- user << "\blue Nothing."
if (!is_open_container())
user << "\blue Airtight lid seals it completely."
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index d736b89ce4c..c4ba69dc71a 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -124,21 +124,7 @@
// attack with hand, move pulled object onto conveyor
/obj/machinery/conveyor/attack_hand(mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- user.stop_pulling()
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- user.stop_pulling()
- return
+ user.Move_Pulled(src)
// make the conveyor broken
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 9e4b3661c0d..10fb01573d5 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -18,244 +18,244 @@
var/base_state = "pipe-s"
// update iconstate and dpdir due to dir and type
- proc/update()
- var/flip = turn(dir, 180)
- var/left = turn(dir, 90)
- var/right = turn(dir, -90)
+/obj/structure/disposalconstruct/proc/update()
+ var/flip = turn(dir, 180)
+ var/left = turn(dir, 90)
+ var/right = turn(dir, -90)
- switch(ptype)
- if(0)
- base_state = "pipe-s"
- dpdir = dir | flip
- if(1)
- base_state = "pipe-c"
- dpdir = dir | right
- if(2)
- base_state = "pipe-j1"
- dpdir = dir | right | flip
- if(3)
- base_state = "pipe-j2"
- dpdir = dir | left | flip
- if(4)
- base_state = "pipe-y"
- dpdir = dir | left | right
- if(5)
- base_state = "pipe-t"
- dpdir = dir
- // disposal bin has only one dir, thus we don't need to care about setting it
- if(6)
- if(anchored)
- base_state = "disposal"
- else
- base_state = "condisposal"
+ switch(ptype)
+ if(0)
+ base_state = "pipe-s"
+ dpdir = dir | flip
+ if(1)
+ base_state = "pipe-c"
+ dpdir = dir | right
+ if(2)
+ base_state = "pipe-j1"
+ dpdir = dir | right | flip
+ if(3)
+ base_state = "pipe-j2"
+ dpdir = dir | left | flip
+ if(4)
+ base_state = "pipe-y"
+ dpdir = dir | left | right
+ if(5)
+ base_state = "pipe-t"
+ dpdir = dir
+ // disposal bin has only one dir, thus we don't need to care about setting it
+ if(6)
+ if(anchored)
+ base_state = "disposal"
+ else
+ base_state = "condisposal"
- if(7)
- base_state = "outlet"
- dpdir = dir
+ if(7)
+ base_state = "outlet"
+ dpdir = dir
- if(8)
- base_state = "intake"
- dpdir = dir
+ if(8)
+ base_state = "intake"
+ dpdir = dir
- if(9)
- base_state = "pipe-j1s"
- dpdir = dir | right | flip
+ if(9)
+ base_state = "pipe-j1s"
+ dpdir = dir | right | flip
- if(10)
- base_state = "pipe-j2s"
- dpdir = dir | left | flip
+ if(10)
+ base_state = "pipe-j2s"
+ dpdir = dir | left | flip
- if(ptype<6 || ptype>8)
- icon_state = "con[base_state]"
- else
- icon_state = base_state
+ if(ptype<6 || ptype>8)
+ icon_state = "con[base_state]"
+ else
+ icon_state = base_state
- if(invisibility) // if invisible, fade icon
- icon -= rgb(0,0,0,128)
+ if(invisibility) // if invisible, fade icon
+ icon -= rgb(0,0,0,128)
- // hide called by levelupdate if turf intact status changes
- // change visibility status and force update of icon
- hide(var/intact)
- invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact
- update()
+// hide called by levelupdate if turf intact status changes
+// change visibility status and force update of icon
+/obj/structure/disposalconstruct/hide(var/intact)
+ invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact
+ update()
- // flip and rotate verbs
- verb/rotate()
- set name = "Rotate Pipe"
- set src in view(1)
+// flip and rotate verbs
+/obj/structure/disposalconstruct/verb/rotate()
+ set name = "Rotate Pipe"
+ set src in view(1)
- if(usr.stat)
- return
-
- if(anchored)
- usr << "You must unfasten the pipe before rotating it."
- return
-
- dir = turn(dir, -90)
- update()
-
- verb/flip()
- set name = "Flip Pipe"
- set src in view(1)
- if(usr.stat)
- return
-
- if(anchored)
- usr << "You must unfasten the pipe before flipping it."
- return
-
- dir = turn(dir, 180)
- switch(ptype)
- if(2)
- ptype = 3
- if(3)
- ptype = 2
- if(9)
- ptype = 10
- if(10)
- ptype = 9
-
- update()
-
- // returns the type path of disposalpipe corresponding to this item dtype
- proc/dpipetype()
- switch(ptype)
- if(0,1)
- return /obj/structure/disposalpipe/segment
- if(2,3,4)
- return /obj/structure/disposalpipe/junction
- if(5)
- return /obj/structure/disposalpipe/trunk
- if(6)
- return /obj/machinery/disposal
- if(7)
- return /obj/structure/disposaloutlet
- if(8)
- return /obj/machinery/disposal/deliveryChute
- if(9,10)
- return /obj/structure/disposalpipe/sortjunction
+ if(usr.stat)
return
+ if(anchored)
+ usr << "You must unfasten the pipe before rotating it."
+ return
+
+ dir = turn(dir, -90)
+ update()
+
+/obj/structure/disposalconstruct/verb/flip()
+ set name = "Flip Pipe"
+ set src in view(1)
+ if(usr.stat)
+ return
+
+ if(anchored)
+ usr << "You must unfasten the pipe before flipping it."
+ return
+
+ dir = turn(dir, 180)
+ switch(ptype)
+ if(2)
+ ptype = 3
+ if(3)
+ ptype = 2
+ if(9)
+ ptype = 10
+ if(10)
+ ptype = 9
+
+ update()
+
+// returns the type path of disposalpipe corresponding to this item dtype
+/obj/structure/disposalconstruct/proc/dpipetype()
+ switch(ptype)
+ if(0,1)
+ return /obj/structure/disposalpipe/segment
+ if(2,3,4)
+ return /obj/structure/disposalpipe/junction
+ if(5)
+ return /obj/structure/disposalpipe/trunk
+ if(6)
+ return /obj/machinery/disposal
+ if(7)
+ return /obj/structure/disposaloutlet
+ if(8)
+ return /obj/machinery/disposal/deliveryChute
+ if(9,10)
+ return /obj/structure/disposalpipe/sortjunction
+ return
- // attackby item
- // wrench: (un)anchor
- // weldingtool: convert to real pipe
- attackby(var/obj/item/I, var/mob/user, params)
- var/nicetype = "pipe"
- var/ispipe = 0 // Indicates if we should change the level of this pipe
- src.add_fingerprint(user)
- switch(ptype)
- if(6)
- nicetype = "disposal bin"
- if(7)
- nicetype = "disposal outlet"
- if(8)
- nicetype = "delivery chute"
- if(9, 10)
- nicetype = "sorting pipe"
- ispipe = 1
- else
- nicetype = "pipe"
- ispipe = 1
+// attackby item
+// wrench: (un)anchor
+// weldingtool: convert to real pipe
- var/turf/T = src.loc
- if(T.intact)
- user << "You can only attach the [nicetype] if the floor plating is removed."
- return
+/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user, params)
+ var/nicetype = "pipe"
+ var/ispipe = 0 // Indicates if we should change the level of this pipe
+ src.add_fingerprint(user)
+ switch(ptype)
+ if(6)
+ nicetype = "disposal bin"
+ if(7)
+ nicetype = "disposal outlet"
+ if(8)
+ nicetype = "delivery chute"
+ if(9, 10)
+ nicetype = "sorting pipe"
+ ispipe = 1
+ else
+ nicetype = "pipe"
+ ispipe = 1
- var/obj/structure/disposalpipe/CP = locate() in T
- if(ptype>=6 && ptype <= 8) // Disposal or outlet
- if(CP) // There's something there
- if(!istype(CP,/obj/structure/disposalpipe/trunk))
- user << "The [nicetype] requires a trunk underneath it in order to work."
- return
- else // Nothing under, fuck.
+ var/turf/T = src.loc
+ if(T.intact)
+ user << "You can only attach the [nicetype] if the floor plating is removed."
+ return
+
+ var/obj/structure/disposalpipe/CP = locate() in T
+ if(ptype>=6 && ptype <= 8) // Disposal or outlet
+ if(CP) // There's something there
+ if(!istype(CP,/obj/structure/disposalpipe/trunk))
user << "The [nicetype] requires a trunk underneath it in order to work."
return
- else
- if(CP)
- update()
- var/pdir = CP.dpdir
- if(istype(CP, /obj/structure/disposalpipe/broken))
- pdir = CP.dir
- if(pdir & dpdir)
- user << "There is already a [nicetype] at that location."
- return
-
-
- if(istype(I, /obj/item/weapon/wrench))
- if(anchored)
- anchored = 0
- if(ispipe)
- level = 2
- density = 0
- else
- density = 1
- user << "You detach the [nicetype] from the underfloor."
- else
- anchored = 1
- if(ispipe)
- level = 1 // We don't want disposal bins to disappear under the floors
- density = 0
- else
- density = 1 // We don't want disposal bins or outlets to go density 0
- user << "You attach the [nicetype] to the underfloor."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
+ else // Nothing under, fuck.
+ user << "The [nicetype] requires a trunk underneath it in order to work."
+ return
+ else
+ if(CP)
update()
+ var/pdir = CP.dpdir
+ if(istype(CP, /obj/structure/disposalpipe/broken))
+ pdir = CP.dir
+ if(pdir & dpdir)
+ user << "There is already a [nicetype] at that location."
+ return
- else if(istype(I, /obj/item/weapon/weldingtool))
- if(anchored)
- var/obj/item/weapon/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "Welding the [nicetype] in place."
- if(do_after(user, 20, target = src))
- if(!src || !W.isOn()) return
- user << "The [nicetype] has been welded in place!"
- update() // TODO: Make this neat
- if(ispipe) // Pipe
- var/pipetype = dpipetype()
- var/obj/structure/disposalpipe/P = new pipetype(src.loc)
- src.transfer_fingerprints_to(P)
- P.base_icon_state = base_state
- P.dir = dir
- P.dpdir = dpdir
- P.updateicon()
+ if(istype(I, /obj/item/weapon/wrench))
+ if(anchored)
+ anchored = 0
+ if(ispipe)
+ level = 2
+ density = 0
+ else
+ density = 1
+ user << "You detach the [nicetype] from the underfloor."
+ else
+ anchored = 1
+ if(ispipe)
+ level = 1 // We don't want disposal bins to disappear under the floors
+ density = 0
+ else
+ density = 1 // We don't want disposal bins or outlets to go density 0
+ user << "You attach the [nicetype] to the underfloor."
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
+ update()
- //Needs some special treatment ;)
- if(ptype==9 || ptype==10)
- var/obj/structure/disposalpipe/sortjunction/SortP = P
- SortP.updatedir()
+ else if(istype(I, /obj/item/weapon/weldingtool))
+ if(anchored)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ user << "Welding the [nicetype] in place."
+ if(do_after(user, 20, target = src))
+ if(!src || !W.isOn()) return
+ user << "The [nicetype] has been welded in place!"
+ update() // TODO: Make this neat
+ if(ispipe) // Pipe
- else if(ptype==6) // Disposal bin
- var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc)
- src.transfer_fingerprints_to(P)
- P.mode = 0 // start with pump off
+ var/pipetype = dpipetype()
+ var/obj/structure/disposalpipe/P = new pipetype(src.loc)
+ src.transfer_fingerprints_to(P)
+ P.base_icon_state = base_state
+ P.dir = dir
+ P.dpdir = dpdir
+ P.update_icon()
- else if(ptype==7) // Disposal outlet
+ //Needs some special treatment ;)
+ if(ptype==9 || ptype==10)
+ var/obj/structure/disposalpipe/sortjunction/SortP = P
+ SortP.updatedir()
- var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
- src.transfer_fingerprints_to(P)
- P.dir = dir
- var/obj/structure/disposalpipe/trunk/Trunk = CP
- Trunk.linked = P
+ else if(ptype==6) // Disposal bin
+ var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc)
+ src.transfer_fingerprints_to(P)
+ P.mode = 0 // start with pump off
- else if(ptype==8) // Disposal outlet
+ else if(ptype==7) // Disposal outlet
- var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc)
- src.transfer_fingerprints_to(P)
- P.dir = dir
+ var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
+ src.transfer_fingerprints_to(P)
+ P.dir = dir
+ var/obj/structure/disposalpipe/trunk/Trunk = CP
+ Trunk.linked = P
- qdel(src)
- return
- else
- user << "You need more welding fuel to complete this task."
+ else if(ptype==8) // Disposal outlet
+
+ var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc)
+ src.transfer_fingerprints_to(P)
+ P.dir = dir
+
+ qdel(src)
return
else
- user << "You need to attach it to the plating first!"
+ user << "You need more welding fuel to complete this task."
return
+ else
+ user << "You need to attach it to the plating first!"
+ return
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 91cdc759161..ce5ca78ebe0 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -29,18 +29,21 @@
// find the attached trunk (if present) and init gas resvr.
/obj/machinery/disposal/New()
..()
- spawn(5)
- trunk = locate() in src.loc
- if(!trunk)
- mode = 0
- flush = 0
- else
- trunk.linked = src // link the pipe trunk to self
+ trunk_check()
- air_contents = new/datum/gas_mixture()
- //gas.volume = 1.05 * CELLSTANDARD
- update()
+ air_contents = new/datum/gas_mixture()
+ //gas.volume = 1.05 * CELLSTANDARD
+ update()
+/obj/machinery/disposal/proc/trunk_check()
+ trunk = locate() in src.loc
+ if(!trunk)
+ mode = 0
+ flush = 0
+ else
+ mode = initial(mode)
+ flush = initial(flush)
+ trunk.linked = src // link the pipe trunk to self
/obj/machinery/disposal/Destroy()
eject()
@@ -48,6 +51,15 @@
trunk.linked = null
return ..()
+/obj/machinery/disposal/initialize()
+ // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
+ var/atom/L = loc
+ var/datum/gas_mixture/env = new
+ env.copy_from(L.return_air())
+ var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1)
+ air_contents.merge(removed)
+ trunk_check()
+
// attack by item places it in to disposal
/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user, params)
if(stat & BROKEN || !I || !user || ((I.flags & NODROP) && !istype(I, /obj/item/weapon/storage/bag/trash/cyborg)))
@@ -652,267 +664,266 @@
var/base_icon_state // initial icon state on map
// new pipe, set the icon_state as on map
- New()
- ..()
- base_icon_state = icon_state
- return
+/obj/structure/disposalpipe/New()
+ ..()
+ base_icon_state = icon_state
- // pipe is deleted
- // ensure if holder is present, it is expelled
- Destroy()
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // deleting pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(0)
- qdel(H)
- ..()
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
- return ..()
-
- singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- qdel(src)
-
- // returns the direction of the next pipe object, given the entrance dir
- // by default, returns the bitmask of remaining directions
- proc/nextdir(var/fromdir)
- return dpdir & (~turn(fromdir, 180))
-
- // transfer the holder through this pipe segment
- // overriden for special behaviour
- //
- proc/transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
-
-
- // update the icon_state to reflect hidden status
- proc/update()
+// pipe is deleted
+// ensure if holder is present, it is expelled
+/obj/structure/disposalpipe/Destroy()
+ var/obj/structure/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ H.active = 0
var/turf/T = src.loc
- hide(T.intact && !istype(T,/turf/space)) // space never hides pipes
+ if(T.density)
+ // deleting pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
- // hide called by levelupdate if turf intact status changes
- // change visibility status and force update of icon
- hide(var/intact)
- invisibility = intact ? 101: 0 // hide if floor is intact
- updateicon()
-
- // update actual icon_state depending on visibility
- // if invisible, append "f" to icon_state to show faded version
- // this will be revealed if a T-scanner is used
- // if visible, use regular icon_state
- proc/updateicon()
- /*if(invisibility)
- icon_state = "[base_icon_state]f"
- else
- icon_state = base_icon_state*/
- return
-
-
- // expel the held objects into a turf
- // called when there is a break in the pipe
- //
-
- proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction)
-
- if(!T)
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(0)
+ qdel(H)
+ ..()
return
- var/turf/target
-
- if(T.density) // dense ouput turf, so stop holder
- H.active = 0
- H.loc = src
- return
- if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
- var/turf/simulated/floor/F = T
- //F.health = 100
- F.burnt = 1
- F.intact = 0
- F.levelupdate()
- new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
- F.icon_state = "Floor[F.burnt ? "1" : ""]"
-
- if(direction) // direction is specified
- if(istype(T, /turf/space)) // if ended in space, then range is unlimited
- target = get_edge_target_turf(T, direction)
- else // otherwise limit to 10 tiles
- target = get_ranged_target_turf(T, direction, 10)
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(direction)
- spawn(1)
- if(AM)
- AM.throw_at(target, 100, 1)
- H.vent_gas(T)
- qdel(H)
-
- else // no specified direction, so throw in random direction
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
-
- AM.loc = T
- AM.pipe_eject(0)
- spawn(1)
- if(AM)
- AM.throw_at(target, 5, 1)
-
- H.vent_gas(T) // all gas vent to turf
- qdel(H)
-
- return
-
- // call to break the pipe
- // will expel any holder inside at the time
- // then delete the pipe
- // remains : set to leave broken pipe pieces in place
- proc/broken(var/remains = 0)
- if(remains)
- for(var/D in cardinal)
- if(D & dpdir)
- var/obj/structure/disposalpipe/broken/P = new(src.loc)
- P.dir = D
-
- src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
- var/obj/structure/disposalholder/H = locate() in src
+ // otherwise, do normal expel from turf
if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // broken pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(0)
- qdel(H)
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
-
- spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
- qdel(src)
-
-
- // pipe affected by explosion
- ex_act(severity)
-
- switch(severity)
- if(1.0)
- broken(0)
- return
- if(2.0)
- health -= rand(5,15)
- healthcheck()
- return
- if(3.0)
- health -= rand(0,15)
- healthcheck()
- return
-
-
- // test health for brokenness
- proc/healthcheck()
- if(health < -2)
- broken(0)
- else if(health<1)
- broken(1)
- return
-
- //attack by item
- //weldingtool: unfasten and convert to obj/disposalconstruct
-
- attackby(var/obj/item/I, var/mob/user, params)
-
- var/turf/T = src.loc
- if(T.intact)
- return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/W = I
-
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- // check if anything changed over 2 seconds
- var/turf/uloc = user.loc
- var/atom/wloc = W.loc
- user << "Slicing the disposal pipe."
- sleep(30)
- if(!W.isOn()) return
- if(user.loc == uloc && wloc == W.loc)
- welded()
- else
- user << "You must stay still while welding the pipe."
- else
- user << "You need more welding fuel to cut the pipe."
- return
-
- // called when pipe is cut with welder
- proc/welded()
-
- var/obj/structure/disposalconstruct/C = new (src.loc)
- switch(base_icon_state)
- if("pipe-s")
- C.ptype = 0
- if("pipe-c")
- C.ptype = 1
- if("pipe-j1")
- C.ptype = 2
- if("pipe-j2")
- C.ptype = 3
- if("pipe-y")
- C.ptype = 4
- if("pipe-t")
- C.ptype = 5
- if("pipe-j1s")
- C.ptype = 9
- if("pipe-j2s")
- C.ptype = 10
- src.transfer_fingerprints_to(C)
- C.dir = dir
- C.density = 0
- C.anchored = 1
- C.update()
+ expel(H, T, 0)
+ return ..()
+/obj/structure/disposalpipe/singularity_pull(S, current_size)
+ if(current_size >= STAGE_FIVE)
qdel(src)
+// returns the direction of the next pipe object, given the entrance dir
+// by default, returns the bitmask of remaining directions
+/obj/structure/disposalpipe/proc/nextdir(var/fromdir)
+ return dpdir & (~turn(fromdir, 180))
+
+// transfer the holder through this pipe segment
+// overriden for special behaviour
+//
+/obj/structure/disposalpipe/proc/transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
+
+ return P
+
+
+// update the icon_state to reflect hidden status
+/obj/structure/disposalpipe/proc/update()
+ var/turf/T = src.loc
+ hide(T.intact && !istype(T,/turf/space)) // space never hides pipes
+ update_icon()
+
+// hide called by levelupdate if turf intact status changes
+// change visibility status and force update of icon
+/obj/structure/disposalpipe/hide(var/intact)
+ invisibility = intact ? 101: 0 // hide if floor is intact
+ update_icon()
+
+// update actual icon_state depending on visibility
+// if invisible, append "f" to icon_state to show faded version
+// this will be revealed if a T-scanner is used
+// if visible, use regular icon_state
+/obj/structure/disposalpipe/update_icon()
+ if(invisibility)
+ icon_state = "[base_icon_state]f"
+ else
+ icon_state = base_icon_state
+
+
+// expel the held objects into a turf
+// called when there is a break in the pipe
+//
+
+/obj/structure/disposalpipe/proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction)
+
+ if(!T)
+ return
+
+ var/turf/target
+
+ if(T.density) // dense ouput turf, so stop holder
+ H.active = 0
+ H.loc = src
+ return
+ if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
+ var/turf/simulated/floor/F = T
+ //F.health = 100
+ F.burnt = 1
+ F.intact = 0
+ F.levelupdate()
+ new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
+ F.icon_state = "Floor[F.burnt ? "1" : ""]"
+
+ if(direction) // direction is specified
+ if(istype(T, /turf/space)) // if ended in space, then range is unlimited
+ target = get_edge_target_turf(T, direction)
+ else // otherwise limit to 10 tiles
+ target = get_ranged_target_turf(T, direction, 10)
+
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(direction)
+ spawn(1)
+ if(AM)
+ AM.throw_at(target, 100, 1)
+ H.vent_gas(T)
+ qdel(H)
+
+ else // no specified direction, so throw in random direction
+
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
+
+ AM.loc = T
+ AM.pipe_eject(0)
+ spawn(1)
+ if(AM)
+ AM.throw_at(target, 5, 1)
+
+ H.vent_gas(T) // all gas vent to turf
+ qdel(H)
+
+ return
+
+// call to break the pipe
+// will expel any holder inside at the time
+// then delete the pipe
+// remains : set to leave broken pipe pieces in place
+/obj/structure/disposalpipe/proc/broken(var/remains = 0)
+ if(remains)
+ for(var/D in cardinal)
+ if(D & dpdir)
+ var/obj/structure/disposalpipe/broken/P = new(src.loc)
+ P.dir = D
+
+ src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
+ var/obj/structure/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ H.active = 0
+ var/turf/T = src.loc
+ if(T.density)
+ // broken pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
+
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(0)
+ qdel(H)
+ return
+
+ // otherwise, do normal expel from turf
+ if(H)
+ expel(H, T, 0)
+
+ spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
+ qdel(src)
+
+
+// pipe affected by explosion
+/obj/structure/disposalpipe/ex_act(severity)
+
+ switch(severity)
+ if(1.0)
+ broken(0)
+ return
+ if(2.0)
+ health -= rand(5,15)
+ healthcheck()
+ return
+ if(3.0)
+ health -= rand(0,15)
+ healthcheck()
+ return
+
+
+// test health for brokenness
+/obj/structure/disposalpipe/proc/healthcheck()
+ if(health < -2)
+ broken(0)
+ else if(health<1)
+ broken(1)
+ return
+
+//attack by item
+//weldingtool: unfasten and convert to obj/disposalconstruct
+
+/obj/structure/disposalpipe/attackby(var/obj/item/I, var/mob/user, params)
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return // prevent interaction with T-scanner revealed pipes
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = I
+
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ // check if anything changed over 2 seconds
+ var/turf/uloc = user.loc
+ var/atom/wloc = W.loc
+ user << "Slicing the disposal pipe."
+ sleep(30)
+ if(!W.isOn()) return
+ if(user.loc == uloc && wloc == W.loc)
+ welded()
+ else
+ user << "You must stay still while welding the pipe."
+ else
+ user << "You need more welding fuel to cut the pipe."
+ return
+
+// called when pipe is cut with welder
+/obj/structure/disposalpipe/proc/welded()
+
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ switch(base_icon_state)
+ if("pipe-s")
+ C.ptype = 0
+ if("pipe-c")
+ C.ptype = 1
+ if("pipe-j1")
+ C.ptype = 2
+ if("pipe-j2")
+ C.ptype = 3
+ if("pipe-y")
+ C.ptype = 4
+ if("pipe-t")
+ C.ptype = 5
+ if("pipe-j1s")
+ C.ptype = 9
+ if("pipe-j2s")
+ C.ptype = 10
+ src.transfer_fingerprints_to(C)
+ C.dir = dir
+ C.density = 0
+ C.anchored = 1
+ C.update()
+
+ qdel(src)
+
// *** TEST verb
//client/verb/dispstop()
// for(var/obj/structure/disposalholder/H in world)
@@ -922,16 +933,14 @@
/obj/structure/disposalpipe/segment
icon_state = "pipe-s"
- New()
- ..()
- if(icon_state == "pipe-s")
- dpdir = dir | turn(dir, 180)
- else
- dpdir = dir | turn(dir, -90)
-
- update()
- return
+/obj/structure/disposalpipe/segment/New()
+ ..()
+ if(icon_state == "pipe-s")
+ dpdir = dir | turn(dir, 180)
+ else
+ dpdir = dir | turn(dir, -90)
+ update()
@@ -939,45 +948,44 @@
/obj/structure/disposalpipe/junction
icon_state = "pipe-j1"
- New()
- ..()
- if(icon_state == "pipe-j1")
- dpdir = dir | turn(dir, -90) | turn(dir,180)
- else if(icon_state == "pipe-j2")
- dpdir = dir | turn(dir, 90) | turn(dir,180)
- else // pipe-y
- dpdir = dir | turn(dir,90) | turn(dir, -90)
- update()
- return
+/obj/structure/disposalpipe/junction/New()
+ ..()
+ if(icon_state == "pipe-j1")
+ dpdir = dir | turn(dir, -90) | turn(dir,180)
+ else if(icon_state == "pipe-j2")
+ dpdir = dir | turn(dir, 90) | turn(dir,180)
+ else // pipe-y
+ dpdir = dir | turn(dir,90) | turn(dir, -90)
+ update()
// next direction to move
// if coming in from secondary dirs, then next is primary dir
// if coming in from primary dir, then next is equal chance of other dirs
- nextdir(var/fromdir)
- var/flipdir = turn(fromdir, 180)
- if(flipdir != dir) // came from secondary dir
- return dir // so exit through primary
- else // came from primary
- // so need to choose either secondary exit
- var/mask = ..(fromdir)
+/obj/structure/disposalpipe/junction/nextdir(var/fromdir)
+ var/flipdir = turn(fromdir, 180)
+ if(flipdir != dir) // came from secondary dir
+ return dir // so exit through primary
+ else // came from primary
+ // so need to choose either secondary exit
+ var/mask = ..(fromdir)
- // find a bit which is set
- var/setbit = 0
- if(mask & NORTH)
- setbit = NORTH
- else if(mask & SOUTH)
- setbit = SOUTH
- else if(mask & EAST)
- setbit = EAST
- else
- setbit = WEST
+ // find a bit which is set
+ var/setbit = 0
+ if(mask & NORTH)
+ setbit = NORTH
+ else if(mask & SOUTH)
+ setbit = SOUTH
+ else if(mask & EAST)
+ setbit = EAST
+ else
+ setbit = WEST
- if(prob(50)) // 50% chance to choose the found bit or the other one
- return setbit
- else
- return mask & (~setbit)
+ if(prob(50)) // 50% chance to choose the found bit or the other one
+ return setbit
+ else
+ return mask & (~setbit)
//a three-way junction that sorts objects
/obj/structure/disposalpipe/sortjunction
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 90cebcf4648..fccc9008310 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -122,6 +122,14 @@
build_path = /obj/item/weapon/airlock_electronics
category = list("initial", "Electronics")
+/datum/design/apc_electronics
+ name="Power Control Module"
+ id = "apc_electronics"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/weapon/apc_electronics
+ category = list("initial", "Electronics")
+
/datum/design/intercom_electronics
name = "Intercom Electronics"
id = "intercom_electronics"
@@ -418,6 +426,14 @@
build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list("initial", "Security")
+/datum/design/rubbershot
+ name = "Rubber shot"
+ id = "rubber_shot"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun/rubbershot
+ category = list("initial", "Security")
+
/datum/design/c38
name = "Speed Loader (.38)"
id = "c38"
diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm
index 330098a2383..87f4db7e1f0 100644
--- a/code/modules/research/designs/equipment_designs.dm
+++ b/code/modules/research/designs/equipment_designs.dm
@@ -10,7 +10,7 @@
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200)
build_path = /obj/item/weapon/weldingtool/experimental
category = list("Equipment")
-
+
/datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
@@ -120,4 +120,24 @@
materials = list(MAT_METAL = 6000, MAT_GLASS = 2000)
build_path = /obj/item/device/detective_scanner
locked = 1 //no validhunting scientists.
+ category = list("Equipment")
+
+/datum/design/sci_goggles
+ name = "Science Goggles"
+ desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
+ id = "scigoggles"
+ req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 300)
+ build_path = /obj/item/clothing/glasses/science
+ category = list("Equipment")
+
+/datum/design/nv_sci_goggles
+ name = "Night Vision Science Goggles"
+ desc = "Like Science google, but works in darkness."
+ id = "nvscigoggles"
+ req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 300, MAT_PLASMA = 250, MAT_URANIUM = 1000)
+ build_path = /obj/item/clothing/glasses/science
category = list("Equipment")
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 9072217e4f7..f0e7a0ddf69 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -54,7 +54,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/selected_category
var/list/datum/design/matching_designs = list() //for the search function
-/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
+/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID.
var/datum/tech/check_tech
var/return_name = null
for(var/T in subtypesof(/datum/tech))
@@ -68,7 +68,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
return return_name
-/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
+proc/CallMaterialName(ID)
var/datum/reagent/temp_reagent
var/return_name = null
if (copytext(ID, 1, 2) == "$")
@@ -183,7 +183,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/Topic(href, href_list)
if(..())
return 1
-
+
if(!allowed(usr) && !isobserver(usr))
return 1
@@ -1115,7 +1115,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "
"
return dat
-
+
/obj/machinery/computer/rdconsole/core
name = "Core R&D Console"
desc = "A console used to interface with R&D tools."
@@ -1126,7 +1126,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
desc = "A console used to interface with R&D tools."
id = 2
req_access = list(access_robotics)
-
+
/obj/machinery/computer/rdconsole/experiment
name = "E.X.P.E.R.I-MENTOR R&D Console"
desc = "A console used to interface with R&D tools."
@@ -1137,4 +1137,3 @@ won't update every console in existence) but it's more of a hassle to do. Also,
desc = "A console used to interface with R&D tools."
id = 4
req_access = list(access_mechanic)
-
\ No newline at end of file
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm
index 0215c67e520..817baf70e16 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm
@@ -99,7 +99,7 @@
//failure
user.visible_message("[src] suddenly crumbles away.",\
"\red [src] has disintegrated under your onslaught, any secrets it was holding are long gone.")
- del(src)
+ qdel(src)
return
if(prob(excavation_level))
@@ -115,4 +115,4 @@
else
user.visible_message("[src] suddenly crumbles away.",\
"\blue [src] has been whittled away under your careful excavation, but there was nothing of interest inside.")
- del(src)
+ qdel(src)
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
index 27a51f80135..54bdf4fd961 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
@@ -20,17 +20,17 @@
/obj/structure/crystal/Destroy()
src.visible_message("\The [src] shatters!")
if(prob(75))
- PoolOrNew(/obj/item/weapon/shard/plasma, loc)
+ new /obj/item/weapon/shard/plasma(loc)
if(prob(50))
- PoolOrNew(/obj/item/weapon/shard/plasma, loc)
+ new /obj/item/weapon/shard/plasma(loc)
if(prob(25))
- PoolOrNew(/obj/item/weapon/shard/plasma, loc)
+ new /obj/item/weapon/shard/plasma(loc)
if(prob(75))
- PoolOrNew(/obj/item/weapon/shard, loc)
+ new /obj/item/weapon/shard(loc)
if(prob(50))
- PoolOrNew(/obj/item/weapon/shard, loc)
+ new /obj/item/weapon/shard(loc)
if(prob(25))
- PoolOrNew(/obj/item/weapon/shard, loc)
+ new /obj/item/weapon/shard(loc)
return ..()
//todo: laser_act
diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
index e076eedd2bd..82848156023 100644
--- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
+++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
@@ -13,7 +13,7 @@
if(created_field.len)
for(var/obj/effect/energy_field/F in created_field)
created_field.Remove(F)
- del F
+ qdel(F)
else if(holder)
var/turf/T = get_turf(holder)
while(created_field.len < 16)
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index a3ab9612471..01ce550c045 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -57,7 +57,7 @@
else
for(var/mob/M in viewers(world.view, user))
M.show_message("[src] burns away into nothing.",1)
- del(src)
+ qdel(src)
w.remove_fuel(4)
else
for(var/mob/M in viewers(world.view, user))
@@ -73,7 +73,7 @@
..()
if(prob(33))
src.visible_message("[src] crumbles away, leaving some dust and gravel behind.")
- del(src)
+ qdel(src)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Archaeological finds
@@ -311,9 +311,9 @@
apply_material_decorations = 0
if(22)
if(prob(50))
- new_item = PoolOrNew(/obj/item/weapon/shard, loc)
+ new_item = new /obj/item/weapon/shard(loc)
else
- new_item = PoolOrNew(/obj/item/weapon/shard/plasma, loc)
+ new_item = new /obj/item/weapon/shard/plasma(loc)
apply_prefix = 0
apply_image_decorations = 0
@@ -547,7 +547,7 @@
talking_atom.holder_atom = new_item
talking_atom.init()
- del(src)
+ qdel(src)
else if(talkative)
src.talking_atom = new()
diff --git a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
index 8338de5a3ae..a619325d941 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
@@ -17,7 +17,7 @@
var/turf/T = get_turf(src)
if(istype(T, /turf/simulated/mineral))
T:last_find = W
- del src
+ qdel(src)
/obj/item/weapon/fossil/bone
name = "Fossilised bone"
@@ -40,8 +40,8 @@
var/b = new src.type
o.contents.Add(a)
o.contents.Add(b)
- del W
- del src
+ qdel(W)
+ qdel(src)
/obj/skeleton
name = "Incomplete skeleton"
@@ -62,7 +62,7 @@
if(!bstate)
bnum++
src.contents.Add(new/obj/item/weapon/fossil/bone)
- del W
+ qdel(W)
if(bnum==breq)
usr = user
icon_state = "skel"
diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm
index 43c9bcef812..a4421aa3e61 100644
--- a/code/modules/research/xenoarchaeology/master_controller.dm
+++ b/code/modules/research/xenoarchaeology/master_controller.dm
@@ -108,7 +108,7 @@ datum/controller/game_controller/proc/SetupXenoarch()
if(!genome_prefixes)
genome_prefixes = alphabet_uppercase.Copy()
if(!genome_prefixes.len)
- del genome_prefixes
+ qdel(genome_prefixes)
genome_prefixes = alphabet_uppercase.Copy()
//create animal gene sequences
diff --git a/code/modules/scripting/Parser/Keywords.dm b/code/modules/scripting/Parser/Keywords.dm
index bdd33d8bda0..e39ee506857 100644
--- a/code/modules/scripting/Parser/Keywords.dm
+++ b/code/modules/scripting/Parser/Keywords.dm
@@ -46,7 +46,7 @@ var/const/Represents a special statement in the code triggered by a keyword.
nS_Keyword
New(inline=0)
if(inline)
- del src
+ del(src)
kwReturn
Parse(n_Parser/nS_Parser/parser)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 6fe84897c3b..6b29f969743 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -150,6 +150,8 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
for(var/obj/item/organ/I in affected.internal_organs)
+ if(I)
+ I.surgeryize()
if(I && I.damage > 0)
if(I.robotic < 2)
user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \
@@ -193,7 +195,7 @@
if (!..())
return 0
-
+
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected && !(affected.status & ORGAN_ROBOT)))
@@ -310,7 +312,7 @@
if(!istype(O))
return 0
-
+
if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
user << "You cannot install a naked organ into a robotic body."
return 2
diff --git a/code/modules/vehicle/train/trains/ambulance.dm b/code/modules/vehicle/train/trains/ambulance.dm
index fea50fba521..f7094f10ad8 100644
--- a/code/modules/vehicle/train/trains/ambulance.dm
+++ b/code/modules/vehicle/train/trains/ambulance.dm
@@ -33,7 +33,6 @@
/obj/vehicle/train/ambulance/engine/New()
..()
cell = new /obj/item/weapon/stock_parts/cell/high
- verbs -= /atom/movable/verb/pull
key = new()
/obj/vehicle/train/ambulance/engine/Move()
diff --git a/code/modules/vehicle/train/trains/cargo/cargo_train.dm b/code/modules/vehicle/train/trains/cargo/cargo_train.dm
index 338432fabad..5933ada33d5 100644
--- a/code/modules/vehicle/train/trains/cargo/cargo_train.dm
+++ b/code/modules/vehicle/train/trains/cargo/cargo_train.dm
@@ -41,7 +41,6 @@
/obj/vehicle/train/cargo/engine/New()
..()
cell = new /obj/item/weapon/stock_parts/cell/high
- verbs -= /atom/movable/verb/pull
key = new()
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
overlays += I
@@ -279,10 +278,5 @@
if(!lead && !tow)
anchored = 0
- if(verbs.Find(/atom/movable/verb/pull))
- return
- else
- verbs += /atom/movable/verb/pull
else
- anchored = 1
- verbs -= /atom/movable/verb/pull
+ anchored = 1
\ No newline at end of file
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index e73fea39d27..7b1c38e4bef 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -552,7 +552,7 @@
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(prob(30))
- mob.emote("me",1,"is sweating profusely!")
+ mob.custom_emote(1,"is sweating profusely!")
if(istype(mob.loc,/turf/simulated))
var/turf/simulated/T = mob.loc
@@ -583,7 +583,7 @@
if(pick(0,1))
mob.say(pick("Uh HUH!", "Thank you, Thank you very much...", "I ain't nothin' but a hound dog!", "Swing low, sweet chariot!"))
else
- mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!"))
+ mob.custom_emote(1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!"))
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.f_style == "Pompadour"))
@@ -945,7 +945,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
name = "Wheezing"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
- mob.emote("me",1,"wheezes.")
+ mob.custom_emote(1,"wheezes.")
/datum/disease2/effect/optimistic_minor
diff --git a/config/example/config.txt b/config/example/config.txt
index 076a0e80766..6f5485ba6e6 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -86,7 +86,6 @@ PROBABILITY RAGINMAGES 0
PROBABILITY BORER 0
PROBABILITY XENOS 2
PROBABILITY MUTINY 1
-PROBABILITY NATIONS 0
PROBABILITY METEOR 0
## Hash out to disable random events during the round.
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
index b9602a93b1d..ca86e3b6814 100644
Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ
diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi
index a8871a76d49..ffc5e9428db 100644
Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ
diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi
index 93a789b08f7..8c48077682e 100644
Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 2a7d6de6cb6..cc0fcbf3e09 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 38fc4dd06be..b6a84df335a 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ
diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi
index 89723dc9363..808734a832e 100644
Binary files a/icons/mob/screen1_Midnight.dmi and b/icons/mob/screen1_Midnight.dmi differ
diff --git a/icons/mob/screen1_NinjaHUD.dmi b/icons/mob/screen1_NinjaHUD.dmi
index d4f554a0aa4..bbbf743533e 100644
Binary files a/icons/mob/screen1_NinjaHUD.dmi and b/icons/mob/screen1_NinjaHUD.dmi differ
diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi
index bda7f98857b..15964ad65d0 100644
Binary files a/icons/mob/screen1_Orange.dmi and b/icons/mob/screen1_Orange.dmi differ
diff --git a/icons/mob/screen1_Vampire.dmi b/icons/mob/screen1_Vampire.dmi
index a5026a36fa2..6a30aa697d8 100644
Binary files a/icons/mob/screen1_Vampire.dmi and b/icons/mob/screen1_Vampire.dmi differ
diff --git a/icons/mob/screen1_White.dmi b/icons/mob/screen1_White.dmi
index b96463eee2b..b474f443445 100644
Binary files a/icons/mob/screen1_White.dmi and b/icons/mob/screen1_White.dmi differ
diff --git a/icons/mob/screen1_corgi.dmi b/icons/mob/screen1_corgi.dmi
index cfe8f62efa5..dafa9ae2b44 100644
Binary files a/icons/mob/screen1_corgi.dmi and b/icons/mob/screen1_corgi.dmi differ
diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi
index 51dce681bf7..7da629f1dae 100644
Binary files a/icons/mob/screen1_old.dmi and b/icons/mob/screen1_old.dmi differ
diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi
index cc2051ee1ce..9188e33ff5f 100644
Binary files a/icons/mob/screen1_robot.dmi and b/icons/mob/screen1_robot.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 2df0cf5540e..c41b8e60053 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/nano/css/shared.css b/nano/css/shared.css
index 861fd9e165c..786b577e615 100644
--- a/nano/css/shared.css
+++ b/nano/css/shared.css
@@ -445,6 +445,11 @@ div.notice {
white-space: nowrap;
}
+.pdanote {
+ color: #cd6500;
+ font-weight: bold;
+}
+
/* DNA Modifier styling */
.dnaBlock {
float: left;
diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js
index 40c6b6077e5..28a41518010 100644
--- a/nano/js/nano_base_helpers.js
+++ b/nano/js/nano_base_helpers.js
@@ -102,6 +102,10 @@ NanoBaseHelpers = function ()
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
},
+ // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
+ capitalizeFirstLetter: function(string) {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+ },
// Display a bar. Used to show health, capacity, etc.
displayBar: function(value, rangeMin, rangeMax, styleClass, showText) {
diff --git a/nano/maptools/MapPatcher.jar b/nano/maptools/MapPatcher.jar
deleted file mode 100644
index 5cbaad488c1..00000000000
Binary files a/nano/maptools/MapPatcher.jar and /dev/null differ
diff --git a/nano/maptools/clean_map.bat b/nano/maptools/clean_map.bat
deleted file mode 100644
index 82ed1829b4f..00000000000
--- a/nano/maptools/clean_map.bat
+++ /dev/null
@@ -1 +0,0 @@
-java -jar MapPatcher.jar -clean ../maps/tgstation2.dmm.backup ../maps/tgstation2.dmm ../maps/tgstation2.dmm
\ No newline at end of file
diff --git a/nano/maptools/mapmerge.sh b/nano/maptools/mapmerge.sh
deleted file mode 100644
index bddb60100e0..00000000000
--- a/nano/maptools/mapmerge.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-java -jar maptools/MapPatcher.jar -merge $1 $2 $3 $2
-if [ "$?" -gt 0 ]
-then
- echo "Unable to automatically resolve map conflicts, please merge manually."
- exit 1
-fi
-java -jar maptools/MapPatcher.jar -clean $1 $2 $2
-
-exit 0
diff --git a/nano/maptools/new_clean.bat b/nano/maptools/new_clean.bat
deleted file mode 100644
index 9d9ec108b5d..00000000000
--- a/nano/maptools/new_clean.bat
+++ /dev/null
@@ -1,96 +0,0 @@
-@setlocal enableextensions enabledelayedexpansion
-@echo off
-
-set /a count=0
-for /f "tokens=*" %%A in ('dir /b /a-d "../maps/*.dmm"') do (
- set /a count+=1
- set num.!count!=%%A
-)
-
-for /f "tokens=2* delims=.=" %%A in ('set num.') do echo %%A = %%B
-
-:choosemap
-echo ...
-set /p prompt="Which map # would you like to clean?: " || set prompt=_None
-
-if /i "%prompt%"=="exit" (
- goto :quitmaybe
-)
-
-if "%prompt%"=="_None" (
- goto :prom_error
-) else set mapnum=%prompt%
-
-for /f "tokens=2* delims=.=" %%A in ('set num.%mapnum%') do set map=%%B
-
-if "%map%"=="" (
- echo That's not a valid map, donklorde.
- goto :choosemap
-)
-
-if not exist "../maps/%map%.backup" (
- goto :bckup_error
-)
-
-goto :printpath
-
-:prom_error
-echo You didn't choose anything!
-goto :choosemap
-
-:bckup_error
-echo ...
-echo WARNING: A .backup does not exist for %map% !
-echo ...
-goto :choosemap
-
-
-:printpath
-echo ...
-echo =============
-echo Map filepath (This should NOT be the .backup):
-echo:../maps/%map%
-echo =============
-goto :finalize
-
-
-:finalize
-echo ...
-set /p finalize="Is this filepath correct?: " || set finalize=None
-if "%finalize%"=="None" (goto :fin_error)
-if /i "%finalize%"=="y" (goto :java)
-if /i "%finalize%"=="yes" (goto :java)
-if /i "%finalize%"=="n" (goto :quitmaybe)
-if /i "%finalize%"=="no" (goto :quitmaybe)
-goto :fin_error
-
-:fin_error
-echo ...
-echo That wasn't a valid response you donk!
-echo Valid responses: y, n, yes, no
-goto :finalize
-
-:java
-echo Starting MapPatcher...
-java -jar MapPatcher.jar -clean ../maps/%map%.backup ../maps/%map% ../maps/%map%
-goto :exit
-
-:quitmaybe
-echo ...
-set /p exitmaybe="Exit the program?: " || set exitmaybe=_NothingChosen
-if "%exitmaybe%"=="_NothingChosen" (goto :qm_error)
-if /i "%exitmaybe%"=="y" (goto :exit)
-if /i "%exitmaybe%"=="yes" (goto :exit)
-if /i "%exitmaybe%"=="n" (goto :choosemap)
-if /i "%exitmaybe%"=="no" (goto :choosemap)
-goto :qm_error
-
-:qm_error
-echo ...
-echo That wasn't a valid response, or you didn't choose anything!
-echo Valid responses: y, n, yes, no
-goto :quitmaybe
-
-:exit
-pause
-exit
\ No newline at end of file
diff --git a/nano/maptools/new_prepare.bat b/nano/maptools/new_prepare.bat
deleted file mode 100644
index ddcdfabe1cb..00000000000
--- a/nano/maptools/new_prepare.bat
+++ /dev/null
@@ -1,73 +0,0 @@
-@setlocal enableextensions enabledelayedexpansion
-@echo off
-
-set /a count=0
-for /f "tokens=*" %%A in ('dir /b /a-d "../maps/*.dmm"') do (
- set /a count+=1
- set num.!count!=%%A
-)
-
-for /f "tokens=2* delims=.=" %%A in ('set num.') do echo %%A = %%B
-
-:choosemap
-echo ...
-set /p prompt="Which map # would you like to back up?: " || set prompt=_None
-
-if /i "%prompt%"=="exit" (
- goto :quitmaybe
-)
-
-if "%prompt%"=="_None" (
- goto :prom_error
-) else set mapnum=%prompt%
-
-for /f "tokens=2* delims=.=" %%A in ('set num.%mapnum%') do set map=%%B
-
-if "%map%"=="" (
- echo That's not a valid map, donklorde.
- goto :choosemap
-)
-
-goto :printpath
-
-:prom_error
-echo You didn't choose anything!
-goto :choosemap
-
-:printpath
-echo ...
-echo =============
-echo Backing up:
-echo:../maps/%map%
-echo Into:
-echo:../maps/%map%.backup
-echo =============
-goto :copymap
-
-:copymap
-echo Copying...
-cd ../maps
-copy %map% %map%.backup
-echo Done.
-goto :exit
-
-:quitmaybe
-echo ...
-set /p exitmaybe="Exit the program?: " || set exitmaybe=_NothingChosen
-if "%exitmaybe%"=="_NothingChosen" (goto :qm_error)
-if /i "%exitmaybe%"=="y" (goto :exit)
-if /i "%exitmaybe%"=="yes" (goto :exit)
-if /i "%exitmaybe%"=="n" (goto :choosemap)
-if /i "%exitmaybe%"=="no" (goto :choosemap)
-goto :qm_error
-
-:qm_error
-echo ...
-echo That wasn't a valid response, or you didn't choose anything!
-echo Valid responses: y, n, yes, no
-goto :quitmaybe
-
-:exit
-pause
-exit
-
diff --git a/nano/maptools/prepare_map.bat b/nano/maptools/prepare_map.bat
deleted file mode 100644
index 98c5c884b01..00000000000
--- a/nano/maptools/prepare_map.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-cd ../maps
-copy tgstation2.dmm tgstation2.dmm.backup
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index 8b2920bb23b..753e06f299e 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -3,16 +3,90 @@
Title: PDA UI
Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
-->
+{{if data.useRetro}}
+
+
+
+{{/if}}
{{if data.owner}}
Functions:
-
- {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'fixedLeft')}}
- {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'fixedLeftWide')}} {{/if}}
- {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'fixedLeft')}} {{/if}}
+
+ {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'pdalink fixedLeft')}}
+ {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'pdalink fixedLeftWide')}} {{/if}}
+ {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'pdalink fixedLeft')}} {{/if}}
+ {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'floatRight')}}
@@ -42,7 +116,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
ID:
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'fixedLeftWidest' : 'fixedLeft')}}
+ {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'link fixedLeftWidest' : 'link fixedLeft')}}
@@ -66,9 +140,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
General:
- {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'fixedLeftWide')}}
- {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'fixedLeftWide')}}
- {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'pdalink fixedLeftWide')}}
@@ -79,7 +153,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Clown:
- {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'pdalink fixedLeftWide')}}
@@ -90,7 +164,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Engineering:
- {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'pdalink fixedLeftWide')}}
@@ -101,8 +175,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Medical:
- {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'fixedLeftWide')}}
+ {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'pdalink fixedLeftWide')}}
@@ -113,8 +187,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Security:
- {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'fixedLeftWide')}}
- {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'fixedLeftWide')}} {{/if}}
+ {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'pdalink fixedLeftWide')}}
+ {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -126,8 +200,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Quartermaster:
- {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'fixedLeftWide')}}
- {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}} {{/if}}
+ {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'pdalink fixedLeftWide')}}
+ {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -142,29 +216,29 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.cartridge}}
{{if data.cartridge.access.access_status_display == 1}}
- {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'pdalink fixedLeftWide')}}
{{/if}}
{{if data.cartridge.access.access_janitor==1}}
- {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'pdalink fixedLeftWide')}}
{{/if}}
{{if data.cartridge.radio == 2}}
- {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'pdalink fixedLeftWide')}}
{{/if}}
{{if data.cartridge.access.access_reagent_scanner==1}}
- {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'fixedLeftWider')}}
+ {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'pdalink fixedLeftWider')}}
{{/if}}
{{if data.cartridge.access.access_engine==1}}
- {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'fixedLeftWider')}}
+ {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'pdalink fixedLeftWider')}}
{{/if}}
{{if data.cartridge.access.access_atmos==1}}
- {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'fixedLeftWide')}}
+ {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'pdalink fixedLeftWide')}}
{{/if}}
{{if data.cartridge.access.access_remote_door==1}}
- {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'pdalink fixedLeftWide')}}
{{/if}}
{{/if}}
- {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'fixedLeftWide')}}
+ {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'pdalink fixedLeftWide')}}
{{if data.pai}}
@@ -173,8 +247,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
PAI Utilities:
- {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'fixedLeft')}}
- {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'fixedLeft')}}
+ {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}}
+ {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}}
{{/if}}
@@ -189,13 +263,13 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
- {{:data.note}}
+ {{:data.note}}
- {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'fixedLeft')}}
+ {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'pdalink fixedLeft')}}
@@ -207,10 +281,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Messenger Functions:
- {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'fixedLeftWide')}}
- {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}}
- {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'fixedLeftWider')}}
+ {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}}
{{if data.toff == 0}}
@@ -233,16 +307,16 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Current Conversations
{{for data.convopdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}}
+ {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink fixedLeftWider')}}
{{if data.cartridge}}
{{if data.cartridge.access.access_detonate_pda && value.Detonate}}
- {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}}
+ {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}}
{{/if}}
{{if data.cartridge.access.access_clown}}
- {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}}
+ {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}}
{{/if}}
{{if data.cartridge.access.access_mime}}
- {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}}
+ {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}}
{{/if}}
{{/if}}
@@ -250,11 +324,11 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Other PDAs
{{for data.pdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}}
+ {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink fixedLeftWider')}}
{{if data.cartridge}}
- {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
- {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
- {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
+ {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}}
+ {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}}
+ {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}}
{{/if}}
{{/for}}
@@ -269,7 +343,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Messenger Functions:
- {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}}
@@ -290,7 +364,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
- {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'fixedLeft')}}
+ {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeft')}}
{{else data.mode== 41}}
@@ -382,38 +456,38 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.reading == 1}}
- Pressure:
+ Pressure:
{{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}}
- Temperature:
+ Temperature:
{{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}}
- Oxygen:
+ Oxygen:
{{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}}
- Nitrogen:
+ Nitrogen:
{{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}}
- Carbon Dioxide:
+ Carbon Dioxide:
{{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}}
- Plasma:
+ Plasma:
{{:helper.string('{1}%', data.aircontents.plasma > 0 ? 'bad' : 'good' , data.aircontents.plasma)}}
@@ -421,7 +495,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.other > 0}}
- Unknown:
+ Unknown:
{{:data.aircontents.other}}%
diff --git a/nano/templates/poolcontroller.tmpl b/nano/templates/poolcontroller.tmpl
index 246542107a2..7f24546e4b2 100644
--- a/nano/templates/poolcontroller.tmpl
+++ b/nano/templates/poolcontroller.tmpl
@@ -7,39 +7,49 @@ Used In File(s): \code\game\machinery\poolcontroller.dm
Current Temperature:
- {{:data.currentTemp}}
+ {{:helper.capitalizeFirstLetter(data.currentTemp)}}
+
+
+ Saftey Status:
+
{{if data.emagged}}
- WARNING: SAFE MODE OVERRIDE
+ WARNING: OVERRIDDEN
{{else}}
- Safeties Nominal
+ Nominal
{{/if}}
+
Temperature Selection:
+
{{if data.emagged}}
- {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' })}}
+ {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' }, data.currentTemp == "scalding" ? 'selected' : null)}}
{{/if}}
+
- {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' })}}
+ {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' }, data.currentTemp == "warm" ? 'selected' : null)}}
+
- {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' })}}
+ {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' }, data.currentTemp == "normal" ? 'selected' : null)}}
+
- {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' })}}
+ {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' }, data.currentTemp == "cool" ? 'selected' : null)}}
+
{{if data.emagged}}
- {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' })}}
+ {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' }, data.currentTemp == "frigid" ? 'selected' : null)}}
{{/if}}
\ No newline at end of file
diff --git a/nano/templates/radio_basic.tmpl b/nano/templates/radio_basic.tmpl
index 9aaad8cb489..73d37df8a70 100644
--- a/nano/templates/radio_basic.tmpl
+++ b/nano/templates/radio_basic.tmpl
@@ -2,15 +2,34 @@
Title: Basic Radio UI
Used In File(s): /code/game/objects/item/devices/radio/radio.dm
-->
+
+
+
+
+
+
{{if data.useSyndMode}}
{{:helper.syndicateMode()}}
{{/if}}
-
+
Microphone
-
+
{{if data.mic_cut}}
{{:helper.link('On', null, null, 'disabled')}}
{{:helper.link('Off', null, null, 'disabled')}}
@@ -22,10 +41,10 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
-
+
Speaker
-
+
{{if data.spk_cut}}
{{:helper.link('On', null, null, 'disabled')}}
{{:helper.link('Off', null, null, 'disabled')}}
@@ -37,30 +56,34 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
{{if data.has_subspace}}
-
- Subspace Transmission:
-
-
- {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}}
- {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}}
+
+
+ Subspace Transmission:
+
+
+ {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}}
+ {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}}
+
{{/if}}
{{if data.has_loudspeaker}}
-
- Loudspeaker:
-
-
- {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}}
- {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}}
+
+
+ Loudspeaker:
+
+
+ {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}}
+ {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}}
+
{{/if}}
-
+
Frequency: {{:data.freq}}
-
+
{{:helper.link('--', null, {'freq' : -10})}}
{{:helper.link('-', null, {'freq' : -2})}}
{{:helper.link('+', null, {'freq' : 2})}}
@@ -72,12 +95,11 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
Channels
{{for data.chan_list}}
-
- {{:value.display_name}}
+
+ ◼{{:value.display_name}}
-
+
{{if value.secure_channel}}
- Speaker:
{{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? null : 'selected')}}
{{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? 'selected' : null)}}
{{else}}
diff --git a/paradise.dme b/paradise.dme
index f05e4947579..4b45e3e9f84 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -249,7 +249,6 @@
#include "code\defines\procs\hud.dm"
#include "code\defines\procs\radio.dm"
#include "code\defines\procs\records.dm"
-#include "code\defines\procs\sd_Alert.dm"
#include "code\defines\procs\statistics.dm"
#include "code\game\asteroid.dm"
#include "code\game\atoms.dm"
@@ -353,10 +352,6 @@
#include "code\game\gamemodes\mutiny\directives\tau_ceti_needs_women_directive.dm"
#include "code\game\gamemodes\mutiny\directives\terminations_directive.dm"
#include "code\game\gamemodes\mutiny\directives\vox_heist.dm"
-#include "code\game\gamemodes\nations\flag_pinpointer.dm"
-#include "code\game\gamemodes\nations\flagprocs.dm"
-#include "code\game\gamemodes\nations\nationdatums.dm"
-#include "code\game\gamemodes\nations\nations.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
#include "code\game\gamemodes\nuclear\pinpointer.dm"
@@ -722,7 +717,6 @@
#include "code\game\objects\items\weapons\lighters.dm"
#include "code\game\objects\items\weapons\manuals.dm"
#include "code\game\objects\items\weapons\misc.dm"
-#include "code\game\objects\items\weapons\module.dm"
#include "code\game\objects\items\weapons\mop.dm"
#include "code\game\objects\items\weapons\paint.dm"
#include "code\game\objects\items\weapons\paiwire.dm"
@@ -884,7 +878,6 @@
#include "code\game\vehicles\spacepods\parts.dm"
#include "code\game\vehicles\spacepods\pod_fabricator.dm"
#include "code\game\vehicles\spacepods\spacepod.dm"
-#include "code\game\verbs\atom_verbs.dm"
#include "code\game\verbs\ooc.dm"
#include "code\game\verbs\suicide.dm"
#include "code\game\verbs\who.dm"