"
return dat
-
+
/obj/machinery/autolathe/proc/search_win(mob/user)
- var/dat = "
Search results:
"
+ var/dat = "
"
+ dat += ""
+ dat += " Return to main menu"
+ dat += " Search results:"
dat += " Metal amount: [src.m_amount] / [max_m_amount] cm 3"
dat += " Glass amount: [src.g_amount] / [max_g_amount] cm 3
"
@@ -340,19 +536,13 @@
dat += "[get_design_cost(D)] "
dat += " "
+ dat += " | "
+ dat += get_queue()
+ dat += "
"
return dat
-/obj/machinery/autolathe/proc/can_build(var/datum/design/D)
- var/coeff = (ispath(D.build_path,/obj/item/stack) ? 1 : 2 ** prod_coeff)
-
- if(D.materials["$metal"] && (m_amount < (D.materials["$metal"] / coeff)))
- return 0
- if(D.materials["$glass"] && (g_amount < (D.materials["$glass"] / coeff)))
- return 0
- return 1
-
/obj/machinery/autolathe/proc/get_design_cost(var/datum/design/D)
- var/coeff = (ispath(D.build_path,/obj/item/stack) ? 1 : 2 ** prod_coeff)
+ var/coeff = get_coeff(D)
var/dat
if(D.materials["$metal"])
dat += "[D.materials["$metal"] / coeff] metal "
@@ -378,7 +568,7 @@
if(hack)
for(var/datum/design/D in files.possible_designs)
- if((D.build_type & 4) && ("hacked" in D.category))
+ if((D.build_type & AUTOLATHE) && ("hacked" in D.category))
files.known_designs += D
else
for(var/datum/design/D in files.known_designs)
diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm
index 01ed5bfa407..01e5d96ac02 100644
--- a/code/game/machinery/bees_items.dm
+++ b/code/game/machinery/bees_items.dm
@@ -65,7 +65,6 @@
name = "bottle of BeezEez"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
- flags = FPRINT | TABLEPASS
New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 0a9eca25078..24335ebd65a 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -55,12 +55,12 @@
if(beaker)
user << "
A container is already loaded into the machine."
else
- user.before_take_item(O)
+ user.unEquip(O)
O.loc = src
beaker = O
user << "
You add the container to the machine."
updateUsrDialog()
-
+
if(!processing)
if(default_deconstruction_screwdriver(user, "biogen-empty-o", "biogen-empty", O))
if(beaker)
@@ -72,7 +72,7 @@
if(exchange_parts(user, O))
return
- else if(istype(O, /obj/item/weapon/crowbar))
+ else if(istype(O, /obj/item/weapon/crowbar))
else if(panel_open)
user << "
Close the maintenance panel first."
else if(processing)
@@ -105,13 +105,13 @@
if(i >= 10)
user << "
The biogenerator is full! Activate it."
else
- user.before_take_item(O)
+ user.unEquip(O)
O.loc = src
user << "
You put [O.name] in [src.name]"
- default_deconstruction_crowbar(O)
-
+ default_deconstruction_crowbar(O)
+
update_icon()
return
@@ -246,14 +246,14 @@
if(in_beaker)
if(check_container_volume(10)) return 0
else beaker.reagents.add_reagent("left4zed",10)
- else
+ else
new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
if("rh")
if (check_cost(25/efficiency)) return 0
if(in_beaker)
if(check_container_volume(10)) return 0
else beaker.reagents.add_reagent("robustharvest",10)
- else
+ else
new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
if("wallet")
if (check_cost(100/efficiency)) return 0
@@ -324,7 +324,7 @@
else if(href_list["menu"])
menustat = "menu"
updateUsrDialog()
-
+
else if(href_list["inbeaker"])
in_beaker = !in_beaker
updateUsrDialog()
\ No newline at end of file
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index 5c4d3bf9200..e30bfa45283 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -272,7 +272,7 @@ text("
[on ? "On" : "Off"]"))
var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot(T)
A.name = created_name
user << "
You add the robot arm to the bucket and sensor assembly. Beep boop!"
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
else if (istype(W, /obj/item/weapon/pen))
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 089b7261515..703b0b7dd82 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -671,7 +671,7 @@ Auto Patrol[]"},
new /obj/machinery/bot/ed209(T,created_name,lasercolor)
user.drop_item()
qdel(W)
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
diff --git a/code/game/machinery/bots/farmbot.dm b/code/game/machinery/bots/farmbot.dm
index f2981c70fe1..3c13b04ff96 100644
--- a/code/game/machinery/bots/farmbot.dm
+++ b/code/game/machinery/bots/farmbot.dm
@@ -544,7 +544,7 @@
A.loc = src.loc
user << "You add the robot arm to the [src]"
src.loc = A //Place the water tank into the assembly, it will be needed for the finished bot
- user.u_equip(S)
+ user.unEquip(S)
del(S)
/obj/item/weapon/farmbot_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -553,21 +553,21 @@
src.build_step++
user << "You add the plant analyzer to [src]!"
src.name = "farmbot assembly"
- user.u_equip(W)
+ user.unEquip(W)
del(W)
else if(( istype(W, /obj/item/weapon/reagent_containers/glass/bucket)) && (src.build_step == 1))
src.build_step++
user << "You add a bucket to [src]!"
src.name = "farmbot assembly with bucket"
- user.u_equip(W)
+ user.unEquip(W)
del(W)
else if(( istype(W, /obj/item/weapon/minihoe)) && (src.build_step == 2))
src.build_step++
user << "You add a minihoe to [src]!"
src.name = "farmbot assembly with bucket and minihoe"
- user.u_equip(W)
+ user.unEquip(W)
del(W)
else if((isprox(W)) && (src.build_step == 3))
@@ -579,7 +579,7 @@
S.tank = wTank
S.loc = get_turf(src)
S.name = src.created_name
- user.u_equip(W)
+ user.unEquip(W)
del(W)
del(src)
diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm
index eede1892d76..3752796f90f 100644
--- a/code/game/machinery/bots/floorbot.dm
+++ b/code/game/machinery/bots/floorbot.dm
@@ -491,7 +491,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
var/obj/item/weapon/toolbox_tiles/B = new /obj/item/weapon/toolbox_tiles
user.put_in_hands(B)
user << "
You add the tiles into the empty toolbox. They protrude from the top."
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
else
user << "
You need 10 floor tiles to start building a floorbot."
@@ -505,7 +505,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
B.created_name = created_name
user.put_in_hands(B)
user << "
You add the sensor to the toolbox and tiles!"
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
else if (istype(W, /obj/item/weapon/pen))
@@ -525,7 +525,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
var/obj/machinery/bot/floorbot/A = new /obj/machinery/bot/floorbot(T)
A.name = created_name
user << "
You add the robot arm to the odd looking toolbox assembly! Boop beep!"
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
else if (istype(W, /obj/item/weapon/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index c77a5477e13..084514ecd85 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -564,7 +564,7 @@
qdel(S)
user.put_in_hands(A)
user << "
You add the robot arm to the first aid kit."
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
@@ -598,5 +598,5 @@
var/obj/machinery/bot/medbot/S = new /obj/machinery/bot/medbot(T)
S.skin = skin
S.name = created_name
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
\ No newline at end of file
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index a612560ff80..d7d9d24a774 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -52,7 +52,7 @@
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
radio_frequency = AIPRIV_FREQ
radio_name = "AI Private"
-
+
/obj/machinery/bot/secbot/ofitser
name = "Prison Ofitser"
desc = "It's Prison Ofitser! Powered by the tears and sweat of prisoners."
@@ -428,7 +428,7 @@ Auto Patrol: []"},
var/obj/item/weapon/secbot_assembly/A = new /obj/item/weapon/secbot_assembly
user.put_in_hands(A)
user << "
You add the signaler to the helmet."
- user.before_take_item(src, 1)
+ user.unEquip(src, 1)
qdel(src)
else
return
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index 7b72b5bc3f4..e8c7656032a 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -5,8 +5,8 @@
icon_state = "cameracase"
w_class = 2
anchored = 0
- m_amt = 700
- g_amt = 300
+ m_amt = 400
+ g_amt = 250
// Motion, EMP-Proof, X-Ray
var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/osmium, /obj/item/weapon/stock_parts/scanning_module)
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index 47c27591e99..1d60db31a3c 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -4,7 +4,7 @@
/mob/living/silicon/ai/proc/InvalidTurf(turf/T as turf)
if(!T)
return 1
- if(T.z == 2)
+ if((T.z in config.station_levels))
return 1
if(T.z > 6)
return 1
@@ -132,7 +132,8 @@
//Cameras can't track people wearing an agent card or a ninja hood.
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
continue
-
+ if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && (H.head.flags & NODROP))
+ continue
// Now, are they viewable by a camera? (This is last because it's the most intensive check)
if(!near_camera(M))
continue
@@ -194,6 +195,9 @@
if(H.digitalcamo)
U.ai_cancel_tracking(1)
return
+ if(H.head && istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && (H.head.flags & NODROP))
+ U.ai_cancel_tracking(1)
+ return
if(istype(target.loc,/obj/effect/dummy))
U.ai_cancel_tracking()
@@ -224,7 +228,7 @@
/proc/trackable(atom/movable/M)
var/turf/T = get_turf(M)
- if(T && (T.z == 1 || T.z == 3 || T.z == 5))
+ if(T && (T.z in config.contact_levels))
return 1
return near_camera(M)
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 886f01010db..fc2187c24db 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -241,8 +241,7 @@
if(isobj(obj))
var/mob/M = obj.loc
if(ismob(M))
- M.u_equip(obj)
- M.update_icons() //so their overlays update
+ M.unEquip(obj, 1) //Holoweapons should always drop.
if(!silent)
var/obj/oldobj = obj
@@ -461,7 +460,7 @@
throw_range = 5
throwforce = 0
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
var/active = 0
/obj/item/weapon/holo/esword/green
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 23a085675e5..e5aeabf72ae 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -55,14 +55,20 @@ var/shuttle_call/shuttle_calls[0]
var/stat_msg1
var/stat_msg2
var/display_type="blank"
+
+ var/datum/announcement/priority/crew_announcement = new
l_color = "#0000FF"
+
+/obj/machinery/computer/communications/New()
+ ..()
+ crew_announcement.newscast = 1
/obj/machinery/computer/communications/Topic(href, href_list)
if(..(href, href_list))
return 1
- if (!(src.z in list(STATION_Z,CENTCOMM_Z)))
+ if ((!(src.z in config.station_levels) && !(src.z in config.admin_levels)))
usr << "\red
Unable to establish a connection: \black You're too far away from the station!"
return
@@ -83,10 +89,12 @@ var/shuttle_call/shuttle_calls[0]
if (I && istype(I))
if(src.check_access(I))
authenticated = 1
- if(20 in I.access)
+ if(access_captain in I.access)
authenticated = 2
+ crew_announcement.announcer = GetNameAndAssignmentFromId(I)
if("logout")
authenticated = 0
+ crew_announcement.announcer = ""
setMenuState(usr,COMM_SCREEN_MAIN)
// ALART LAVUL
@@ -127,14 +135,14 @@ var/shuttle_call/shuttle_calls[0]
usr << "You need to swipe your ID."
if("announce")
- if(src.authenticated==2 && !issilicon(usr))
- if(message_cooldown) return
- var/input = stripped_input(usr, "Please choose a message to announce to the station crew.", "What?")
+ if(src.authenticated==2)
+ if(message_cooldown)
+ usr << "Please allow at least one minute to pass between announcements"
+ return
+ var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement")
if(!input || !(usr in view(1,src)))
return
- captain_announce(input)//This should really tell who is, IE HoP, CE, HoS, RD, Captain
- log_say("[key_name(usr)] has made a captain announcement: [input]")
- message_admins("[key_name_admin(usr)] has made a captain announcement.", 1)
+ crew_announcement.Announce(input)
message_cooldown = 1
spawn(600)//One minute cooldown
message_cooldown = 0
@@ -204,7 +212,7 @@ var/shuttle_call/shuttle_calls[0]
if(centcomm_message_cooldown)
usr << "Arrays recycling. Please stand by."
return
- var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
+ var/input = input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
if(!input || !(usr in view(1,src)))
return
Centcomm_announce(input, usr)
@@ -398,7 +406,7 @@ var/shuttle_call/shuttle_calls[0]
return
if(emergency_shuttle.going_to_centcom())
- user << "The shuttle may not be called while returning to CentCom."
+ user << "The shuttle may not be called while returning to Central Command."
return
if(emergency_shuttle.online())
@@ -408,11 +416,11 @@ var/shuttle_call/shuttle_calls[0]
// if force is 0, some things may stop the shuttle call
if(!force)
if(emergency_shuttle.deny_shuttle)
- user << "Centcom does not currently have a shuttle available in your sector. Please try again later."
+ user << "Central Command does not currently have a shuttle available in your sector. Please try again later."
return
if(sent_strike_team == 1)
- user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
+ user << "Central Command will not allow the shuttle to be called. Consider all contracts terminated."
return
if(world.time < 54000) // 30 minute grace period to let the game get going
@@ -426,8 +434,6 @@ var/shuttle_call/shuttle_calls[0]
emergency_shuttle.call_transfer()
log_game("[key_name(user)] has called the shuttle.")
message_admins("[key_name_admin(user)] has called the shuttle - [formatJumpTo(user)].", 1)
- captain_announce("A crew transfer has been initiated. The shuttle has been called. It will arrive in [round(emergency_shuttle.estimate_arrival_time()/60)] minutes.")
-
return
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index c459b3d1e1a..084eb974688 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -1,18 +1,15 @@
/obj/machinery/computer/crew
- name = "Crew Monitoring Computer"
+ name = "crew monitoring computer"
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_state = "crew"
use_power = 1
idle_power_usage = 250
active_power_usage = 500
circuit = "/obj/item/weapon/circuitboard/crew"
- var/list/tracked = list( )
-
- l_color = "#0000FF"
-
+ var/obj/nano_module/crew_monitor/crew_monitor
/obj/machinery/computer/crew/New()
- tracked = list()
+ crew_monitor = new(src)
..()
@@ -27,6 +24,8 @@
return
ui_interact(user)
+/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ crew_monitor.ui_interact(user, ui_key, ui, force_open)
/obj/machinery/computer/crew/update_icon()
@@ -40,100 +39,5 @@
icon_state = initial(icon_state)
stat &= ~NOPOWER
-
-/obj/machinery/computer/crew/Topic(href, href_list)
- if(..())
- return 1
- if (src.z > 6)
- usr << "\red
Unable to establish a connection: \black You're too far away from the station!"
- return 0
- if( href_list["close"] )
- var/mob/user = usr
- var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
- usr.unset_machine()
- ui.close()
- return 0
- if(href_list["update"])
- src.updateDialog()
- return 1
-
/obj/machinery/computer/crew/interact(mob/user)
- ui_interact(user)
-
-/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- if(stat & (BROKEN|NOPOWER))
- return
- user.set_machine(src)
- src.scan()
-
- var/data[0]
- var/list/crewmembers = list()
-
- for(var/obj/item/clothing/under/C in src.tracked)
-
-
- var/turf/pos = get_turf(C)
-
- if((C) && (C.has_sensor) && (pos) && (pos.z == src.z) && C.sensor_mode)
- if(istype(C.loc, /mob/living/carbon/human))
-
- var/mob/living/carbon/human/H = C.loc
-
- var/list/crewmemberData = list()
-
- crewmemberData["sensor_type"] = C.sensor_mode
- crewmemberData["dead"] = H.stat > 1
- crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
- crewmemberData["tox"] = round(H.getToxLoss(), 1)
- crewmemberData["fire"] = round(H.getFireLoss(), 1)
- crewmemberData["brute"] = round(H.getBruteLoss(), 1)
-
- crewmemberData["name"] = "Unknown"
- crewmemberData["rank"] = "Unknown"
- if(H.wear_id && istype(H.wear_id, /obj/item/weapon/card/id) )
- var/obj/item/weapon/card/id/I = H.wear_id
- crewmemberData["name"] = I.name
- crewmemberData["rank"] = I.rank
- else if(H.wear_id && istype(H.wear_id, /obj/item/device/pda) )
- var/obj/item/device/pda/P = H.wear_id
- crewmemberData["name"] = (P.id ? P.id.name : "Unknown")
- crewmemberData["rank"] = (P.id ? P.id.rank : "Unknown")
- var/area/A = get_area(H)
- crewmemberData["area"] = sanitize(A.name)
- crewmemberData["x"] = pos.x
- crewmemberData["y"] = pos.y
-
- // Works around list += list2 merging lists; it's not pretty but it works
- crewmembers += "temporary item"
- crewmembers[crewmembers.len] = crewmemberData
-
- crewmembers = sortByKey(crewmembers, "name")
-
- data["crewmembers"] = crewmembers
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800)
-
- // adding a template with the key "mapContent" enables the map ui functionality
- ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
- // adding a template with the key "mapHeader" replaces the map header content
- ui.add_template("mapHeader", "crew_monitor_map_header.tmpl")
-
- // we want to show the map by default
- ui.set_show_map(1)
-
- ui.set_initial_data(data)
- ui.open()
-
- // should make the UI auto-update; doesn't seem to?
- ui.set_auto_update(1)
-
-
-/obj/machinery/computer/crew/proc/scan()
- for(var/mob/living/carbon/human/H in mob_list)
- if(istype(H.w_uniform, /obj/item/clothing/under))
- var/obj/item/clothing/under/C = H.w_uniform
- if (C.has_sensor)
- tracked |= C
- return 1
+ crew_monitor.ui_interact(user)
\ No newline at end of file
diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm
index 118307839c1..79ce2e97edf 100644
--- a/code/game/machinery/computer/honkputer.dm
+++ b/code/game/machinery/computer/honkputer.dm
@@ -17,7 +17,7 @@
/obj/machinery/computer/HONKputer/Topic(href, href_list)
if(..())
return 1
- if (src.z > 1)
+ if (!(src.z in config.station_levels))
usr << "\red
Unable to establish a connection: \black You're too far away from the station!"
return
usr.set_machine(src)
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index 11b71274ca6..8340838f6e2 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -65,7 +65,7 @@
if(!T.implanted) continue
var/loc_display = "Unknown"
var/mob/living/carbon/M = T.imp_in
- if(M.z == 1 && !istype(M.loc, /turf/space))
+ if((M.z in config.station_levels) && !istype(M.loc, /turf/space))
var/turf/mob_loc = get_turf_loc(M)
loc_display = mob_loc.loc
if(T.malfunction)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 6f7018c1cf4..804c0d92e3e 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -283,7 +283,7 @@
/obj/machinery/cryopod/robot/despawn_occupant()
var/mob/living/silicon/robot/R = occupant
if(!istype(R)) return ..()
-
+
R.contents -= R.mmi
del(R.mmi)
for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc
@@ -299,7 +299,7 @@
/obj/machinery/cryopod/proc/despawn_occupant()
//Drop all items into the pod.
for(var/obj/item/W in occupant)
- occupant.drop_from_inventory(W)
+ occupant.unEquip(W)
W.loc = src
if(W.contents.len) //Make sure we catch anything not handled by del() on the items.
@@ -388,7 +388,7 @@
//Make an announcement and log the person entering storage.
control_computer.frozen_crew += "[occupant.real_name]"
-
+
var/ailist[] = list()
for (var/mob/living/silicon/ai/A in living_mob_list)
ailist += A
@@ -397,7 +397,7 @@
announcer.say(";[occupant.real_name] [on_store_message]")
else
announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
-
+
visible_message("
\The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3)
// Delete the mob.
@@ -460,7 +460,7 @@
//Despawning occurs when process() is called with an occupant without a client.
src.add_fingerprint(M)
-
+
/obj/machinery/cryopod/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
diff --git a/code/game/machinery/drying_rack.dm b/code/game/machinery/drying_rack.dm
index d776fc3bef3..48d213a3326 100644
--- a/code/game/machinery/drying_rack.dm
+++ b/code/game/machinery/drying_rack.dm
@@ -35,7 +35,7 @@
if(is_type_in_list(W,accepted))
if(!running)
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meat))
- user.u_equip(W)
+ user.unEquip(W)
del(W)
user << "You add the meat to the drying rack."
src.running = 1
@@ -48,7 +48,7 @@
src.running = 0
return
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/grown/grapes))
- user.u_equip(W)
+ user.unEquip(W)
del(W)
user << "You add the grapes to the drying rack."
src.running = 1
@@ -61,7 +61,7 @@
src.running = 0
return
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes))
- user.u_equip(W)
+ user.unEquip(W)
del(W)
user << "You add the green grapes to the drying rack."
src.running = 1
@@ -79,7 +79,7 @@
var/obj/item/weapon/reagent_containers/food/snacks/grown/B = W
B.reagents.trans_to(src, B.reagents.total_volume)
user << "You add the [W] to the drying rack."
- user.u_equip(W)
+ user.unEquip(W)
del(W)
src.running = 1
use_power = 2
diff --git a/code/game/machinery/kitchen/juicer.dm b/code/game/machinery/kitchen/juicer.dm
index b237f8223f6..89ead24fddb 100644
--- a/code/game/machinery/kitchen/juicer.dm
+++ b/code/game/machinery/kitchen/juicer.dm
@@ -37,7 +37,9 @@
if (beaker)
return 1
else
- user.before_take_item(O)
+ if(!user.unEquip(O))
+ user << "
\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return 0
O.loc = src
beaker = O
src.verbs += /obj/machinery/juicer/verb/detach
@@ -45,9 +47,11 @@
src.updateUsrDialog()
return 0
if (!is_type_in_list(O, allowed_items))
- user << "It looks as not containing any juice."
+ user << "It doesn't look like that contains any juice."
return 1
- user.before_take_item(O)
+ if(!user.unEquip(O))
+ user << "
\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return 0
O.loc = src
src.updateUsrDialog()
return 0
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index 0268755bb1a..6eb988f98c5 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -49,7 +49,7 @@
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 2)
- RefreshParts()
+ RefreshParts()
/obj/machinery/microwave/upgraded/New()
@@ -59,14 +59,14 @@
component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 2)
- RefreshParts()
+ RefreshParts()
/obj/machinery/microwave/RefreshParts()
var/E
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
E += M.rating
- efficiency = E
-
+ efficiency = E
+
/*******************
* Item Adding
********************/
@@ -87,11 +87,11 @@
return
else if(!anchored)
anchored = 1
- user << "
The [src] is now secured."
+ user << "
The [src] is now secured."
return
-
+
default_deconstruction_crowbar(O)
-
+
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
user.visible_message( \
@@ -150,8 +150,10 @@
"\blue [user] has added one of [O] to \the [src].", \
"\blue You add one of [O] to \the [src].")
else
- // user.before_take_item(O) //This just causes problems so far as I can tell. -Pete
- user.drop_item()
+ // user.unEquip(O) //This just causes problems so far as I can tell. -Pete
+ if(!user.drop_item())
+ user << "
\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return 0
O.loc = src
user.visible_message( \
"\blue [user] has added \the [O] to \the [src].", \
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 7f8ba253582..1e178bf54ff 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -85,7 +85,9 @@
user << "
\The [src] is full."
return 1
else
- user.before_take_item(O)
+ if(!user.unEquip(O))
+ usr << "
\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return
O.loc = src
if(item_quants[O.name])
item_quants[O.name]++
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 1c7f8ee64a0..dd0e408fd60 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -5,6 +5,7 @@
/datum/feed_message
var/author =""
var/body =""
+ var/message_type ="Story"
//var/parent_channel
var/backup_body =""
var/backup_author =""
@@ -39,6 +40,12 @@
src.backup_author = ""
src.censored = 0
src.is_admin_channel = 0
+
+/datum/feed_channel/proc/announce_news()
+ return "Breaking news from [channel_name]!"
+
+/datum/feed_channel/station/announce_news()
+ return "New Station Announcement Available"
/datum/feed_network
var/list/datum/feed_channel/network_channels = list()
@@ -213,7 +220,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
switch(screen)
if(0)
dat += {"Welcome to Newscasting Unit #[src.unit_no].
Interface & News networks Operational.
-
Property of Nanotransen Inc"}
+
Property of Nanotrasen"}
if(news_network.wanted_issue)
dat+= "
Read Wanted Issue"
dat+= {"
Create Feed Channel
@@ -248,7 +255,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="
No feed messages found in channel..."
else
for(var/datum/feed_message/MESSAGE in CHANNEL.messages)
- dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]"*/
+ dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]"*/
dat+="
Refresh"
dat+="
Back"
@@ -334,7 +341,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(MESSAGE.img)
usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
dat+="

"
- dat+="
\[Story by [MESSAGE.author]\]"
+ dat+="
\[[MESSAGE.message_type] by [MESSAGE.author]\]"
dat+="
Refresh"
dat+="
Back"
if(10)
@@ -369,7 +376,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="
No feed messages found in channel..."
else
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
- dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]"
+ dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]"
dat+="
[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]"
dat+="
Back"
if(13)
@@ -383,7 +390,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="
No feed messages found in channel..."
else
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
- dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]"
+ dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]"
dat+="
Back"
if(14)
@@ -516,7 +523,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.updateUsrDialog()
else if(href_list["set_new_message"])
- src.msg = strip_html(input(usr, "Write your Feed story", "Network Channel Handler", ""))
+ src.msg = strip_html(input(usr, "Write your feed story", "Network Channel Handler", ""))
while (findtext(src.msg," ") == 1)
src.msg = copytext(src.msg,2,lentext(src.msg)+1)
src.updateUsrDialog()
@@ -535,13 +542,15 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(photo)
newMsg.img = photo.img
feedback_inc("newscaster_stories",1)
+ var/announcement = ""
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == src.channel_name)
FC.messages += newMsg //Adding message to the network's appropriate feed_channel
+ announcement = FC.announce_news()
break
src.screen=4
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
- NEWSCASTER.newsAlert(src.channel_name)
+ NEWSCASTER.newsAlert(announcement)
src.updateUsrDialog()
@@ -986,11 +995,11 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
///obj/machinery/newscaster/process() //Was thinking of doing the icon update through process, but multiple iterations per second does not
// return //bode well with a newscaster network of 10+ machines. Let's just return it, as it's added in the machines list.
-/obj/machinery/newscaster/proc/newsAlert(channel) //This isn't Agouri's work, for it is ugly and vile.
+/obj/machinery/newscaster/proc/newsAlert(var/news_call) //This isn't Agouri's work, for it is ugly and vile.
var/turf/T = get_turf(src) //Who the fuck uses spawn(600) anyway, jesus christ
- if(channel)
+ if(news_call)
for(var/mob/O in hearers(world.view-1, T))
- O.show_message("
[src.name] beeps, \"Breaking news from [channel]!\"",2)
+ O.show_message("
[src.name] beeps, \"[news_call]\"",2)
src.alert = 1
src.update_icon()
spawn(300)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index c1cbc65c297..84ec1966a1c 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -56,7 +56,6 @@ Buildable meters
icon = 'icons/obj/pipe-item.dmi'
icon_state = "simple"
item_state = "buildpipe"
- flags = TABLEPASS|FPRINT
w_class = 3
level = 2
@@ -432,7 +431,7 @@ Buildable meters
if (P.node2)
P.node2.initialize()
P.node2.build_network()
-
+
if(PIPE_SUPPLY_STRAIGHT, PIPE_SUPPLY_BENT)
var/obj/machinery/atmospherics/pipe/simple/hidden/supply/P = new( src.loc )
P.color = color
@@ -546,7 +545,7 @@ Buildable meters
if (M.node3)
M.node3.initialize()
M.node3.build_network()
-
+
if(PIPE_SUPPLY_MANIFOLD) //manifold
var/obj/machinery/atmospherics/pipe/manifold/hidden/supply/M = new( src.loc )
M.color = color
@@ -618,7 +617,7 @@ Buildable meters
if (M.node4)
M.node4.initialize()
M.node4.build_network()
-
+
if(PIPE_SUPPLY_MANIFOLD4W) //4-way manifold
var/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply/M = new( src.loc )
M.color = color
@@ -904,7 +903,7 @@ Buildable meters
if(C.node)
C.node.initialize()
C.node.build_network()
-
+
if(PIPE_SUPPLY_CAP)
var/obj/machinery/atmospherics/pipe/cap/hidden/supply/C = new(src.loc)
C.dir = dir
@@ -1039,7 +1038,6 @@ Buildable meters
icon = 'icons/obj/pipe-item.dmi'
icon_state = "meter"
item_state = "buildpipe"
- flags = TABLEPASS|FPRINT
w_class = 4
/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 5196f96471f..f4829b57416 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -713,13 +713,15 @@ Status: []
"},
if(1)
if(istype(W, /obj/item/stack/sheet/metal))
- if(W:amount>=2) // requires 2 metal sheets
+ var/obj/item/stack/sheet/metal/M = W
+ if(M.amount>=2) // requires 2 metal sheets
user << "\blue You add some metal armor to the interior frame."
build_step = 2
- W:amount -= 2
+ M.amount -= 2
icon_state = "turret_frame2"
- if(W:amount <= 0)
- del(W)
+ if(M.amount <= 0)
+ user.unEquip(M, 1) //We're deleting it anyway, so no point in having NODROP fuck shit up.
+ del(M)
return
else if(istype(W, /obj/item/weapon/wrench))
@@ -757,6 +759,9 @@ Status: []
"},
if(istype(W, /obj/item/weapon/gun/energy)) // the gun installation part
var/obj/item/weapon/gun/energy/E = W // typecasts the item to an energy gun
+ if(!user.unEquip(W))
+ user << "
\the [W] is stuck to your hand, you cannot put it in \the [src]"
+ return
installation = W.type // installation becomes W.type
gun_charge = E.power_supply.charge // the gun's charge is stored in src.gun_charge
user << "\blue You add \the [W] to the turret."
@@ -772,6 +777,9 @@ Status: []
"},
if(4)
if(isprox(W))
+ if(!user.unEquip(W))
+ user << "
\the [W] is stuck to your hand, you cannot put it in \the [src]"
+ return
build_step = 5
user << "\blue You add the prox sensor to the turret."
del(W)
@@ -790,12 +798,14 @@ Status: []
"},
if(6)
if(istype(W, /obj/item/stack/sheet/metal))
- if(W:amount>=2)
+ var/obj/item/stack/sheet/metal/M = W
+ if(M.amount>=2)
user << "\blue You add some metal armor to the exterior frame."
build_step = 7
- W:amount -= 2
- if(W:amount <= 0)
- del(W)
+ M.amount -= 2
+ if(M.amount <= 0)
+ user.unEquip(M, 1) //If we don't force-unequip, bugs happen because the item was deleted without updating the neccesary stuff
+ del(M)
return
else if(istype(W, /obj/item/weapon/screwdriver))
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 0b3301648bc..edfac0425a0 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -140,7 +140,7 @@ var/const/SAFETY_COOLDOWN = 100
// Remove and recycle the equipped items.
for(var/obj/item/I in L.get_equipped_items())
- if(L.u_equip(I))
+ if(L.unEquip(I))
recycle(I, 0)
// Instantly lie down, also go unconscious from the pain, before you die.
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index d358e39c67f..16d7b16572e 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -55,6 +55,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
var/dpt = ""; //the department which will be receiving the message
var/priority = -1 ; //Priority of the message being sent
luminosity = 0
+ var/datum/announcement/announcement = new
/obj/machinery/requests_console/power_change()
..()
@@ -70,6 +71,10 @@ var/list/obj/machinery/requests_console/allConsoles = list()
/obj/machinery/requests_console/New()
..()
+
+ announcement.title = "[department] announcement"
+ announcement.newscast = 1
+
name = "[department] Requests Console"
allConsoles += src
//req_console_departments += department
@@ -189,7 +194,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
else //main menu
screen = 0
- announceAuth = 0
+ reset_announce()
if (newmessagepriority == 1)
dat += text("
There are new messages")
if (newmessagepriority == 2)
@@ -240,17 +245,13 @@ var/list/obj/machinery/requests_console/allConsoles = list()
if("2") priority = 2
else priority = -1
else
- message = ""
- announceAuth = 0
+ reset_announce()
screen = 0
if(href_list["sendAnnouncement"])
if(!announcementConsole) return
- for(var/mob/M in player_list)
- if(!istype(M,/mob/new_player))
- M << "
[department] announcement: [message]"
- announceAuth = 0
- message = ""
+ announcement.Announce(message)
+ reset_announce()
screen = 0
if( href_list["department"] && message )
@@ -389,8 +390,9 @@ var/list/obj/machinery/requests_console/allConsoles = list()
var/obj/item/weapon/card/id/ID = O
if (access_RC_announce in ID.GetAccess())
announceAuth = 1
+ announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name
else
- announceAuth = 0
+ reset_announce()
user << "\red You are not authorized to send announcements."
updateUsrDialog()
if (istype(O, /obj/item/weapon/stamp))
@@ -399,3 +401,8 @@ var/list/obj/machinery/requests_console/allConsoles = list()
msgStamped = text("
Stamped with the [T.name]")
updateUsrDialog()
return
+
+/obj/machinery/requests_console/proc/reset_announce()
+ announceAuth = 0
+ message = ""
+ announcement.announcer = ""
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 86eed40484d..39e9e903c1a 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -326,7 +326,7 @@
// var/maxshieldload = 200
var/obj/structure/cable/attached // the attached cable
var/storedpower = 0
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
use_power = 0
/obj/machinery/shieldwallgen/proc/power()
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index d2d93afba2c..54355179c8e 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -1,3 +1,4 @@
+var/datum/announcement/minor/slotmachine_announcement = new(do_log = 0)
/obj/machinery/slot_machine
name = "Slot Machine"
desc = "Gambling for the antisocial."
@@ -55,7 +56,7 @@
if (roll == 1)
for(var/mob/O in hearers(src, null))
O.show_message(text("
[] says, 'JACKPOT! You win [src.money]!'", src), 1)
- command_alert("Congratulations [usr.name] on winning the Jackpot!", "Jackpot Winner")
+ slotmachine_announcement.Announce("Congratulations [usr.name] on winning the Jackpot!", "Jackpot Winner")
usr.mind.initial_account.money += src.money
src.money = 0
else if (roll > 1 && roll <= 10)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index de3cf6964d6..fd90622de14 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -11,7 +11,6 @@
var/set_temperature = 50 // in celcius, add T0C for kelvin
var/heating_power = 40000
- flags = FPRINT
New()
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index b050fb624e1..d9afea3dd80 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -34,7 +34,9 @@
if(istype(I, /obj/item/device/gps))
var/obj/item/device/gps/L = I
if(L.locked_location && !(stat & (NOPOWER|BROKEN)))
- user.before_take_item(L)
+ if(!user.unEquip(L))
+ user << "
\the [I] is stuck to your hand, you cannot put it in \the [src]"
+ return
L.loc = src
locked = L
user << "
You insert the GPS device into the [name]'s slot."
@@ -178,7 +180,7 @@
var/turf/T = get_turf(R)
if (!T)
continue
- if(T.z == 2 || T.z > 7)
+ if((T.z in config.admin_levels) || T.z > 7)
continue
if(R.syndicate == 1 && emagged == 0)
continue
@@ -199,7 +201,7 @@
continue
var/turf/T = get_turf(M)
if(!T) continue
- if(T.z == 2) continue
+ if((T.z in config.admin_levels)) continue
var/tmpname = M.real_name
if(areaindex[tmpname])
tmpname = "[tmpname] ([++areaindex[tmpname]])"
@@ -221,7 +223,7 @@
var/turf/T = get_turf(R)
if (!T || !R.teleporter_hub || !R.teleporter_console)
continue
- if(T.z == 2 || T.z > 7)
+ if((T.z in config.admin_levels) || T.z > 7)
continue
var/tmpname = T.loc.name
if(areaindex[tmpname])
@@ -278,7 +280,7 @@
component_parts += new /obj/item/bluespace_crystal/artificial(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
RefreshParts()
-
+
/obj/machinery/teleport/hub/upgraded/New()
..()
component_parts = list()
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 0b7c4b8ed5c..9376aae0ae4 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -13,19 +13,19 @@
var/price = 0 // Price to buy one
var/display_color = null // Display color for vending machine listing
var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium
-
+
/datum/data/vending_product/New(var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL)
..()
-
+
src.product_path = path
-
+
if(!name)
var/atom/tmp = new path
src.product_name = initial(tmp.name)
del(tmp)
else
src.product_name = name
-
+
src.amount = amount
src.price = price
src.display_color = color
@@ -42,15 +42,15 @@
layer = 2.9
anchored = 1
density = 1
-
+
var/icon_vend //Icon_state when vending
- var/icon_deny //Icon_state when denying access
-
+ var/icon_deny //Icon_state when denying access
+
// Power
use_power = 1
idle_power_usage = 10
var/vend_power_usage = 150
-
+
// Vending-related
var/active = 1 //No sales pitches if off!
var/vend_ready = 1 //Are we ready to vend?? Is it time??
@@ -65,17 +65,17 @@
var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2)
var/list/premium = list() // No specified amount = only one in stock
var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price.
-
+
// List of vending_product items available.
var/list/product_records = list()
var/list/hidden_records = list()
-
+
// // Variables used to initialize advertising
var/product_slogans = "" //String of slogans separated by semicolons, optional
var/product_ads = "" //String of small ad messages in the vending screen - random chance
-
+
var/list/ads_list = list()
-
+
// Stuff relating vocalizations
var/list/slogan_list = list()
var/vend_reply //Thank you for shopping!
@@ -83,7 +83,7 @@
var/last_reply = 0
var/last_slogan = 0 //When did we last pitch?
var/slogan_delay = 6000 //How long until we can pitch again?
-
+
var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine.
// Things that can go wrong
@@ -118,7 +118,7 @@
return
return
-
+
/**
* Build src.produdct_records from the products lists
*
@@ -142,7 +142,7 @@
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
product.max_amount = product.amount
product.category = category
-
+
src.product_records.Add(product)
/obj/machinery/vending/Destroy()
@@ -228,10 +228,10 @@
else if(handled)
nanomanager.update_uis(src)
return // don't smack that machine with your 2 thalers
-
+
if(default_unfasten_wrench(user, W, time = 60))
- return
-
+ return
+
if(istype(W, /obj/item/weapon/screwdriver) && anchored)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
panel_open = !panel_open
@@ -241,7 +241,7 @@
overlays += image(icon, "[initial(icon_state)]-panel")
nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI
return
-
+
if(panel_open)
if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters))
return attack_hand(user)
@@ -282,7 +282,7 @@
user << "
You should probably unscrew the service panel first."
else
..()
-
+
/obj/machinery/vending/emag_act(user as mob)
emagged = 1
user << "You short out the product lock on [src]"
@@ -294,12 +294,12 @@
* usr is the mob who gets the change.
*/
/obj/machinery/vending/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user)
- if(currently_vending.price > cashmoney.worth)
- // This is not a status display message, since it's something the character
+ if(currently_vending.price > cashmoney.worth)
+ // This is not a status display message, since it's something the character
// themselves is meant to see BEFORE putting the money in
usr << "\icon[cashmoney]
That is not enough money."
return 0
-
+
// Bills (banknotes) cannot really have worth different than face value,
// so we have to eat the bill and spit out change in a bundle
// This is really dirty, but there's no superclass for all bills, so we
@@ -307,7 +307,7 @@
visible_message("
[usr] inserts a credit chip into [src].")
var/left = cashmoney.worth - currently_vending.price
- usr.drop_from_inventory(cashmoney)
+ usr.unEquip(cashmoney)
del(cashmoney)
if(left)
@@ -320,7 +320,7 @@
/**
* Scan a card and attempt to transfer payment from associated account.
*
- * Takes payment for whatever is the currently_vending item. Returns 1 if
+ * Takes payment for whatever is the currently_vending item. Returns 1 if
* successful, 0 if failed
*/
/obj/machinery/vending/proc/pay_with_card(var/obj/item/weapon/card/id/I)
@@ -378,9 +378,9 @@
/**
* Add money for current purchase to the vendor account.
- *
+ *
* Called after the money has already been taken from the customer.
- */
+ */
/obj/machinery/vending/proc/credit_purchase(var/target as text)
vendor_account.money += currently_vending.price
@@ -395,7 +395,7 @@
/obj/machinery/vending/attack_ai(mob/user as mob)
return attack_hand(user)
-
+
/obj/machinery/vending/attack_paw(mob/user as mob)
return attack_hand(user)
@@ -407,17 +407,17 @@
if(src.shock(user, 100))
return
- wires.Interact(user)
ui_interact(user)
+ wires.Interact(user)
/**
* Display the NanoUI window for the vending machine.
*
- * See NanoUI documentation for details.
+ * See NanoUI documentation for details.
*/
/obj/machinery/vending/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
-
+
var/list/data = list()
if(currently_vending)
data["mode"] = 1
@@ -432,28 +432,28 @@
for(var/key = 1 to src.product_records.len)
var/datum/data/vending_product/I = src.product_records[key]
-
+
if(!(I.category & src.categories))
continue
-
+
listed_products.Add(list(list(
"key" = key,
"name" = sanitize(I.product_name),
"price" = I.price,
"color" = I.display_color,
"amount" = I.amount)))
-
+
data["products"] = listed_products
-
+
if(src.coin)
data["coin"] = src.coin.name
-
+
if(src.panel_open)
data["panel"] = 1
data["speaker"] = src.shut_up ? 0 : 1
else
data["panel"] = 0
-
+
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600)
@@ -475,7 +475,7 @@
usr << "\blue You remove the [coin] from the [src]"
coin = null
categories &= ~CAT_COIN
-
+
if (href_list["pay"])
if(currently_vending && vendor_account && !vendor_account.suspended)
if(istype(usr, /mob/living/carbon/human))
@@ -497,7 +497,7 @@
else if(handled)
nanomanager.update_uis(src)
return // don't smack that machine with your 2 credits
-
+
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending))
@@ -518,11 +518,11 @@
var/key = text2num(href_list["vend"])
var/datum/data/vending_product/R = product_records[key]
-
+
// This should not happen unless the request from NanoUI was bad
if(!(R.category & src.categories))
return
-
+
if(R.price <= 0)
src.vend(R, usr)
else
@@ -552,7 +552,7 @@
src.status_message = "Vending..."
src.status_error = 0
nanomanager.update_uis(src)
-
+
if (R.category & CAT_COIN)
if(!coin)
user << "\blue You need to insert a coin to get this item."
@@ -885,7 +885,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12,
/obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,
- /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2)
+ /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2, /obj/item/device/sensor_device = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6)
@@ -971,7 +971,7 @@
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/nettleseed = 2,
/obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2)
premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1)
-
+
/**
* Populate hydroseeds product_records
*
@@ -996,7 +996,7 @@
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
product.max_amount = product.amount
product.category = category
-
+
src.product_records.Add(product)
/obj/machinery/vending/magivend
diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm
index ac2986f18a2..87561d447ab 100644
--- a/code/game/machinery/wishgranter.dm
+++ b/code/game/machinery/wishgranter.dm
@@ -30,8 +30,30 @@
insisting++
else
- user << "You speak. [pick("I want the station to disappear","Humanity is corrupt, mankind must be destroyed","I want to be rich", "I want to rule the world","I want immortality.")]. The Wish Granter answers."
- user << "Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first."
+ user << "The power of the Wish Granter have turned you into the superhero the station deserves. You are a masked vigilante, and answer to no man. Will you use your newfound strength to protect the innocent, or will you hunt the guilty?"
+
+ ticker.mode.traitors += user.mind
+ user.mind.special_role = "The Hero The Station Deserves"
+
+ var/wish = input("You want to...","Wish") as null|anything in list("Protect the innocent","Hunt the guilty")
+ switch(wish)
+ if("Protect the innocent")
+ var/datum/objective/protect/protect = new
+ protect.owner = user.mind
+ user.mind.objectives += protect
+
+ if("Hunt the guilty")
+ var/datum/objective/assassinate/assasinate = new
+ assasinate.owner = user.mind
+ user.mind.objectives += assasinate
+
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in user.mind.objectives)
+ user << "
Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
+
+ user << "As a superhero, you are allowed to pick an appropriate pseudonym for your new role. A costume is also strongly encouraged."
+ user.rename_self()
charges--
insisting = 0
@@ -57,25 +79,9 @@
if (!(M_TK in user.mutations))
user.mutations.Add(M_TK)
- /* Not used
- if(!(HEAL in user.mutations))
- user.mutations.Add(HEAL)
- */
+ if(!(M_REGEN in user.mutations))
+ user.mutations.Add(M_REGEN)
user.update_mutations()
- ticker.mode.traitors += user.mind
- user.mind.special_role = "Avatar of the Wish Granter"
-
- var/datum/objective/silence/silence = new
- silence.owner = user.mind
- user.mind.objectives += silence
-
- var/obj_count = 1
- for(var/datum/objective/OBJ in user.mind.objectives)
- user << "
Objective #[obj_count]: [OBJ.explanation_text]"
- obj_count++
-
- user << "You have a very bad feeling about this."
-
return
\ No newline at end of file
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index cf3cd0022a6..efe31d5bf62 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -389,7 +389,7 @@
range = RANGED
action(atom/target)
- if(!action_checks(target) || src.loc.z == 2) return
+ if(!action_checks(target) || (src.loc.z in config.admin_levels)) return
var/turf/T = get_turf(target)
if(T)
set_ready_state(0)
@@ -410,7 +410,7 @@
action(atom/target)
- if(!action_checks(target) || src.loc.z == 2) return
+ if(!action_checks(target) || (src.loc.z in config.admin_levels)) return
var/list/theareas = list()
for(var/area/AR in orange(100, chassis))
if(AR in theareas) continue
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index a4c8b5a527a..fc8c5ee658a 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -158,7 +158,7 @@
var/mob/living/carbon/human/H = M
if(isobj(H.shoes))
var/thingy = H.shoes
- H.drop_from_inventory(H.shoes)
+ H.unEquip(H.shoes)
walk_away(thingy,chassis,15,2)
spawn(20)
if(thingy)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index d37f0d0a544..398c297cb24 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -798,7 +798,9 @@
return
else if(istype(W, /obj/item/mecha_parts/mecha_tracking))
- user.drop_from_inventory(W)
+ if(!user.unEquip(W))
+ user << "
\the [W] is stuck to your hand, you cannot put it in \the [src]"
+ return
W.forceMove(src)
user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]")
return
@@ -1116,7 +1118,9 @@
else if(mmi_as_oc.brainmob.stat)
user << "Beta-rhythm below acceptable level."
return 0
- user.drop_from_inventory(mmi_as_oc)
+ if(!user.unEquip(mmi_as_oc))
+ user << "
\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]"
+ return
var/mob/brainmob = mmi_as_oc.brainmob
brainmob.reset_view(src)
/*
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 58b2d2215ce..f89390139b6 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -7,7 +7,7 @@
icon = 'icons/mecha/mech_construct.dmi'
icon_state = "blank"
w_class = 6
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "programming=2;materials=2"
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
@@ -18,7 +18,7 @@
icon_state = "backbone"
var/datum/construction/construct
construction_cost = list("metal"=20000)
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
@@ -409,7 +409,7 @@
icon_state = "std_mod"
item_state = "electronic"
board_type = "other"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 10ac7a44994..4440c825215 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -11,14 +11,12 @@ would spawn and follow the beaker, even if it is carried or thrown.
icon = 'icons/effects/effects.dmi'
mouse_opacity = 0
unacidable = 1//So effect are not targeted by alien acid.
- flags = TABLEPASS
/obj/effect/effect/water
name = "water"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
var/life = 15.0
- flags = TABLEPASS
mouse_opacity = 0
/obj/effect/effect/smoke
@@ -183,36 +181,40 @@ steam.start() -- spawns the effect
return
/datum/effect/effect/system/spark_spread
- set_up(n = 3, c = 0, loca)
- number = n > 10 ? 10 : n
- cardinals = c
+ var/total_sparks = 0 // To stop it being spammed and lagging!
- if (istype(loca, /turf/))
+ set_up(n = 3, c = 0, loca)
+ if(n > 10)
+ n = 10
+ number = n
+ cardinals = c
+ if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
start()
- for (var/i = 1 to number)
- spawn()
- if (holder)
- location = get_turf(holder)
-
- var/obj/effect/effect/sparks/sparks = getFromPool(/obj/effect/effect/sparks, location)
- playsound(location, "sparks", 100, 1)
+ var/i = 0
+ for(i=0, i
20)
+ return
+ spawn(0)
+ if(holder)
+ src.location = get_turf(holder)
+ var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
+ src.total_sparks++
var/direction
-
- if (cardinals)
+ if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
-
- for (var/j = 0, j < pick(1, 2, 3), j++)
+ for(i=0, i 0)
- devastation = min (MAX_EXPLOSION_RANGE, devastation + round(amount/12))
+ devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12))
if (round(amount/6) > 0)
- heavy = min (MAX_EXPLOSION_RANGE, heavy + round(amount/6))
+ heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6))
if (round(amount/3) > 0)
- light = min (MAX_EXPLOSION_RANGE, light + round(amount/3))
+ light = min (MAX_EX_LIGHT_RANGE, light + round(amount/3))
if (flash && flashing_factor)
flash += (round(amount/4) * flashing_factor)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index f523e2fef1e..24af225a8ab 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -5,13 +5,11 @@
var/no_embed = 0 // For use in item_attack.dm
var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/blood_overlay_color = null
- var/abstract = 0
var/item_state = null
var/r_speed = 1.0
var/health = null
var/hitsound = null
var/w_class = 3.0
- flags = FPRINT | TABLEPASS
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
pass_flags = PASSTABLE
pressure_resistance = 5
@@ -35,7 +33,6 @@
var/permeability_coefficient = 1 // for chemicals/diseases
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
- var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
var/reflect_chance = 0 //This var dictates what % of a time an object will reflect an energy based weapon's shot
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/list/allowed = null //suit storage stuff.
@@ -56,7 +53,7 @@
/obj/item/Destroy()
if(istype(src.loc, /mob))
var/mob/H = src.loc
- H.drop_from_inventory(src) // items at the very least get unequipped from their mob before being deleted
+ H.unEquip(src) // items at the very least get unequipped from their mob before being deleted
if(reagents && istype(reagents))
reagents.my_atom = null
reagents.delete()
@@ -151,19 +148,16 @@
S.remove_from_storage(src)
src.throwing = 0
- if (src.loc == user)
- //canremove==0 means that object may not be removed. You can still wear it. This only applies to clothing. /N
- if(!src.canremove)
+ if (loc == user)
+ if(!user.unEquip(src))
return 0
- else
- user.u_equip(src)
else
- if(isliving(src.loc))
+ if(isliving(loc))
return 0
user.next_move = max(user.next_move+2,world.time + 2)
- src.pickup(user)
+ pickup(user)
add_fingerprint(user)
user.put_in_active_hand(src)
return 1
@@ -176,7 +170,7 @@
if(!A.has_fine_manipulation || w_class >= 4)
if(src in A.contents) // To stop Aliens having items stuck in their pockets
- A.drop_from_inventory(src)
+ A.unEquip(src)
user << "Your claws aren't capable of such fine manipulation."
return
@@ -187,11 +181,8 @@
M.client.screen -= src
src.throwing = 0
if (src.loc == user)
- //canremove==0 means that object may not be removed. You can still wear it. This only applies to clothing. /N
- if(istype(src, /obj/item/clothing) && !src:canremove)
+ if(!user.unEquip(src))
return
- else
- user.u_equip(src)
else
if(istype(src.loc, /mob/living))
return
@@ -207,7 +198,7 @@
if(!A.has_fine_manipulation || w_class >= 4)
if(src in A.contents) // To stop Aliens having items stuck in their pockets
- A.drop_from_inventory(src)
+ A.unEquip(src)
user << "Your claws aren't capable of such fine manipulation."
return
attack_paw(A)
@@ -422,6 +413,8 @@
return 0
return 1
if(slot_l_store)
+ if(flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them.
+ return 0
if(H.l_store)
return 0
if(!H.w_uniform)
@@ -433,6 +426,8 @@
if( w_class <= 2 || (slot_flags & SLOT_POCKET) )
return 1
if(slot_r_store)
+ if(flags & NODROP)
+ return 0
if(H.r_store)
return 0
if(!H.w_uniform)
@@ -445,6 +440,8 @@
return 1
return 0
if(slot_s_store)
+ if(flags & NODROP) //Suit storage NODROP items drop if you take a suit off, this is to prevent people exploiting this.
+ return 0
if(H.s_store)
return 0
if(!H.wear_suit)
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index f2e760a34a5..b81a80a5f65 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -5,7 +5,7 @@
desc = "Used for repairing or building APCs"
icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm
index 5ec88ac8bdf..5e6274b7cf0 100644
--- a/code/game/objects/items/ashtray.dm
+++ b/code/game/objects/items/ashtray.dm
@@ -21,7 +21,7 @@
if (contents.len >= max_butts)
user << "This ashtray is full."
return
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
if (istype(W,/obj/item/clothing/mask/cigarette))
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index b47a2a30684..61f341f0362 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -59,7 +59,8 @@
if(!wax)
new/obj/item/trash/candle(src.loc)
if(istype(src.loc, /mob))
- src.dropped()
+ var/mob/M = src.loc
+ M.unEquip(src, 1) //src is being deleted anyway
del(src)
update_icon()
if(istype(loc, /turf)) //start a fire if possible
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 826de6fd4c4..728ecb5e9f7 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -11,7 +11,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon_state = "pda"
item_state = "electronic"
w_class = 1.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_PDA | SLOT_BELT
//Main variables
@@ -51,6 +50,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
var/ownjob = null //related to above
+ var/ownrank = null // this one is rank, never alt title
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
@@ -129,15 +129,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon_state = "pda-captain"
detonate = 0
//toff = 1
-
+
/obj/item/device/pda/heads/ntrep
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
-
+
/obj/item/device/pda/heads/magistrate
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
-
+
/obj/item/device/pda/heads/blueshield
default_cartridge = /obj/item/weapon/cartridge/hos
icon_state = "pda-h"
@@ -204,7 +204,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/geneticist
default_cartridge = /obj/item/weapon/cartridge/medical
icon_state = "pda-genetics"
-
+
/obj/item/device/pda/centcom
default_cartridge = /obj/item/weapon/cartridge/centcom
icon_state = "pda-h"
@@ -217,9 +217,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
detonate = 0
-/obj/item/device/pda/ai/proc/set_name_and_job(newname as text, newjob as text)
+/obj/item/device/pda/ai/proc/set_name_and_job(newname as text, newjob as text, newrank as null|text)
owner = newname
ownjob = newjob
+ if(newrank)
+ ownrank = newrank
+ else
+ ownrank = ownjob
name = newname + " (" + ownjob + ")"
@@ -575,6 +579,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
id_check(U, 1)
if("UpdateInfo")
ownjob = id.assignment
+ ownrank = id.rank
name = "PDA-[owner] ([ownjob])"
if("Eject")//Ejects the cart, only done from hub.
if (!isnull(cartridge))
@@ -1069,6 +1074,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(!owner)
owner = idcard.registered_name
ownjob = idcard.assignment
+ ownrank = idcard.rank
name = "PDA-[owner] ([ownjob])"
user << "Card scanned."
else
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 7816473110e..144b920631c 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -4,7 +4,6 @@
icon_state = "aicard" // aicard-full
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/flush = null
origin_tech = "programming=4;materials=4"
@@ -137,4 +136,4 @@
if(2.0)
if(prob(50)) del(src)
if(3.0)
- if(prob(25)) del(src)
+ if(prob(25)) del(src)
diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm
index 8c5fbf7661e..67a424a309f 100644
--- a/code/game/objects/items/devices/autopsy.dm
+++ b/code/game/objects/items/devices/autopsy.dm
@@ -7,7 +7,7 @@
desc = "Extracts information on wounds."
icon = 'icons/obj/autopsy_scanner.dmi'
icon_state = ""
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 1.0
origin_tech = "materials=1;biotech=1"
var/list/datum/autopsy_data_scanner/wdata = list()
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 008a469dff9..de79a855768 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -1,7 +1,7 @@
/obj/item/device/chameleon
name = "chameleon-projector"
icon_state = "shield0"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "electronic"
throwforce = 5.0
diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm
index 7a05fc696a9..1b9d5e13344 100644
--- a/code/game/objects/items/devices/debugger.dm
+++ b/code/game/objects/items/devices/debugger.dm
@@ -9,7 +9,7 @@
name = "debugger"
desc = "Used to debug electronic equipment."
icon_state = "hacktool-g"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 9c17c585b39..09b5201fdb0 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -7,7 +7,7 @@
w_class = 1
throw_speed = 3
throw_range = 7
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "magnets=2;combat=1"
var/times_used = 0 //Number of times it's been used.
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 5c4201e2bc0..10c31d54773 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -5,7 +5,7 @@
icon_state = "flashlight"
item_state = "flashlight"
w_class = 2
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
m_amt = 50
g_amt = 20
@@ -107,7 +107,7 @@
item_state = ""
w_class = 1
slot_flags = SLOT_BELT | SLOT_EARS
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
brightness_on = 2
/obj/item/device/flashlight/seclite
@@ -125,7 +125,7 @@
desc = "A miniature lamp, that might be used by small robots."
icon_state = "penlight"
item_state = ""
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
brightness_on = 2
w_class = 1
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 9c8f766714f..d3ba41ca58c 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -5,7 +5,7 @@
icon_state = "pointer"
item_state = "pen"
var/pointer_icon_state
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ flags = CONDUCT | USEDELAY
slot_flags = SLOT_BELT
m_amt = 500
g_amt = 500
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 80421bac26e..f4129666026 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -47,7 +47,7 @@
icon_state = "lightreplacer0"
item_state = "electronic"
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
origin_tech = "magnets=3;materials=2"
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 910e37d3a5a..3968ee1a441 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -4,7 +4,7 @@
icon_state = "megaphone"
item_state = "radio"
w_class = 1.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
var/spamcheck = 0
var/emagged = 0
diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm
index 6e23e94d4ad..61c83fdc462 100644
--- a/code/game/objects/items/devices/modkit.dm
+++ b/code/game/objects/items/devices/modkit.dm
@@ -23,7 +23,7 @@
if(!parts)
user << "This kit has no parts for this modification left."
- user.drop_from_inventory(src)
+ user.unEquip(src)
del(src)
return
@@ -59,7 +59,7 @@
parts &= ~MODKIT_SUIT
if(!parts)
- user.drop_from_inventory(src)
+ user.unEquip(src)
del(src)
/obj/item/device/modkit/examine()
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 85a30681b1a..21bd2c49ddf 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -8,7 +8,7 @@
name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
icon_state = "multitool"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index cb7dea3371d..cdd866e41c6 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -4,7 +4,6 @@
icon_state = "pai"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
origin_tech = "programming=2"
var/obj/item/device/radio/radio
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 088a51574ab..6fb0a998d0b 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -6,7 +6,7 @@
icon_state = "powersink0"
item_state = "electronic"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 5
throw_speed = 1
throw_range = 2
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index ccdc3a9bce4..b737f9d92ca 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -4,7 +4,7 @@
icon_state = "electropack0"
item_state = "electropack"
frequency = 1449
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 5.0
g_amt = 2500
@@ -35,18 +35,22 @@
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user )
A.icon = 'icons/obj/assemblies.dmi'
- user.drop_from_inventory(W)
+ if(!user.unEquip(W))
+ user << "\the [W] is stuck to your hand, you cannot attach it to \the [src]!"
+ return
W.loc = A
W.master = A
A.part1 = W
- user.drop_from_inventory(src)
+ user.unEquip(src)
loc = A
master = A
A.part2 = src
user.put_in_hands(A)
A.add_fingerprint(user)
+ if(src.flags & NODROP)
+ A.flags |= NODROP
/obj/item/device/radio/electropack/Topic(href, href_list)
//..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 3f30f0c03e7..0f5f9f64ac1 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -5,7 +5,7 @@
anchored = 1
w_class = 4.0
canhear_range = 5
- flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
+ flags = CONDUCT | NOBLOODY
var/number = 0
var/anyai = 1
var/mob/living/silicon/ai/ai = list()
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 9f177bdf642..28fdc835308 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -26,7 +26,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
var/syndie = 0//Holder to see if it's a syndicate encrypted radio
var/maxf = 1499
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
slot_flags = SLOT_BELT
throw_speed = 2
throw_range = 9
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index fd084bab1a9..097c60d57df 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -13,7 +13,6 @@ REAGENT SCANNER
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
icon_state = "t-ray0"
var/on = 0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 2
item_state = "electronic"
@@ -99,7 +98,7 @@ REAGENT SCANNER
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 1.0
@@ -260,7 +259,7 @@ REAGENT SCANNER
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
@@ -330,7 +329,7 @@ REAGENT SCANNER
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT | OPENCONTAINER
+ flags = CONDUCT | OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
@@ -403,7 +402,7 @@ REAGENT SCANNER
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm
new file mode 100644
index 00000000000..5db0bdc47f4
--- /dev/null
+++ b/code/game/objects/items/devices/sensor_device.dm
@@ -0,0 +1,18 @@
+/obj/item/device/sensor_device
+ name = "handheld crew monitor"
+ desc = "A miniature machine that tracks suit sensors across the station."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "scanner"
+ w_class = 2.0
+ slot_flags = SLOT_BELT
+ origin_tech = "biotech=3;materials=3;magnets=3"
+ var/obj/nano_module/crew_monitor/crew_monitor
+
+/obj/item/device/sensor_device/New()
+ crew_monitor = new(src)
+
+/obj/item/device/sensor_device/attack_self(mob/user as mob)
+ ui_interact(user)
+
+/obj/item/device/sensor_device/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ crew_monitor.ui_interact(user, ui_key, ui, force_open)
\ No newline at end of file
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index f4dfd0bf245..9c98165239e 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -5,23 +5,23 @@
icon = 'icons/obj/device.dmi'
icon_state = "suitcooler0"
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
-
+
//copied from tank.dm
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 5.0
throwforce = 10.0
throw_speed = 1
throw_range = 4
-
+
origin_tech = "magnets=2;materials=2"
-
+
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
var/obj/item/weapon/stock_parts/cell/cell
var/max_cooling = 12 //in degrees per second - probably don't need to mess with heat capacity here
var/charge_consumption = 16.6 //charge per second at max_cooling
var/thermostat = T20C
-
+
//TODO: make it heat up the surroundings when not in space
/obj/item/device/suit_cooling_unit/New()
@@ -30,26 +30,26 @@
/obj/item/device/suit_cooling_unit/proc/cool_mob(mob/M)
if (!on || !cell) return
-
+
//make sure they have a suit and we are attached to it
if (!attached_to_suit(M))
return
-
+
var/mob/living/carbon/human/H = M
-
+
var/efficiency = H.get_pressure_protection() //you need to have a good seal for effective cooling
var/env_temp = get_environment_temperature() //wont save you from a fire
var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling)
-
+
if (temp_adj < 0) //only cools, doesn't heat
return
-
+
var/charge_usage = (temp_adj/max_cooling)*charge_consumption
-
+
H.bodytemperature -= temp_adj*efficiency
-
+
cell.use(charge_usage)
-
+
if(cell.charge <= 0)
turn_off()
@@ -65,22 +65,22 @@
var/turf/T = get_turf(src)
if(istype(T, /turf/space))
return 0 //space has no temperature, this just makes sure the cooling unit works in space
-
+
var/datum/gas_mixture/environment = T.return_air()
if (!environment)
return 0
-
+
return environment.temperature
/obj/item/device/suit_cooling_unit/proc/attached_to_suit(mob/M)
- if (!ishuman(M))
+ if (!ishuman(M))
return 0
-
+
var/mob/living/carbon/human/H = M
-
+
if (!H.wear_suit || H.s_store != src)
return 0
-
+
return 1
/obj/item/device/suit_cooling_unit/proc/turn_on()
@@ -88,7 +88,7 @@
return
if(cell.charge <= 0)
return
-
+
on = 1
updateicon()
@@ -143,7 +143,7 @@
user << "You insert the [cell]."
updateicon()
return
-
+
return ..()
/obj/item/device/suit_cooling_unit/proc/updateicon()
@@ -157,9 +157,9 @@
/obj/item/device/suit_cooling_unit/examine()
set src in view(1)
-
+
..()
-
+
if (on)
if (attached_to_suit(src.loc))
usr << "It's switched on and running."
@@ -167,13 +167,13 @@
usr << "It's switched on, but not attached to anything."
else
usr << "It is switched off."
-
+
if (cover_open)
if(cell)
usr << "The panel is open, exposing the [cell]."
else
usr << "The panel is open."
-
+
if (cell)
usr << "The charge meter reads [round(cell.percent())]%."
else
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 697c5574a84..8477205a84a 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -14,7 +14,7 @@
var/list/storedinfo = new/list()
var/list/timestamp = new/list()
var/canprint = 1
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
throwforce = 2
throw_speed = 4
throw_range = 20
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index b80f89f2295..d49b8e19b4c 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -22,7 +22,7 @@ effective or pretty fucking useless.
w_class = 1.0
throw_speed = 4
throw_range = 10
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
item_state = "electronic"
origin_tech = "magnets=3;combat=3;syndicate=3"
@@ -78,7 +78,7 @@ effective or pretty fucking useless.
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
discrete = 1 // Makes the item not give an attack log message for viewers.
throwforce = 3
diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm
index 3ef104cabbb..3d515d6259e 100644
--- a/code/game/objects/items/devices/whistle.dm
+++ b/code/game/objects/items/devices/whistle.dm
@@ -4,7 +4,7 @@
icon_state = "voice0"
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
w_class = 1.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
var/spamcheck = 0
var/emagged = 0
@@ -28,4 +28,4 @@
if(!emagged)
user << "\red You overload \the [src]'s voice synthesizer."
emagged = 1
-
\ No newline at end of file
+
diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm
index b26ae8cb769..583aaafe379 100644
--- a/code/game/objects/items/policetape.dm
+++ b/code/game/objects/items/policetape.dm
@@ -3,7 +3,6 @@
name = "tape roll"
icon = 'icons/policetape.dmi'
icon_state = "rollstart"
- flags = FPRINT
w_class = 1.0
var/turf/start
var/turf/end
@@ -115,7 +114,7 @@
if(!density) return 1
if(air_group || (height==0)) return 1
- if ((mover.flags & 2 || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
+ if ((mover.pass_flags & PASSTABLE || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
return 1
else
return 0
@@ -134,9 +133,9 @@
/obj/item/tape/attack_paw(mob/user as mob)
breaktape(/obj/item/weapon/wirecutters,user)
-
+
/obj/item/tape/attack_alien(mob/user as mob)
- breaktape(/obj/item/weapon/wirecutters,user)
+ breaktape(/obj/item/weapon/wirecutters,user)
/obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
if(user.a_intent == "help" && ((!can_puncture(W) && src.allowed(user))))
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index b1f5a1570fd..c28dc6ac883 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/robot_parts.dmi'
item_state = "buildpipe"
icon_state = "blank"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
@@ -109,7 +109,7 @@
user << "You armed the robot frame"
W:use(1)
if (user.get_inactive_hand()==src)
- user.before_take_item(src)
+ user.unEquip(src)
user.put_in_inactive_hand(B)
del(src)
if(istype(W, /obj/item/robot_parts/l_leg))
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 4414c3d8694..0bdbfe90647 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -3,7 +3,7 @@
desc = "Some rods. Can be used for building, or something."
singular_name = "metal rod"
icon_state = "rods"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 3.0
force = 9.0
throwforce = 15.0
@@ -65,4 +65,4 @@
usr << "\blue You assemble a grille"
F.add_fingerprint(usr)
use(2)
- return
+ return
diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm
index faacdf59df8..51aed957168 100644
--- a/code/game/objects/items/stacks/sheets/light.dm
+++ b/code/game/objects/items/stacks/sheets/light.dm
@@ -8,7 +8,7 @@
throwforce = 5.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob)
@@ -19,17 +19,17 @@
amount--
new/obj/item/stack/sheet/glass(user.loc)
if(amount <= 0)
- user.drop_from_inventory(src)
+ user.unEquip(src, 1)
del(src)
if(istype(O,/obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = O
M.amount--
if(M.amount <= 0)
- user.drop_from_inventory(M)
+ user.unEquip(src, 1)
del(M)
amount--
new/obj/item/stack/tile/light(user.loc)
if(amount <= 0)
- user.drop_from_inventory(src)
+ user.unEquip(src, 1)
del(src)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 1cc1ac1695e..b510d6be4f6 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -79,7 +79,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
icon_state = "sheet-metal"
m_amt = 3750
throwforce = 14.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=1"
/obj/item/stack/sheet/metal/cyborg
@@ -89,7 +89,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
icon_state = "sheet-metal"
m_amt = 0
throwforce = 14.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
/obj/item/stack/sheet/metal/New(var/loc, var/amount=null)
recipes = metal_recipes
@@ -116,7 +116,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
item_state = "sheet-metal"
m_amt = 7500
throwforce = 15.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=2"
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
@@ -186,7 +186,6 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
desc = "Large sheets of card, like boxes folded flat."
singular_name = "cardboard sheet"
icon_state = "sheet-card"
- flags = FPRINT | TABLEPASS
origin_tech = "materials=1"
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index 0d612f9fd8b..74ebf59b11e 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -1,6 +1,5 @@
/obj/item/stack/sheet
name = "sheet"
- flags = FPRINT | TABLEPASS
w_class = 3.0
force = 5
throwforce = 5
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index e3d457fc477..a4f2cc60829 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -145,7 +145,7 @@
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
- usr.before_take_item(oldsrc)
+ usr.unEquip(oldsrc, 1)
del(oldsrc)
if (istype(O,/obj/item))
usr.put_in_hands(O)
@@ -167,7 +167,7 @@
amount -= used
if (amount <= 0)
if(usr)
- usr.before_take_item(src, 1)
+ usr.unEquip(src, 1)
qdel(src)
return 1
@@ -185,7 +185,7 @@
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
if(!oldsrc)
break
-
+
/obj/item/stack/proc/get_amount()
return amount
diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm
index 8fdcd7a5618..688c3347116 100644
--- a/code/game/objects/items/stacks/tiles/light.dm
+++ b/code/game/objects/items/stacks/tiles/light.dm
@@ -8,7 +8,7 @@
throwforce = 5.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
var/on = 1
@@ -32,5 +32,5 @@
amount--
new/obj/item/stack/light_w(user.loc)
if(amount <= 0)
- user.drop_from_inventory(src)
+ user.unEquip(src, 1)
del(src)
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm
index cbbf1811cc5..80c0a6919d1 100644
--- a/code/game/objects/items/stacks/tiles/plasteel.dm
+++ b/code/game/objects/items/stacks/tiles/plasteel.dm
@@ -9,7 +9,7 @@
throwforce = 15.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/obj/item/stack/tile/plasteel/New(var/loc, var/amount=null)
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 1e10932b9d1..b6ae03aa271 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -18,7 +18,7 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
origin_tech = "biotech=1"
@@ -35,7 +35,7 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/*
@@ -51,5 +51,5 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
\ No newline at end of file
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 33858980b99..b338a1c259a 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -133,7 +133,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 3.0
g_amt = 10
@@ -190,7 +190,7 @@
desc = "There are 7 caps left! Make sure to recyle the box in an autolathe when it gets empty."
icon = 'icons/obj/ammo.dmi'
icon_state = "357-7"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 1.0
g_amt = 10
m_amt = 10
@@ -211,7 +211,6 @@
icon = 'icons/obj/gun.dmi'
icon_state = "crossbow"
item_state = "crossbow"
- flags = FPRINT | TABLEPASS
w_class = 2.0
attack_verb = list("attacked", "struck", "hit")
var/bullets = 5
@@ -306,7 +305,6 @@
desc = "Its nerf or nothing! Ages 8 and up."
icon = 'icons/obj/toy.dmi'
icon_state = "foamdart"
- flags = FPRINT | TABLEPASS
w_class = 1.0
/obj/effect/foam_dart_dummy
@@ -327,7 +325,7 @@
desc = "Looks almost like the real thing! Great for practicing Drive-bys"
icon_state = "tommy"
item_state = "tommy"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 1.0
attack_verb = list("struck", "hammered", "hit", "bashed")
bullets = 20.0
@@ -353,7 +351,7 @@
item_state = "sword0"
var/active = 0.0
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("attacked", "struck", "hit")
attack_self(mob/user as mob)
@@ -386,9 +384,13 @@
user << "You try to attach the end of the plastic sword to... itself. You're not very smart, are you?"
if(ishuman(user))
user.adjustBrainLoss(10)
+ else if((W.flags & NODROP) || (flags & NODROP))
+ user << "\the [flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [flags & NODROP ? W : src]!"
else
user << "You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool."
new /obj/item/weapon/twohanded/dualsaber/toy(user.loc)
+ user.unEquip(W)
+ user.unEquip(src)
del(W)
del(src)
@@ -419,7 +421,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
throwforce = 5
@@ -604,7 +606,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
throwforce = 5
@@ -705,8 +707,10 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use
..()
if(istype(C))
if(C.parentdeck == src)
+ if(!user.unEquip(C))
+ user << "The card is stuck to your hand, you can't add it to the deck!"
+ return
src.cards += C.cardname
- user.u_equip(C)
user.visible_message("[user] adds a card to the bottom of the deck.","You add the card to the bottom of the deck.")
del(C)
else
@@ -723,8 +727,10 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user)
..()
if(istype(C))
if(C.parentdeck == src)
+ if(!user.unEquip(C))
+ user << "The hand of cards is stuck to your hand, you can't add it to the deck!"
+ return
src.cards += C.currenthand
- user.u_equip(C)
user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.")
del(C)
else
@@ -741,22 +747,19 @@ obj/item/toy/cards/deck/MouseDrop(atom/over_object)
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
return
if(Adjacent(usr))
- if(over_object == M)
+ if(over_object == M && loc != M)
M.put_in_hands(src)
usr << "You pick up the deck."
else if(istype(over_object, /obj/screen))
switch(over_object.name)
- if("r_hand")
- M.u_equip(src)
- M.put_in_r_hand(src)
- usr << "You pick up the deck."
if("l_hand")
- M.u_equip(src)
M.put_in_l_hand(src)
- usr << "You pick up the deck."
+ else if("r_hand")
+ M.put_in_r_hand(src)
+ usr << "You pick up the deck."
else
- usr<< "You can't reach it from here."
+ usr << "You can't reach it from here."
@@ -816,7 +819,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list)
N.parentdeck = src.parentdeck
N.cardname = src.currenthand[1]
N.apply_card_vars(N,O)
- cardUser.u_equip(src)
+ cardUser.unEquip(src)
N.pickup(cardUser)
cardUser.put_in_any_hand_if_possible(N)
cardUser << "You also take [currenthand[1]] and hold it."
@@ -828,7 +831,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living
if(istype(C))
if(C.parentdeck == src.parentdeck)
src.currenthand += C.cardname
- user.u_equip(C)
+ user.unEquip(C)
user.visible_message("[user] adds a card to their hand.", "You add the [C.cardname] to your hand.")
interact(user)
if(currenthand.len > 4)
@@ -904,7 +907,7 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user)
H.currenthand += src.cardname
H.parentdeck = C.parentdeck
H.apply_card_vars(H,C)
- user.u_equip(C)
+ user.unEquip(C)
H.pickup(user)
user.put_in_active_hand(H)
user << "You combine the [C.cardname] and the [src.cardname] into a hand."
@@ -917,7 +920,7 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user)
var/obj/item/toy/cards/cardhand/H = I
if(H.parentdeck == parentdeck)
H.currenthand += cardname
- user.u_equip(src)
+ user.unEquip(src)
user.visible_message("[user] adds a card to \his hand.", "You add the [cardname] to your hand.")
H.interact(user)
if(H.currenthand.len > 4)
@@ -1066,7 +1069,6 @@ obj/item/toy/cards/deck/syndicate/black
desc = "No bother to sink or swim when you can just float!"
icon_state = "inflatable"
item_state = "inflatable"
- flags = FPRINT | TABLEPASS
icon = 'icons/obj/clothing/belts.dmi'
slot_flags = SLOT_BELT
@@ -1079,7 +1081,6 @@ obj/item/toy/cards/deck/syndicate/black
desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor™"
icon = 'icons/obj/toy.dmi'
icon_state = "minimeteor"
- flags = FPRINT | TABLEPASS
w_class = 2.0
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom)
@@ -1100,7 +1101,6 @@ obj/item/toy/cards/deck/syndicate/black
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
w_class = 2.0
- flags = FPRINT | TABLEPASS
/*
* Toy big red button
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 5f6de0b0130..d73420e42ee 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -12,7 +12,7 @@ AI MODULES
icon_state = "std_mod"
item_state = "electronic"
desc = "An AI Module for transmitting encrypted instructions to the AI."
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index fc6ad2b6093..1cb3dbcd718 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -12,7 +12,7 @@ RCD
opacity = 0
density = 0
anchored = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 10.0
throwforce = 10.0
throw_speed = 3
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index fa55fc8e624..1712f52d6f2 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -13,7 +13,6 @@ RSF
anchored = 0.0
var/matter = 0
var/mode = 1
- flags = TABLEPASS
w_class = 3.0
/obj/item/weapon/rsf/New()
diff --git a/code/game/objects/items/weapons/alien_specific.dm b/code/game/objects/items/weapons/alien_specific.dm
index ba914f4f8ce..7170e1c9019 100644
--- a/code/game/objects/items/weapons/alien_specific.dm
+++ b/code/game/objects/items/weapons/alien_specific.dm
@@ -11,7 +11,7 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("attacked", "slashed", "gored", "sliced", "torn", "ripped", "butchered", "cut")
//Bottles for borg liquid squirters. PSSH PSSH
diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm
index a3b92ee4dbd..15640ba0670 100644
--- a/code/game/objects/items/weapons/chrono_eraser.dm
+++ b/code/game/objects/items/weapons/chrono_eraser.dm
@@ -44,11 +44,11 @@
item_state = "chronogun"
icon_override = 'icons/mob/in-hand/guns.dmi'
w_class = 3.0
- canremove = 0
projectile_type = "/obj/item/projectile/energy/chrono_beam"
fire_sound = 'sound/weapons/Laser.ogg'
charge_cost = 0
fire_delay = 50
+ flags = NODROP
var/obj/item/weapon/chrono_eraser/TED = null
var/obj/effect/chrono_field/field = null
var/turf/startpos = null
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index b5ad7cae55f..33b7f064e14 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -137,12 +137,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0)
e.start()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.unEquip(src, 1)
del(src)
return
if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0)
e.start()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.unEquip(src, 1)
del(src)
return
flags &= ~NOREACT // allowing reagents to react after being lit
@@ -193,8 +199,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(ismob(loc))
var/mob/living/M = loc
M << "Your [name] goes out."
- M.u_equip(src) //un-equip it so the overlays can update
- M.update_inv_wear_mask(0)
+ M.unEquip(src, 1) //Force the un-equip so the overlays update
processing_objects.Remove(src)
del(src)
@@ -385,7 +390,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/icon_off = "lighter-g"
w_class = 1
throwforce = 4
- flags = TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed")
var/lit = 0
@@ -524,10 +529,10 @@ obj/item/weapon/rollingpaperpack/attack_self(mob/user)
else if(istype(over_object, /obj/screen))
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_l_hand(src)
/obj/item/weapon/rollingpaperpack/examine()
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index 1adcbc06172..5ebe282547f 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -3,7 +3,6 @@
desc = "A generic brand of lipstick."
icon = 'icons/obj/items.dmi'
icon_state = "lipstick"
- flags = FPRINT | TABLEPASS
w_class = 1.0
var/colour = "red"
var/open = 0
@@ -91,7 +90,7 @@
desc = "The latest and greatest power razor born from the science of shaving."
icon = 'icons/obj/items.dmi'
icon_state = "razor"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 1.0
/obj/item/weapon/razor/attack(mob/living/carbon/M as mob, mob/user as mob)
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index a1ddb256d89..377ff97902a 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -118,11 +118,11 @@
if(safety)
safety = 0
src.visible_message("[src] beeps: Safety protocols disabled!")
- playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_saftyOff.ogg', 50, 0)
else
safety = 1
src.visible_message("[src] beeps: Safety protocols enabled!")
- playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_saftyOn.ogg', 50, 0)
update_icon()
..()
@@ -158,7 +158,7 @@
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
var/mob/living/carbon/human/M = user
if(paddles in get_both_hands(M))
- M.u_equip(paddles)
+ M.unEquip(paddles)
update_icon()
return
@@ -187,14 +187,14 @@
if(bcell)
if(bcell.charge >= paddles.revivecost)
user.visible_message("[src] beeps: Unit ready.")
- playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_ready.ogg', 50, 0)
else
user.visible_message("[src] beeps: Charge depleted.")
- playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
paddles.cooldown = 0
paddles.update_icon()
update_icon()
-
+
/obj/item/weapon/defibrillator/compact
name = "compact defibrillator"
desc = "A belt-equipped defibrillator that can be rapidly deployed."
@@ -274,7 +274,7 @@
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.")
defib.deductcharge(revivecost)
- playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user as mob)
@@ -290,7 +290,7 @@
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O)
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
- M.u_equip(O)
+ M.unEquip(O)
qdel(O)
return 0
else
@@ -305,7 +305,7 @@
return
if(!defib.powered)
user.visible_message("[defib] beeps: Unit is unpowered.")
- playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
if(!wielded)
user << "You need to wield the paddles in both hands before you can use them on someone!"
@@ -324,7 +324,7 @@
H.adjustStaminaLoss(50)
H.Weaken(5)
H.updatehealth() //forces health update before next life tick
- playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
H.emote("gasp")
add_logs(user, M, "stunned", object="defibrillator")
defib.deductcharge(revivecost)
@@ -339,7 +339,7 @@
update_icon()
if(do_after(user, 30)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.")
- playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
var/mob/dead/observer/ghost = H.get_ghost()
var/tplus = world.time - H.timeofdeath
var/tlimit = 6000 //past this much time the patient is unrecoverable (in deciseconds)
@@ -351,7 +351,7 @@
if(istype(carried_item, /obj/item/clothing/suit/space))
if(!defib.combat)
user.visible_message("[defib] buzzes: Patient's chest is obscured. Operation aborted.")
- playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
update_icon()
return
@@ -359,7 +359,7 @@
var/health = H.health
M.visible_message("[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
- playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
for(var/datum/organ/external/O in H.organs)
total_brute += O.brute_dam
total_burn += O.burn_dam
@@ -371,7 +371,7 @@
H.adjustFireLoss(tobehealed)
H.adjustBruteLoss(tobehealed)
user.visible_message("[defib] pings: Resuscitation successful.")
- playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
H.stat = 1
H.update_revive()
H.emote("gasp")
@@ -389,13 +389,127 @@
if(ghost)
ghost << "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)"
ghost << sound('sound/effects/genetics.ogg')
- playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, 0)
+ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
defib.deductcharge(revivecost)
update_icon()
cooldown = 1
defib.cooldowncheck(user)
else
user.visible_message("[defib] buzzes: Patient is not in a valid state. Operation aborted.")
+ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
+ busy = 0
+ update_icon()
+ else
+ user << "You need to target your patient's chest with [src]."
+ return
+
+/obj/item/weapon/borg_defib
+ name = "defibrillator paddles"
+ desc = "A pair of mounted paddles with flat metal surfaces that are used to deliver powerful electric shocks."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "defibpaddles0"
+ item_state = "defibpaddles0"
+ force = 0
+ w_class = 4
+ var/revivecost = 1000
+ var/cooldown = 0
+ var/busy = 0
+ flags = NODROP
+
+/obj/item/weapon/borg_defib/attack(mob/M, mob/user)
+ var/tobehealed
+ var/threshold = -config.health_threshold_dead
+ var/mob/living/carbon/human/H = M
+
+ if(busy)
+ return
+ if(cooldown)
+ user << "[src] is recharging."
+ if(!ishuman(M))
+ user << "This unit is only designed to work on humanoid lifeforms."
+ return
+ else
+ if(user.a_intent == "harm")
+ busy = 1
+ H.visible_message("[user] has touched [H.name] with [src]!", \
+ "[user] has touched [H.name] with [src]!")
+ H.adjustStaminaLoss(50)
+ H.Weaken(5)
+ H.updatehealth() //forces health update before next life tick
+ playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ H.emote("gasp")
+ add_logs(user, M, "stunned", object="defibrillator")
+ if(isrobot(user))
+ var/mob/living/silicon/robot/R = user
+ R.cell.use(revivecost)
+ cooldown = 1
+ busy = 0
+ update_icon()
+ spawn(50)
+ cooldown = 0
+ update_icon()
+ return
+ if(user.zone_sel && user.zone_sel.selecting == "chest")
+ user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.")
+ busy = 1
+ update_icon()
+ if(do_after(user, 30)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
+ user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.")
+ playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 0)
+ var/mob/dead/observer/ghost = H.get_ghost()
+ var/tplus = world.time - H.timeofdeath
+ var/tlimit = 6000 //past this much time the patient is unrecoverable (in deciseconds)
+ var/tloss = 3000 //brain damage starts setting in on the patient after some time left rotting
+ var/total_burn = 0
+ var/total_brute = 0
+ if(do_after(user, 20)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
+ if(H.stat == 2)
+ var/health = H.health
+ M.visible_message("[M]'s body convulses a bit.")
+ playsound(get_turf(src), "bodyfall", 50, 1)
+ playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ for(var/datum/organ/external/O in H.organs)
+ total_brute += O.brute_dam
+ total_burn += O.burn_dam
+ if(H.health <= config.health_threshold_dead && total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(M_NOCLONE in H.mutations))
+ tobehealed = health + threshold
+ tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
+ H.adjustOxyLoss(tobehealed)
+ H.adjustToxLoss(tobehealed)
+ H.adjustFireLoss(tobehealed)
+ H.adjustBruteLoss(tobehealed)
+ user.visible_message("[user] pings: Resuscitation successful.")
+ playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0)
+ H.stat = 1
+ H.update_revive()
+ H.emote("gasp")
+ if(tplus > tloss)
+ H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
+ if(isrobot(user))
+ var/mob/living/silicon/robot/R = user
+ R.cell.use(revivecost)
+ add_logs(user, M, "revived", object="defibrillator")
+ else
+ if(tplus > tlimit)
+ user.visible_message("[user] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.")
+ else if(total_burn >= 180 || total_brute >= 180)
+ user.visible_message("[user] buzzes: Resuscitation failed - Severe tissue damage detected.")
+ else
+ user.visible_message("[user] buzzes: Resuscitation failed.")
+ if(ghost)
+ ghost << "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)"
+ ghost << sound('sound/effects/genetics.ogg')
+ playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, 0)
+ if(isrobot(user))
+ var/mob/living/silicon/robot/R = user
+ R.cell.use(revivecost)
+ update_icon()
+ cooldown = 1
+ spawn(50)
+ cooldown = 0
+ update_icon()
+ else
+ user.visible_message("[user] buzzes: Patient is not in a valid state. Operation aborted.")
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
busy = 0
update_icon()
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 3e4831f701e..3cc4caebb33 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -93,7 +93,7 @@
spawn(0)//this prevents the collapse of space-time continuum
if (user)
- user.drop_from_inventory(src)
+ user.unEquip(src)
del(src)
return uses
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index a11db2d4dcd..760bef9c2e2 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -6,7 +6,7 @@
icon_state = "fire_extinguisher0"
item_state = "fire_extinguisher"
hitsound = 'sound/weapons/smash.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 10
w_class = 3.0
throw_speed = 2
@@ -31,7 +31,6 @@
icon_state = "miniFE0"
item_state = "miniFE"
hitsound = null //it is much lighter, after all.
- flags = FPRINT | TABLEPASS
throwforce = 2
w_class = 2.0
force = 3.0
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index fd203a258c1..7a8bdb8a69c 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/flamethrower.dmi'
icon_state = "flamethrowerbase"
item_state = "flamethrower_0"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 3.0
throwforce = 10.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 0af739fdccd..a1bd6e79f47 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -109,7 +109,7 @@
if(!ispath(gift_type,/obj/item)) return
var/obj/item/I = new gift_type(M)
- M.u_equip(src)
+ M.unEquip(src, 1)
M.put_in_hands(I)
I.add_fingerprint(M)
del(src)
diff --git a/code/game/objects/items/weapons/grenades/bananade.dm b/code/game/objects/items/weapons/grenades/bananade.dm
index 986fae6a358..119a72d59a6 100644
--- a/code/game/objects/items/weapons/grenades/bananade.dm
+++ b/code/game/objects/items/weapons/grenades/bananade.dm
@@ -49,7 +49,7 @@ var/turf/T
if(istype(I, /obj/item/weapon/screwdriver))
if(fillamt)
var/obj/item/weapon/grenade/bananade/G = new /obj/item/weapon/grenade/bananade
- user.before_take_item(src)
+ user.unEquip(src)
user.put_in_hands(G)
G.deliveryamt = src.fillamt
user << "You lock the assembly shut, readying it for HONK."
diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm
index 830e2052bb0..e4301755a92 100644
--- a/code/game/objects/items/weapons/grenades/ghettobomb.dm
+++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm
@@ -5,8 +5,8 @@
if(istype(I, /obj/item/device/assembly/igniter))
var/obj/item/device/assembly/igniter/G = I
var/obj/item/weapon/grenade/iedcasing/W = new /obj/item/weapon/grenade/iedcasing
- user.before_take_item(G)
- user.before_take_item(src)
+ user.unEquip(G)
+ user.unEquip(src)
user.put_in_hands(W)
user << "You stuff the [I] in the [src], emptying the contents beforehand."
W.underlays += image(src.icon, icon_state = src.icon_state)
@@ -23,7 +23,7 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
var/assembled = 0
active = 1
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index bd02b527144..c0ddc3c2359 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -7,7 +7,7 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
var/active = 0
var/det_time = 50
@@ -78,7 +78,7 @@
/obj/item/weapon/grenade/proc/update_mob()
if(ismob(loc))
var/mob/M = loc
- M.drop_from_inventory(src)
+ M.unEquip(src)
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index 27a2d0580e2..afc4ea61176 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -5,7 +5,6 @@
icon_state = "flashbang"
det_time = 20
item_state = "flashbang"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/datum/effect/effect/system/bad_smoke_spread/smoke
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 9c0df304acd..5c6da3e797b 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -4,7 +4,7 @@
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "handcuff"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
w_class = 2.0
@@ -128,7 +128,7 @@ var/last_chew = 0
var/obj/item/stack/rods/R = I
if (R.use(1))
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
- user.u_equip(src)
+ user.unEquip(src)
user.put_in_hands(W)
user << "You wrap the cable restraint around the top of the rod."
qdel(src)
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index 8fe56d6bd70..19193fdf4ea 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -20,7 +20,6 @@
desc = "A small satchel made for organizing seeds."
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 500; //the number of seeds it can carry.
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 1
var/list/item_quants = list()
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index 22041ccd51b..40e78584f76 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -145,7 +145,7 @@
user << "\red Something is already scanned inside the implant!"
return
if(user)
- user.u_equip(I)
+ user.unEquip(I)
user.update_icons() //update our overlays
c.scanned = I
c.scanned.loc = c
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index ae5d8a170c3..bce6b1d02d8 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -22,7 +22,7 @@
throwforce = 0.0
throw_speed = 3
throw_range = 5
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=1"
attack_verb = list("attacked", "stabbed", "poked")
sharp = 0
@@ -133,7 +133,7 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "knife"
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
sharp = 1
edge = 1
force = 10.0
@@ -176,7 +176,7 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "butch"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 15.0
w_class = 2.0
throwforce = 8.0
@@ -266,7 +266,7 @@
throw_speed = 3
throw_range = 5
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
m_amt = 3000
/* // NOPE
var/food_total= 0
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 2c68041fb16..e117cbaf0f2 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -18,7 +18,7 @@
throw_range = 5
w_class = 3.0
hitsound = "swing_hit"
- flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS
+ flags = CONDUCT | NOSHIELD
origin_tech = "combat=3"
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
sharp = 1
@@ -43,7 +43,7 @@
throw_range = 5
w_class = 2.0
hitsound = "swing_hit"
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharp = 1
@@ -79,6 +79,6 @@
throw_speed = 1
throw_range = 1
w_class = 4.0//So you can't hide it in your pocket or some such.
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/datum/effect/effect/system/spark_spread/spark_system
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 6b80edd6fd0..e63dde9b9aa 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -3,7 +3,7 @@
desc = "A tool used by great men to placate the frothing masses."
icon_state = "chain"
item_state = "chain"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 10
throwforce = 7
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index b1c37f7cc47..7b7a7c7a829 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -8,7 +8,6 @@
throw_speed = 3
throw_range = 7
w_class = 3.0
- flags = FPRINT | TABLEPASS
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
var/mopping = 0
var/mopcount = 0
diff --git a/code/game/objects/items/weapons/ninja_manuscript.dm b/code/game/objects/items/weapons/ninja_manuscript.dm
index 8c8674a42c7..75c07a2c3f5 100644
--- a/code/game/objects/items/weapons/ninja_manuscript.dm
+++ b/code/game/objects/items/weapons/ninja_manuscript.dm
@@ -6,7 +6,6 @@
throw_speed = 1
throw_range = 5
w_class = 3
- flags = TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/charges = 1
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index 9802b76018d..d35714f2111 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -14,7 +14,7 @@ var/global/list/cached_icons = list()
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10,20,30,50,70)
volume = 70
- flags = FPRINT | OPENCONTAINER
+ flags = OPENCONTAINER
var/paint_type = ""
afterattack(turf/simulated/target, mob/user, proximity)
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 5a4b7a98d9d..cbaa53c0b54 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -5,7 +5,6 @@
icon_state = "cell"
item_state = "cell"
origin_tech = "powerstorage=1"
- flags = FPRINT|TABLEPASS
force = 5.0
throwforce = 5.0
throw_speed = 3
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index 6ca0f327e20..e7a9272aa6d 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
var/uses = 4.0
- flags = FPRINT | TABLEPASS
w_class = 2.0
item_state = "paper"
throw_speed = 4
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 774f097ca5f..eb4f6236c76 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -6,7 +6,7 @@
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
icon = 'icons/obj/weapons.dmi'
icon_state = "riot"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
force = 5.0
throwforce = 5.0
@@ -42,7 +42,7 @@
desc = "A shield capable of stopping most melee attacks. Protects user from almost all energy projectiles. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/weapons.dmi'
icon_state = "eshield0" // eshield1 for expanded
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 3.0
throwforce = 5.0
throw_speed = 1
@@ -58,7 +58,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "shield0"
var/active = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
item_state = "electronic"
throwforce = 10.0
throw_speed = 2
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 25cb47ef3e8..49de496abe6 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -9,7 +9,6 @@
icon_state = "backpack"
item_state = "backpack"
w_class = 4.0
- flags = FPRINT|TABLEPASS
slot_flags = SLOT_BACK //ERROOOOO
max_w_class = 3
max_combined_w_class = 21
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 3fa71922efd..c78906a6639 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -21,7 +21,6 @@
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
use_to_pickup = 1
slot_flags = SLOT_BELT
- flags = FPRINT | TABLEPASS
// -----------------------------
// Trash bag
@@ -209,7 +208,7 @@
break
if(!inserted || !S.amount)
- usr.u_equip(S)
+ usr.unEquip(S)
usr.update_icons() //update our overlays
if (usr.client && usr.s_active != src)
usr.client.screen -= S
@@ -308,7 +307,7 @@
w_class = 1
can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash")
-
+
// -----------------------------
// Book bag
// -----------------------------
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 938f9da5e72..98bcd5728e6 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
@@ -21,10 +20,10 @@
if (!M.restrained() && !M.stat && can_use())
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_l_hand(src)
src.add_fingerprint(usr)
return
@@ -95,7 +94,8 @@
"/obj/item/device/flashlight/pen",
"/obj/item/clothing/mask/surgical",
"/obj/item/clothing/gloves/color/latex",
- "/obj/item/weapon/reagent_containers/hypospray/autoinjector"
+ "/obj/item/weapon/reagent_containers/hypospray/autoinjector",
+ "/obj/item/device/sensor_device"
)
@@ -291,7 +291,7 @@
name = "yellow fannypack"
icon_state = "fannypack_yellow"
item_state = "fannypack_yellow"
-
+
// -------------------------------------
// Bluespace Belt
// -------------------------------------
@@ -444,4 +444,3 @@
new /obj/item/device/analyzer(src)
new /obj/item/device/healthanalyzer(src)
-
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index f521c369f88..d4efe740192 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -5,7 +5,6 @@
throw_speed = 1
throw_range = 5
w_class = 3.0
- flags = FPRINT | TABLEPASS
var/mob/affecting = null
var/deity_name = "Christ"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 35aca19bdf7..2e63b0a2cec 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -555,7 +555,6 @@
item_state = "zippo"
storage_slots = 10
w_class = 1
- flags = TABLEPASS
slot_flags = SLOT_BELT
New()
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index d6d288c5734..1a2faf6b1a7 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -3,7 +3,7 @@
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
item_state = "briefcase"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
hitsound = "swing_hit"
force = 8.0
throw_speed = 2
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 37735cab0d8..2ff671074ef 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -88,7 +88,6 @@
item_state = "candlebox5"
storage_slots = 5
throwforce = 2
- flags = TABLEPASS
slot_flags = SLOT_BELT
@@ -152,7 +151,6 @@
item_state = "cigpacket"
w_class = 1
throwforce = 2
- flags = TABLEPASS
slot_flags = SLOT_BELT
storage_slots = 6
can_hold = list("/obj/item/clothing/mask/cigarette")
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 56c02a49bdf..0cb6ecb6727 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -12,7 +12,7 @@
name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos."
icon_state = "firstaid"
- icon_override = 'icons/mob/in-hand/medkits.dmi'
+ icon_override = 'icons/mob/in-hand/medkits.dmi'
throw_speed = 2
throw_range = 8
var/empty = 0
@@ -154,10 +154,10 @@
if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_l_hand(src)
src.add_fingerprint(usr)
return
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 082002a5b9a..44c8aaa5697 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -37,19 +37,19 @@
if (!( istype(over_object, /obj/screen) ))
return 1
-
+
//makes sure master_item is equipped before putting it in hand, so that we can't drag it into our hand from miles away.
//there's got to be a better way of doing this...
- if (!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user))
+ if (!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user))
return 0
-
+
if (!( user.restrained() ) && !( user.stat ))
switch(over_object.name)
if("r_hand")
- user.u_equip(master_item)
+ user.unEquip(master_item)
user.put_in_r_hand(master_item)
if("l_hand")
- user.u_equip(master_item)
+ user.unEquip(master_item)
user.put_in_l_hand(master_item)
master_item.add_fingerprint(user)
return 0
@@ -70,12 +70,12 @@
H.put_in_hands(master_item)
H.r_store = null
return 0
-
+
src.add_fingerprint(user)
if (master_item.loc == user)
src.open(user)
return 0
-
+
for(var/mob/M in range(1, master_item.loc))
if (M.s_active == src)
src.close(M)
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index a33fe344e77..8620b4d2339 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -150,7 +150,6 @@
icon_state = "secure"
item_state = "sec-case"
desc = "A large briefcase with a digital locking system."
- flags = FPRINT | TABLEPASS
force = 8.0
throw_speed = 1
throw_range = 4
@@ -225,7 +224,6 @@
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
- flags = FPRINT | TABLEPASS
force = 8.0
w_class = 8.0
max_w_class = 8
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 2b7661cc702..56ac3caff67 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -46,10 +46,12 @@
if (!( M.restrained() ) && !( M.stat ))
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ if(!M.unEquip(src))
+ return
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ if(!M.unEquip(src))
+ return
M.put_in_l_hand(src)
src.add_fingerprint(usr)
return
@@ -101,7 +103,7 @@
if(user.s_active == src)
user.s_active = null
return
-
+
/obj/item/weapon/storage/proc/open(mob/user as mob)
if (src.use_sound)
playsound(src.loc, src.use_sound, 50, 1, -5)
@@ -202,7 +204,7 @@
//This proc return 1 if the item can be picked up and 0 if it can't.
//Set the stop_messages to stop it from printing messages
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
- if(!istype(W)) return //Not an item
+ if(!istype(W) || (W.flags & ABSTRACT)) return //Not an item
if(src.loc == W)
return 0 //Means the item is already in the storage item
@@ -250,15 +252,21 @@
usr << "[src] cannot hold [W] as it's a storage item of the same size."
return 0 //To prevent the stacking of same sized storage items.
+ if(W.flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry.
+ usr << "\the [W] is stuck to your hand, you can't put it in \the [src]"
+ return 0
+
return 1
//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted()
//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once,
//such as when picking up all the items on a tile with one click.
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
- if(!istype(W)) return 0
+ if(!istype(W))
+ return 0
if(usr)
- usr.u_equip(W)
+ if(!usr.unEquip(W))
+ return 0
usr.update_icons() //update our overlays
W.loc = src
W.on_enter_storage(src)
@@ -465,17 +473,17 @@
/atom/proc/storage_depth(atom/container)
var/depth = 0
var/atom/cur_atom = src
-
+
while (cur_atom && !(cur_atom in container.contents))
if (isarea(cur_atom))
return -1
if (istype(cur_atom.loc, /obj/item/weapon/storage))
depth++
cur_atom = cur_atom.loc
-
+
if (!cur_atom)
return -1 //inside something with a null loc.
-
+
return depth
//Like storage depth, but returns the depth to the nearest turf
@@ -483,16 +491,16 @@
/atom/proc/storage_depth_turf()
var/depth = 0
var/atom/cur_atom = src
-
+
while (cur_atom && !isturf(cur_atom))
if (isarea(cur_atom))
return -1
if (istype(cur_atom.loc, /obj/item/weapon/storage))
depth++
cur_atom = cur_atom.loc
-
+
if (!cur_atom)
return -1 //inside something with a null loc.
-
+
return depth
-
+
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 4c7ea0617a0..cb04eeaccd3 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_state = "toolbox_red"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 10.0
throwforce = 10.0
throw_speed = 2
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 8a33f542f4c..ae0509b00fa 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -4,7 +4,6 @@
icon_state = "stunbaton"
item_state = "baton"
slot_flags = SLOT_BELT
- flags = FPRINT | TABLEPASS
force = 10
throwforce = 7
w_class = 3
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index dab630f188a..e85df4485bf 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -16,9 +16,9 @@
desc = "Retracts stuff."
icon = 'icons/obj/surgery.dmi'
icon_state = "retractor"
- m_amt = 10000
- g_amt = 5000
- flags = FPRINT | TABLEPASS | CONDUCT
+ m_amt = 6000
+ g_amt = 3000
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
@@ -132,7 +132,7 @@ LOOK FOR SURGERY.DM*/
icon_state = "hemostat"
m_amt = 5000
g_amt = 2500
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "pinched")
@@ -265,9 +265,9 @@ LOOK FOR SURGERY.DM*/
desc = "This stops bleeding."
icon = 'icons/obj/surgery.dmi'
icon_state = "cautery"
- m_amt = 5000
- g_amt = 2500
- flags = FPRINT | TABLEPASS | CONDUCT
+ m_amt = 2500
+ g_amt = 750
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
attack_verb = list("burnt")
@@ -356,9 +356,9 @@ LOOK FOR SURGERY.DM*/
icon = 'icons/obj/surgery.dmi'
icon_state = "drill"
hitsound = 'sound/weapons/circsawhit.ogg'
- m_amt = 15000
- g_amt = 10000
- flags = FPRINT | TABLEPASS | CONDUCT
+ m_amt = 10000
+ g_amt = 6000
+ flags = CONDUCT
force = 15.0
w_class = 2.0
origin_tech = "materials=1;biotech=1"
@@ -377,7 +377,7 @@ LOOK FOR SURGERY.DM*/
desc = "Cut, cut, and once more cut."
icon = 'icons/obj/surgery.dmi'
icon_state = "scalpel"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 10.0
sharp = 1
edge = 1
@@ -385,8 +385,8 @@ LOOK FOR SURGERY.DM*/
throwforce = 5.0
throw_speed = 3
throw_range = 5
- m_amt = 10000
- g_amt = 5000
+ m_amt = 4000
+ g_amt = 1000
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
@@ -631,14 +631,14 @@ LOOK FOR SURGERY.DM*/
icon = 'icons/obj/surgery.dmi'
icon_state = "saw3"
hitsound = 'sound/weapons/circsawhit.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 15.0
w_class = 2.0
throwforce = 9.0
throw_speed = 3
throw_range = 5
- m_amt = 20000
- g_amt = 10000
+ m_amt = 10000
+ g_amt = 6000
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "sawed", "cut")
sharp = 1
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 375f07f05a6..9cf1cee7846 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -101,7 +101,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "baton"
item_state = "classic_baton"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 10
@@ -157,7 +156,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "telebaton_0"
item_state = "telebaton_0"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 2
force = 3
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index b5fa8e36b95..21881c27986 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -98,7 +98,7 @@
name = "plasma tank"
desc = "Contains dangerous plasma. Do not inhale. Warning: extremely flammable."
icon_state = "plasma"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = null //they have no straps!
@@ -118,7 +118,7 @@
if ((!F.status)||(F.ptank)) return
src.master = F
F.ptank = src
- user.before_take_item(src)
+ user.unEquip(src)
src.loc = F
return
@@ -140,7 +140,7 @@
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon_state = "emergency"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
force = 4.0
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index d4a0cb0c972..f12b27f5de2 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -4,7 +4,7 @@
/obj/item/weapon/tank
name = "tank"
icon = 'icons/obj/tank.dmi'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
hitsound = 'sound/weapons/smash.ogg'
w_class = 3
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 85d4aeacb01..e721c2ab283 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -63,7 +63,7 @@
/obj/item/weapon/watertank/proc/remove_noz(mob/user)
var/mob/living/carbon/human/M = user
if(noz in get_both_hands(M))
- M.u_equip(noz)
+ M.unEquip(noz)
return
/obj/item/weapon/watertank/Destroy()
@@ -108,7 +108,7 @@
/proc/check_tank_exists(parent_tank, var/mob/living/carbon/human/M, var/obj/O)
if (!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns
- M.u_equip(O)
+ M.unEquip(O)
qdel(0)
return 0
else
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 88bb08b7ae8..fcadebadbbd 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -16,7 +16,7 @@
var/frequency = 1451
var/broadcasting = null
var/listening = 1.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 2.0
item_state = "electronic"
throw_speed = 4
@@ -48,7 +48,7 @@ Frequency:
if (usr.stat || usr.restrained())
return
var/turf/current_location = get_turf(usr)//What turf is the user on?
- if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
+ if(!current_location||(current_location.z in config.admin_levels))//If turf was not found or they're on z level 2.
usr << "The [src] is malfunctioning."
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
@@ -138,7 +138,7 @@ Frequency:
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = get_turf(user)//What turf is the user on?
- if(!current_location||current_location.z==2||current_location.z>=7)//If turf was not found or they're on z level 2 or >7 which does not currently exist.
+ if(!current_location||(current_location.z in config.admin_levels)||current_location.z>=7)//If turf was not found or they're on z level 2 or >7 which does not currently exist.
user << "\The [src] is malfunctioning."
return
var/list/L = list( )
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 747fc89183e..8f85c3f0bff 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -20,7 +20,7 @@
desc = "A wrench with common uses. Can be found in your hand."
icon = 'icons/obj/items.dmi'
icon_state = "wrench"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
@@ -38,7 +38,7 @@
desc = "You can be totally screwwy with this."
icon = 'icons/obj/items.dmi'
icon_state = "screwdriver"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
w_class = 1.0
@@ -99,7 +99,7 @@
desc = "This cuts wires."
icon = 'icons/obj/items.dmi'
icon_state = "cutters"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 6.0
throw_speed = 3
@@ -135,7 +135,7 @@
name = "welding tool"
icon = 'icons/obj/items.dmi'
icon_state = "welder"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
//Amount of OUCH when it's thrown
@@ -147,7 +147,7 @@
//Cost to make in the autolathe
m_amt = 70
- g_amt = 30
+ g_amt = 20
//R&D tech level
origin_tech = "engineering=1"
@@ -194,12 +194,12 @@
if (user.client)
user.client.screen -= src
if (user.r_hand == src)
- user.u_equip(src)
+ user.unEquip(src)
else
- user.u_equip(src)
+ user.unEquip(src)
src.master = F
src.layer = initial(src.layer)
- user.u_equip(src)
+ user.unEquip(src)
if (user.client)
user.client.screen -= src
src.loc = F
@@ -447,7 +447,7 @@
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
icon = 'icons/obj/items.dmi'
icon_state = "crowbar"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
@@ -514,7 +514,7 @@
desc = "A professional conversion kit used to convert any knock off revolver into the real deal capable of shooting lethal .357 rounds without the possibility of catastrophic failure"
icon = 'icons/obj/weapons.dmi'
icon_state = "kit"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "combat=2"
var/open = 0
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 4d80110cc2a..417cfdbbca7 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -107,7 +107,7 @@
w_class = 5.0
icon_state = "offhand"
name = "offhand"
- //flags = ABSTRACT
+ flags = ABSTRACT
/obj/item/weapon/twohanded/offhand/unwield()
del(src)
@@ -207,7 +207,7 @@ obj/item/weapon/twohanded/
force_wielded = 34
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharp = 1
@@ -291,7 +291,7 @@ obj/item/weapon/twohanded/
force_wielded = 18 // Was 13, Buffed - RR
throwforce = 20
throw_speed = 3
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
/obj/item/weapon/twohanded/spear/update_icon()
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index c420450e5f4..998d24f8abc 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -3,7 +3,6 @@
name = "banhammer"
icon = 'icons/obj/items.dmi'
icon_state = "toyhammer"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
throwforce = 0
w_class = 1.0
@@ -21,7 +20,6 @@
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
icon_state = "nullrod"
item_state = "nullrod"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 15
throw_speed = 1
@@ -74,7 +72,6 @@
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
icon_state = "sord"
item_state = "sord"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 2
throwforce = 1
@@ -96,7 +93,7 @@
desc = "What are you standing around staring at this for? Get to killing!"
icon_state = "claymore"
item_state = "claymore"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
hitsound = 'sound/weapons/bladeslice.ogg'
slot_flags = SLOT_BELT
force = 40
@@ -123,7 +120,7 @@
desc = "Woefully underpowered in D20"
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 40
throwforce = 10
@@ -161,7 +158,7 @@ obj/item/weapon/wirerod
desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit."
icon_state = "wiredrod"
item_state = "rods"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 9
throwforce = 10
w_class = 3
@@ -173,8 +170,8 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
if(istype(I, /obj/item/weapon/shard))
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
- user.u_equip(I)
- user.u_equip(src)
+ user.unEquip(I)
+ user.unEquip(src)
user.put_in_hands(S)
user << "You fasten the glass shard to the top of the rod with the cable."
@@ -184,8 +181,8 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
else if(istype(I, /obj/item/weapon/wirecutters))
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
- user.u_equip(I)
- user.u_equip(src)
+ user.unEquip(I)
+ user.unEquip(src)
user.put_in_hands(P)
user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward."
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index e50de9f2d44..6049d30bd51 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -21,11 +21,15 @@
// Reagent ID => friendly name
var/list/reagents_to_log=list()
-/obj/Topic(href, href_list, var/nowindow = 0)
+/obj/Topic(href, href_list, var/nowindow = 0, var/checkrange = 1)
// Calling Topic without a corresponding window open causes runtime errors
- if(nowindow)
- return 0
- return ..()
+ if(!nowindow && ..())
+ return 1
+
+ if(usr.can_interact_with_interface(nano_host(), checkrange) != STATUS_INTERACTIVE)
+ return 1
+ add_fingerprint(usr)
+ return 0
/obj/Destroy()
machines -= src
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 7f2ed7e1b3e..8887609a1a6 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/closet.dmi'
icon_state = "closed"
density = 1
- flags = FPRINT
var/icon_closed = "closed"
var/icon_opened = "open"
var/opened = 0
@@ -262,7 +261,8 @@
return
if(isrobot(user))
return
- usr.drop_item()
+ if(!usr.drop_item())
+ return
if(W)
W.loc = src.loc
else if(istype(W, /obj/item/weapon/packageWrap))
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index fcd8dafd77f..c223fa99314 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -234,4 +234,6 @@
sleep(2)
new /obj/item/clothing/suit/space/eva/paramedic(src)
new /obj/item/clothing/head/helmet/space/eva/paramedic(src)
+ new /obj/item/clothing/head/helmet/space/eva/paramedic(src)
+ new /obj/item/device/sensor_device(src)
return
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index e089c4448f0..b8177c9b4a1 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -5,7 +5,6 @@
icon_state = "human_male"
density = 1
anchored = 1
- flags = FPRINT
health = 0 //destroying the statue kills the mob within
var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock
var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils.
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index fb60fa0d3aa..019eacd96ed 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -133,7 +133,9 @@
if(opened)
if(isrobot(user))
return
- user.drop_item()
+ if(!user.drop_item()) //couldn't drop the item
+ user << "\The [W] is stuck to your hand, you cannot put it in \the [src]!"
+ return
if(W)
W.loc = src.loc
else if(istype(W, /obj/item/weapon/packageWrap))
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 96ed8ef9169..62d77768e2a 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/storage.dmi'
icon_state = "densecrate"
density = 1
- flags = FPRINT
/obj/structure/largecrate/attack_hand(mob/user as mob)
user << "You need a crowbar to pry this open!"
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index b02fb0f0c86..2475ee9eeed 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -5,7 +5,7 @@
icon_state = "grille"
density = 1
anchored = 1
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
pressure_resistance = 5*ONE_ATMOSPHERE
layer = 2.9
explosion_resistance = 5
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index b27f8853904..d7304c9cc57 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -5,7 +5,7 @@
icon_state = "mopbucket"
density = 1
pressure_resistance = 5
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
/obj/structure/mopbucket/New()
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 1f23e10411d..a5ad84c20eb 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -3,7 +3,6 @@
desc = "A board for pinning important notices upon."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "nboard00"
- flags = FPRINT
density = 0
anchored = 1
var/notices = 0
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index 78320f38581..bad562d595a 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1.0
- flags = FPRINT
pressure_resistance = 15
/obj/structure/stool/ex_act(severity)
@@ -57,14 +56,14 @@
/obj/item/weapon/stool/attack_self(mob/user as mob)
..()
origin.loc = get_turf(src)
- user.u_equip(src)
+ user.unEquip(src)
user.visible_message("\blue [user] puts [src] down.", "\blue You put [src] down.")
del src
/obj/item/weapon/stool/attack(mob/M as mob, mob/user as mob)
if (prob(5) && istype(M,/mob/living))
user.visible_message("\red [user] breaks [src] over [M]'s back!.")
- user.u_equip(src)
+ user.unEquip(src)
var/obj/item/stack/sheet/metal/m = new/obj/item/stack/sheet/metal
m.loc = get_turf(src)
del src
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index cd76aef88bb..7df232e9d8d 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -373,7 +373,8 @@
return
if(isrobot(user))
return
- user.drop_item()
+ if(!user.drop_item())
+ return
if (O.loc != src.loc)
step(O, get_dir(O, src))
return
@@ -420,7 +421,9 @@
O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2)
destroy()
- user.drop_item(src)
+ if(!(W.flags & ABSTRACT))
+ if(user.drop_item())
+ W.Move(loc)
return
/obj/structure/table/proc/straight_table_check(var/direction)
@@ -583,7 +586,9 @@
del(src)
return
- user.drop_item(src)
+ if(!(I.flags & ABSTRACT))
+ if(user.drop_item())
+ I.Move(loc)
//if(W && W.loc) W.loc = src.loc
return 1
@@ -635,7 +640,9 @@
del(src)
return
- user.drop_item(src)
+ if(!(W.flags & ABSTRACT))
+ if(user.drop_item())
+ W.Move(loc)
return 1
@@ -692,7 +699,6 @@
icon = 'icons/obj/objects.dmi'
icon_state = "rack"
density = 1
- flags = FPRINT
anchored = 1.0
throwpass = 1 //You can throw objects over this, despite it's density.
var/parts = /obj/item/weapon/rack_parts
@@ -738,7 +744,8 @@
return
if(isrobot(user))
return
- user.drop_item()
+ if(!user.drop_item())
+ return
if (O.loc != src.loc)
step(O, get_dir(O, src))
return
@@ -751,8 +758,9 @@
return
if(isrobot(user))
return
- user.drop_item()
- if(W && W.loc) W.loc = src.loc
+ if(!(W.flags & ABSTRACT))
+ if(user.drop_item())
+ W.Move(loc)
return
/obj/structure/rack/meteorhit(obj/O as obj)
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index 3b82543e80a..a576c38295f 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -142,11 +142,11 @@ proc/trigger_armed_response_team(var/force = 0)
// there's only a certain chance a team will be sent
if(!prob(send_team_chance))
- command_alert("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "Central Command")
+ command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "Central Command")
can_call_ert = 0 // Only one call per round, ladies.
return
- command_alert("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "Central Command")
+ command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "Central Command")
can_call_ert = 0 // Only one call per round, gentleman.
send_emergency_team = 1
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 0a656b903fb..c84a24c12cb 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -249,8 +249,8 @@
if(old_opacity != W.opacity) //opacity has changed. Need to update surrounding lights
if(W.lighting_lumcount) //unless we're being illuminated, don't bother (may be buggy, hard to test)
- W.UpdateAffectingLights()
-
+ W.UpdateAffectingLights()
+
if (istype(W,/turf/simulated/floor))
W.RemoveLattice()
diff --git a/code/game/vehicles/spacepods/parts.dm b/code/game/vehicles/spacepods/parts.dm
index d682ef5240c..02624769364 100644
--- a/code/game/vehicles/spacepods/parts.dm
+++ b/code/game/vehicles/spacepods/parts.dm
@@ -6,5 +6,5 @@
name="Space Pod Core"
icon_state = "core"
construction_cost = list("iron"=5000,"uranium"=1000,"plasma"=5000)
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
origin_tech = "programming=2;materials=3;bluespace=2;engineering=3"
\ No newline at end of file
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 4505663b0c4..61ec3c862ee 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -120,18 +120,19 @@ var/global/normal_ooc_colour = "#002eb8"
log_ooc("(LOCAL) [mob.name]/[key] : [msg]")
var/list/heard = get_mobs_in_view(7, src.mob)
var/mob/S = src.mob
-
+
var/display_name = S.key
if(S.stat != DEAD)
display_name = S.name
-
+
// Handle non-admins
for(var/mob/M in heard)
if(!M.client)
continue
var/client/C = M.client
- if (C in admins)
- continue //they are handled after that
+ if(C in admins)
+ if(C.holder.rights | R_MENTOR)
+ continue //they are handled after that
if(C.prefs.toggles & CHAT_LOOC)
if(holder)
@@ -141,15 +142,16 @@ var/global/normal_ooc_colour = "#002eb8"
else
display_name = holder.fakekey
C << "LOOC: [display_name]: [msg]"
-
+
// Now handle admins
display_name = S.key
if(S.stat != DEAD)
display_name = "[S.name]/([S.key])"
-
+
for(var/client/C in admins)
- if(C.prefs.toggles & CHAT_LOOC)
- var/prefix = "(R)LOOC"
- if (C.mob in heard)
- prefix = "LOOC"
- C << "[prefix]: [display_name]: [msg]"
+ if(C.holder.rights | R_MENTOR)
+ if(C.prefs.toggles & CHAT_LOOC)
+ var/prefix = "(R)LOOC"
+ if (C.mob in heard)
+ prefix = "LOOC"
+ C << "[prefix]: [display_name]: [msg]"
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index f5d5998e24a..7cdd9579e13 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -77,7 +77,7 @@
num_admins_online++
- else if(R_MOD & C.holder.rights)
+ else if((R_MOD | R_MENTOR) & C.holder.rights)
modmsg += "\t[C] is a [C.holder.rank]"
if(isobserver(C.mob))
@@ -98,9 +98,9 @@
if(!C.holder.fakekey)
msg += "\t[C] is a [C.holder.rank]\n"
num_admins_online++
- else if (R_MOD & C.holder.rights)
+ else if ((R_MOD | R_MENTOR) & C.holder.rights)
modmsg += "\t[C] is a [C.holder.rank]\n"
num_mods_online++
- msg = "Current Admins ([num_admins_online]):\n" + msg + "\n Current Mentors ([num_mods_online]):\n" + modmsg
+ msg = "Current Admins ([num_admins_online]):\n" + msg + "\n Current Mods/Mentors ([num_mods_online]):\n" + modmsg
src << msg
diff --git a/code/modules/DetectiveWork/footprints_and_rag.dm b/code/modules/DetectiveWork/footprints_and_rag.dm
index 04df3a507e6..8b0cbcbe305 100644
--- a/code/modules/DetectiveWork/footprints_and_rag.dm
+++ b/code/modules/DetectiveWork/footprints_and_rag.dm
@@ -25,7 +25,7 @@
possible_transfer_amounts = list(5)
volume = 5
can_be_placed_into = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER | NOBLUDGEON
+ flags = OPENCONTAINER | NOBLUDGEON
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
if(ismob(target) && target.reagents && reagents.total_volume)
diff --git a/code/modules/DetectiveWork/scanner.dm b/code/modules/DetectiveWork/scanner.dm
index 38c65445bb0..d694e4c1645 100644
--- a/code/modules/DetectiveWork/scanner.dm
+++ b/code/modules/DetectiveWork/scanner.dm
@@ -8,7 +8,7 @@
icon_state = "forensic1"
w_class = 3.0
item_state = "electronic"
- flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
+ flags = CONDUCT | NOBLUDGEON
slot_flags = SLOT_BELT
var/scanning = 0
var/list/log = list()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index f4b35c40ba2..a5dc3d6ef4d 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -781,7 +781,7 @@ var/global/nologevent = 0
/datum/admins/proc/unprison(var/mob/M in mob_list)
set category = "Admin"
set name = "Unprison"
- if (M.z == 2)
+ if ((M.z in config.admin_levels))
M.loc = pick(latejoin)
message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]", 1)
log_admin("[key_name(usr)] has unprisoned [key_name(M)]")
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index a9afe87debf..d9f5d7d54ba 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -41,6 +41,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
+ if("mentor") rights |= R_MENTOR
admin_ranks[rank] = rights
previous_rights = rights
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 01aae828579..b4d24b90ec1 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -1,10 +1,8 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
// /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
- /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
- /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
+ /client/proc/deadmin_self /*destroys our own admin datum so we can play as a regular player*/
// /client/proc/check_antagonists, /*shows all antags*/
- /client/proc/cmd_mentor_check_new_players
// /client/proc/deadchat /*toggles deadchat on/off*/
)
var/list/admin_verbs_admin = list(
@@ -46,7 +44,6 @@ var/list/admin_verbs_admin = list(
/client/proc/toggleprayers, /*toggles prayers on/off*/
// /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
- /client/proc/secrets,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
@@ -56,7 +53,6 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_mod_say,
/datum/admins/proc/show_player_info,
/client/proc/free_slot, /*frees slot for chosen job*/
- /client/proc/cmd_admin_rejuvenate,
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/update_mob_sprite,
@@ -64,9 +60,7 @@ var/list/admin_verbs_admin = list(
/client/proc/man_up,
/client/proc/global_man_up,
/client/proc/delbook,
- /client/proc/event_manager_panel,
- /client/proc/empty_ai_core_toggle_latejoin,
- /client/proc/fax_panel
+ /client/proc/empty_ai_core_toggle_latejoin
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -99,6 +93,9 @@ var/list/admin_verbs_event = list(
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
/client/proc/response_team, // Response Teams admin verb
/client/proc/cmd_admin_create_centcom_report,
+ /client/proc/fax_panel,
+ /client/proc/secrets,
+ /client/proc/event_manager_panel
)
var/list/admin_verbs_spawn = list(
@@ -123,21 +120,7 @@ var/list/admin_verbs_server = list(
/client/proc/delbook,
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
- /client/proc/set_ooc,
-
- //Doubling of certain event verbs for senior admins
- /datum/admins/proc/access_news_network, /*allows access of newscasters*/
- /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
- /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
- /client/proc/toggle_random_events,
- /client/proc/toggle_ert_calling,
- /client/proc/one_click_antag,
- /client/proc/cmd_admin_change_custom_event,
- /client/proc/cmd_admin_create_centcom_report,
- /client/proc/cmd_admin_dress,
- /client/proc/editappear,
- /client/proc/response_team, // Response Teams admin verb
- /client/proc/nanomapgen_DumpImage
+ /client/proc/set_ooc
)
var/list/admin_verbs_debug = list(
/client/proc/cmd_admin_list_open_jobs,
@@ -167,7 +150,8 @@ var/list/admin_verbs_permissions = list(
/client/proc/edit_admin_permissions
)
var/list/admin_verbs_rejuv = list(
- /client/proc/respawn_character
+ /client/proc/respawn_character,
+ /client/proc/cmd_admin_rejuvenate
)
var/list/admin_verbs_mod = list(
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
@@ -182,9 +166,16 @@ var/list/admin_verbs_mod = list(
/client/proc/dsay,
/datum/admins/proc/show_player_panel,
/client/proc/jobbans,
+ /client/proc/debug_variables /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
// /client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/
)
+var/list/admin_verbs_mentor = list(
+ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
+ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/
+ /client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
+ /client/proc/cmd_mentor_check_new_players
+)
/client/proc/add_admin_verbs()
if(holder)
@@ -202,6 +193,7 @@ var/list/admin_verbs_mod = list(
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
if(holder.rights & R_MOD) verbs += admin_verbs_mod
+ if(holder.rights & R_MENTOR) verbs += admin_verbs_mentor
/client/proc/admin_ghost()
set category = "Admin"
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 082553f3092..49274720ed1 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -455,6 +455,16 @@
dat += "[mob_loc.loc] | "
else
dat += "| Head not found! |
"
+ if(ticker.mode.num_players_started() >= 30)
+ for(var/datum/mind/N in ticker.mode.get_extra_living_heads())
+ var/mob/M = N.current
+ if(M)
+ dat += "| [M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""] | "
+ dat += "PM | "
+ var/turf/mob_loc = get_turf_loc(M)
+ dat += "[mob_loc.loc] |
"
+ else
+ dat += "| Head not found! |
"
dat += ""
if(ticker.mode.name == "nations")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 7438f54195e..3dcd7895dbb 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -286,7 +286,7 @@
if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob )
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
if("human") M.change_mob_type( /mob/living/carbon/human/human , null, null, delmob )
- if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob )
+ if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob )
if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob )
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob )
if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob )
@@ -591,13 +591,13 @@
if(counter >= 5) //So things dont get squiiiiished!
jobs += ""
counter = 0
-
+
//Drone
if(jobban_isbanned(M, "Drone"))
jobs += "| Drone | "
else
jobs += "Drone | "
-
+
//pAI
if(jobban_isbanned(M, "pAI"))
jobs += "pAI | "
@@ -667,19 +667,19 @@
jobs += "[replacetext("Ninja", " ", " ")] | "
else
jobs += "[replacetext("Ninja", " ", " ")] | "
-
+
//Raider
if(jobban_isbanned(M, "raider") || isbanned_dept)
jobs += "[replacetext("Raider", " ", " ")] | "
else
jobs += "[replacetext("Raider", " ", " ")] | "
-
+
//Mutineer
if(jobban_isbanned(M, "mutineer") || isbanned_dept)
jobs += "[replacetext("Mutineer", " ", " ")] | "
else
jobs += "[replacetext("Mutineer", " ", " ")] | "
-
+
//Blob
if(jobban_isbanned(M, "blob") || isbanned_dept)
jobs += "[replacetext("Blob", " ", " ")] | "
@@ -698,12 +698,12 @@
jobs += "Dionaea Nymph | "
else
jobs += "Dionaea Nymph | "
-
+
//NPC
if(jobban_isbanned(M, "NPC"))
jobs += "NPC | "
else
- jobs += "NPC | "
+ jobs += "NPC | "
//ANTAG HUD
if(jobban_isbanned(M, "AntagHUD"))
@@ -1092,6 +1092,7 @@
message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]", 1)
H.monkeyize()
+
else if(href_list["corgione"])
if(!check_rights(R_SPAWN)) return
@@ -1141,7 +1142,7 @@
//strip their stuff and stick it in the crate
for(var/obj/item/I in M)
- M.u_equip(I)
+ M.unEquip(I)
if(I)
I.loc = locker
I.layer = initial(I.layer)
@@ -1162,7 +1163,7 @@
M << "\red You have been sent to the prison station!"
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
-
+
else if(href_list["sendbacktolobby"])
if(!check_rights(R_ADMIN))
return
@@ -1185,7 +1186,7 @@
var/mob/new_player/NP = new()
NP.ckey = M.ckey
- qdel(M)
+ qdel(M)
else if(href_list["tdome1"])
if(!check_rights(R_SERVER|R_EVENT)) return
@@ -1202,7 +1203,7 @@
return
for(var/obj/item/I in M)
- M.u_equip(I)
+ M.unEquip(I)
if(I)
I.loc = M.loc
I.layer = initial(I.layer)
@@ -1231,7 +1232,7 @@
return
for(var/obj/item/I in M)
- M.u_equip(I)
+ M.unEquip(I)
if(I)
I.loc = M.loc
I.layer = initial(I.layer)
@@ -1282,7 +1283,7 @@
return
for(var/obj/item/I in M)
- M.u_equip(I)
+ M.unEquip(I)
if(I)
I.loc = M.loc
I.layer = initial(I.layer)
@@ -1429,7 +1430,7 @@
foo += text("Is an AI | ")
else
foo += text("Make AI | ", src, M)
- if(M.z != 2)
+ if(!(M.z in config.admin_levels))
foo += text("Prison | ", src, M)
foo += text("Maze | ", src, M)
else
@@ -1597,9 +1598,9 @@
M.stuttering = 20
else if(href_list["CentcommReply"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
var/mob/living/carbon/human/H = locate(href_list["CentcommReply"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
@@ -1617,16 +1618,16 @@
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\""
else if(href_list["SyndicateReply"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
if(H.stat != 0)
usr << "The person you are trying to contact is not conscious."
- return
+ return
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
usr << "The person you are trying to contact is not wearing a headset"
return
@@ -1655,9 +1656,9 @@
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your HONKbrothers. Message as follows, HONK. [input]. Message ends, HONK.\""
else if(href_list["AdminFaxView"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
var/obj/item/fax = locate(href_list["AdminFaxView"])
if (istype(fax, /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = fax
@@ -1670,24 +1671,24 @@
//open a browse window listing the contents instead
var/data = ""
var/obj/item/weapon/paper_bundle/B = fax
-
+
for (var/page = 1, page <= B.amount + 1, page++)
var/obj/pageobj = B.contents[page]
data += "Page [page] - [pageobj.name]
"
-
+
usr << browse(data, "window=[B.name]")
else
usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]"
else if (href_list["AdminFaxViewPage"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
var/page = text2num(href_list["AdminFaxViewPage"])
var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"])
-
+
if (!bundle) return
-
+
if (istype(bundle.contents[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.contents[page]
P.show_content(src.owner, 1)
@@ -1695,11 +1696,11 @@
var/obj/item/weapon/photo/H = bundle.contents[page]
H.show(src.owner)
return
-
+
else if(href_list["AdminFaxCreate"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
var/mob/sender = locate(href_list["AdminFaxCreate"])
var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
var/faxtype = href_list["faxtype"]
@@ -1708,7 +1709,7 @@
var/notify
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(null) //hopefully the null loc won't cause trouble for us
-
+
if(!fax)
var/list/departmentoptions = alldepartments + "All Departments"
destination = input(usr, "To which department?", "Choose a department", "") as null|anything in departmentoptions
@@ -1718,10 +1719,11 @@
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
if(destination != "All Departments" && F.department == destination)
- fax = F
+ fax = F
+
var/input = input(src.owner, "Please enter a message to send a fax via secure connection. Use
for line breaks. Both pencode and HTML work.", "Outgoing message from Centcomm", "") as message|null
- if(!input)
+ if(!input)
del(P)
return
input = P.parsepencode(input) // Encode everything from pencode to html
@@ -1729,7 +1731,7 @@
var/customname = input(src.owner, "Pick a title for the fax.", "Fax Title") as text|null
if(!customname)
customname = "paper"
-
+
var/stampname
var/stamptype
var/stampvalue
@@ -1761,12 +1763,12 @@
else
del(P)
return
-
+
sendername = input(src.owner, "What organization does the fax come from? This determines the prefix of the paper (i.e. Central Command- Title). This is optional.", "Organization") as text|null
-
+
if(sender)
notify = alert(src.owner, "Would you like to inform the original sender that a fax has arrived?","Notify Sender","Yes","No")
-
+
// Create the reply message
if(sendername)
P.name = "[sendername]- [customname]"
@@ -1775,19 +1777,18 @@
P.info = input
P.update_icon()
P.x = rand(-2, 0)
- P.y = rand(-1, 2)
+ P.y = rand(-1, 2)
P.offset_x += P.x
P.offset_y += P.y
-
if(stamptype)
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
stampoverlay.pixel_x = P.x
stampoverlay.pixel_y = P.y
-
+
if(!P.ico)
P.ico = new
P.ico += "paper_stamp-[stampvalue]"
- stampoverlay.icon_state = "paper_stamp-[stampvalue]"
+ stampoverlay.icon_state = "paper_stamp-[stampvalue]"
if(stamptype == "icon")
if(!P.stamped)
@@ -1795,13 +1796,13 @@
P.stamped += /obj/item/weapon/stamp/centcom
P.overlays += stampoverlay
P.stamps += "
"
-
- else if(stamptype == "text")
+
+ else if(stamptype == "text")
if(!P.stamped)
P.stamped = new
P.stamped += /obj/item/weapon/stamp
P.overlays += stampoverlay
- P.stamps += "
[stampvalue]"
+ P.stamps += "
[stampvalue]"
if(destination != "All Departments")
if(!fax.receivefax(P))
@@ -1809,10 +1810,10 @@
return
else
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
- if(F.z == 1)
+ if((F.z in config.station_levels))
if(!F.receivefax(P))
src.owner << "\red Message transmission to [F.department] failed."
-
+
var/datum/fax/admin/A = new /datum/fax/admin()
A.name = P.name
A.from_department = faxtype
@@ -1825,7 +1826,7 @@
A.reply_to = reply_to
A.sent_by = usr
A.sent_at = world.time
-
+
src.owner << "\blue Message transmitted successfully."
if(notify == "Yes")
var/mob/living/carbon/human/H = sender
@@ -1833,16 +1834,16 @@
sender << "Your headset pings, notifying you that a reply to your fax has arrived."
if(sender)
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(sender)]: [input]")
- message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(sender)] (VIEW).", 1)
- else
+ message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(sender)] (VIEW).", 1)
+ else
log_admin("[key_name(src.owner)] sent a fax message to [destination]: [input]")
- message_admins("[key_name_admin(src.owner)] sent a fax message to [destination] (VIEW).", 1)
+ message_admins("[key_name_admin(src.owner)] sent a fax message to [destination] (VIEW).", 1)
return
-
+
else if(href_list["refreshfaxpanel"])
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN))
return
-
+
fax_panel(usr)
else if(href_list["jumpto"])
@@ -2103,11 +2104,11 @@
if(gravity_is_on)
log_admin("[key_name(usr)] toggled gravity on.", 1)
message_admins("\blue [key_name_admin(usr)] toggled gravity on.", 1)
- command_alert("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
+ command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
else
log_admin("[key_name(usr)] toggled gravity off.", 1)
message_admins("\blue [key_name_admin(usr)] toggled gravity off.", 1)
- command_alert("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
+ command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
if("wave")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","Meteor")
@@ -2144,12 +2145,12 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BLOB")
message_admins("[key_name_admin(usr)] has triggered a blob.")
- new /datum/game_mode/blob()
+ new /datum/game_mode/blob()
if("aliens")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","ALIEN")
message_admins("[key_name_admin(usr)] has triggered an alien infestation.")
- new /datum/event/alien_infestation()
+ new /datum/event/alien_infestation()
if("power")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","P")
@@ -2206,7 +2207,7 @@
for(var/mob/living/carbon/human/H in mob_list)
var/turf/loc = find_loc(H)
var/security = 0
- if(loc.z > 1 || prisonwarped.Find(H))
+ if(!(loc.z in config.station_levels) || prisonwarped.Find(H))
//don't warp them if they aren't ready or are already there
continue
@@ -2222,7 +2223,7 @@
if(istype(W, /datum/organ/external))
continue
//don't strip organs
- H.u_equip(W)
+ H.unEquip(W)
if (H.client)
H.client.screen -= W
if (W)
@@ -2519,7 +2520,7 @@
message_admins("[key_name_admin(usr)] made the floor LAVA! It'll last [length] seconds and it will deal [damage] damage to everyone.", 1)
for(var/turf/simulated/floor/F in world)
- if(F.z == 1)
+ if((F.z in config.station_levels))
F.name = "lava"
F.desc = "The floor is LAVA!"
F.overlays += "lava"
@@ -2544,7 +2545,7 @@
sleep(10)
for(var/turf/simulated/floor/F in world) // Reset everything.
- if(F.z == 1)
+ if((F.z in config.station_levels))
F.name = initial(F.name)
F.desc = initial(F.desc)
F.overlays.Cut()
@@ -2592,11 +2593,10 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","EgL")
for(var/obj/machinery/door/airlock/W in world)
- if(W.z == 1 && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison))
+ if((W.z in config.station_levels) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison))
W.req_access = list()
message_admins("[key_name_admin(usr)] activated Egalitarian Station mode")
- command_alert("Centcomm airlock control override activated. Please take this time to get acquainted with your coworkers.")
- world << sound('sound/AI/commandreport.ogg')
+ command_announcement.Announce("Centcomm airlock control override activated. Please take this time to get acquainted with your coworkers.", new_sound = 'sound/AI/commandreport.ogg')
if("dorf")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","DF")
@@ -2611,8 +2611,7 @@
message_admins("[key_name_admin(usr)] triggered an ion storm")
var/show_log = alert(usr, "Show ion message?", "Message", "Yes", "No")
if(show_log == "Yes")
- command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
- world << sound('sound/AI/ionstorm.ogg')
+ command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
if("carp")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","Crp")
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 3038b414334..2dd6ed7f892 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -21,7 +21,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
**/
var/msg
- var/list/type = list("Player Complaint","Question","Bug Report","Event")
+ var/list/type = list("Question","Player Complaint")
var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type
if(selected_type)
msg = input("Please enter your message.", "Admin Help", null, null) as text
@@ -100,11 +100,9 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
var/admin_number_afk = 0
var/list/modholders = list()
var/list/banholders = list()
- var/list/debugholders = list()
var/list/adminholders = list()
- var/list/eventholders = list()
for(var/client/X in admins)
- if(R_MOD & X.holder.rights)
+ if((R_MOD | R_MENTOR) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
modholders += X
@@ -114,10 +112,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
adminholders += X
if(R_BAN & X.holder.rights)
banholders += X
- if(R_DEBUG & X.holder.rights)
- debugholders += X
- if(R_EVENT & X.holder.rights)
- eventholders += X
switch(selected_type)
if("Question")
@@ -132,30 +126,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
- else if("Bug Report")
- if(debugholders.len)
- for(var/client/X in debugholders)
- if(X.prefs.sound & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- else
- if(adminholders.len)
- for(var/client/X in adminholders)
- if(X.prefs.sound & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- else if("Event")
- if(eventholders.len)
- for(var/client/X in eventholders)
- if(X.prefs.sound & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- else
- if(banholders.len)
- for(var/client/X in banholders)
- if(X.prefs.sound & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
else if("Player Complaint")
if(banholders.len)
for(var/client/X in banholders)
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 83f43ba6d9c..0b244992381 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -103,7 +103,7 @@
//mod PMs are maroon
//PMs sent from admins and mods display their rank
if(holder)
- if( holder.rights & R_MOD && !holder.rights & R_ADMIN )
+ if( holder.rights & (R_MOD | R_MENTOR) && !holder.rights & R_ADMIN )
recieve_color = "maroon"
else
recieve_color = "red"
@@ -204,20 +204,14 @@
var/list/modholders = list()
var/list/banholders = list()
- var/list/debugholders = list()
var/list/adminholders = list()
- var/list/eventholders = list()
for(var/client/X in admins)
- if(R_MOD & X.holder.rights)
+ if((R_MOD | R_MENTOR) & X.holder.rights)
modholders += X
if(R_ADMIN & X.holder.rights)
adminholders += X
- if(R_DEBUG & X.holder.rights)
- debugholders += X
if(R_BAN & X.holder.rights)
banholders += X
- if(R_EVENT & X.holder.rights)
- eventholders += X
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in admins)
@@ -227,20 +221,10 @@
if(X.key!=key && X.key!=C.key)
switch(type)
if("Question")
- if(X.holder.rights & R_MOD)
+ if(X.holder.rights & (R_MOD | R_MENTOR))
X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X
else if(!modholders.len && X.holder.rights & R_ADMIN)
X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Any admins in backup of mod question
- if("Bug Report")
- if(X.holder.rights & R_DEBUG)
- X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X
- else if(!debugholders.len && X.holder.rights & R_ADMIN)
- X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Any admins in backup of bug reports
- if("Event")
- if(X.holder.rights & R_EVENT)
- X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X
- else if(!eventholders.len && X.holder.rights & R_BAN)
- X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Quality in backup of Event
if("Player Complaint")
if(X.holder.rights & R_BAN)
X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //There should always be at least 1 person with +BAN on
@@ -273,6 +257,6 @@
for(var/client/X in admins)
if(X == src)
continue
- if((X.holder.rights & R_ADMIN) || (X.holder.rights & R_MOD))
+ if((X.holder.rights & R_ADMIN) || (X.holder.rights & (R_MOD | R_MENTOR)))
X << "PM: [key_name(src, X, 0)]->IRC-Admins: \blue [msg]"
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index f71ec7f6a48..5d7da87b77e 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -51,5 +51,4 @@
message_admins("\blue [key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
nologevent = 1
- log_admin("[key_name(usr)] used there can be only one.")
- world << sound('sound/music/highlander.ogg')
+ log_admin("[key_name(usr)] used there can be only one.")
\ No newline at end of file
diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm
index 90a3d0b8b8e..c909a6c7d3c 100644
--- a/code/modules/admin/verbs/onlyoneteam.dm
+++ b/code/modules/admin/verbs/onlyoneteam.dm
@@ -58,7 +58,6 @@
message_admins("\blue [key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
nologevent = 1
log_admin("[key_name(usr)] used dodgeball.")
- world << sound('sound/music/nowyouman.ogg')
/obj/item/weapon/beach_ball/dodgeball
name = "dodgeball"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 9b9c26f7a68..586ffbe3c0a 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -10,7 +10,7 @@
return
for(var/obj/item/W in M)
- M.drop_from_inventory(W)
+ M.unEquip(W)
log_admin("[key_name(usr)] made [key_name(M)] drop everything!")
message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1)
@@ -28,7 +28,7 @@
return
//strip their stuff before they teleport into a cell :downs:
for(var/obj/item/W in M)
- M.drop_from_inventory(W)
+ M.unEquip(W)
//teleport person to cell
M.Paralyse(5)
sleep(5) //so they black out before warping
@@ -209,8 +209,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
if(show_log == "Yes")
- command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
- world << sound('sound/AI/ionstorm.ogg')
+ command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
IonStorm(0)
feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -642,8 +641,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
if(show_log == "Yes")
- command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
- world << sound('sound/AI/ionstorm.ogg')
+ command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
@@ -686,7 +684,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
switch(alert("Should this be announced to the general population?",,"Yes","No"))
if("Yes")
- command_alert(input, customname);
+ command_announcement.Announce(input, customname);
if("No")
world << "\red New Nanotrasen Update available at all communication consoles."
@@ -914,7 +912,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set desc = "switches between 1x and custom views"
if(view == world.view)
- view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128)
+ view = input("Select view range:", "View Range", 9) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128)
else
view = world.view
@@ -941,7 +939,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel")
if(choice != "Confirm")
return
-
+
if(emergency_shuttle.no_escape)
choice = input("The shuttle will not be able to leave if you call it. Call anyway?") in list("Confirm", "Cancel")
if(choice != "Confirm")
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 06fe8d4be65..5e7cc3461ba 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -3,7 +3,7 @@
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
w_class = 2.0
m_amt = 100
g_amt = 0
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index d2d6225377f..2137d8b72c6 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -6,7 +6,7 @@
w_class = 3.0
throw_speed = 2
throw_range = 4
- flags = FPRINT | CONDUCT //Copied this from old code, so this may or may not be necessary
+ flags = CONDUCT //Copied this from old code, so this may or may not be necessary
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a plasma tank
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index c8a2b81facd..a39cd4dc97b 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
item_state = "assembly"
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
throwforce = 5
w_class = 2.0
throw_speed = 3
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 6b34017704c..20a606113b2 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -7,7 +7,7 @@
var/obj/item/device/radio/electropack/part2 = null
var/status = 0
w_class = 5.0
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
/obj/item/assembly/shock_kit/Destroy()
del(part1)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 7f2d7c8f731..4d24559ef0c 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -3,8 +3,8 @@
desc = "Used to remotely activate devices."
icon_state = "signaller"
item_state = "signaler"
- m_amt = 1000
- g_amt = 200
+ m_amt = 400
+ g_amt = 120
origin_tech = "magnets=1"
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm
index 06dfa6b5bcf..03509d38ac3 100644
--- a/code/modules/awaymissions/bluespaceartillery.dm
+++ b/code/modules/awaymissions/bluespaceartillery.dm
@@ -42,7 +42,7 @@
if (usr.stat || usr.restrained()) return
if(src.reload < 180) return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
- command_alert("Bluespace artillery fire detected. Brace for impact.")
+ command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1)
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
@@ -55,7 +55,7 @@
var/A
A = input("Area to jump bombard", "Open Fire", A) in teleportlocs
var/area/thearea = teleportlocs[A]
- command_alert("Bluespace artillery fire detected. Brace for impact.")
+ command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
spawn(30)
var/list/L = list()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 231ecd7b65b..dfb6b4092d2 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -2,22 +2,22 @@
var/list/preferences_datums = list()
-var/global/list/special_roles = list( //keep synced with the defines BE_* in setup.dm
+var/global/list/special_roles = list( //keep synced with the defines BE_* in setup.dm. THE ORDER MATTERS
//some autodetection here.
- "pAI" = 1, // 0
- "traitor" = IS_MODE_COMPILED("traitor"), // 1
- "changeling" = IS_MODE_COMPILED("changeling"), // 2
- "vampire" = IS_MODE_COMPILED("vampire"), // 3
- "revolutionary" = IS_MODE_COMPILED("revolution"), // 4
- "blob" = IS_MODE_COMPILED("blob"), // 5
- "operative" = IS_MODE_COMPILED("nuclear"), // 6
- "cultist" = IS_MODE_COMPILED("cult"), // 7
- "wizard" = IS_MODE_COMPILED("wizard"), // 8
- "raider" = IS_MODE_COMPILED("heist"), // 9
- "alien" = 1, // 10
- "ninja" = 1, // 11
- "mutineer" = IS_MODE_COMPILED("mutiny"), // 12
- "malf AI" = IS_MODE_COMPILED("malfunction") // 13
+ "traitor" = IS_MODE_COMPILED("traitor"), // 1 / 1
+ "operative" = IS_MODE_COMPILED("nuclear"), // 2 / 2
+ "changeling" = IS_MODE_COMPILED("changeling"), // 4 / 3
+ "wizard" = IS_MODE_COMPILED("wizard"), // 8 / 4
+ "malf AI" = IS_MODE_COMPILED("malfunction"), // 16 / 5
+ "revolutionary" = IS_MODE_COMPILED("revolution"), // 32 / 6
+ "alien" = 1, // 62 / 7
+ "pAI" = 1, // 128 / 8
+ "cultist" = IS_MODE_COMPILED("cult"), // 256 / 9
+ "ninja" = 1, // 512 / 10
+ "raider" = IS_MODE_COMPILED("heist"), // 1024 / 11
+ "vampire" = IS_MODE_COMPILED("vampire"), // 2048 / 12
+ "mutineer" = IS_MODE_COMPILED("mutiny"), // 4096 / 13
+ "blob" = IS_MODE_COMPILED("blob") // 8192 / 14
)
var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles
num2text(BE_PAI) = 0,
diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm
index 171353f7eb9..d50d5725bd2 100644
--- a/code/modules/client/preferences_mysql.dm
+++ b/code/modules/client/preferences_mysql.dm
@@ -28,7 +28,7 @@
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
default_slot = sanitize_integer(default_slot, 1, MAX_SAVE_SLOTS, initial(default_slot))
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
- sound = sanitize_integer(sound, 0, 65535, initial(toggles))
+ sound = sanitize_integer(sound, 0, 65535, initial(sound))
UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color))
UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha))
randomslot = sanitize_integer(randomslot, 0, 1, initial(randomslot))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 6574a027f3e..86905b08b8a 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -79,20 +79,20 @@
..()
return
- if(!canremove)
+ if(flags & NODROP)
return
var/obj/item/clothing/ears/O
if(slot_flags & SLOT_TWOEARS )
O = (H.l_ear == src ? H.r_ear : H.l_ear)
- user.u_equip(O)
+ user.unEquip(O)
if(!istype(src,/obj/item/clothing/ears/offear))
del(O)
O = src
else
O = src
- user.u_equip(src)
+ user.unEquip(src)
if (O)
user.put_in_hands(O)
@@ -267,7 +267,6 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
- flags = FPRINT | TABLEPASS
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING
@@ -281,7 +280,7 @@ BLIND // can't see anything
name = "Space helmet"
icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
item_state = "s_helmet"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
@@ -302,7 +301,7 @@ BLIND // can't see anything
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
slowdown = 2
@@ -321,7 +320,6 @@ BLIND // can't see anything
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/has_sensor = 1//For the crew computer 2 = unable to change mode
@@ -390,10 +388,10 @@ BLIND // can't see anything
if (!( usr.restrained() ) && !( usr.stat ) && ( over_object ))
switch(over_object.name)
if("r_hand")
- usr.u_equip(src)
+ usr.unEquip(src)
usr.put_in_r_hand(src)
if("l_hand")
- usr.u_equip(src)
+ usr.unEquip(src)
usr.put_in_l_hand(src)
src.add_fingerprint(usr)
return
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 4add6b97783..c787b1a17c5 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -35,7 +35,7 @@
desc = "An implanted replacement for a left eye with meson vision capabilities."
icon_state = "cybereye-green"
item_state = "eyepatch"
- canremove = 0
+ flags = NODROP
/obj/item/clothing/glasses/science
name = "Science Goggles"
@@ -88,7 +88,7 @@
desc = "An implanted replacement for a left eye with material vision capabilities."
icon_state = "cybereye-blue"
item_state = "eyepatch"
- canremove = 0
+ flags = NODROP
/obj/item/clothing/glasses/regular
name = "Prescription Glasses"
@@ -293,4 +293,4 @@
desc = "An implanted replacement for a left eye with thermal vision capabilities."
icon_state = "cybereye-red"
item_state = "eyepatch"
- canremove = 0
+ flags = NODROP
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 0ecd6fee1cf..42b985289a7 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -3,7 +3,6 @@
name = "hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
icon_state = "hardhat0_yellow"
- flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
var/brightness_on = 4 //luminosity when on
var/on = 0
@@ -48,7 +47,7 @@
item_state = "hardhat0_red"
_color = "red"
name = "firefighter helmet"
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = HEAD
@@ -58,7 +57,7 @@
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
_color = "white"
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = HEAD
@@ -76,7 +75,7 @@
_color = "atmos"
name = "atmospheric technician's firefighting helmet"
desc = "A firefighter's helmet, able to keep the user cool in any situation."
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 31c58f8a943..c8d1f5d32c5 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -2,7 +2,7 @@
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts."
icon_state = "helmet"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADBANGPROTECT
+ flags = HEADCOVERSEYES | HEADBANGPROTECT
item_state = "helmet"
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -25,7 +25,7 @@
desc = "It's a helmet specifically designed to protect against close range attacks."
icon_state = "riot"
item_state = "helmet"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|HEADBANGPROTECT
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | HEADBANGPROTECT
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEEARS
siemens_coefficient = 0.7
@@ -34,7 +34,7 @@
name = "\improper SWAT helmet"
desc = "They're often used by highly trained Swat Members."
icon_state = "swat"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "swat"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -54,7 +54,7 @@
name = "\improper Thunderdome helmet"
desc = "'Let the battle commence!'"
icon_state = "thunderdome"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
@@ -81,7 +81,7 @@
name = "gladiator helmet"
desc = "Ave, Imperator, morituri te salutant."
icon_state = "gladiator"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES | BLOCKHAIR
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 1
@@ -91,7 +91,7 @@ obj/item/clothing/head/helmet/redtaghelm
name = "red laser tag helmet"
desc = "They have chosen their own end."
icon_state = "redtaghelm"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "redtaghelm"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
@@ -101,7 +101,7 @@ obj/item/clothing/head/helmet/bluetaghelm
name = "blue laser tag helmet"
desc = "They'll need more men."
icon_state = "bluetaghelm"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "bluetaghelm"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index e45e2556c7c..2908b473709 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -6,7 +6,6 @@
icon_state = "chef"
item_state = "chef"
desc = "The commander in chef's head wear."
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
loose = 35 // why-a do people always push-a me over
@@ -15,7 +14,6 @@
name = "captain's hat"
icon_state = "captain"
desc = "It's good being the king."
- flags = FPRINT|TABLEPASS
item_state = "caphat"
siemens_coefficient = 0.9
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
@@ -32,7 +30,6 @@
name = "head of personnel's cap"
icon_state = "hopcap"
desc = "The symbol of true bureaucratic micromanagement."
- flags = FPRINT|TABLEPASS
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
@@ -42,7 +39,7 @@
name = "chaplain's hood"
desc = "It's hood that covers the head. It keeps you warm during the space winters."
icon_state = "chaplain_hood"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES | BLOCKHAIR
siemens_coefficient = 0.9
loose = 2
@@ -51,7 +48,7 @@
name = "nun hood"
desc = "Maximum piety in this star system."
icon_state = "nun_hood"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES | BLOCKHAIR
siemens_coefficient = 0.9
loose = 2
@@ -68,7 +65,6 @@
name = "beret"
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
loose = 16
@@ -77,7 +73,6 @@
name = "head of security cap"
desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
- flags = FPRINT | TABLEPASS
armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0)
/obj/item/clothing/head/HoS/beret
@@ -89,7 +84,6 @@
name = "warden's police hat"
desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts."
icon_state = "policehelm"
- flags = FPRINT | TABLEPASS
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/head/customs
@@ -98,14 +92,12 @@
icon_state = "customshelm"
item_state = "customshelm"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "beret_badge"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/warden
name = "warden's beret"
@@ -117,14 +109,13 @@
name = "engineering beret"
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
icon_state = "e_beret_badge"
- flags = FPRINT | TABLEPASS
//Medical
/obj/item/clothing/head/surgery
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
- flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
+ flags = BLOCKHEADHAIR
loose = 13
/obj/item/clothing/head/surgery/purple
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 4f07b12eb37..08afc9b5df9 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -4,7 +4,6 @@
name = "\improper CentComm. hat"
icon_state = "centcom"
desc = "It's good to be emperor."
- flags = FPRINT|TABLEPASS
item_state = "centhat"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -14,7 +13,6 @@
icon_state = "hairflower"
desc = "Smells nice."
item_state = "hairflower"
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/hairflower/purple
icon_state = "hairflowerp"
@@ -34,7 +32,6 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
- flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
loose = 70
@@ -42,21 +39,18 @@
name = "redcoat's hat"
icon_state = "redcoat"
desc = "'I guess it's a redhead.'"
- flags = FPRINT | TABLEPASS
loose = 45
/obj/item/clothing/head/mailman
name = "mailman's hat"
icon_state = "mailman"
desc = "'Right-on-time' mail service head wear."
- flags = FPRINT | TABLEPASS
loose = 65
/obj/item/clothing/head/plaguedoctorhat
name = "plague doctor's hat"
desc = "These were once used by Plague doctors. They're pretty much useless."
icon_state = "plaguedoctor"
- flags = FPRINT | TABLEPASS
permeability_coefficient = 0.01
siemens_coefficient = 0.9
loose = 30
@@ -65,14 +59,13 @@
name = "hastur's hood"
desc = "It's unspeakably stylish"
icon_state = "hasturhood"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ 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"
- flags = FPRINT|TABLEPASS
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.
@@ -81,7 +74,7 @@
icon_state = "syndicate-helm-black-red"
item_state = "syndicate-helm-black-red"
desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
loose = 15 // not a very good replica
@@ -90,7 +83,7 @@
name = "cueball helmet"
desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
icon_state = "cueball"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
item_state="cueball"
flags_inv = 0
loose = 0
@@ -100,7 +93,6 @@
desc = "It's an amish looking armored top hat."
icon_state = "tophat"
item_state = "that"
- flags = FPRINT|TABLEPASS
flags_inv = 0
loose = 70
@@ -110,7 +102,6 @@
desc = "It's a green bandana with some fine nanotech lining."
icon_state = "greenbandana"
item_state = "greenbandana"
- flags = FPRINT|TABLEPASS
flags_inv = 0
loose = 1
@@ -119,7 +110,7 @@
desc = "A helmet made out of a box."
icon_state = "cardborg_h"
item_state = "cardborg_h"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
loose = 20
@@ -128,7 +119,7 @@
desc = "fight for what's righteous!"
icon_state = "justicered"
item_state = "justicered"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
loose = 0
/obj/item/clothing/head/justice/blue
@@ -151,7 +142,6 @@
name = "rabbit ears"
desc = "Wearing these makes you looks useless, and only good for your sex appeal."
icon_state = "bunny"
- flags = FPRINT | TABLEPASS
loose = 4
/obj/item/clothing/head/flatcap
@@ -190,28 +180,24 @@
icon_state = "bowler_hat"
item_state = "bowler_hat"
desc = "For that industrial age look."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/beaverhat
name = "beaver hat"
icon_state = "beaver_hat"
item_state = "beaver_hat"
desc = "Like a top hat, but made of beavers."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/boaterhat
name = "boater hat"
icon_state = "boater_hat"
item_state = "boater_hat"
desc = "Goes well with celery."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fedora
name = "\improper fedora"
icon_state = "fedora"
item_state = "fedora"
desc = "A great hat ruined by being within fifty yards of you."
- flags = FPRINT|TABLEPASS
//TIPS FEDORA
/obj/item/clothing/head/fedora/verb/tip_fedora()
@@ -226,7 +212,6 @@
icon_state = "fez"
item_state = "fez"
desc = "Put it on your monkey, make lots of cash money."
- flags = FPRINT|TABLEPASS
//end bs12 hats
@@ -235,7 +220,7 @@
desc = "Eeeee~heheheheheheh!"
icon_state = "witch"
item_state = "witch"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0
loose = 1
@@ -244,7 +229,7 @@
desc = "Bkaw!"
icon_state = "chickenhead"
item_state = "chickensuit"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0
/obj/item/clothing/head/corgi
@@ -252,7 +237,7 @@
desc = "Woof!"
icon_state = "corgihead"
item_state = "chickensuit"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0
/obj/item/clothing/head/bearpelt
@@ -260,7 +245,7 @@
desc = "Fuzzy."
icon_state = "bearpelt"
item_state = "bearpelt"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0
loose = 0 // grrrr
@@ -269,7 +254,7 @@
icon_state = "xenos"
item_state = "xenos_helm"
desc = "A helmet made out of chitinous alien hide."
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
@@ -278,7 +263,6 @@
icon_state = "crown"
item_state = "crown"
desc = "A gliterring bananium crown with spessjewels in it. Swaggy."
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/fedora
@@ -300,7 +284,7 @@
desc = "The typical clown soldier's helmet."
icon_state = "stalhelm"
item_state = "stalhelm"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEEARS
/obj/item/clothing/head/panzer
@@ -308,14 +292,14 @@
desc = "The softcap worn by HONK Mech pilots."
icon_state = "panzercap"
item_state = "panzercap"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
/obj/item/clothing/head/naziofficer
name = "Clown Officer Cap"
desc = "The peaked clown officer's cap, disturbingly similar to the warden's."
icon_state = "officercap"
item_state = "officercap"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEEARS
/obj/item/clothing/head/beret/purple
@@ -323,19 +307,16 @@
desc = " A purple beret, with a small golden crescent moon sewn onto it."
icon_state = "purpleberet"
item_state = "purpleberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/officer
name = "officers beret"
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the Nanotrasen security forces, announcing to the world that the wearer is a defender of Nanotrasen."
icon_state = "centcomofficerberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield—a cobalt kite shield with an engraved sword—of the Nanotrasen security forces, worn only by those captaining a vessel of the Nanotrasen Navy."
icon_state = "centcomcaptain"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/sombrero
name = "sombrero"
@@ -354,4 +335,4 @@
icon_state = "shamebrero"
item_state = "shamebrero"
desc = "Once it's on, it never comes off."
- canremove = 0
\ No newline at end of file
+ flags = NODROP
\ No newline at end of file
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 80f321c4faf..92d71afc888 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -15,7 +15,7 @@
name = "welding helmet"
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
icon_state = "welding"
- flags = (FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH)
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
m_amt = 1750
g_amt = 400
@@ -60,7 +60,7 @@
name = "cake-hat"
desc = "It's tasty looking!"
icon_state = "cake0"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
var/onfire = 0.0
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
@@ -128,7 +128,7 @@
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
_color = "pumpkin"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
action_button_name = "Toggle Pumpkin Light"
@@ -143,7 +143,6 @@
icon_state = "hardhat0_reindeer"
item_state = "hardhat0_reindeer"
_color = "reindeer"
- flags = FPRINT | TABLEPASS
flags_inv = 0
action_button_name = "Toggle Nose Light"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -157,7 +156,6 @@
name = "kitty ears"
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
- flags = FPRINT | TABLEPASS
var/icon/mob
siemens_coefficient = 1.5
loose = 33
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 1020f95c79c..1f88aaa231c 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -2,7 +2,6 @@
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow colour."
icon_state = "cargosoft"
- flags = FPRINT|TABLEPASS
item_state = "helmet"
_color = "cargo"
var/flipped = 0
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index 1c84e97df5d..169722cac1e 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -3,7 +3,7 @@
desc = "LOADSAMONEY"
icon_state = "balaclava"
item_state = "balaclava"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
species_fit = list("Vox")
@@ -15,7 +15,7 @@
desc = "Worn by robust fighters, flying high to defeat their foes!"
icon_state = "luchag"
item_state = "luchag"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 3.0
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index 25aff648f63..1dc78de5017 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -3,7 +3,7 @@
name = "breath mask"
icon_state = "breath"
item_state = "breath"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKINTERNALS
+ flags = MASKCOVERSMOUTH | MASKINTERNALS
w_class = 2
gas_transfer_coefficient = 0.10
permeability_coefficient = 0.50
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 2ad9f030cf2..c728f0d88bb 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -2,7 +2,7 @@
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply."
icon_state = "gas_alt"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0
item_state = "gas_alt"
@@ -19,7 +19,7 @@
name = "bane mask"
desc = "Only when the station is in flames, do you have my permission to robust."
icon_state = "bane_mask"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0
item_state = "bane_mask"
@@ -95,7 +95,7 @@
icon_state = "clown"
item_state = "clown_hat"
species_fit = list("Vox")
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
@@ -118,7 +118,7 @@
desc = "Some pranksters are truly magical."
icon_state = "wizzclown"
item_state = "wizzclown"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
/obj/item/clothing/mask/gas/virusclown_hat
name = "clown wig and mask"
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index b1f7ba41c3b..2639cacaa5d 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -3,7 +3,7 @@
desc = "To stop that awful noise."
icon_state = "muzzle"
item_state = "muzzle"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
species_fit = list("Vox")
@@ -31,7 +31,7 @@
icon_state = "sterile"
item_state = "sterile"
w_class = 1
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
@@ -43,7 +43,6 @@
name = "fake moustache"
desc = "Warning: moustache is fake."
icon_state = "fake-moustache"
- flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
//scarves (fit in in mask slot)
@@ -53,7 +52,7 @@
desc = "A blue neck scarf."
icon_state = "blueneckscarf"
item_state = "blueneckscarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -62,7 +61,7 @@
desc = "A red and white checkered neck scarf."
icon_state = "redwhite_scarf"
item_state = "redwhite_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -71,7 +70,7 @@
desc = "A green neck scarf."
icon_state = "green_scarf"
item_state = "green_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -80,7 +79,7 @@
desc = "A stealthy, dark scarf."
icon_state = "ninja_scarf"
item_state = "ninja_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
siemens_coefficient = 0
@@ -90,7 +89,7 @@
desc = "A rubber pig mask."
icon_state = "pig"
item_state = "pig"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 0.9
@@ -101,7 +100,7 @@
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
icon_state = "horsehead"
item_state = "horsehead"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 0.9
@@ -112,7 +111,7 @@
/obj/item/clothing/mask/horsehead/equipped(mob/user, slot)
- if(!canremove) //cursed masks only
+ if(flags & NODROP) //cursed masks only
originalname = user.real_name
if(!user.real_name || user.real_name == "Unknown")
user.real_name = "A Horse With No Name" //it felt good to be out of the rain
@@ -121,12 +120,12 @@
..()
/obj/item/clothing/mask/horsehead/dropped() //this really shouldn't happen, but call it extreme caution
- if(!canremove)
+ if(flags & NODROP)
goodbye_horses(loc)
..()
/obj/item/clothing/mask/horsehead/Destroy()
- if(!canremove)
+ if(flags & NODROP)
goodbye_horses(loc)
..()
@@ -150,4 +149,4 @@
icon_state = "pennywise_mask"
item_state = "pennywise_mask"
species_fit = list("Vox")
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | BLOCKHAIR
diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm
index f697432485f..3b85dd5299b 100644
--- a/code/modules/clothing/spacesuits/alien.dm
+++ b/code/modules/clothing/spacesuits/alien.dm
@@ -204,7 +204,7 @@
if(src.magpulse)
flags &= ~NOSLIP
magpulse = 0
- canremove = 1
+ flags |= NODROP
user << "You relax your deathgrip on the flooring."
else
//make sure these can only be used when equipped.
@@ -218,7 +218,7 @@
flags |= NOSLIP
magpulse = 1
- canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly.
+ flags &= ~NODROP //kinda hard to take off magclaws when you are gripping them tightly.
user << "You dig your claws deeply into the flooring, bracing yourself."
user << "It would be hard to take off the [src] without relaxing your grip first."
@@ -229,7 +229,7 @@
user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.")
flags &= ~NOSLIP
magpulse = 0
- canremove = 1
+ flags &= ~NODROP
/obj/item/clothing/shoes/magboots/vox/examine()
set src in view()
@@ -267,13 +267,13 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Plasmaman")
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | PLASMAGUARD
+ flags = STOPSPRESSUREDMAGE | PLASMAGUARD
icon_state = "plasmaman_suit"
item_state = "plasmaman_suit"
/obj/item/clothing/head/helmet/space/plasmaman
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
species_restricted = list("Plasmaman")
icon_state = "plasmaman_helmet0"
diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm
index fc25ace5154..9e581c1519e 100644
--- a/code/modules/clothing/spacesuits/captain.dm
+++ b/code/modules/clothing/spacesuits/captain.dm
@@ -4,7 +4,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE|HEADCOVERSMOUTH
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE|HEADCOVERSMOUTH
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -18,7 +18,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
+ flags = STOPSPRESSUREDMAGE | ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
slowdown = 1.5
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index f1875e34de1..4d6035ba2fe 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -139,9 +139,9 @@
if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos))
user << "\[ ok \] Mounting /dev/helmet"
helmet = user.head
- helmet.canremove = 0
+ helmet.flags |= NODROP
helmet.suit = src
- src.canremove = 0
+ src.flags |= NODROP
user << "\[ ok \] Starting brainwave scanner"
user << "\[ ok \] Starting ui display driver"
user << "\[ ok \] Initializing chronowalk4-view"
@@ -169,11 +169,11 @@
user << "\[ ok \] Stopping ui display driver"
user << "\[ ok \] Stopping brainwave scanner"
user << "\[ ok \] Unmounting /dev/helmet"
- helmet.canremove = 1
+ helmet.flags &= ~NODROP
helmet.suit = null
helmet = null
user << "logout"
- src.canremove = 1
+ src.flags &= ~NODROP
cooldown = world.time + cooldowntime * 1.5
activated = 0
activating = 0
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 75d24d2d781..5379e5e77ca 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -64,7 +64,7 @@
name = "Santa's hat"
desc = "Ho ho ho. Merrry X-mas!"
icon_state = "santahat"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
/obj/item/clothing/suit/space/santa
name = "Santa's suit"
@@ -72,7 +72,7 @@
icon_state = "santa"
item_state = "santa"
slowdown = 0
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
+ flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE
allowed = list(/obj/item) //for stuffing exta special presents
@@ -83,7 +83,7 @@
icon_state = "pirate"
item_state = "pirate"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
siemens_coefficient = 0.9
/obj/item/clothing/suit/space/pirate
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 4c593b49866..af296490df3 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -112,7 +112,7 @@
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
H.equip_to_slot(helmet, slot_head)
- helmet.canremove = 0
+ helmet.flags |= NODROP
if(attached_boots && boots)
if(H.shoes)
@@ -121,7 +121,7 @@
M << "Your suit's boots deploy with a hiss."
boots.loc = H
H.equip_to_slot(boots, slot_shoes)
- boots.canremove = 0
+ boots.flags |= NODROP
/obj/item/clothing/suit/space/rig/dropped()
..()
@@ -132,16 +132,16 @@
H = helmet.loc
if(istype(H))
if(helmet && H.head == helmet)
- helmet.canremove = 1
- H.drop_from_inventory(helmet)
+ helmet.flags &= ~NODROP
+ H.unEquip(helmet)
helmet.loc = src
if(boots)
H = boots.loc
if(istype(H))
if(boots && H.shoes == boots)
- boots.canremove = 1
- H.drop_from_inventory(boots)
+ boots.flags &= ~NODROP
+ H.unEquip(boots)
boots.loc = src
/*
@@ -206,8 +206,8 @@
if(H.wear_suit != src) return
if(H.head == helmet)
- helmet.canremove = 1
- H.drop_from_inventory(helmet)
+ helmet.flags &= ~NODROP
+ H.unEquip(helmet)
helmet.loc = src
H << "\blue You retract your hardsuit helmet."
else
@@ -218,7 +218,7 @@
helmet.loc = H
helmet.pickup(H)
H.equip_to_slot(helmet, slot_head)
- helmet.canremove = 0
+ helmet.flags |= NODROP
H << "\blue You deploy your hardsuit helmet, sealing you off from the world."
/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/user as mob)
@@ -508,5 +508,5 @@
name = "singuloth knight's armor"
desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium."
item_state = "singuloth_hardsuit"
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 100)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 217f35eb4ed..c642aed8b20 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -2,7 +2,6 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
- flags = FPRINT | TABLEPASS
cold_protection = UPPER_TORSO|LOWER_TORSO
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = UPPER_TORSO|LOWER_TORSO
@@ -16,7 +15,7 @@
icon_state = "armor"
item_state = "armor"
blood_overlay_type = "armor"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/combat
@@ -25,7 +24,7 @@
icon_state = "armor-combat"
item_state = "bulletproof"
blood_overlay_type = "armor"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/security
@@ -146,7 +145,7 @@
icon_state = "detective-armor"
item_state = "armor"
blood_overlay_type = "armor"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
@@ -160,7 +159,6 @@
item_state = "reactiveoff"
blood_overlay_type = "armor"
slowdown = 1
- flags = FPRINT | TABLEPASS
icon_action_button = "reactiveoff"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 18025e077e4..4527c6395c2 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -4,7 +4,7 @@
icon_state = "bio"
desc = "A hood that protects the head and face from biological comtaminants."
permeability_coefficient = 0.01
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
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
@@ -18,7 +18,7 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index dcc01a18cab..8672b135934 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -48,7 +48,7 @@
item_state = "bio_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
species_fit = list("Vox")
sprite_sheets = list(
@@ -136,7 +136,7 @@
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index f2c6ab9eb88..ee53f0293e4 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -36,14 +36,12 @@
desc = "Yarr."
icon_state = "pirate_old"
item_state = "pirate_old"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/pirate_black
name = "black pirate coat"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/hgpirate
@@ -51,7 +49,6 @@
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
- flags = FPRINT | TABLEPASS
flags_inv = HIDEJUMPSUIT
@@ -60,7 +57,7 @@
desc = "Suit for a cyborg costume."
icon_state = "death"
item_state = "death"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
fire_resist = T0C+5200
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -70,7 +67,6 @@
desc = "A Nazi great coat"
icon_state = "nazi"
item_state = "nazi"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/johnny_coat
@@ -78,7 +74,6 @@
desc = "Johnny~~"
icon_state = "johnny"
item_state = "johnny"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/justice
@@ -86,7 +81,6 @@
desc = "this pretty much looks ridiculous"
icon_state = "justice"
item_state = "justice"
- flags = FPRINT | TABLEPASS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -95,7 +89,6 @@
desc = "This robe commands authority."
icon_state = "judge"
item_state = "judge"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash)
flags_inv = HIDEJUMPSUIT
@@ -124,7 +117,6 @@
item_state = "syndicate-black-red"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
- flags = FPRINT | TABLEPASS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -215,7 +207,7 @@
desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseperable. Literally."
icon_state = "ponchoshame"
item_state = "ponchoshame"
- canremove = 0
+ flags = NODROP
/*
* Misc
@@ -228,7 +220,7 @@
item_state = "straight_jacket"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/suit/ianshirt
name = "worn shirt"
@@ -282,21 +274,18 @@
desc = "A long, thick black leather coat."
icon_state = "leathercoat"
item_state = "leathercoat"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/browncoat
name = "brown leather coat"
desc = "A long, brown leather coat."
icon_state = "browncoat"
item_state = "browncoat"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/neocoat
name = "black coat"
desc = "A flowing, black coat."
icon_state = "neocoat"
item_state = "neocoat"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/browntrenchcoat
name = "brown trench coat"
@@ -318,7 +307,6 @@
desc = "A cream coloured, genteel suit."
icon_state = "creamsuit"
item_state = "creamsuit"
- flags = FPRINT | TABLEPASS
//stripper
@@ -412,7 +400,7 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
@@ -425,7 +413,7 @@
icon_state = "mercy_hood"
item_state = "mercy_hood"
permeability_coefficient = 0.01
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
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
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index c50030e5a86..ca86eb92755 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -21,7 +21,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -55,7 +55,7 @@
name = "bomb hood"
desc = "Use in case of bomb."
icon_state = "bombsuit"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
cold_protection = HEAD
@@ -74,7 +74,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 2
armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0)
@@ -103,7 +102,7 @@
name = "Radiation Hood"
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
loose = 8
diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm
index 12508cc5328..a009c662f4f 100644
--- a/code/modules/clothing/under/accessories/holster.dm
+++ b/code/modules/clothing/under/accessories/holster.dm
@@ -17,7 +17,7 @@
return 0
else
return 1
-
+
/obj/item/clothing/accessory/holster/attack_self()
var/holsteritem = usr.get_active_hand()
if(!holstered)
@@ -40,7 +40,7 @@
return
holstered = W
- user.drop_from_inventory(holstered)
+ user.unEquip(holstered)
holstered.loc = src
holstered.add_fingerprint(user)
user.visible_message("[user] holsters the [holstered].", "You holster the [holstered].")
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index dc292acf7e3..b5f276c2539 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -15,7 +15,7 @@
icon_state = "black"
item_state = "bl_suit"
_color = "black"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
@@ -29,17 +29,17 @@
icon_state = "blue"
item_state = "b_suit"
_color = "blue"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/blue/dodgeball
- canremove = 0
+ flags = ONESIZEFITSALL | NODROP
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
_color = "green"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
@@ -47,7 +47,7 @@
icon_state = "grey"
item_state = "gy_suit"
_color = "grey"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
/obj/item/clothing/under/color/orange
@@ -56,7 +56,7 @@
icon_state = "orange"
item_state = "o_suit"
_color = "orange"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/orange/prison
name = "orange jumpsuit"
@@ -66,7 +66,7 @@
_color = "orange"
has_sensor = 2
sensor_mode = 3
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
@@ -74,31 +74,31 @@
icon_state = "pink"
item_state = "p_suit"
_color = "pink"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
_color = "red"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/red/dodgeball
- canremove = 0
+ flags = ONESIZEFITSALL | NODROP
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
_color = "white"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
_color = "yellow"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
@@ -115,7 +115,7 @@
name = "aqua jumpsuit"
icon_state = "aqua"
_color = "aqua"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/purple
name = "purple jumpsuit"
@@ -142,13 +142,12 @@
name = "light brown jumpsuit"
icon_state = "lightbrown"
_color = "lightbrown"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/brown
name = "brown jumpsuit"
icon_state = "brown"
_color = "brown"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/yellowgreen
name = "yellow green jumpsuit"
@@ -159,7 +158,7 @@
name = "dark blue jumpsuit"
icon_state = "darkblue"
_color = "darkblue"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/color/lightred
name = "light red jumpsuit"
@@ -170,4 +169,4 @@
name = "dark red jumpsuit"
icon_state = "darkred"
_color = "darkred"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 48085322d6f..6510fff5094 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -6,7 +6,7 @@
icon_state = "ba_suit"
item_state = "ba_suit"
_color = "ba_suit"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -18,7 +18,7 @@
icon_state = "captain"
item_state = "caparmor"
_color = "captain"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -31,7 +31,7 @@
icon_state = "qm"
item_state = "lb_suit"
_color = "qm"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -44,7 +44,7 @@
icon_state = "cargotech"
item_state = "lb_suit"
_color = "cargo"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -57,7 +57,7 @@
icon_state = "chaplain"
item_state = "bl_suit"
_color = "chapblack"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -69,7 +69,7 @@
name = "chef's uniform"
icon_state = "chef"
_color = "chef"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -82,7 +82,7 @@
icon_state = "clown"
item_state = "clown"
_color = "clown"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/head_of_personnel
@@ -91,7 +91,7 @@
icon_state = "hop"
item_state = "b_suit"
_color = "hop"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -103,7 +103,6 @@
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
_color = "hopwhimsy"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/hydroponics
@@ -113,7 +112,7 @@
item_state = "g_suit"
_color = "hydroponics"
permeability_coefficient = 0.50
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -126,7 +125,7 @@
icon_state = "internalaffairs"
item_state = "internalaffairs"
_color = "internalaffairs"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -139,7 +138,7 @@
icon_state = "janitor"
_color = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -149,7 +148,7 @@
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/lawyer/black
icon_state = "lawyer_black"
@@ -226,7 +225,7 @@
icon_state = "red_suit"
item_state = "red_suit"
_color = "red_suit"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -239,7 +238,7 @@
icon_state = "mime"
item_state = "mime"
_color = "mime"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/miner
@@ -248,7 +247,7 @@
icon_state = "miner"
item_state = "miner"
_color = "miner"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index a0539901c5d..75e8f01d7e9 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -6,7 +6,7 @@
item_state = "g_suit"
_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -18,7 +18,7 @@
icon_state = "atmos"
item_state = "atmos_suit"
_color = "atmos"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -31,7 +31,7 @@
item_state = "engi_suit"
_color = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -43,7 +43,7 @@
icon_state = "robotics"
item_state = "robotics"
_color = "robotics"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index 1332f80c6eb..93baad2f1a4 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -8,7 +8,7 @@
item_state = "g_suit"
_color = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -22,7 +22,7 @@
_color = "toxinswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -36,7 +36,7 @@
_color = "chemistrywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -53,7 +53,7 @@
_color = "cmo"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -67,7 +67,7 @@
_color = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -81,7 +81,7 @@
_color = "virologywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -95,7 +95,7 @@
_color = "nursesuit"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -109,7 +109,7 @@
_color = "nurse"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -123,7 +123,7 @@
_color = "orderly"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -137,7 +137,7 @@
_color = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -148,7 +148,7 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
_color = "scrubsblue"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -159,7 +159,7 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
_color = "scrubsgreen"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -170,7 +170,7 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
_color = "scrubspurple"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -181,7 +181,7 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is as dark as an emo's poetry."
icon_state = "scrubsblack"
_color = "scrubsblack"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -196,7 +196,7 @@
_color = "paramedic"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi'
@@ -208,7 +208,7 @@
icon_state = "psych"
item_state = "w_suit"
_color = "psych"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
@@ -216,7 +216,7 @@
icon_state = "psychturtle"
item_state = "b_suit"
_color = "psychturtle"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/*
@@ -230,7 +230,7 @@
_color = "genetics_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/chemist_new
desc = "It's made of a special fiber which provides minor protection against biohazards."
@@ -240,7 +240,7 @@
_color = "chemist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/scientist_new
desc = "Made of a special fiber that gives special protection against biohazards and small explosions."
@@ -250,7 +250,7 @@
_color = "scientist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/virologist_new
desc = "Made of a special fiber that gives increased protection against biohazards."
@@ -260,4 +260,4 @@
_color = "virologist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index 807f5322056..a0f6d97ad14 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -15,7 +15,7 @@
item_state = "r_suit"
_color = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security
@@ -25,7 +25,7 @@
item_state = "r_suit"
_color = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/dispatch
@@ -35,7 +35,7 @@
item_state = "dispatch"
_color = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security2
@@ -45,7 +45,7 @@
item_state = "r_suit"
_color = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
@@ -68,7 +68,7 @@
item_state = "det"
_color = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.9
/*
@@ -81,7 +81,7 @@
item_state = "r_suit"
_color = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
@@ -97,7 +97,7 @@
item_state = "jensen"
_color = "jensen"
siemens_coefficient = 0.6
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
//Paradise Station
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 4e7296321da..cded8d082e6 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -31,7 +31,6 @@
name = "amish suit"
icon_state = "sl_suit"
_color = "sl_suit"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/waiter
name = "waiter's outfit"
@@ -39,7 +38,6 @@
icon_state = "waiter"
item_state = "waiter"
_color = "waiter"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
@@ -83,7 +81,7 @@
item_state = "g_suit"
_color = "officer"
displays_id = 0
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/centcom/captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
@@ -100,7 +98,7 @@
item_state = "g_suit"
_color = "officer"
displays_id = 0
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/centcom/representative
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.S.S. Cyberiad\" on the left shounder."
@@ -109,7 +107,7 @@
item_state = "g_suit"
_color = "officer"
displays_id = 0
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
@@ -120,7 +118,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -135,7 +132,6 @@
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -149,7 +145,6 @@
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
_color = "owl"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index 92fc9f3f131..f5280399838 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -2,7 +2,6 @@
name = "athletic shorts"
desc = "95% Polyester, 5% Spandex!"
gender = PLURAL
- flags = FPRINT | TABLEPASS
body_parts_covered = LOWER_TORSO
/obj/item/clothing/under/shorts/red
diff --git a/code/modules/computer3/computers/HolodeckControl.dm b/code/modules/computer3/computers/HolodeckControl.dm
index e650185f855..d53946fa12c 100644
--- a/code/modules/computer3/computers/HolodeckControl.dm
+++ b/code/modules/computer3/computers/HolodeckControl.dm
@@ -154,7 +154,7 @@
if(isobj(obj))
var/mob/M = obj.loc
if(ismob(M))
- M.u_equip(obj)
+ M.unEquip(obj)
M.update_icons() //so their overlays update
if(!silent)
diff --git a/code/modules/computer3/computers/communications.dm b/code/modules/computer3/computers/communications.dm
index 37437fdf6aa..dd22bde09ec 100644
--- a/code/modules/computer3/computers/communications.dm
+++ b/code/modules/computer3/computers/communications.dm
@@ -42,6 +42,12 @@
var/status_display_freq = "1435"
var/stat_msg1
var/stat_msg2
+
+ var/datum/announcement/priority/crew_announcement = new
+
+ New()
+ ..()
+ crew_announcement.newscast = 1
Reset()
..()
@@ -53,7 +59,7 @@
Topic(var/href, var/list/href_list)
if(!interactable() || !computer.radio || ..(href,href_list) )
return
- if (computer.z > 1)
+ if (!(computer.z in config.station_levels))
usr << "\red Unable to establish a connection: \black You're too far away from the station!"
return
@@ -68,9 +74,11 @@
authenticated = 1
if(access_captain in I.GetAccess())
authenticated = 2
+ crew_announcement.announcer = GetNameAndAssignmentFromId(I)
if("logout" in href_list)
authenticated = 0
+ crew_announcement.announcer = ""
if("swipeidseclevel" in href_list)
var/mob/M = usr
@@ -102,13 +110,13 @@
usr << "You need to swipe your ID."
if("announce" in href_list)
if(authenticated==2)
- if(message_cooldown) return
- var/input = stripped_input(usr, "Please choose a message to announce to the station crew.", "What?")
+ if(message_cooldown)
+ usr << "Please allow at least one minute to pass between announcements"
+ return
+ var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement")
if(!input || !interactable())
return
- captain_announce(input)//This should really tell who is, IE HoP, CE, HoS, RD, Captain
- log_say("[key_name(usr)] has made a captain announcement: [input]")
- message_admins("[key_name_admin(usr)] has made a captain announcement.", 1)
+ crew_announcement.Announce(input)
message_cooldown = 1
spawn(600)//One minute cooldown
message_cooldown = 0
diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm
index f193b071396..477f7c7f972 100644
--- a/code/modules/computer3/computers/security.dm
+++ b/code/modules/computer3/computers/security.dm
@@ -38,7 +38,7 @@
proc/authenticate()
- if(access_security in scan.access || access_forensics_lockers in scan.access )
+ if((access_security in scan.access) || (access_forensics_lockers in scan.access) )
return 1
if(istype(usr,/mob/living/silicon/ai))
return 1
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 07eb3da5f3f..590e90d9231 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -18,7 +18,6 @@
icon= 'icons/obj/clothing/hats.dmi'
icon_state = "hairflowerp"
item_state = "hairflowerp"
- flags = FPRINT|TABLEPASS
/obj/item/clothing/under/fluff/WornTurtleneck // DaveTheHeadcrab: Makkota Atani
name = "Worn Combat Turtleneck"
@@ -46,7 +45,6 @@
name = "royal marines commando beret"
desc = "Dark Green beret with an old insignia on it."
icon_state = "sparkyninja_beret"
- flags = FPRINT | TABLEPASS
//////////////////////////////////
////////// Fluff Items ///////////
@@ -413,7 +411,6 @@
item_state = "ciglit"
w_class = 1
body_parts_covered = null
- flags = FPRINT|TABLEPASS
//Strange penlight, Nerezza: Asher Spock
@@ -777,7 +774,6 @@
_color = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
- flags = FPRINT | TABLEPASS
//Suit roll-down toggle.
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
@@ -818,7 +814,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "flagmask"
item_state = "flagmask"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
*/
@@ -828,7 +824,6 @@
desc = "A silver and emerald shamrock pendant. It has the initials \"M.K.\" engraved on the back."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mara_kilpatrick_1"
- flags = FPRINT|TABLEPASS
w_class = 1
////// Small locket - Altair An-Nasaqan - Serithi
@@ -841,7 +836,6 @@
item_state = "altair_locket"
_color = "altair_locket"
slot_flags = 0
- flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
@@ -855,7 +849,6 @@
item_state = "konaahirano"
_color = "konaahirano"
slot_flags = 0
- flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
var/obj/item/held //Item inside locket.
@@ -885,7 +878,6 @@
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
icon = 'icons/obj/custom_items.dmi'
icon_state = "nasir_khayyam_1"
- flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
@@ -897,7 +889,6 @@
desc = "A shiny black medallion made of something that looks like the Earth's obsidian, but it is harder than anything ever seen yet. On the front there seems to be a standing unathi chiseled in it, on the back the name of Lin Chang with the title of the Assassin Archmage."
icon = 'icons/obj/custom_items.dmi'
icon_state = "nasir_khayyam_1"
- flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
@@ -908,7 +899,6 @@
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
icon = 'icons/obj/custom_items.dmi'
icon_state = "ty_foster"
- flags = FPRINT|TABLEPASS
w_class = 1
//////////// Shoes ////////////
diff --git a/code/modules/destilery/main.dm b/code/modules/destilery/main.dm
index e6944724aaf..ded080d2b12 100644
--- a/code/modules/destilery/main.dm
+++ b/code/modules/destilery/main.dm
@@ -58,7 +58,7 @@
/obj/machinery/mill/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
input += W
else
@@ -128,7 +128,7 @@
/obj/machinery/fermenter/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
input += W
else
@@ -189,7 +189,7 @@
/obj/machinery/still/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
input += W
else
@@ -274,7 +274,7 @@
/obj/machinery/centrifuge/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
input += W
else
diff --git a/code/modules/economy/Economy.dm b/code/modules/economy/Economy.dm
index cf78723a683..b41a080d251 100644
--- a/code/modules/economy/Economy.dm
+++ b/code/modules/economy/Economy.dm
@@ -67,7 +67,15 @@ var/setup_economy = 0
/proc/setup_economy()
if(setup_economy)
return
+
var/datum/feed_channel/newChannel = new /datum/feed_channel
+ newChannel.channel_name = "Public Station Announcements"
+ newChannel.author = "Automated Announcement Listing"
+ newChannel.locked = 1
+ newChannel.is_admin_channel = 1
+ news_network.network_channels += newChannel
+
+ newChannel = new /datum/feed_channel
newChannel.channel_name = "Tau Ceti Daily"
newChannel.author = "CentComm Minister of Information"
newChannel.locked = 1
diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm
index 13da8de1661..b69a656ca1d 100644
--- a/code/modules/events/alien_infestation.dm
+++ b/code/modules/events/alien_infestation.dm
@@ -15,14 +15,13 @@
/datum/event/alien_infestation/announce()
if(successSpawn)
- command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
- world << sound('sound/AI/aliens.ogg')
+ command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
/datum/event/alien_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
+ if((temp_vent.loc.z in config.station_levels) && !temp_vent.welded && temp_vent.network)
if(temp_vent.network.normal_members.len > 50) //Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent
diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm
index 96729f0014c..abc3fa87d48 100644
--- a/code/modules/events/blob.dm
+++ b/code/modules/events/blob.dm
@@ -7,8 +7,7 @@
/datum/event/blob/announce()
- command_alert("Confirmed outbreak of level 7 biohazard aboard [station_name()]. Nanotrasen has issued a directive 7-10. The station is to be considered quarantined.", "Biohazard Alert")
- world << sound('sound/AI/blob_confirmed.ogg')
+ command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. Nanotrasen has issued a directive 7-10. The station is to be considered quarantined.", "Biohazard Alert", new_sound = 'sound/AI/blob_confirmed.ogg')
for (var/mob/living/silicon/ai/aiPlayer in player_list)
if (aiPlayer.client)
@@ -39,14 +38,14 @@
/datum/event/blob/proc/announce_nuke()
var/nukecode = "ERROR"
for(var/obj/machinery/nuclearbomb/bomb in world)
- if(bomb && bomb.r_code && bomb.z == 1)
+ if(bomb && bomb.r_code && (bomb.z in config.station_levels))
nukecode = bomb.r_code
- command_alert("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [nukecode] ", "Biohazard Alert")
+ command_announcement.Announce("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [nukecode] ", "Biohazard Alert")
set_security_level("gamma")
var/obj/machinery/door/airlock/vault/V = locate(/obj/machinery/door/airlock/vault) in world
- if(V && V.z == 1)
+ if(V && (V.z in config.station_levels))
V.locked = 0
V.update_icon()
@@ -64,7 +63,7 @@
spawn(10)
if(Blob || blob_cores.len)
return
- command_alert("The level 7 biohazard aboard [station_name()] has been eliminated. Directive 7-10 has been lifted, and the station is no longer quarantined.", "Biohazard Update")
+ command_announcement.Announce("The level 7 biohazard aboard [station_name()] has been eliminated. Directive 7-10 has been lifted, and the station is no longer quarantined.", "Biohazard Update")
for (var/mob/living/silicon/ai/aiPlayer in player_list)
if (aiPlayer.client)
diff --git a/code/modules/events/borers.dm b/code/modules/events/borers.dm
index 4f89417c2df..14010e22fc3 100644
--- a/code/modules/events/borers.dm
+++ b/code/modules/events/borers.dm
@@ -12,13 +12,12 @@
/datum/event/borer_infestation/announce()
if(successSpawn)
- command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
- world << sound('sound/AI/aliens.ogg')
+ command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
/datum/event/borer_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
+ if((temp_vent.loc.z in config.station_levels) && !temp_vent.welded && temp_vent.network)
//Stops cortical borers getting stuck in small networks. See: Security, Virology
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index a2436f2ac75..4f2616e7c0f 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -8,11 +8,11 @@
var/obj/machinery/vending/originMachine
/datum/event/brand_intelligence/announce()
- command_alert("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert")
+ command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert")
/datum/event/brand_intelligence/start()
for(var/obj/machinery/vending/V in machines)
- if(V.z != 1) continue
+ if(!(V.z in config.station_levels)) continue
vendingMachines.Add(V)
if(!vendingMachines.len)
diff --git a/code/modules/events/cargobonus.dm b/code/modules/events/cargobonus.dm
index f0c84b86f54..fb1a3ac277e 100644
--- a/code/modules/events/cargobonus.dm
+++ b/code/modules/events/cargobonus.dm
@@ -2,7 +2,7 @@
announceWhen = 5
/datum/event/cargo_bonus/announce()
- command_alert("Congratulations! [station_name()] was chosen for supply limit increase, please contact local cargo department for details!", "Supply Alert")
+ command_announcement.Announce("Congratulations! [station_name()] was chosen for supply limit increase, please contact local cargo department for details!", "Supply Alert")
/datum/event/cargo_bonus/start()
supply_controller.points+=rand(100,500)
\ No newline at end of file
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index 7cf82ff1f67..303f5686e8e 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -8,7 +8,7 @@
endWhen = rand(600,1200)
/datum/event/carp_migration/announce()
- command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
+ command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
/datum/event/carp_migration/start()
for(var/obj/effect/landmark/C in landmarks_list)
diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm
index 2f5cbea97b3..6b948538d5d 100644
--- a/code/modules/events/comms_blackout.dm
+++ b/code/modules/events/comms_blackout.dm
@@ -1,6 +1,6 @@
/proc/communications_blackout(var/silent = 1)
if(!silent)
- command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")
+ command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")
else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
for(var/mob/living/silicon/ai/A in player_list)
A << "
"
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index d437d85684e..d39517f5343 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -12,7 +12,7 @@
A << "
"
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
- command_alert(alert)
+ command_announcement.Announce(alert)
/datum/event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in telecomms_list)
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index a12aa2147c5..ec4ea8b8d3a 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -3,8 +3,7 @@
oneShot = 1
/datum/event/disease_outbreak/announce()
- command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
- world << sound('sound/AI/outbreak7.ogg')
+ command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
/datum/event/disease_outbreak/setup()
announceWhen = rand(15, 30)
@@ -17,7 +16,7 @@
var/turf/T = get_turf(H)
if(!T)
continue
- if(T.z != 1)
+ if(!(T.z in config.station_levels))
continue
for(var/datum/disease/D in H.viruses)
foundAlready = 1
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 2b9b989e5e9..a8254d02c7a 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -3,7 +3,7 @@
var/lightsoutRange = 25
/datum/event/electrical_storm/announce()
- command_alert("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
+ command_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
/datum/event/electrical_storm/start()
var/list/epicentreList = list()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 622e62b5172..effa2845d01 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -135,8 +135,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
// NON-BAY EVENTS
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Cargo Bonus", /datum/event/cargo_bonus, 150),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mass Hallucination",/datum/event/mass_hallucination,200),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Cargo Bonus", /datum/event/cargo_bonus, 100)
)
/datum/event_container/moderate
@@ -145,9 +144,9 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 30)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
// new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
@@ -156,18 +155,19 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
- new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
- new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
+ new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 20), 1),
+ new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 15), 1),
// NON-BAY EVENTS
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 50, list(ASSIGNMENT_ENGINEER = 50)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mass Hallucination", /datum/event/mass_hallucination, 300),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 50, list(ASSIGNMENT_ENGINEER = 50)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Dimensional Tear", /datum/event/tear, 0, list(ASSIGNMENT_SECURITY = 25)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Vent Clog", /datum/event/vent_clog, 250),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Wormholes", /datum/event/wormholes, 150),
-
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pyro Anomaly", /datum/event/anomaly/anomaly_pyro, 100, list(ASSIGNMENT_ENGINEER = 60)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Vortex Anomaly", /datum/event/anomaly/anomaly_vortex, 50, list(ASSIGNMENT_ENGINEER = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Bluespace Anomaly", /datum/event/anomaly/anomaly_bluespace, 50, list(ASSIGNMENT_ENGINEER = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Flux Anomaly", /datum/event/anomaly/anomaly_flux, 50, list(ASSIGNMENT_ENGINEER = 50)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200),
+// new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pyro Anomaly", /datum/event/anomaly/anomaly_pyro, 100, list(ASSIGNMENT_ENGINEER = 60)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Vortex Anomaly", /datum/event/anomaly/anomaly_vortex, 50, list(ASSIGNMENT_ENGINEER = 25)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Bluespace Anomaly", /datum/event/anomaly/anomaly_bluespace, 50, list(ASSIGNMENT_ENGINEER = 25)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Flux Anomaly", /datum/event/anomaly/anomaly_flux, 50, list(ASSIGNMENT_ENGINEER = 50)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200),
)
/datum/event_container/major
diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm
index df494ddc245..1dd1956c7ab 100644
--- a/code/modules/events/event_dynamic.dm
+++ b/code/modules/events/event_dynamic.dm
@@ -79,7 +79,7 @@ var/global/list/possibleEvents = list()
if(!spacevines_spawned)
possibleEvents[/datum/event/spacevine] = 10 + 5 * active_with_role["Engineer"]
if(minutes_passed >= 30) // Give engineers time to set up engine
- possibleEvents[/datum/event/anomaly/anomaly_pyro] = 100 + 60 * active_with_role["Engineer"]
+// possibleEvents[/datum/event/anomaly/anomaly_pyro] = 100 + 60 * active_with_role["Engineer"]
possibleEvents[/datum/event/anomaly/anomaly_vortex] = 50 + 25 * active_with_role["Engineer"]
possibleEvents[/datum/event/anomaly/anomaly_bluespace] = 50 + 25 * active_with_role["Engineer"]
possibleEvents[/datum/event/anomaly/anomaly_flux] = 50 + 50 * active_with_role["Engineer"]
@@ -152,10 +152,7 @@ var/global/list/possibleEvents = list()
/*switch(picked_event)
if("Meteor")
- command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
- for(var/mob/M in player_list)
- if(!istype(M,/mob/new_player))
- M << sound('sound/AI/meteors.ogg')
+ command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
spawn(100)
meteor_wave(10)
spawn_meteors()
diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm
index 71d78d96e4a..c485827efbc 100644
--- a/code/modules/events/grid_check.dm
+++ b/code/modules/events/grid_check.dm
@@ -8,9 +8,7 @@
power_failure(0)
/datum/event/grid_check/announce()
- command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check")
- for(var/mob/M in player_list)
- M << sound('sound/AI/poweroff.ogg')
+ command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
/datum/event/grid_check/end()
power_restore()
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index 8971db74853..444da4675ef 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -102,7 +102,7 @@
/datum/event/infestation/announce()
- command_alert("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
+ command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
#undef LOC_KITCHEN
#undef LOC_ATMOS
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index 7f66a4366a9..9e8f5d43b57 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -6,7 +6,7 @@
/datum/event/ionstorm/announce()
endWhen = rand(500, 1500)
-// command_alert("The station has entered an ion storm. Monitor all electronic equipment for malfunctions", "Anomaly Alert")
+// command_announcement.Announce("The station has entered an ion storm. Monitor all electronic equipment for malfunctions", "Anomaly Alert")
for (var/mob/living/carbon/human/player in world)
if(player.client)
players += player.real_name
@@ -86,7 +86,7 @@
/datum/event/ionstorm/end()
spawn(rand(5000,8000))
if(prob(50))
- command_alert("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
+ command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
/*
/proc/IonStorm(botEmagChance = 10)
@@ -212,21 +212,21 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
spawn(0)
world << "Started processing APCs"
for (var/obj/machinery/power/apc/APC in world)
- if(APC.z == 1)
+ if((APC.z in config.station_levels))
APC.ion_act()
apcnum++
world << "Finished processing APCs. Processed: [apcnum]"
spawn(0)
world << "Started processing SMES"
for (var/obj/machinery/power/smes/SMES in world)
- if(SMES.z == 1)
+ if((SMES.z in config.station_levels))
SMES.ion_act()
smesnum++
world << "Finished processing SMES. Processed: [smesnum]"
spawn(0)
world << "Started processing AIRLOCKS"
for (var/obj/machinery/door/airlock/D in world)
- if(D.z == 1)
+ if((D.z in config.station_levels))
//if(length(D.req_access) > 0 && !(12 in D.req_access)) //not counting general access and maintenance airlocks
airlocknum++
spawn(0)
@@ -235,7 +235,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
spawn(0)
world << "Started processing FIREDOORS"
for (var/obj/machinery/door/firedoor/D in world)
- if(D.z == 1)
+ if((D.z in config.station_levels))
firedoornum++;
spawn(0)
D.ion_act()
diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm
index 571a9ae7d1f..b3fbea5343c 100644
--- a/code/modules/events/mass_hallucination.dm
+++ b/code/modules/events/mass_hallucination.dm
@@ -3,4 +3,4 @@
if(!(C.species.flags & IS_SYNTHETIC))
C.hallucination += rand(50, 100)
/datum/event/mass_hallucination/announce()
- command_alert("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
\ No newline at end of file
+ command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
\ No newline at end of file
diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm
index 0f74d65b7d9..42b0b1eda1d 100644
--- a/code/modules/events/meteors.dm
+++ b/code/modules/events/meteors.dm
@@ -9,15 +9,14 @@
endWhen = rand(10,25) * 3
/datum/event/meteor_wave/announce()
- command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
- world << sound('sound/AI/meteors.ogg')
-
+ command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
+
/datum/event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(rand(2,5))
/datum/event/meteor_wave/end()
- command_alert("The station has cleared the meteor storm.", "Meteor Alert")
+ command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
//
/datum/event/meteor_shower
@@ -30,7 +29,7 @@
waves = rand(1,4)
/datum/event/meteor_shower/announce()
- command_alert("The station is now in a meteor shower.", "Meteor Alert")
+ command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
//meteor showers are lighter and more common,
/datum/event/meteor_shower/tick()
@@ -44,4 +43,4 @@
endWhen = next_meteor + 1
/datum/event/meteor_shower/end()
- command_alert("The station has cleared the meteor shower", "Meteor Alert")
+ command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm
index 87135bda526..676661f2b7e 100644
--- a/code/modules/events/prison_break.dm
+++ b/code/modules/events/prison_break.dm
@@ -15,7 +15,7 @@
/datum/event/prison_break/announce()
if(prisonAreas && prisonAreas.len > 0)
- command_alert("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert")
+ command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert")
else
world.log << "ERROR: Could not initate grey-tide. Unable find prison or brig area."
kill()
@@ -30,7 +30,7 @@
/datum/event/prison_break/announce()
if(prisonAreas && prisonAreas.len > 0)
- command_alert("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert")
+ command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert")
else
world.log << "ERROR: Could not initate grey-tide. Unable find prison or brig area."
kill()
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index 58b5f60c2cc..5daabc84799 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -22,11 +22,10 @@
/datum/event/radiation_storm/start()
spawn()
- world << sound('sound/AI/radiation.ogg')
- command_alert("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert")
+ command_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
for(var/area/A in world)
- if(A.z != 1 || is_safe_zone(A))
+ if(!(A.z in config.station_levels) || is_safe_zone(A))
continue
A.radiation_alert()
@@ -36,7 +35,7 @@
sleep(600)
- command_alert("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert")
+ command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert")
for(var/i = 0, i < 10, i++)
for(var/mob/living/carbon/human/H in living_mob_list)
@@ -45,7 +44,7 @@
var/turf/T = get_turf(H)
if(!T)
continue
- if(T.z != 1 || is_safe_zone(T.loc))
+ if(!(T.z in config.station_levels) || is_safe_zone(T.loc))
continue
if(istype(H,/mob/living/carbon/human))
@@ -64,16 +63,16 @@
var/turf/T = get_turf(M)
if(!T)
continue
- if(T.z != 1)
+ if(!(T.z in config.station_levels))
continue
M.apply_effect((rand(5,25)),IRRADIATE,0)
sleep(100)
- command_alert("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
+ command_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
for(var/area/A in world)
- if(A.z != 1 || is_safe_zone(A))
+ if(!(A.z in config.station_levels) || is_safe_zone(A))
continue
A.reset_radiation_alert()
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index d3ccaa4d89a..d96c80f60f8 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -30,7 +30,7 @@
msg = "Contact has been lost with a combat drone wing operating out of the NMV Icarus. If any are sighted in the area, approach with caution."
else
msg = "Unidentified hackers have targetted a combat drone wing deployed from the NMV Icarus. If any are sighted in the area, approach with caution."
- command_alert(msg, "Rogue drone alert")
+ command_announcement.Announce(msg, "Rogue drone alert")
/datum/event/rogue_drone/tick()
@@ -49,6 +49,6 @@
num_recovered++
if(num_recovered > drones_list.len * 0.75)
- command_alert("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
+ command_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
else
- command_alert("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")
+ command_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")
diff --git a/code/modules/events/sayuevents/meaty_ores.dm b/code/modules/events/sayuevents/meaty_ores.dm
index a44708693ef..d6e640934d9 100644
--- a/code/modules/events/sayuevents/meaty_ores.dm
+++ b/code/modules/events/sayuevents/meaty_ores.dm
@@ -1,9 +1,8 @@
/datum/event/dust/meaty/announce()
if(prob(16))
- command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
+ command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
else
- command_alert("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert")
- world << sound('sound/AI/meteors.ogg')
+ command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert",new_sound = 'sound/AI/meteors.ogg')
/datum/event/dust/meaty/setup()
qnty = rand(45,125)
diff --git a/code/modules/events/sayuevents/undead.dm b/code/modules/events/sayuevents/undead.dm
index f9d82baf086..84c1c0bb1b1 100644
--- a/code/modules/events/sayuevents/undead.dm
+++ b/code/modules/events/sayuevents/undead.dm
@@ -8,7 +8,7 @@
RS.start()
RS.kill()
for(var/area/A)
- if(A.z != 1) continue //Spook on main station only.
+ if(!(A.z in config.station_levels)) continue //Spook on main station only.
if(A.luminosity) continue
// if(A.lighting_space) continue
if(A.type == /area) continue
diff --git a/code/modules/events/sayuevents/wormholes.dm b/code/modules/events/sayuevents/wormholes.dm
index e120d11630d..c31645d7a00 100644
--- a/code/modules/events/sayuevents/wormholes.dm
+++ b/code/modules/events/sayuevents/wormholes.dm
@@ -13,7 +13,7 @@
/datum/event/wormholes/start()
for(var/turf/simulated/floor/T in world)
- if(T.z == 1)
+ if((T.z in config.station_levels))
pick_turfs += T
for(var/i = 1, i <= number_of_wormholes, i++)
@@ -21,10 +21,7 @@
wormholes += new /obj/effect/portal/wormhole(T, null, null, -1)
/datum/event/wormholes/announce()
- command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
- for(var/mob/M in player_list)
- if(!istype(M, /mob/new_player))
- M << sound('sound/AI/spanomalies.ogg')
+ command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
/datum/event/wormholes/tick()
if(activeFor % shift_frequency == 0)
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index 7a953d3fd40..227737ba99c 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -12,15 +12,13 @@
sent_spiders_to_station = 1
/datum/event/spider_infestation/announce()
- command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
- world << sound('sound/AI/aliens.ogg')
-
+ command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
/datum/event/spider_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
+ if((temp_vent.loc.z in config.station_levels) && !temp_vent.welded && temp_vent.network)
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm
index d5d572c3b6a..a11455b351d 100644
--- a/code/modules/events/tear.dm
+++ b/code/modules/events/tear.dm
@@ -5,7 +5,7 @@
var/obj/effect/tear/TE
/datum/event/tear/announce()
- command_alert("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/event/tear/start()
diff --git a/code/modules/events/tgevents/anomaly.dm b/code/modules/events/tgevents/anomaly.dm
index 7ab1f25c9ca..a1f951f5747 100644
--- a/code/modules/events/tgevents/anomaly.dm
+++ b/code/modules/events/tgevents/anomaly.dm
@@ -15,7 +15,7 @@
setup(safety_loop)
/datum/event/anomaly/announce()
- command_alert("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
/datum/event/anomaly/start()
var/turf/T = pick(get_area_turfs(impact_area))
diff --git a/code/modules/events/tgevents/anomaly_bluespace.dm b/code/modules/events/tgevents/anomaly_bluespace.dm
index 224f6f0e2de..852680e69fa 100644
--- a/code/modules/events/tgevents/anomaly_bluespace.dm
+++ b/code/modules/events/tgevents/anomaly_bluespace.dm
@@ -4,7 +4,7 @@
endWhen = 160
/datum/event/anomaly/anomaly_bluespace/announce()
- command_alert("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/event/anomaly/anomaly_bluespace/start()
@@ -21,7 +21,7 @@
var/obj/item/device/radio/beacon/chosen
var/list/possible = list()
for(var/obj/item/device/radio/beacon/W in world)
- if(W.z != 1)
+ if(!(W.z in config.station_levels))
continue
possible += W
@@ -35,7 +35,7 @@
var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
playsound(TO, 'sound/effects/phasein.ogg', 100, 1)
- command_alert("Massive bluespace translocation detected.", "Anomaly Alert")
+ command_announcement.Announce("Massive bluespace translocation detected.", "Anomaly Alert")
var/list/flashers = list()
for(var/mob/living/carbon/human/M in viewers(TO, null))
diff --git a/code/modules/events/tgevents/anomaly_flux.dm b/code/modules/events/tgevents/anomaly_flux.dm
index bf2cb2d18cc..d02af07b3ef 100644
--- a/code/modules/events/tgevents/anomaly_flux.dm
+++ b/code/modules/events/tgevents/anomaly_flux.dm
@@ -4,7 +4,7 @@
endWhen = 180
/datum/event/anomaly/anomaly_flux/announce()
- command_alert("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/event/anomaly/anomaly_flux/start()
var/turf/T = pick(get_area_turfs(impact_area))
diff --git a/code/modules/events/tgevents/anomaly_grav.dm b/code/modules/events/tgevents/anomaly_grav.dm
index c5430625ea8..0c9f3776f82 100644
--- a/code/modules/events/tgevents/anomaly_grav.dm
+++ b/code/modules/events/tgevents/anomaly_grav.dm
@@ -4,7 +4,7 @@
endWhen = 70
/datum/event/anomaly/anomaly_grav/announce()
- command_alert("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/event/anomaly/anomaly_grav/start()
var/turf/T = pick(get_area_turfs(impact_area))
diff --git a/code/modules/events/tgevents/anomaly_pyro.dm b/code/modules/events/tgevents/anomaly_pyro.dm
index 4e7f6a0b947..df4805121cd 100644
--- a/code/modules/events/tgevents/anomaly_pyro.dm
+++ b/code/modules/events/tgevents/anomaly_pyro.dm
@@ -4,7 +4,7 @@
endWhen = 110
/datum/event/anomaly/anomaly_pyro/announce()
- command_alert("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ command_announcement.Announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/event/anomaly/anomaly_pyro/start()
var/turf/T = pick(get_area_turfs(impact_area))
diff --git a/code/modules/events/tgevents/anomaly_vortex.dm b/code/modules/events/tgevents/anomaly_vortex.dm
index 6f2f999e728..c950444978e 100644
--- a/code/modules/events/tgevents/anomaly_vortex.dm
+++ b/code/modules/events/tgevents/anomaly_vortex.dm
@@ -4,7 +4,7 @@
endWhen = 80
/datum/event/anomaly/anomaly_vortex/announce()
- command_alert("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
+ command_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
/datum/event/anomaly/anomaly_vortex/start()
var/turf/T = pick(get_area_turfs(impact_area))
diff --git a/code/modules/events/tgevents/brand_intelligence.dm b/code/modules/events/tgevents/brand_intelligence.dm
index 893cee98cf1..1cfeba0cd08 100644
--- a/code/modules/events/tgevents/brand_intelligence.dm
+++ b/code/modules/events/tgevents/brand_intelligence.dm
@@ -8,7 +8,7 @@
/datum/event/brand_intelligence/announce()
- command_alert("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert")
+ command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert")
/datum/event/brand_intelligence/start()
diff --git a/code/modules/events/tgevents/immovable_rod.dm b/code/modules/events/tgevents/immovable_rod.dm
index 25c3d0308d4..ec86e89981f 100644
--- a/code/modules/events/tgevents/immovable_rod.dm
+++ b/code/modules/events/tgevents/immovable_rod.dm
@@ -12,7 +12,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
announceWhen = 5
/datum/event/immovable_rod/announce()
- command_alert("What the fuck was that?!", "General Alert")
+ command_announcement.Announce("What the fuck was that?!", "General Alert")
/datum/event/immovable_rod/start()
var/startx = 0
diff --git a/code/modules/events/tgevents/mass_hallucination.dm b/code/modules/events/tgevents/mass_hallucination.dm
index 6a34331acb3..f23a2c15510 100644
--- a/code/modules/events/tgevents/mass_hallucination.dm
+++ b/code/modules/events/tgevents/mass_hallucination.dm
@@ -6,4 +6,4 @@
if(!(C.species.flags & IS_SYNTHETIC))
C.hallucination += rand(50, 100)
/datum/event/mass_hallucination/announce()
- command_alert("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
\ No newline at end of file
+ command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
\ No newline at end of file
diff --git a/code/modules/events/tgevents/spider_infestation.dm b/code/modules/events/tgevents/spider_infestation.dm
deleted file mode 100644
index 1f4cccdf418..00000000000
--- a/code/modules/events/tgevents/spider_infestation.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/var/global/sent_spiders_to_station = 0
-
-/datum/event/spider_infestation
- announceWhen = 400
-
- var/spawncount = 1
-
-
-/datum/event/spider_infestation/setup()
- announceWhen = rand(announceWhen, announceWhen + 50)
- spawncount = round(num_players() * 1.5)
- sent_spiders_to_station = 1
-
-/datum/event/spider_infestation/announce()
- command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
- world << sound('sound/AI/aliens.ogg')
-
-
-/datum/event/spider_infestation/start()
-
- var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
- if(temp_vent.network.normal_members.len > 50)
- vents += temp_vent
-
- while((spawncount >= 1) && vents.len)
- var/obj/vent = pick(vents)
- var/obj/effect/spider/spiderling/S = new(vent.loc)
- if(prob(66))
- S.grow_as = /mob/living/simple_animal/hostile/giant_spider/nurse
- vents -= vent
- spawncount--
\ No newline at end of file
diff --git a/code/modules/events/tgevents/vent_clog.dm b/code/modules/events/tgevents/vent_clog.dm
index 885552dff28..061450a197d 100755
--- a/code/modules/events/tgevents/vent_clog.dm
+++ b/code/modules/events/tgevents/vent_clog.dm
@@ -6,13 +6,13 @@
var/list/vents = list()
/datum/event/vent_clog/announce()
- command_alert("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
+ command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
/datum/event/vent_clog/setup()
endWhen = rand(25, 100)
for(var/obj/machinery/atmospherics/unary/vent_scrubber/temp_vent in machines)
- if(temp_vent.loc.z == 1 && temp_vent.network)
+ if((temp_vent.loc.z in config.station_levels) && temp_vent.network)
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm
index 876e3453896..9ee3a47077a 100644
--- a/code/modules/events/viral_infection.dm
+++ b/code/modules/events/viral_infection.dm
@@ -8,8 +8,7 @@ datum/event/viral_infection/setup()
severity = rand(1, 3)
datum/event/viral_infection/announce()
- command_alert("Confirmed outbreak of level five viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
- world << sound('sound/AI/outbreak5.ogg')
+ command_announcement.Announce("Confirmed outbreak of level five viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
var/list/candidates = list() //list of candidate keys
diff --git a/code/modules/events/viral_outbreak.dm b/code/modules/events/viral_outbreak.dm
index f11acd511f3..9e139f5742b 100644
--- a/code/modules/events/viral_outbreak.dm
+++ b/code/modules/events/viral_outbreak.dm
@@ -8,8 +8,7 @@ datum/event/viral_outbreak/setup()
severity = rand(2, 4)
datum/event/viral_outbreak/announce()
- command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
- world << sound('sound/AI/outbreak7.ogg')
+ command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
datum/event/viral_outbreak/start()
var/list/candidates = list() //list of candidate keys
diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm
index 739ca92411b..b36f7f93760 100644
--- a/code/modules/events/wallrot.dm
+++ b/code/modules/events/wallrot.dm
@@ -3,7 +3,7 @@ datum/event/wallrot/setup()
endWhen = announceWhen + 1
datum/event/wallrot/announce()
- command_alert("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
+ command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
datum/event/wallrot/start()
spawn()
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index 7db850670f1..868b4b6c5e6 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -43,7 +43,6 @@
icon = 'icons/obj/harvest.dmi'
icon_state = "logs"
force = 5
- flags = TABLEPASS
throwforce = 5
w_class = 3.0
throw_speed = 3
@@ -74,7 +73,6 @@
icon_state = "sunflower"
damtype = "fire"
force = 0
- flags = TABLEPASS
throwforce = 1
w_class = 1.0
throw_speed = 1
@@ -92,7 +90,6 @@
icon_state = "nettle"
damtype = "fire"
force = 15
- flags = TABLEPASS
throwforce = 1
w_class = 2.0
throw_speed = 1
@@ -135,7 +132,6 @@
icon_state = "deathnettle"
damtype = "fire"
force = 30
- flags = TABLEPASS
throwforce = 1
w_class = 2.0
throw_speed = 1
diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm
index be2158fee39..70cf1f9cf4b 100644
--- a/code/modules/hydroponics/hydro_tools.dm
+++ b/code/modules/hydroponics/hydro_tools.dm
@@ -203,7 +203,7 @@
/obj/item/weapon/plantspray
icon = 'icons/obj/hydroponics.dmi'
item_state = "spray"
- flags = TABLEPASS | OPENCONTAINER | FPRINT | NOBLUDGEON
+ flags = OPENCONTAINER | NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
@@ -255,7 +255,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
- flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
+ flags = CONDUCT | NOBLUDGEON
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -270,7 +270,6 @@
name = "bottle of weedkiller"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS
var/toxicity = 0
var/weed_kill_str = 0
@@ -278,7 +277,6 @@
name = "bottle of glyphosate"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS
toxicity = 4
weed_kill_str = 2
@@ -286,7 +284,6 @@
name = "bottle of triclopyr"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle18"
- flags = FPRINT | TABLEPASS
toxicity = 6
weed_kill_str = 4
@@ -294,7 +291,6 @@
name = "bottle of 2,4-D"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle15"
- flags = FPRINT | TABLEPASS
toxicity = 8
weed_kill_str = 7
@@ -308,7 +304,7 @@
desc = "A small glass bottle. Can hold up to 10 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
possible_transfer_amounts = null
w_class = 2.0
@@ -348,7 +344,7 @@
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
icon = 'icons/obj/weapons.dmi'
icon_state = "hatchet"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 12.0
w_class = 2.0
throwforce = 15.0
@@ -381,7 +377,7 @@
throw_speed = 1
throw_range = 3
w_class = 4.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
slot_flags = SLOT_BACK
origin_tech = "materials=2;combat=2"
attack_verb = list("chopped", "sliced", "cut", "reaped")
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 948e78f96e9..a572b2c8d19 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -3,7 +3,6 @@
name = "packet of seeds"
icon = 'icons/obj/seeds.dmi'
icon_state = "seed"
- flags = FPRINT | TABLEPASS
w_class = 2.0
var/seed_type
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index ec39b53741e..dde3571a6dd 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -149,7 +149,6 @@
throw_speed = 1
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
- flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
autoignition_temperature = AUTOIGNITION_PAPER
@@ -274,7 +273,6 @@
throw_speed = 1
throw_range = 5
w_class = 1.0
- flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 1a0315b957d..82bc3a0f287 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -324,7 +324,7 @@
var/list/L = list()
for(var/obj/item/device/radio/beacon/B in world)
var/turf/T = get_turf(B)
- if(T.z == 1)
+ if((T.z in config.station_levels))
L += B
if(!L.len)
user << "The [src.name] failed to create a wormhole."
diff --git a/code/modules/mining/manufacturing.dm b/code/modules/mining/manufacturing.dm
index a59a1071a22..cf8592bf2a4 100644
--- a/code/modules/mining/manufacturing.dm
+++ b/code/modules/mining/manufacturing.dm
@@ -374,13 +374,13 @@
else ..()
if (load == 1)
- user.u_equip(W)
+ user.unEquip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
W.dropped()
else if (load == 2)
- user.u_equip(W)
+ user.unEquip(W)
W.dropped()
if ((user.client && user.s_active != src))
user.client.screen -= W
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index b7d8ac6c05e..f6c03ee308b 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -52,22 +52,25 @@
name = "pickaxe"
icon = 'icons/obj/items.dmi'
icon_state = "pickaxe"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
- throwforce = 4.0
+ throwforce = 10.0
item_state = "pickaxe"
w_class = 4.0
m_amt = 3750 //one sheet, but where can you make them?
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
origin_tech = "materials=1;engineering=1"
attack_verb = list("hit", "pierced", "sliced", "attacked")
- var/drill_sound = 'sound/weapons/Genhit.ogg'
+ var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
var/drill_verb = "picking"
sharp = 1
var/excavation_amount = 100
+ proc/playDigSound()
+ playsound(src, pick(digsound),20,1)
+
hammer
name = "sledgehammer"
//icon_state = "sledgehammer" Waiting on sprite
@@ -86,6 +89,8 @@
icon_state = "handdrill"
item_state = "jackhammer"
digspeed = 30
+ hitsound = 'sound/weapons/drill.ogg'
+ digsound = list('sound/weapons/drill.ogg')
origin_tech = "materials=2;powerstorage=3;engineering=2"
desc = "Yours is the drill that will pierce through the rock walls."
@@ -94,6 +99,8 @@
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 15 //faster than drill, but cannot dig
+ hitsound = 'sound/weapons/sonic_jackhammer.ogg'
+ digsound = list('sound/weapons/sonic_jackhammer.ogg')
origin_tech = "materials=3;powerstorage=2;engineering=2"
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
@@ -112,6 +119,8 @@
w_class = 3.0 //it is smaller than the pickaxe
damtype = "fire"
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
+ hitsound = 'sound/weapons/plasma_cutter.ogg'
+ digsound = list('sound/weapons/plasma_cutter.ogg')
origin_tech = "materials=4;plasmatech=3;engineering=3"
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
@@ -129,6 +138,8 @@
item_state = "jackhammer"
digspeed = 5 //Digs through walls, girders, and can dig up sand
origin_tech = "materials=6;powerstorage=4;engineering=5"
+ hitsound = 'sound/weapons/drill.ogg'
+ digsound = list('sound/weapons/drill.ogg')
desc = "Yours is the drill that will pierce the heavens!"
traitor //Pocket-sized traitor diamond drill.
@@ -143,6 +154,8 @@
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 15
+ hitsound = 'sound/weapons/drill.ogg'
+ digsound = list('sound/weapons/drill.ogg')
desc = ""
/*****************************Shovel********************************/
@@ -152,7 +165,7 @@
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/items.dmi'
icon_state = "shovel"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index b315ae31e5b..97216012983 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -137,7 +137,7 @@
return
last_act = world.time
- playsound(user, P.drill_sound, 20, 1)
+ P.playDigSound()
//handle any archaeological finds we might uncover
var/fail_message
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index fbcca4984bb..0c4d84c00d9 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 10.0
throwforce = 2.0
w_class = 4.0
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index fd3598ae985..866b46bae50 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -84,7 +84,7 @@
/obj/item/weapon/ore/New()
pixel_x = rand(0,16)-8
pixel_y = rand(0,8)-8
- if(src.z == 5) score_oremined++ //When ore spawns, increment score. Only include ore spawned on mining asteroid (No Clown Planet)
+ if(src.z == ASTEROID_Z) score_oremined++ //When ore spawns, increment score. Only include ore spawned on mining asteroid (No Clown Planet)
/obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/core_sampler))
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index d3ecc25ec92..fe6f8851b23 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -20,7 +20,7 @@
/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/ore))
- user.u_equip(W)
+ user.unEquip(W)
src.contents += W
if (istype(W, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = W
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index c8b38aff840..1f0c56d857e 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -22,8 +22,10 @@
//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success.
/mob/proc/put_in_l_hand(var/obj/item/W)
- if(lying) return 0
- if(!istype(W)) return 0
+ if(lying && !(W.flags & ABSTRACT))
+ return 0
+ if(!istype(W))
+ return 0
if(!l_hand)
W.loc = src //TODO: move to equipped?
l_hand = W
@@ -38,8 +40,10 @@
//Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success.
/mob/proc/put_in_r_hand(var/obj/item/W)
- if(lying) return 0
- if(!istype(W)) return 0
+ if(lying && !(W.flags & ABSTRACT))
+ return 0
+ if(!istype(W))
+ return 0
if(!r_hand)
W.loc = src
r_hand = W
@@ -76,98 +80,51 @@
return drop_item()
return 0
-
-/mob/proc/drop_from_inventory(var/obj/item/W)
- if(W)
- if(client) client.screen -= W
- u_equip(W)
- if(!W) return 1 // self destroying objects (tk, grabs)
- W.layer = initial(W.layer)
- W.loc = loc
-
- var/turf/T = get_turf(loc)
- if(isturf(T))
- T.Entered(W)
-
- W.dropped(src)
- update_icons()
- return 1
- return 0
-
-
//Drops the item in our left hand
-/mob/proc/drop_l_hand(var/atom/Target)
- if(l_hand)
- if(client) client.screen -= l_hand
- l_hand.layer = initial(l_hand.layer)
-
- if(Target) l_hand.loc = Target.loc
- else l_hand.loc = loc
-
- var/turf/T = get_turf(loc)
- if(isturf(T))
- T.Entered(l_hand)
-
- l_hand.dropped(src)
- l_hand = null
- update_inv_l_hand()
- return 1
- return 0
+/mob/proc/drop_l_hand()
+ return unEquip(l_hand) //All needed checks are in unEquip
//Drops the item in our right hand
-/mob/proc/drop_r_hand(var/atom/Target)
- if(r_hand)
- if(client) client.screen -= r_hand
- r_hand.layer = initial(r_hand.layer)
-
- if(Target) r_hand.loc = Target.loc
- else r_hand.loc = loc
-
- var/turf/T = get_turf(Target)
- if(istype(T))
- T.Entered(r_hand)
-
- r_hand.dropped(src)
- r_hand = null
- update_inv_r_hand()
- return 1
- return 0
+/mob/proc/drop_r_hand()
+ return unEquip(r_hand) //Why was this not calling unEquip in the first place jesus fuck.
//Drops the item in our active hand.
-/mob/proc/drop_item(var/atom/Target)
- if(hand) return drop_l_hand(Target)
- else return drop_r_hand(Target)
+/mob/proc/drop_item() //THIS. DOES. NOT. NEED. AN. ARGUMENT.
+ if(hand)
+ return drop_l_hand()
+ else
+ return drop_r_hand()
-//TODO: phase out this proc
-/mob/proc/before_take_item(var/obj/item/W) //TODO: what is this?
- W.loc = null
- W.layer = initial(W.layer)
- u_equip(W)
- update_icons()
- return
+//Here lie unEquip and before_item_take, already forgotten and not missed.
-/mob/proc/u_equip(W as obj)
- if (W == r_hand)
+/mob/proc/unEquip(obj/item/I, force) //Force overrides NODROP for things like wizarditis and admin undress.
+ if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP.
+ return 1
+
+ if((I.flags & NODROP) && !force)
+ return 0
+
+ if(I == r_hand)
r_hand = null
- update_inv_r_hand(0)
- else if (W == l_hand)
+ update_inv_r_hand()
+ else if(I == l_hand)
l_hand = null
- update_inv_l_hand(0)
- else if (W == back)
- back = null
- update_inv_back(0)
- else if (W == wear_mask)
- wear_mask = null
- update_inv_wear_mask(0)
- return
+ update_inv_l_hand()
+
+ if(I)
+ if(client)
+ client.screen -= I
+ I.loc = loc
+ I.dropped(src)
+ if(I)
+ I.layer = initial(I.layer)
+
+ return 1
//Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob.
/mob/proc/remove_from_mob(var/obj/O)
- src.u_equip(O)
- if (src.client)
- src.client.screen -= O
- O.layer = initial(O.layer)
+ unEquip(O)
O.screen_loc = null
return 1
diff --git a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm
index bf3ca77d02f..138bd24f495 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm
@@ -1,23 +1,16 @@
//unequip
-/mob/living/carbon/alien/humanoid/u_equip(obj/item/W as obj)
- if (W == wear_suit)
- wear_suit = null
- update_inv_wear_suit(0,0)
- else if (W == head)
- head = null
- update_inv_head(0,0)
- else if (W == r_store)
+/mob/living/carbon/alien/humanoid/unEquip(obj/item/I as obj)
+ . = ..()
+ if(!. || !I)
+ return
+
+ if(I == r_store)
r_store = null
update_inv_pockets(0)
- else if (W == l_store)
+
+ else if(I == l_store)
l_store = null
update_inv_pockets(0)
- else if (W == r_hand)
- r_hand = null
- update_inv_r_hand(0)
- else if (W == l_hand)
- l_hand = null
- update_inv_l_hand(0)
/mob/living/carbon/alien/humanoid/attack_ui(slot_id)
var/obj/item/W = get_active_hand()
@@ -31,7 +24,7 @@
return
if(W.w_class > 3)
return
- u_equip(W)
+ unEquip(W)
l_store = W
update_inv_pockets()
if(slot_r_store)
@@ -39,7 +32,7 @@
return
if(W.w_class > 3)
return
- u_equip(W)
+ unEquip(W)
r_store = W
update_inv_pockets()
else
diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
index d85d377ae00..6990eaa9223 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -104,7 +104,7 @@
//TODO
wear_suit.screen_loc = ui_alien_oclothing
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
- drop_from_inventory(handcuffed)
+ unEquip(handcuffed)
drop_r_hand()
drop_l_hand()
diff --git a/code/modules/mob/living/carbon/alien/larva/inventory.dm b/code/modules/mob/living/carbon/alien/larva/inventory.dm
index 076053b2530..99298e50bbe 100644
--- a/code/modules/mob/living/carbon/alien/larva/inventory.dm
+++ b/code/modules/mob/living/carbon/alien/larva/inventory.dm
@@ -1,3 +1,3 @@
//can't unequip since it can't equip anything
-/mob/living/carbon/alien/larva/u_equip(obj/item/W as obj)
+/mob/living/carbon/alien/larva/unEquip(obj/item/W as obj)
return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 3f912cb3ce2..e41f5b0b2ae 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -40,7 +40,7 @@ var/const/MAX_ACTIVE_TIME = 400
/obj/item/clothing/mask/facehugger/attack(mob/living/M as mob, mob/user as mob)
..()
- user.before_take_item(src)
+ user.unEquip(src)
Attach(M)
/obj/item/clothing/mask/facehugger/examine(mob/user)
@@ -131,9 +131,12 @@ var/const/MAX_ACTIVE_TIME = 400
if(iscarbon(M))
var/mob/living/carbon/target = L
if(target.wear_mask)
- if(prob(20)) return 0
+ if(prob(20))
+ return 0
var/obj/item/clothing/W = target.wear_mask
- target.before_take_item(W)
+ if(W.flags & NODROP)
+ return 0
+ target.unEquip(W)
target.visible_message("[src] tears [W] off of [target]'s face!", \
"[src] tears [W] off of [target]'s face!")
@@ -162,7 +165,7 @@ var/const/MAX_ACTIVE_TIME = 400
var/mob/living/carbon/C = target
if(C.wear_mask != src)
return
-
+
if(ishuman(target))
var/mob/living/carbon/human/H = target
if((H.species.flags & IS_SYNTHETIC))
@@ -233,7 +236,7 @@ var/const/MAX_ACTIVE_TIME = 400
/proc/CanHug(var/mob/M)
if(!M || !ismob(M))
return 0
-
+
if(M.stat == DEAD)
return 0
@@ -255,4 +258,4 @@ var/const/MAX_ACTIVE_TIME = 400
gender = FEMALE
/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
- return
\ No newline at end of file
+ return
\ 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 990f2971c58..12adf40d53e 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -3,7 +3,6 @@
desc = "A piece of juicy meat found in a persons head."
icon = 'icons/obj/surgery.dmi'
icon_state = "brain2"
- flags = TABLEPASS
force = 1.0
w_class = 1.0
throwforce = 1.0
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 58fff0705ce..dcfc65efcae 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -378,11 +378,13 @@
throw_mode_off()
if(usr.stat || !target)
return
- if(target.type == /obj/screen) return
+ if(target.type == /obj/screen)
+ return
var/atom/movable/item = src.get_active_hand()
- if(!item) return
+ if(!item || (item.flags & NODROP))
+ return
if (istype(item, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = item
@@ -404,10 +406,10 @@
else
M.LAssailant = usr
- if(!item) return //Grab processing has a chance of returning null
-
- item.layer = initial(item.layer)
- u_equip(item)
+ if(!item)
+ return //Grab processing has a chance of returning null
+ if(!ismob(item)) //Honk mobs don't have a dropped() proc honk
+ unEquip(item)
update_icons()
if (istype(usr, /mob/living/carbon)) //Check if a carbon mob is throwing. Modify/remove this line as required.
@@ -419,6 +421,7 @@
//actually throw it!
if (item)
+ item.layer = initial(item.layer)
src.visible_message("\red [src] has thrown [item].")
if(!src.lastarea)
@@ -453,29 +456,34 @@
return 1
return
-/mob/living/carbon/u_equip(obj/item/W as obj)
- if(!W) return 0
+/mob/living/carbon/unEquip(obj/item/I) //THIS PROC DID NOT CALL ..()
+ . = ..() //Sets the default return value to what the parent returns.
+ if(!. || !I) //We don't want to set anything to null if the parent returned 0.
+ return
- else if (W == handcuffed)
+ if(I == back)
+ back = null
+ update_inv_back(0)
+ else if(I == wear_mask)
+ if(istype(src, /mob/living/carbon/human)) //If we don't do this hair won't be properly rebuilt.
+ return
+ wear_mask = null
+ update_inv_wear_mask(0)
+ else if(I == handcuffed)
handcuffed = null
- update_inv_handcuffed()
-
- else if (W == legcuffed)
+ update_inv_handcuffed(0)
+ else if(I == legcuffed)
legcuffed = null
- update_inv_legcuffed()
- else
- ..()
-
- return
+ update_inv_legcuffed(0)
/mob/living/carbon/show_inv(mob/living/carbon/user as mob)
user.set_machine(src)
var/dat = {"
[name]
-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
+
Head(Mask): [(wear_mask && !(wear_mask.flags & ABSTRACT)) ? wear_mask : "Nothing"]
+
Left Hand: [(l_hand && !(l_hand.flags & ABSTRACT)) ? l_hand : "Nothing"]
+
Right Hand: [(r_hand && !(r_hand.flags & ABSTRACT)) ? r_hand : "Nothing"]
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(internal ? text("Remove Internal") : "")]
@@ -579,4 +587,4 @@
return
/mob/living/carbon/proc/canBeHandcuffed()
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm
index 5a28b8af193..12673d50549 100644
--- a/code/modules/mob/living/carbon/give.dm
+++ b/code/modules/mob/living/carbon/give.dm
@@ -20,6 +20,9 @@
I = usr.r_hand
if(!I)
return
+ if((I.flags & NODROP) || (I.flags & ABSTRACT))
+ usr << "That's not exactly something you can give."
+ return
if(src.r_hand == null || src.l_hand == null)
switch(alert(src,"[usr] wants to give you \a [I]?",,"Yes","No"))
if("Yes")
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index ecfbbf1153c..dfdd8b41195 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -104,14 +104,14 @@
msg += "[t_He] [t_has] \icon[back] \a [back] on [t_his] back.\n"
//left hand
- if(l_hand)
+ if(l_hand && !(l_hand.flags & ABSTRACT))
if(l_hand.blood_DNA)
msg += "[t_He] [t_is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in [t_his] left hand!\n"
else
msg += "[t_He] [t_is] holding \icon[l_hand] \a [l_hand] in [t_his] left hand.\n"
//right hand
- if(r_hand)
+ if(r_hand && !(r_hand.flags & ABSTRACT))
if(r_hand.blood_DNA)
msg += "[t_He] [t_is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in [t_his] right hand!\n"
else
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ded2a3c949e..5f3a0cca482 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -496,24 +496,24 @@
var/dat = {"
[name]
-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
-
Gloves: [(gloves ? gloves : "Nothing")]
-
Eyes: [(glasses ? glasses : "Nothing")]
-
Left Ear: [(l_ear ? l_ear : "Nothing")]
-
Right Ear: [(r_ear ? r_ear : "Nothing")]
-
Head: [(head ? head : "Nothing")]
-
Shoes: [(shoes ? shoes : "Nothing")]
-
Belt: [(belt ? belt : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
-
Uniform: [(w_uniform ? w_uniform : "Nothing")] [(suit) ? ((suit.has_sensor == 1) ? text(" Sensors", src) : "") :]
-
(Exo)Suit: [(wear_suit ? wear_suit : "Nothing")]
-
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
-
ID: [(wear_id ? wear_id : "Nothing")]
-
PDA: [(wear_pda ? wear_pda : "Nothing")]
-
Suit Storage: [(s_store ? s_store : "Nothing")]
-
Left Pocket ([l_store ? (pickpocket ? l_store.name : "Full") : "Empty"])
-
Right Pocket ([r_store ? (pickpocket ? r_store.name : "Full") : "Empty"])
+
Head(Mask): [(wear_mask && !(wear_mask.flags & ABSTRACT)) ? wear_mask : "Nothing"]
+
Left Hand: [(l_hand && !(l_hand.flags & ABSTRACT)) ? l_hand : "Nothing"]
+
Right Hand: [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]
+
Gloves: [(gloves && !(gloves.flags & ABSTRACT)) ? gloves : "Nothing"]
+
Eyes: [(glasses && !(glasses.flags & ABSTRACT)) ? glasses : "Nothing"]
+
Left Ear: [(l_ear && !(l_ear.flags & ABSTRACT)) ? l_ear : "Nothing"]
+
Right Ear: [(r_ear && !(r_ear.flags & ABSTRACT)) ? r_ear : "Nothing"]
+
Head: [(head && !(head.flags & ABSTRACT)) ? head : "Nothing"]
+
Shoes: [(shoes && !(shoes.flags & ABSTRACT)) ? shoes : "Nothing"]
+
Belt: [(belt && !(belt.flags & ABSTRACT)) ? belt : "Nothing"] [((istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
+
Uniform: [(w_uniform && !(w_uniform.flags & ABSTRACT)) ? w_uniform : "Nothing"] [(suit) ? ((suit.has_sensor == 1) ? text(" Sensors", src) : "") :]
+
(Exo)Suit: [(wear_suit && !(wear_suit.flags & ABSTRACT)) ? wear_suit : "Nothing"]
+
Back: [(back && !(back.flags & ABSTRACT)) ? back : "Nothing"] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
+
ID: [(wear_id && !(wear_id.flags & ABSTRACT)) ? wear_id : "Nothing"]
+
PDA: [(wear_pda && !(wear_pda.flags & ABSTRACT)) ? wear_pda : "Nothing"]
+
Suit Storage: [(s_store && !(s_store.flags & ABSTRACT)) ? s_store : "Nothing"]
+
Left Pocket ([(l_store && !(l_store.flags & ABSTRACT)) ? (pickpocket ? l_store.name : "Full") : "Empty"])
+
Right Pocket ([(r_store && !(r_store.flags & ABSTRACT)) ? (pickpocket ? r_store.name : "Full") : "Empty"])
Empty Both Pockets
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(legcuffed ? text("Legcuffed") : text(""))]
@@ -538,7 +538,21 @@
var/obj/vehicle/V = AM
V.RunOver(src)
-
+// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
+/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job")
+ var/obj/item/device/pda/pda = wear_id
+ if (istype(pda))
+ if (pda.id)
+ return pda.id.rank
+ else
+ return pda.ownrank
+ else
+ var/obj/item/weapon/card/id/id = get_idcard()
+ if(id)
+ return id.rank ? id.rank : if_no_job
+ else
+ return if_no_id
+
//gets assignment from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
@@ -640,20 +654,22 @@
var/obj/item/pocket_item = (pocket_id == slot_r_store ? src.r_store : src.l_store)
var/obj/item/place_item = usr.get_active_hand() // Item to place in the pocket, if it's empty
- if(pocket_item)
+ if(pocket_item && !(pocket_item.flags & ABSTRACT))
+ if(pocket_item.flags & NODROP)
+ usr << "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!"
usr << "You try to empty [src]'s [pocket_side] pocket."
- else if(place_item && place_item.mob_can_equip(src, pocket_id, 1))
+ else if(place_item && place_item.mob_can_equip(src, pocket_id, 1) && !(place_item.flags & ABSTRACT))
usr << "You try to place [place_item] into [src]'s [pocket_side] pocket."
else
return
if(do_mob(usr, src, STRIP_DELAY))
if(pocket_item)
- u_equip(pocket_item)
+ unEquip(pocket_item)
usr.put_in_hands(pocket_item)
else
if(place_item)
- usr.u_equip(place_item)
+ usr.unEquip(place_item)
equip_to_slot_if_possible(place_item, pocket_id, 0, 1)
// Update strip window
@@ -687,11 +703,11 @@
if(do_mob(usr, src, STRIP_DELAY))
if(worn_id)
- u_equip(worn_id)
+ unEquip(worn_id)
usr.put_in_hands(worn_id)
else
if(place_item)
- usr.u_equip(place_item)
+ usr.unEquip(place_item)
equip_to_slot_if_possible(place_item, slot_wear_id, 0, 1)
// Update strip window
@@ -1036,10 +1052,10 @@
/mob/living/carbon/human/abiotic(var/full_body = 0)
- if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves)))
+ if(full_body && ((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves)))
return 1
- if( (src.l_hand && !src.l_hand.abstract) || (src.r_hand && !src.r_hand.abstract) )
+ if((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)))
return 1
return 0
@@ -1161,14 +1177,14 @@
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
if(!L)
return 0
-
+
return L.is_bruised()
/mob/living/carbon/human/proc/rupture_lung()
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
if(!L)
return 0
-
+
if(!L.is_bruised())
src.custom_pain("You feel a stabbing pain in your chest!", 1)
L.damage = L.min_bruised_damage
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index ed7c1c9336b..d88d19fe99e 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -176,11 +176,11 @@
if(head)
var/obj/item/clothing/head/H = head
if(!istype(H) || prob(H.loose))
- drop_from_inventory(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!") */
+ 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
@@ -209,8 +209,8 @@
//End BubbleWrap
if(!talked) //BubbleWrap
- drop_item()
- visible_message("\red [M] has disarmed [src]!")
+ if(drop_item())
+ visible_message("\red [M] has disarmed [src]!")
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
return
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 86c4cc95a26..4db067181cb 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -348,7 +348,7 @@ This function restores all organs.
multiplier = 2
var/obj/item/clothing/head/H = head
if(!istype(H) || prob(H.loose * multiplier))
- drop_from_inventory(H)
+ unEquip(H)
if(prob(60))
step_rand(H)
if(!stat)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index f624a94924a..de100bc759b 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -72,7 +72,7 @@ emp_act
if(c_hand && (stun_amount || agony_amount > 10))
msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect")
- u_equip(c_hand)
+ unEquip(c_hand)
if (affected.status & ORGAN_ROBOT)
emote("me", 1, "drops what they were holding, their [affected.display_name] malfunctioning!")
else
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 80addc967c6..b4f71ada72d 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -104,123 +104,76 @@
if(slot_tie)
return 1
-/mob/living/carbon/human/u_equip(obj/item/W as obj)
- if(!W) return 0
+/mob/living/carbon/human/unEquip(obj/item/I)
+ . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should.
+ if(!. || !I)
+ return
- var/success
- if (W == wear_suit)
+ if(I == wear_suit)
if(s_store)
- drop_from_inventory(s_store)
- if(W)
- success = 1
+ unEquip(s_store, 1) //It makes no sense for your suit storage to stay on you if you drop your suit.
wear_suit = null
- update_inv_wear_suit()
- else if (W == w_uniform)
- if (r_store)
- drop_from_inventory(r_store)
- if (l_store)
- drop_from_inventory(l_store)
- if (wear_id)
- drop_from_inventory(wear_id)
- if (belt)
- drop_from_inventory(belt)
+ if(I.flags_inv & HIDEJUMPSUIT)
+ update_inv_w_uniform()
+ update_inv_wear_suit(0)
+ else if(I == w_uniform)
+ if(r_store)
+ unEquip(r_store, 1) //Again, makes sense for pockets to drop.
+ if(l_store)
+ unEquip(l_store, 1)
+ if(wear_id)
+ unEquip(wear_id)
+ if(belt)
+ unEquip(belt)
w_uniform = null
- success = 1
- update_inv_w_uniform()
- else if (W == gloves)
+ update_inv_w_uniform(0)
+ else if(I == gloves)
gloves = null
- success = 1
- update_inv_gloves()
- else if (W == glasses)
+ update_inv_gloves(0)
+ else if(I == glasses)
glasses = null
- success = 1
- update_inv_glasses()
- else if (W == head)
+ update_inv_glasses(0)
+ else if(I == head)
head = null
- if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
+ if(I.flags & BLOCKHAIR)
update_hair(0) //rebuild hair
- success = 1
- update_inv_head()
- else if (W == l_ear)
- l_ear = null
- success = 1
- update_inv_ears()
- else if (W == r_ear)
+ update_inv_head(0)
+ else if(I == r_ear)
r_ear = null
- success = 1
- update_inv_ears()
- else if (W == shoes)
+ update_inv_ears(0)
+ else if (I == l_ear)
+ l_ear = null
+ update_inv_ears(0)
+ else if(I == shoes)
shoes = null
- success = 1
- update_inv_shoes()
- else if (W == belt)
+ update_inv_shoes(0)
+ else if(I == belt)
belt = null
- success = 1
- update_inv_belt()
- else if (W == wear_mask)
+ update_inv_belt(0)
+ else if(I == wear_mask)
wear_mask = null
- success = 1
- if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
+ if(I.flags & BLOCKHAIR)
update_hair(0) //rebuild hair
if(internal)
if(internals)
internals.icon_state = "internal0"
internal = null
- update_inv_wear_mask()
- else if (W == wear_id)
+ update_inv_wear_mask(0)
+ else if(I == wear_id)
wear_id = null
- success = 1
- update_inv_wear_id()
- else if (W == wear_pda)
- wear_pda = null
- success = 1
- update_inv_wear_pda()
- else if (W == r_store)
+ update_inv_wear_id(0)
+ else if(I == r_store)
r_store = null
- success = 1
- update_inv_pockets()
- else if (W == l_store)
+ update_inv_pockets(0)
+ else if(I == l_store)
l_store = null
- success = 1
- update_inv_pockets()
- else if (W == s_store)
+ update_inv_pockets(0)
+ else if(I == s_store)
s_store = null
- success = 1
- update_inv_s_store()
- else if (W == back)
- back = null
- success = 1
- update_inv_back()
- else if (W == handcuffed)
- handcuffed = null
- success = 1
- update_inv_handcuffed()
- else if (W == legcuffed)
- legcuffed = null
- success = 1
- update_inv_legcuffed()
- else if (W == r_hand)
- r_hand = null
- success = 1
- update_inv_r_hand()
- else if (W == l_hand)
- l_hand = null
- success = 1
- update_inv_l_hand()
- else
- return 0
+ update_inv_s_store(0)
- if(success)
- if (W)
- if (client)
- client.screen -= W
- W.loc = loc
- W.dropped(src)
- //if(W)
- //W.layer = initial(W.layer)
update_action_buttons()
- return 1
@@ -337,7 +290,7 @@
update_inv_s_store(redraw_mob)
if(slot_in_backpack)
if(src.get_active_hand() == W)
- src.u_equip(W)
+ src.unEquip(W)
W.loc = src.back
if(slot_tie)
var/obj/item/clothing/under/uniform = src.w_uniform
@@ -454,7 +407,7 @@
if("mask")
target.attack_log += text("\[[time_stamp()]\] Had their mask removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) mask")
- if(target.wear_mask && !target.wear_mask.canremove)
+ if(target.wear_mask && (target.wear_mask.flags & NODROP))
message = "\red [source] fails to take off \a [target.wear_mask] from [target]'s head!"
return
else if(target.wear_mask)
@@ -470,7 +423,7 @@
if("gloves")
target.attack_log += text("\[[time_stamp()]\] Has had their gloves ([target.gloves]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) gloves ([target.gloves])")
- if(target.gloves && !target.gloves.canremove)
+ if(target.gloves && (target.gloves.flags & NODROP))
message = "\red [source] fails to take off \a [target.gloves] from [target]'s hands!"
return
else if(target.gloves)
@@ -478,7 +431,7 @@
if("eyes")
target.attack_log += text("\[[time_stamp()]\] Has had their eyewear ([target.glasses]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) eyewear ([target.glasses])")
- if(target.glasses && !target.glasses.canremove)
+ if(target.glasses && (target.glasses.flags & NODROP))
message = "\red [source] fails to take off \a [target.glasses] from [target]'s eyes!"
return
else if(target.glasses)
@@ -486,7 +439,7 @@
if("l_ear")
target.attack_log += text("\[[time_stamp()]\] Has had their left ear item ([target.l_ear]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) left ear item ([target.l_ear])")
- if(target.l_ear && !target.l_ear.canremove)
+ if(target.l_ear && (target.l_ear.flags & NODROP))
message = "\red [source] fails to take off \a [target.l_ear] from [target]'s left ear!"
return
else if(target.l_ear)
@@ -494,7 +447,7 @@
if("r_ear")
target.attack_log += text("\[[time_stamp()]\] Has had their right ear item ([target.r_ear]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) right ear item ([target.r_ear])")
- if(target.r_ear && !target.r_ear.canremove)
+ if(target.r_ear && (target.r_ear.flags & NODROP))
message = "\red [source] fails to take off \a [target.r_ear] from [target]'s right ear!"
return
else if(target.r_ear)
@@ -502,7 +455,7 @@
if("head")
target.attack_log += text("\[[time_stamp()]\] Has had their hat ([target.head]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) hat ([target.head])")
- if(target.head && !target.head.canremove)
+ if(target.head && (target.head.flags & NODROP))
message = "\red [source] fails to take off \a [target.head] from [target]'s head!"
return
else if(target.head)
@@ -510,7 +463,7 @@
if("shoes")
target.attack_log += text("\[[time_stamp()]\] Has had their shoes ([target.shoes]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) shoes ([target.shoes])")
- if(target.shoes && !target.shoes.canremove)
+ if(target.shoes && (target.shoes.flags & NODROP))
message = "\red [source] fails to take off \a [target.shoes] from [target]'s feet!"
return
else if(target.shoes)
@@ -523,7 +476,7 @@
if("suit")
target.attack_log += text("\[[time_stamp()]\] Has had their suit ([target.wear_suit]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) suit ([target.wear_suit])")
- if(target.wear_suit && !target.wear_suit.canremove)
+ if(target.wear_suit && (target.wear_suit.flags & NODROP))
message = "\red [source] fails to take off \a [target.wear_suit] from [target]'s body!"
return
else if(target.wear_suit)
@@ -550,7 +503,7 @@
for(var/obj/item/I in list(target.l_store, target.r_store))
if(I.on_found(source))
return
- if(target.w_uniform && !target.w_uniform.canremove)
+ if(target.w_uniform && (target.w_uniform.flags & NODROP))
message = "\red [source] fails to take off \a [target.w_uniform] from [target]'s body!"
return
else
@@ -633,7 +586,7 @@ It works in conjuction with the process() above.
This proc works for humans only. Aliens stripping humans and the like will all use this proc. Stripping monkeys or somesuch will use their version of this proc.
The first if statement for "mask" and such refers to items that are already equipped and un-equipping them.
The else statement is for equipping stuff to empty slots.
-!canremove refers to variable of /obj/item/clothing which either allows or disallows that item to be removed.
+The NODROP flag refers to variable of /obj/item/clothing which either allows or disallows that item to be removed.
It can still be worn/put on as normal.
*/
/obj/effect/equip_e/human/done() //TODO: And rewrite this :< ~Carn
@@ -652,11 +605,11 @@ It can still be worn/put on as normal.
switch(place) //here we go again...
if("mask")
slot_to_process = slot_wear_mask
- if (target.wear_mask && target.wear_mask.canremove)
+ if (target.wear_mask && !(target.wear_mask.flags & NODROP))
strip_item = target.wear_mask
if("gloves")
slot_to_process = slot_gloves
- if (target.gloves && target.gloves.canremove)
+ if (target.gloves && !(target.gloves.flags & NODROP))
strip_item = target.gloves
if("eyes")
slot_to_process = slot_glasses
@@ -672,7 +625,7 @@ It can still be worn/put on as normal.
strip_item = target.s_store
if("head")
slot_to_process = slot_head
- if (target.head && target.head.canremove)
+ if (target.head && !(target.head.flags & NODROP))
strip_item = target.head
if("l_ear")
slot_to_process = slot_l_ear
@@ -684,7 +637,7 @@ It can still be worn/put on as normal.
strip_item = target.r_ear
if("shoes")
slot_to_process = slot_shoes
- if (target.shoes && target.shoes.canremove)
+ if (target.shoes && !(target.shoes.flags & NODROP))
strip_item = target.shoes
if("l_hand")
if (istype(target, /obj/item/clothing/suit/straight_jacket))
@@ -700,11 +653,11 @@ It can still be worn/put on as normal.
strip_item = target.r_hand
if("uniform")
slot_to_process = slot_w_uniform
- if(target.w_uniform && target.w_uniform.canremove)
+ if(target.w_uniform && !(target.w_uniform.flags & NODROP))
strip_item = target.w_uniform
if("suit")
slot_to_process = slot_wear_suit
- if (target.wear_suit && target.wear_suit.canremove)
+ if (target.wear_suit && !(target.wear_suit.flags & NODROP))
strip_item = target.wear_suit
if("tie")
var/obj/item/clothing/under/suit = target.w_uniform
@@ -810,7 +763,9 @@ It can still be worn/put on as normal.
if(slot_to_process)
if(strip_item) //Stripping an item from the mob
var/obj/item/W = strip_item
- target.u_equip(W)
+ if((W.flags & NODROP) || (W.flags & ABSTRACT)) //Just to be sure
+ return
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -820,11 +775,11 @@ It can still be worn/put on as normal.
W.add_fingerprint(source)
if(slot_to_process == slot_l_store) //pockets! Needs to process the other one too. Snowflake code, wooo! It's not like anyone will rewrite this anytime soon. If I'm wrong then... CONGRATULATIONS! ;)
if(target.r_store)
- target.u_equip(target.r_store) //At this stage l_store is already processed by the code above, we only need to process r_store.
+ target.unEquip(target.r_store) //At this stage l_store is already processed by the code above, we only need to process r_store.
else
if(item && target.has_organ_for_slot(slot_to_process)) //Placing an item on the mob
if(item.mob_can_equip(target, slot_to_process, 0))
- source.u_equip(item)
+ source.unEquip(item)
target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
item.dropped(source)
source.update_icons()
@@ -843,7 +798,7 @@ It can still be worn/put on as normal.
if(slot_r_hand)
return r_hand
return null
-
+
/mob/living/carbon/get_item_by_slot(slot_id)
switch(slot_id)
if(slot_back)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 8eb38c1e7b0..8319046d5d5 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1537,7 +1537,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
// Not on the station or mining?
var/turf/temp_turf = get_turf(remoteview_target)
- if((temp_turf.z != 1 && temp_turf.z != 5) || remoteview_target.stat!=CONSCIOUS)
+ if((!(temp_turf.z in config.contact_levels)) || remoteview_target.stat!=CONSCIOUS)
src << "\red Your psy-connection grows too faint to maintain!"
isRemoteObserve = 0
if(!isRemoteObserve && client && !client.adminobs)
diff --git a/code/modules/mob/living/carbon/human/plasmaman/species.dm b/code/modules/mob/living/carbon/human/plasmaman/species.dm
index d940b638373..a9646cdd886 100644
--- a/code/modules/mob/living/carbon/human/plasmaman/species.dm
+++ b/code/modules/mob/living/carbon/human/plasmaman/species.dm
@@ -24,10 +24,10 @@
H.fire_sprite = "Plasmaman"
// Unequip existing suits and hats.
- H.u_equip(H.wear_suit)
- H.u_equip(H.head)
+ H.unEquip(H.wear_suit)
+ H.unEquip(H.head)
if(H.mind.assigned_role!="Clown")
- H.u_equip(H.wear_mask)
+ H.unEquip(H.wear_mask)
H.equip_or_collect(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
var/suit=/obj/item/clothing/suit/space/plasmaman
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 5745751e219..9a47536c759 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -598,7 +598,7 @@ proc/get_damage_icon_part(damage_state, body_part)
standing.icon = 'icons/mob/uniform_fat.dmi'
else
src << "\red You burst out of \the [w_uniform]!"
- drop_from_inventory(w_uniform)
+ unEquip(w_uniform)
return
else
standing.icon = 'icons/mob/uniform.dmi'
@@ -626,7 +626,7 @@ proc/get_damage_icon_part(damage_state, body_part)
// Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY
for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) //
if(thing) //
- u_equip(thing) //
+ unEquip(thing) //
if (client) //
client.screen -= thing //
//
@@ -819,14 +819,14 @@ proc/get_damage_icon_part(damage_state, body_part)
standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]")
else
src << "\red You burst out of \the [wear_suit]!"
- drop_from_inventory(wear_suit)
+ unEquip(wear_suit)
return
else
standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]")
if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) )
- drop_from_inventory(handcuffed)
+ unEquip(handcuffed)
drop_l_hand()
drop_r_hand()
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index cb5be464681..dbdeb728fa6 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -230,7 +230,7 @@
return
-/mob/living/carbon/slime/u_equip(obj/item/W as obj)
+/mob/living/carbon/slime/unEquip(obj/item/W as obj)
return
/mob/living/carbon/slime/attack_ui(slot)
@@ -897,8 +897,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
item_state = "golem"
_color = "golem"
has_sensor = 0
+ flags = ABSTRACT | NODROP
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- canremove = 0
/obj/item/clothing/suit/golem
name = "adamantine shell"
@@ -911,21 +911,19 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
+ flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE | ABSTRACT | NODROP
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
- canremove = 0
armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/shoes/golem
name = "golem's feet"
desc = "sturdy adamantine feet"
icon_state = "golem"
- item_state = null
- canremove = 0
- flags = NOSLIP
+ item_state = "golem"
+ flags = NOSLIP | ABSTRACT | MASKINTERNALS | MASKCOVERSMOUTH | NODROP
slowdown = SHOES_SLOWDOWN+1
@@ -934,18 +932,9 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
desc = "the imposing face of an adamantine golem"
icon_state = "golem"
item_state = "golem"
- canremove = 0
- siemens_coefficient = 0
- unacidable = 1
-
-/obj/item/clothing/mask/gas/golem
- name = "golem's face"
- desc = "the imposing face of an adamantine golem"
- icon_state = "golem"
- item_state = "golem"
- canremove = 0
siemens_coefficient = 0
unacidable = 1
+ flags = ABSTRACT | NODROP
/obj/item/clothing/gloves/golem
@@ -954,7 +943,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
icon_state = "golem"
item_state = null
siemens_coefficient = 0
- canremove = 0
+ flags = ABSTRACT | NODROP
/obj/item/clothing/head/space/golem
@@ -963,9 +952,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
_color = "dermal"
name = "golem's head"
desc = "a golem's head"
- canremove = 0
unacidable = 1
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE | ABSTRACT | NODROP
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0)
@@ -1142,7 +1130,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
desc = "Allows you to change your slimeperson color, once."
icon = 'icons/obj/device.dmi'
icon_state = "t-ray0"
- flags = TABLEPASS
force = 1.0
w_class = 1.0
throwforce = 1.0
diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm
index a90868c1c8c..4039156e506 100644
--- a/code/modules/mob/living/carbon/monkey/diona.dm
+++ b/code/modules/mob/living/carbon/monkey/diona.dm
@@ -193,7 +193,7 @@
adult.rename_self("diona")
for (var/obj/item/W in src.contents)
- src.drop_from_inventory(W)
+ src.unEquip(W)
del(src)
diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm
index 1ce1c4019a9..8ccadd0349c 100644
--- a/code/modules/mob/living/carbon/monkey/inventory.dm
+++ b/code/modules/mob/living/carbon/monkey/inventory.dm
@@ -41,7 +41,7 @@
var/message = null
switch(place)
if("mask")
- if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
+ if(istype(target.wear_mask, /obj/item/clothing)&&(target.wear_mask:flags & NODROP))
message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_mask, target)
else
message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target)
@@ -76,10 +76,10 @@
switch(place)
if("mask")
if (target.wear_mask)
- if(istype(target.wear_mask, /obj/item/clothing)&& !target.wear_mask:canremove)
+ if(istype(target.wear_mask, /obj/item/clothing)&& (target.wear_mask:flags & NODROP))
return
var/obj/item/W = target.wear_mask
- target.u_equip(W)
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -97,7 +97,7 @@
if("l_hand")
if (target.l_hand)
var/obj/item/W = target.l_hand
- target.u_equip(W)
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -117,7 +117,7 @@
if("r_hand")
if (target.r_hand)
var/obj/item/W = target.r_hand
- target.u_equip(W)
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -137,7 +137,7 @@
if("back")
if (target.back)
var/obj/item/W = target.back
- target.u_equip(W)
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -155,7 +155,7 @@
if("handcuff")
if (target.handcuffed)
var/obj/item/W = target.handcuffed
- target.u_equip(W)
+ target.unEquip(W)
if (target.client)
target.client.screen -= W
if (W)
@@ -199,7 +199,7 @@
if(!istype(W)) return
if(W == get_active_hand())
- u_equip(W)
+ unEquip(W)
switch(slot)
if(slot_back)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index c3f4c035292..290f356cb60 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -274,11 +274,11 @@
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has pushed down [name]!", M), 1)
else
- drop_item()
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- for(var/mob/O in viewers(src, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("\red [] has disarmed [name]!", M), 1)
+ if(drop_item())
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has disarmed [name]!", M), 1)
return
/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
@@ -344,10 +344,10 @@
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has tackled down [name]!", M), 1)
else
- drop_item()
- for(var/mob/O in viewers(src, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("\red [] has disarmed [name]!", M), 1)
+ if(drop_item())
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has disarmed [name]!", M), 1)
adjustBruteLoss(damage)
updatehealth()
return
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index de1cd283e44..246f6a1ba01 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -286,11 +286,11 @@
var/mob/living/carbon/C = src
if (C.handcuffed && !initial(C.handcuffed))
- C.drop_from_inventory(C.handcuffed)
+ C.unEquip(C.handcuffed)
C.handcuffed = initial(C.handcuffed)
if (C.legcuffed && !initial(C.legcuffed))
- C.drop_from_inventory(C.legcuffed)
+ C.unEquip(C.legcuffed)
C.legcuffed = initial(C.legcuffed)
hud_updateflag |= 1 << HEALTH_HUD
hud_updateflag |= 1 << STATUS_HUD
@@ -466,7 +466,7 @@
var/mob/M = H.loc //Get our mob holder (if any).
if(istype(M))
- M.drop_from_inventory(H)
+ M.unEquip(H)
M << "[H] wriggles out of your grip!"
src << "You wriggle out of [M]'s grip!"
else if(istype(H.loc,/obj/item))
@@ -674,7 +674,7 @@
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
O.show_message("\red [CM] manages to remove the handcuffs!", 1)
CM << "\blue You successfully remove \the [CM.handcuffed]."
- CM.drop_from_inventory(CM.handcuffed)
+ CM.unEquip(CM.handcuffed)
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
CM.next_move = world.time + 100
@@ -711,7 +711,7 @@
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
O.show_message("\red [CM] manages to remove the legcuffs!", 1)
CM << "\blue You successfully remove \the [CM.legcuffed]."
- CM.drop_from_inventory(CM.legcuffed)
+ CM.unEquip(CM.legcuffed)
CM.legcuffed = null
CM.update_inv_legcuffed()
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 47464bc12e4..117a2d127d5 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -1,3 +1,6 @@
+#define AI_CHECK_WIRELESS 1
+#define AI_CHECK_RADIO 2
+
var/list/ai_list = list()
//Not sure why this is necessary...
@@ -63,7 +66,7 @@ var/list/ai_list = list()
var/obj/item/borg/sight/hud/sec/sechud = null
var/obj/item/borg/sight/hud/med/healthhud = null
-
+
var/arrivalmsg = "$name, $rank, has arrived on the station."
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
@@ -77,8 +80,8 @@ var/list/ai_list = list()
possibleNames -= pickedName
pickedName = null
- real_name = pickedName
- name = real_name
+ aiPDA = new/obj/item/device/pda/ai(src)
+ SetName(pickedName)
anchored = 1
canmove = 0
density = 1
@@ -96,11 +99,6 @@ var/list/ai_list = list()
verbs += /mob/living/silicon/ai/proc/show_laws_verb
- aiPDA = new/obj/item/device/pda/ai(src)
- aiPDA.owner = name
- aiPDA.ownjob = "AI"
- aiPDA.name = name + " (" + aiPDA.ownjob + ")"
-
aiMulti = new(src)
aiRadio = new(src)
aiRadio.myAi = src
@@ -112,7 +110,7 @@ var/list/ai_list = list()
if (istype(loc, /turf))
verbs.Add(/mob/living/silicon/ai/proc/ai_network_change, \
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
- /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/botcall, /mob/living/silicon/ai/proc/control_integrated_radio, /mob/living/silicon/ai/proc/control_hud, /mob/living/silicon/ai/proc/change_arrival_message, /mob/living/silicon/ai/proc/ai_store_location, /mob/living/silicon/ai/proc/ai_goto_location, /mob/living/silicon/ai/proc/ai_remove_location)
+ /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/botcall, /mob/living/silicon/ai/proc/control_integrated_radio, /mob/living/silicon/ai/proc/control_hud, /mob/living/silicon/ai/proc/change_arrival_message, /mob/living/silicon/ai/proc/ai_store_location, /mob/living/silicon/ai/proc/ai_goto_location, /mob/living/silicon/ai/proc/ai_remove_location, /mob/living/silicon/ai/proc/nano_crew_monitor, /mob/living/silicon/ai/proc/ai_cancel_call)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
@@ -127,7 +125,7 @@ var/list/ai_list = list()
verbs.Remove(,/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \
/mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
- /mob/living/silicon/ai/proc/toggle_camera_light,/mob/living/silicon/ai/verb/pick_icon,/mob/living/silicon/ai/proc/control_hud, /mob/living/silicon/ai/proc/change_arrival_message)
+ /mob/living/silicon/ai/proc/toggle_camera_light,/mob/living/silicon/ai/verb/pick_icon,/mob/living/silicon/ai/proc/control_hud, /mob/living/silicon/ai/proc/change_arrival_message, /mob/living/silicon/ai/proc/ai_cancel_call)
laws = new /datum/ai_laws/alienmov
else
B.brainmob.mind.transfer_to(src)
@@ -155,11 +153,25 @@ var/list/ai_list = 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")
+ hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
+ init_subsystems()
+
ai_list += src
..()
return
+
+/mob/living/silicon/ai/proc/SetName(pickedName as text)
+ real_name = pickedName
+ name = pickedName
+ if(eyeobj)
+ eyeobj.name = "[pickedName] (AI Eye)"
+
+ // Set ai pda name
+ if(aiPDA)
+ aiPDA.ownjob = "AI"
+ aiPDA.owner = pickedName
+ aiPDA.name = pickedName + " (" + aiPDA.ownjob + ")"
/mob/living/silicon/ai/Destroy()
ai_list -= src
@@ -301,14 +313,15 @@ var/list/ai_list = list()
if(src.stat == 2)
src << "You can't call the shuttle because you are dead!"
return
- if(istype(usr,/mob/living/silicon/ai))
- var/mob/living/silicon/ai/AI = src
- if(AI.control_disabled)
- usr << "Wireless control is disabled!"
- return
+
+ if(check_unable(AI_CHECK_WIRELESS))
+ return
var/confirm = alert("Are you sure you want to call the shuttle?", "Confirm Shuttle Call", "Yes", "No")
+ if(check_unable(AI_CHECK_WIRELESS))
+ return
+
if(confirm == "Yes")
call_shuttle_proc(src)
@@ -317,38 +330,57 @@ var/list/ai_list = list()
var/obj/machinery/computer/communications/C = locate() in machines
if(C)
C.post_status("shuttle")
-
return
+
+/mob/living/silicon/ai/proc/ai_cancel_call()
+ set name = "Recall Emergency Shuttle"
+ set category = "AI Commands"
+
+ if(src.stat == 2)
+ src << "You can't send the shuttle back because you are dead!"
+ return
+
+ if(check_unable(AI_CHECK_WIRELESS))
+ return
+
+ var/confirm = alert("Are you sure you want to recall the shuttle?", "Confirm Shuttle Recall", "Yes", "No")
+
+ if(check_unable(AI_CHECK_WIRELESS))
+ return
+
+ if(confirm == "Yes")
+ cancel_call_proc(src)
/mob/living/silicon/ai/cancel_camera()
src.view_core()
/mob/living/silicon/ai/verb/toggle_anchor()
- set category = "AI Commands"
- set name = "Toggle Floor Bolts"
- if(!isturf(loc)) // if their location isn't a turf
- return // stop
- anchored = !anchored // Toggles the anchor
+ set category = "AI Commands"
+ set name = "Toggle Floor Bolts"
+
+ if(!isturf(loc)) // if their location isn't a turf
+ return // stop
+
+ anchored = !anchored // Toggles the anchor
- src << "[anchored ? "You are now anchored." : "You are now unanchored."]"
- // the message in the [] will change depending whether or not the AI is anchored
+ src << "[anchored ? "You are now anchored." : "You are now unanchored."]"
/mob/living/silicon/ai/update_canmove()
return 0
-
-
-/mob/living/silicon/ai/proc/ai_cancel_call()
- set category = "Malfunction"
+
+/mob/living/silicon/ai/proc/announcement()
+ set name = "Announcement"
+ set desc = "Create a vocal announcement by typing in the available words to create a sentence."
+ set category = "AI Commands"
+
if(src.stat == 2)
- src << "You can't send the shuttle back because you are dead!"
+ src << "You can't call make an announcement because you are dead!"
return
- if(istype(usr,/mob/living/silicon/ai))
- var/mob/living/silicon/ai/AI = src
- if(AI.control_disabled)
- src << "Wireless control is disabled!"
- return
- cancel_call_proc(src)
- return
+
+ if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
+ return
+
+ ai_announcement()
/mob/living/silicon/ai/check_eye(var/mob/user as mob)
if (!current)
@@ -581,9 +613,9 @@ var/list/ai_list = list()
src << "Critical error. System offline."
return
- if(control_disabled)
- src << "Wireless communication is disabled."
+ if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
+
var/ai_allowed_Zlevel = list(1,3,5)
var/d
var/area/bot_area
@@ -704,6 +736,9 @@ var/list/ai_list = list()
set name = "Jump To Network"
unset_machine()
var/cameralist[0]
+
+ if(check_unable())
+ return
if(usr.stat == 2)
usr << "You can't change your camera network because you are dead!"
@@ -721,6 +756,9 @@ var/list/ai_list = list()
cameralist[i] = i
var/old_network = network
network = input(U, "Which network would you like to view?") as null|anything in cameralist
+
+ if(check_unable())
+ return
if(!U.eyeobj)
U.view_core()
@@ -752,8 +790,16 @@ var/list/ai_list = list()
if(usr.stat == 2)
usr <<"You cannot change your emotional status because you are dead!"
return
+
+ if(check_unable())
+ return
+
var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Sad", "BSOD", "Blank", "Problems?", "Awesome", "Facepalm", "Friend Computer")
var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions
+
+ if(check_unable())
+ return
+
for (var/obj/machinery/M in machines) //change status
if(istype(M, /obj/machinery/ai_status_display))
var/obj/machinery/ai_status_display/AISD = M
@@ -773,6 +819,9 @@ var/list/ai_list = list()
set name = "Change Hologram"
set desc = "Change the default hologram available to AI to something else."
set category = "AI Commands"
+
+ if(check_unable())
+ return
var/input
if(alert("Would you like to select a hologram based on a crew member or switch to unique avatar?",,"Crew Member","Unique")=="Crew Member")
@@ -827,6 +876,9 @@ var/list/ai_list = list()
if(stat != CONSCIOUS)
return
+
+ if(check_unable())
+ return
camera_light_on = !camera_light_on
src << "Camera lights [camera_light_on ? "activated" : "deactivated"]."
@@ -842,12 +894,12 @@ var/list/ai_list = list()
set desc = "Augment visual feed with internal sensor overlays."
set category = "AI Commands"
toggle_sensor_mode()
-
+
/mob/living/silicon/ai/proc/change_arrival_message()
set name = "Set Arrival Message"
set desc = "Change the message that's transmitted when a new crew member arrives on station."
set category = "AI Commands"
-
+
var/newmsg = input("What would you like the arrival message to be? Use $name to substitute the crew member's name, and use $rank to substitute the crew member's rank.", "Change Arrival Message", arrivalmsg) as text
if(newmsg != arrivalmsg)
arrivalmsg = newmsg
@@ -904,8 +956,11 @@ var/list/ai_list = list()
set name = "Radio Settings"
set desc = "Allows you to change settings of your radio."
set category = "AI Commands"
-
- src << "Accessing Subspace Transceiver control..."
+
+ if(check_unable(AI_CHECK_RADIO))
+ return
+
+ src << "Accessing Subspace Transceiver control..."
if (src.aiRadio)
src.aiRadio.interact(src)
@@ -921,7 +976,7 @@ var/list/ai_list = list()
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
src << "Unable to locate an airlock"
return
- if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && !H.head.canremove)
+ if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && (H.head.flags & NODROP))
src << "Unable to locate an airlock"
return
if(H.digitalcamo)
@@ -956,4 +1011,25 @@ var/list/ai_list = list()
src << "\red You deny the request."
else
src << "\red You've failed to open an airlock for [target]"
- return
\ No newline at end of file
+ return
+
+
+/mob/living/silicon/ai/proc/check_unable(var/flags = 0)
+ if(stat == DEAD)
+ usr << "\red You are dead!"
+ return 1
+
+ if((flags & AI_CHECK_WIRELESS) && src.control_disabled)
+ usr << "\red Wireless control is disabled!"
+ return 1
+ if((flags & AI_CHECK_RADIO) && src.aiRadio.disabledAi)
+ src << "\red System Error - Transceiver Disabled!"
+ return 1
+ return 0
+
+/mob/living/silicon/ai/proc/is_in_chassis()
+ return istype(loc, /turf)
+
+#undef AI_CHECK_WIRELESS
+#undef AI_CHECK_RADIO
+
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index c9541858467..dfa05ddc5d0 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -15,21 +15,21 @@
var/callshuttle = 0
for(var/obj/machinery/computer/communications/commconsole in world)
- if(commconsole.z == 2)
+ if((commconsole.z in config.admin_levels))
continue
if(istype(commconsole.loc,/turf))
break
callshuttle++
for(var/obj/item/weapon/circuitboard/communications/commboard in world)
- if(commboard.z == 2)
+ if((commboard.z in config.admin_levels))
continue
if(istype(commboard.loc,/turf) || istype(commboard.loc,/obj/item/weapon/storage))
break
callshuttle++
for(var/mob/living/silicon/ai/shuttlecaller in player_list)
- if(shuttlecaller.z == 2)
+ if((shuttlecaller.z in config.admin_levels))
continue
if(!shuttlecaller.stat && shuttlecaller.client && istype(shuttlecaller.loc,/turf))
break
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 8218bec993e..ec02433c46a 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -134,7 +134,7 @@
src << "ERROR: Eyeobj not found. Creating new eye..."
src.eyeobj = new(src.loc)
src.eyeobj.ai = src
- src.eyeobj.name = "[src.name] (AI Eye)" // Give it a name
+ src.SetName(src.name)
if(client && client.eye)
client.eye = src
diff --git a/code/modules/mob/living/silicon/ai/nano.dm b/code/modules/mob/living/silicon/ai/nano.dm
new file mode 100644
index 00000000000..f9bb7a25d79
--- /dev/null
+++ b/code/modules/mob/living/silicon/ai/nano.dm
@@ -0,0 +1,10 @@
+var/obj/nano_module/crew_monitor/crew_monitor
+
+/mob/living/silicon/ai/proc/init_subsystems()
+ crew_monitor = new(src)
+
+/mob/living/silicon/ai/proc/nano_crew_monitor()
+ set category = "AI Commands"
+ set name = "Crew Monitor"
+
+ crew_monitor.ui_interact(usr)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index e535a2dedee..b596fd53541 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -1,32 +1,32 @@
/mob/living/silicon/ai/say(var/message)
- if(parent && istype(parent) && parent.stat != 2)
- parent.say(message)
- return
- //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
- ..(message)
+ if(parent && istype(parent) && parent.stat != 2)
+ parent.say(message) //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
+ return
+
+ ..(message)
/mob/living/silicon/ai/say_understands(var/other)
- if (istype(other, /mob/living/carbon/human))
- return 1
- if (istype(other, /mob/living/silicon/robot))
- return 1
- if (istype(other, /mob/living/silicon/decoy))
- return 1
- if (istype(other, /mob/living/carbon/brain))
- return 1
- if (istype(other, /mob/living/silicon/pai))
- return 1
- return ..()
+ if (istype(other, /mob/living/carbon/human))
+ return 1
+ if (istype(other, /mob/living/silicon/robot))
+ return 1
+ if (istype(other, /mob/living/silicon/decoy))
+ return 1
+ if (istype(other, /mob/living/carbon/brain))
+ return 1
+ if (istype(other, /mob/living/silicon/pai))
+ return 1
+ return ..()
/mob/living/silicon/ai/say_quote(var/text)
- var/ending = copytext(text, length(text))
+ var/ending = copytext(text, length(text))
- if (ending == "?")
- return "queries, \"[text]\"";
- else if (ending == "!")
- return "declares, \"[text]\"";
+ if (ending == "?")
+ return "queries, \"[text]\"";
+ else if (ending == "!")
+ return "declares, \"[text]\"";
- return "states, \"[text]\"";
+ return "states, \"[text]\"";
/mob/living/silicon/ai/proc/IsVocal()
@@ -36,44 +36,28 @@ var/const/VOX_DELAY = 100
var/const/VOX_PATH = "sound/vox_fem/"
/mob/living/silicon/ai/verb/announcement_help()
-
- set name = "Announcement Help"
- set desc = "Display a list of vocal words to announce to the crew."
- set category = "AI Commands"
-
-
- var/dat = "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.
\
- - You can also click on the word to preview it.
\
- - You can only say 30 words for every announcement.
\
- - Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.
\
- WARNING:
Misuse of the announcement system will get you job banned.
"
-
- var/index = 0
- for(var/word in vox_sounds)
- index++
- dat += "[capitalize(word)]"
- if(index != vox_sounds.len)
- dat += " / "
-
- var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400)
- popup.set_content(dat)
- popup.open()
-
-
-/mob/living/silicon/ai/proc/announcement()
-
- set name = "Announcement"
- set desc = "Create a vocal announcement by typing in the available words to create a sentence."
+ set name = "Announcement Help"
+ set desc = "Display a list of vocal words to announce to the crew."
set category = "AI Commands"
- if(src.stat == 2)
- src << "You can't call the shuttle because you are dead!"
- return
- if(istype(usr,/mob/living/silicon/ai))
- var/mob/living/silicon/ai/AI = src
- if(AI.control_disabled)
- usr << "Wireless control is disabled!"
- return
+ var/dat = "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.
\
+ - You can also click on the word to preview it.
\
+ - You can only say 30 words for every announcement.
\
+ - Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.
\
+ WARNING:
Misuse of the announcement system will get you job banned.
"
+
+ var/index = 0
+ for(var/word in vox_sounds)
+ index++
+ dat += "[capitalize(word)]"
+ if(index != vox_sounds.len)
+ dat += " / "
+
+ var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400)
+ popup.set_content(dat)
+ popup.open()
+
+/mob/living/silicon/ai/proc/ai_announcement()
if(announcing_vox > world.time)
src << "Please wait [round((announcing_vox - world.time) / 10)] seconds."
return
@@ -112,27 +96,24 @@ var/const/VOX_PATH = "sound/vox_fem/"
/proc/play_vox_word(var/word, var/z_level, var/mob/only_listener)
+ word = lowertext(word)
+ if(vox_sounds[word])
+ var/sound_file = vox_sounds[word]
+ var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL)
+ voice.status = SOUND_STREAM
- word = lowertext(word)
-
- if(vox_sounds[word])
-
- var/sound_file = vox_sounds[word]
- var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL)
- voice.status = SOUND_STREAM
-
- // If there is no single listener, broadcast to everyone in the same z level
- if(!only_listener)
- // Play voice for all mobs in the z level
- for(var/mob/M in player_list)
- if(M.client)
- var/turf/T = get_turf(M)
- if(T.z == z_level)
- M << voice
- else
- only_listener << voice
- return 1
- return 0
+ // If there is no single listener, broadcast to everyone in the same z level
+ if(!only_listener)
+ // Play voice for all mobs in the z level
+ for(var/mob/M in player_list)
+ if(M.client)
+ var/turf/T = get_turf(M)
+ if(T.z == z_level && !isdeaf(M))
+ M << voice
+ else
+ only_listener << voice
+ return 1
+ return 0
// VOX sounds moved to /code/defines/vox_sounds.dm
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 16ac8d7ec9c..48a34265d43 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -334,7 +334,7 @@
//I'm not sure how much of this is necessary, but I would rather avoid issues.
if(istype(card.loc,/mob))
var/mob/holder = card.loc
- holder.drop_from_inventory(card)
+ holder.unEquip(card)
else if(istype(card.loc,/obj/item/clothing/suit/space/space_ninja))
var/obj/item/clothing/suit/space/space_ninja/holder = card.loc
holder.pai = null
@@ -503,4 +503,3 @@
spawn(1)
close_up()
return 2
-
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 7d867036d5a..5817715ff99 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -168,7 +168,7 @@
icon_state = "robotanalyzer"
item_state = "analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index dbbf6744701..e28f9ac8b7d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -188,12 +188,12 @@
/mob/living/silicon/robot/proc/pick_module()
if(module)
return
- var/list/modules = list("Standard", "Engineering", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Security")
+ var/list/modules = list("Standard", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security")
if(security_level == (SEC_LEVEL_GAMMA || SEC_LEVEL_EPSILON) || crisis)
src << "\red Crisis mode active. Combat module available."
modules+="Combat"
if(mmi != null && mmi.alien)
- modules="Hunter"
+ modules = "Hunter"
modtype = input("Please, select a module!", "Robot", null, null) in modules
designation = modtype
var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
@@ -237,8 +237,8 @@
module_sprites["Advanced Droid"] = "droid-miner"
module_sprites["Treadhead"] = "Miner"
- if("Crisis")
- module = new /obj/item/weapon/robot_module/crisis(src)
+ if("Medical")
+ module = new /obj/item/weapon/robot_module/medical(src)
channels = list("Medical" = 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Medical")
@@ -247,17 +247,6 @@
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
- if("Surgeon")
- module = new /obj/item/weapon/robot_module/surgeon(src)
- channels = list("Medical" = 1)
- if(camera && "Robots" in camera.network)
- camera.network.Add("Medical")
-
- module_sprites["Basic"] = "Medbot"
- module_sprites["Standard"] = "surgeon"
- module_sprites["Advanced Droid"] = "droid-medical"
- module_sprites["Needles"] = "medicalrobot"
-
if("Security")
module = new /obj/item/weapon/robot_module/security(src)
channels = list("Security" = 1)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7a14f816197..a2c1fcb7347 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -4,7 +4,7 @@
icon_state = "std_module"
w_class = 100.0
item_state = "electronic"
- flags = FPRINT|TABLEPASS | CONDUCT
+ flags = CONDUCT
var/list/modules = list()
var/obj/item/emag = null
@@ -71,10 +71,12 @@
src.emag = new /obj/item/weapon/melee/energy/sword/cyborg(src)
return
-/obj/item/weapon/robot_module/surgeon
- name = "surgeon robot module"
+/obj/item/weapon/robot_module/medical
+ name = "medical robot module"
stacktypes = list(
/obj/item/stack/medical/advanced/bruise_pack = 5,
+ /obj/item/stack/medical/advanced/ointment = 5,
+ /obj/item/stack/medical/splint = 5,
/obj/item/stack/nanopaste = 5
)
@@ -82,7 +84,18 @@
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
+ src.modules += new /obj/item/device/reagent_scanner/adv(src)
+ src.modules += new /obj/item/weapon/borg_defib(src)
+ src.modules += new /obj/item/roller_holder(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)
+ src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
+ src.modules += new /obj/item/weapon/reagent_containers/dropper(src)
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
+ src.modules += new /obj/item/weapon/extinguisher/mini(src)
+ src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src)
+ src.modules += new /obj/item/stack/medical/advanced/ointment(src)
+ src.modules += new /obj/item/stack/medical/splint(src)
+ src.modules += new /obj/item/stack/nanopaste(src)
src.modules += new /obj/item/weapon/scalpel(src)
src.modules += new /obj/item/weapon/hemostat(src)
src.modules += new /obj/item/weapon/retractor(src)
@@ -92,9 +105,6 @@
src.modules += new /obj/item/weapon/bonesetter(src)
src.modules += new /obj/item/weapon/circular_saw(src)
src.modules += new /obj/item/weapon/surgicaldrill(src)
- src.modules += new /obj/item/weapon/extinguisher/mini(src)
- src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src)
- src.modules += new /obj/item/stack/nanopaste(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
@@ -102,59 +112,12 @@
src.emag.name = "Polyacid spray"
return
-/obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R)
if(src.emag)
var/obj/item/weapon/reagent_containers/spray/PS = src.emag
PS.reagents.add_reagent("pacid", 2)
..()
-/obj/item/weapon/robot_module/crisis
- name = "crisis robot module"
- stacktypes = list(
- /obj/item/stack/medical/advanced/ointment = 5,
- /obj/item/stack/medical/advanced/bruise_pack = 5,
- /obj/item/stack/medical/splint = 5
- )
-
-
- New()
- src.modules += new /obj/item/device/flashlight(src)
- src.modules += new /obj/item/device/flash/cyborg(src)
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/device/reagent_scanner/adv(src)
- src.modules += new /obj/item/roller_holder(src)
- src.modules += new /obj/item/stack/medical/advanced/ointment(src)
- src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src)
- src.modules += new /obj/item/stack/medical/splint(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
- src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
- src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
- src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
- src.modules += new /obj/item/weapon/extinguisher/mini(src)
-
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
-
- src.emag.reagents.add_reagent("pacid", 250)
- src.emag.name = "Polyacid spray"
- var/obj/item/weapon/reagent_containers/spray/S = emag
- S.banned_reagents = list()
- return
-
-/obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R)
-
- var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
- if(S.mode == 2)
- S.reagents.clear_reagents()
- S.mode = initial(S.mode)
- S.desc = initial(S.desc)
- S.update_icon()
-
- if(src.emag)
- var/obj/item/weapon/reagent_containers/spray/PS = src.emag
- PS.reagents.add_reagent("pacid", 2)
-
- ..()
-
/obj/item/weapon/robot_module/engineering
name = "engineering robot module"
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index acf6333afce..c9dfb0cccef 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -25,7 +25,15 @@
var/obj/item/inventory_back
var/facehugger
-/mob/living/simple_animal/corgi/Life()
+/mob/living/simple_animal/corgi/New()
+ ..()
+ regenerate_icons()
+
+/mob/living/simple_animal/corgi/Die()
+ ..()
+ regenerate_icons()
+
+/mob/living/simple_animal/corgi/revive()
..()
regenerate_icons()
@@ -33,7 +41,7 @@
user.set_machine(src)
if(user.stat) return
- var/dat = "Inventory of [name]
"
+ var/dat = "
Inventory of [real_name]
"
if(inventory_head)
dat += "
Head: [inventory_head] (Remove)"
else
@@ -85,6 +93,7 @@
SetLuminosity(0)
inventory_head.loc = src.loc
inventory_head = null
+ regenerate_icons()
else
usr << "\red There is nothing to remove from its [remove_from]."
return
@@ -92,6 +101,7 @@
if(inventory_back)
inventory_back.loc = src.loc
inventory_back = null
+ regenerate_icons()
else
usr << "\red There is nothing to remove from its [remove_from]."
return
@@ -163,6 +173,7 @@
usr.drop_item()
place_on_head(item_to_add)
+ regenerate_icons()
if("back")
if(inventory_back)
@@ -383,7 +394,7 @@
..()
/mob/living/simple_animal/corgi/regenerate_icons()
- overlays = list()
+ overlays.Cut()
if(inventory_head)
var/head_icon_state = inventory_head.icon_state
@@ -472,7 +483,7 @@
var/emagged = 0
/mob/living/simple_animal/corgi/Ian/borgi/emag_act(user as mob)
- if (!emagged)
+ if(!emagged)
emagged = 1
visible_message("[user] swipes a card through [src].", "You overload [src]s internal reactor.")
spawn (1000)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 810f1b0e384..48fd6943658 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -625,7 +625,7 @@
stolen_item = C.r_hand
if(stolen_item)
- C.u_equip(stolen_item)
+ C.unEquip(stolen_item)
held_item = stolen_item
stolen_item.loc = src
visible_message("[src] grabs the [held_item] out of [C]'s hand!", "\blue You snag the [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.")
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 890c953c632..800d9967ca7 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -29,6 +29,7 @@
var/response_disarm = "shoves"
var/response_harm = "hits"
var/harm_intent_damage = 3
+ var/force_threshold = 0 //Minimum force required to deal any damage
//Temperature effect
var/minbodytemp = 250
@@ -372,7 +373,6 @@
/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/stack/medical))
-
if(stat != DEAD)
var/obj/item/stack/medical/MED = O
if(health < maxHealth)
@@ -399,20 +399,22 @@
if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
harvest()
else
+ var/damage = 0
if(O.force)
- var/damage = O.force
- if (O.damtype == STAMINA)
- damage = 0
- adjustBruteLoss(damage)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red \b "+"[src] has been attacked with [O] by [user]. ")
+ if(O.force >= force_threshold)
+ damage = O.force
+ if (O.damtype == STAMINA)
+ damage = 0
+ visible_message("[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!",\
+ "[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!")
+ else
+ visible_message("[O] bounces harmlessly off of [src].",\
+ "[O] bounces harmlessly off of [src].")
+ playsound(loc, O.hitsound, 50, 1, -1)
else
- usr << "\red This weapon is ineffective, it does no damage."
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red [user] gently taps [src] with [O]. ")
-
+ user.visible_message("[user] gently taps [src] with [O].",\
+ "This weapon is ineffective, it does no damage.")
+ adjustBruteLoss(damage)
/mob/living/simple_animal/movement_delay()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d2d705ee960..7b197aafcb2 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -246,7 +246,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_BACK) )
return 0
if(H.back)
- if(H.back.canremove)
+ if(!(H.back.flags & NODROP))
return 2
else
return 0
@@ -255,7 +255,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_OCLOTHING) )
return 0
if(H.wear_suit)
- if(H.wear_suit.canremove)
+ if(!(H.wear_suit.flags & NODROP))
return 2
else
return 0
@@ -264,7 +264,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_GLOVES) )
return 0
if(H.gloves)
- if(H.gloves.canremove)
+ if(!(H.gloves.flags & NODROP))
return 2
else
return 0
@@ -273,7 +273,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_FEET) )
return 0
if(H.shoes)
- if(H.shoes.canremove)
+ if(!(H.shoes.flags & NODROP))
return 2
else
return 0
@@ -286,7 +286,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_BELT) )
return 0
if(H.belt)
- if(H.belt.canremove)
+ if(!(H.belt.flags & NODROP))
return 2
else
return 0
@@ -295,7 +295,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_EYES) )
return 0
if(H.glasses)
- if(H.glasses.canremove)
+ if(!(H.glasses.flags & NODROP))
return 2
else
return 0
@@ -304,7 +304,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_HEAD) )
return 0
if(H.head)
- if(H.head.canremove)
+ if(!(H.head.flags & NODROP))
return 2
else
return 0
@@ -313,7 +313,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & slot_l_ear) )
return 0
if(H.l_ear)
- if(H.l_ear.canremove)
+ if(!(H.l_ear.flags & NODROP))
return 2
else
return 0
@@ -322,7 +322,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & slot_r_ear) )
return 0
if(H.r_ear)
- if(H.r_ear.canremove)
+ if(!(H.r_ear.flags & NODROP))
return 2
else
return 0
@@ -333,7 +333,7 @@ var/list/slot_equipment_priority = list( \
if((M_FAT in H.mutations) && !(flags & ONESIZEFITSALL))
return 0
if(H.w_uniform)
- if(H.w_uniform.canremove)
+ if(!(H.w_uniform.flags & NODROP))
return 2
else
return 0
@@ -346,7 +346,7 @@ var/list/slot_equipment_priority = list( \
if( !(slot_flags & SLOT_ID) )
return 0
if(H.wear_id)
- if(H.wear_id.canremove)
+ if(!(H.wear_id.flags & NODROP))
return 2
else
return 0
@@ -389,7 +389,7 @@ var/list/slot_equipment_priority = list( \
return 0
if( istype(src, /obj/item/device/pda) || istype(src, /obj/item/weapon/pen) || is_type_in_list(src, H.wear_suit.allowed) )
if(H.s_store)
- if(H.s_store.canremove)
+ if(!(H.s_store.flags & NODROP))
return 2
else
return 0
@@ -438,9 +438,9 @@ var/list/slot_equipment_priority = list( \
[name]
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
-
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
+
Left Hand: [(l_hand && !(l_hand.flags & ABSTRACT)) ? l_hand : "Nothing"]
+
Right Hand: [(r_hand && !(r_hand.flags & ABSTRACT)) ? r_hand : "Nothing"]
+
Back: [(back && !(back.flags & ABSTRACT)) ? back : "Nothing"] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
[(internal ? text("Remove Internal") : "")]
Empty Pockets
Refresh
@@ -881,7 +881,7 @@ var/list/slot_equipment_priority = list( \
stat(null, "Bots-[master_controller.aibots_cost]\t#[aibots.len]")
stat(null, "Obj-[master_controller.objects_cost]\t#[processing_objects.len]")
stat(null, "PiNet-[master_controller.networks_cost]\t#[pipe_networks.len]")
- stat(null, "Ponet-[master_controller.powernets_cost]\t#[powernets.len]")
+ stat(null, "PoNet-[master_controller.powernets_cost]\t#[powernets.len]")
stat(null, "NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")
stat(null,"Events-[master_controller.events_cost]\t#[event_manager.active_events.len]")
// stat(null, "GC-[master_controller.gc_cost]\t#[garbage.queue.len]")
@@ -1236,7 +1236,7 @@ mob/proc/yank_out_object()
if(jobban_isbanned(usr, "NPC"))
usr << "You are banned from playing as NPC's."
return
-
+
if((usr in respawnable_list) && (stat==2 || istype(usr,/mob/dead/observer)))
var/list/creatures = list("Mouse")
for(var/mob/living/L in living_mob_list)
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 29bc7aed076..cdda2f6d268 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -3,7 +3,7 @@
/obj/item/weapon/grab
name = "grab"
- flags = NOBLUDGEON
+ flags = NOBLUDGEON | ABSTRACT
var/obj/screen/grab/hud = null
var/mob/affecting = null
var/mob/assailant = null
@@ -12,7 +12,6 @@
var/last_upgrade = 0
layer = 21
- abstract = 1
item_state = "nothing"
w_class = 5.0
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index b652a106824..e23014f9f52 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -150,7 +150,7 @@ proc/isorgan(A)
if(L && L.implanted)
return 1
return 0
-
+
proc/isnewplayer(A)
if(istype(A, /mob/new_player))
return 1
@@ -159,9 +159,15 @@ proc/isnewplayer(A)
proc/hasorgans(A)
return ishuman(A)
+proc/isdeaf(A)
+ if(istype(A, /mob))
+ var/mob/M = A
+ return (M.sdisabilities & DEAF) || M.ear_deaf
+ return 0
+
/proc/hsl2rgb(h, s, l)
return
-
+
proc/hassensorlevel(A, var/level)
var/mob/living/carbon/human/H = A
if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under))
@@ -352,10 +358,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/mob/proc/abiotic(var/full_body = 0)
- if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
+ if(full_body && ((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)) || (src.back || src.wear_mask)))
return 1
- if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
+ if((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)))
return 1
return 0
diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm
index bea08693fbc..399eeb1c83e 100644
--- a/code/modules/mob/mob_transformation_simple.dm
+++ b/code/modules/mob/mob_transformation_simple.dm
@@ -30,7 +30,7 @@
if(!M || !ismob(M))
usr << "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder."
- del(M)
+ qdel(M)
return
if( istext(new_name) )
@@ -43,12 +43,12 @@
if(src.dna)
M.dna = src.dna.Clone()
- if(mind)
+ if(mind && istype(M, /mob/living))
mind.transfer_to(M)
else
M.key = key
if(delete_old_mob)
spawn(1)
- del(src)
+ qdel(src)
return M
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 29baaab6f11..4910b47817c 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -10,7 +10,7 @@
for(var/obj/item/W in src)
if (W==w_uniform) // will be torn
continue
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
canmove = 0
@@ -73,7 +73,7 @@
if (monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
monkeyizing = 1
canmove = 0
icon = null
@@ -150,7 +150,7 @@
if(!should_remove_items)
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
var/mob/spirit/mask/new_spirit = new()
@@ -193,7 +193,7 @@
if (monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
canmove = 0
@@ -249,7 +249,7 @@
if (monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
canmove = 0
@@ -280,7 +280,7 @@
if (monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
canmove = 0
@@ -315,7 +315,7 @@
if (monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
canmove = 0
@@ -345,7 +345,7 @@
if(monkeyizing)
return
for(var/obj/item/W in src)
- drop_from_inventory(W)
+ unEquip(W)
regenerate_icons()
monkeyizing = 1
@@ -434,7 +434,7 @@
if(ispath(MP, /mob/living/simple_animal/pony))
return 1 // ZOMG PONIES WHEEE
if(ispath(MP, /mob/living/simple_animal/fox))
- return 1
+ return 1
//Not in here? Must be untested!
return 0
@@ -459,7 +459,7 @@
if(ispath(MP, /mob/living/simple_animal/pony))
return 1
if(ispath(MP, /mob/living/simple_animal/fox))
- return 1
+ return 1
//Antag Creatures!
/* if(ispath(MP, /mob/living/simple_animal/hostile/carp) && !jobban_isbanned(src, "Syndicate"))
diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm
new file mode 100644
index 00000000000..c27c0446395
--- /dev/null
+++ b/code/modules/nano/modules/crew_monitor.dm
@@ -0,0 +1,88 @@
+/obj/nano_module/crew_monitor
+ name = "Crew monitor"
+ var/list/tracked = new
+
+/obj/nano_module/crew_monitor/Topic(href, href_list)
+ if(..()) return
+ var/turf/T = get_turf(src)
+ if (!T || !(T.z in config.player_levels))
+ usr << "Unable to establish a connection: You're too far away from the station!"
+ return 0
+ if(href_list["close"] )
+ var/mob/user = usr
+ var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
+ usr.unset_machine()
+ ui.close()
+ return 0
+ if(href_list["update"])
+ src.updateDialog()
+ return 1
+
+/obj/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ user.set_machine(src)
+ src.scan()
+
+ var/data[0]
+ var/turf/T = get_turf(src)
+ var/list/crewmembers = list()
+ for(var/obj/item/clothing/under/C in src.tracked)
+
+ var/turf/pos = get_turf(C)
+
+ if((C) && (C.has_sensor) && (pos) && (T && pos.z == T.z) && (C.sensor_mode != SUIT_SENSOR_OFF))
+ if(istype(C.loc, /mob/living/carbon/human))
+
+ var/mob/living/carbon/human/H = C.loc
+ if(H.w_uniform != C)
+ continue
+
+ var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1)
+
+ crewmemberData["sensor_type"] = C.sensor_mode
+ crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
+ crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
+ crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
+
+ if(C.sensor_mode >= SUIT_SENSOR_BINARY)
+ crewmemberData["dead"] = H.stat > 1
+
+ if(C.sensor_mode >= SUIT_SENSOR_VITAL)
+ crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
+ crewmemberData["tox"] = round(H.getToxLoss(), 1)
+ crewmemberData["fire"] = round(H.getFireLoss(), 1)
+ crewmemberData["brute"] = round(H.getBruteLoss(), 1)
+
+ if(C.sensor_mode >= SUIT_SENSOR_TRACKING)
+ var/area/A = get_area(H)
+ crewmemberData["area"] = sanitize(A.name)
+ crewmemberData["x"] = pos.x
+ crewmemberData["y"] = pos.y
+
+ crewmembers[++crewmembers.len] = crewmemberData
+
+ crewmembers = sortByKey(crewmembers, "name")
+
+ data["crewmembers"] = crewmembers
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800)
+
+ // adding a template with the key "mapContent" enables the map ui functionality
+ ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
+ // adding a template with the key "mapHeader" replaces the map header content
+ ui.add_template("mapHeader", "crew_monitor_map_header.tmpl")
+
+ ui.set_initial_data(data)
+ ui.open()
+
+ // should make the UI auto-update; doesn't seem to?
+ ui.set_auto_update(1)
+
+/obj/nano_module/crew_monitor/proc/scan()
+ for(var/mob/living/carbon/human/H in mob_list)
+ if(istype(H.w_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/under/C = H.w_uniform
+ if (C.has_sensor)
+ tracked |= C
+ return 1
diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm
index 2ce8de3b08b..36241b2ec75 100644
--- a/code/modules/nano/nanomanager.dm
+++ b/code/modules/nano/nanomanager.dm
@@ -1,8 +1,9 @@
// This is the window/UI manager for Nano UI
// There should only ever be one (global) instance of nanomanger
/datum/nanomanager
- // the list of current open /nanoui UIs
+ // a list of current open /nanoui UIs, grouped by src_object and ui_key
var/open_uis[0]
+ // a list of current open /nanoui UIs, not grouped, for use in processing
var/list/processing_uis = list()
// a list of asset filenames which are to be sent to the client on user logon
var/list/asset_files = list()
@@ -26,7 +27,8 @@
filenames = flist(path)
for(var/filename in filenames)
if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore
- asset_files.Add(file(path + filename)) // add this file to asset_files for sending to clients when they connect
+ if(fexists(path + filename))
+ asset_files.Add(fcopy_rsc(path + filename)) // add this file to asset_files for sending to clients when they connect
return
@@ -85,7 +87,7 @@
/**
* Update all /nanoui uis attached to src_object
*
- * @param src_object /obj|/mob The obj or mob which the uis belong to
+ * @param src_object /obj|/mob The obj or mob which the uis are attached to
*
* @return int The number of uis updated
*/
@@ -97,7 +99,7 @@
var/update_count = 0
for (var/ui_key in open_uis[src_object_key])
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
- if(ui && ui.src_object && ui.user)
+ if(ui && ui.src_object && ui.user && ui.src_object.nano_host())
ui.process(1)
update_count++
return update_count
@@ -245,4 +247,3 @@
for(var/file in asset_files)
client << browse_rsc(file) // send the file to the client
- return 1 // success
diff --git a/code/modules/nano/nanoprocs.dm b/code/modules/nano/nanoprocs.dm
new file mode 100644
index 00000000000..81b939cf5c4
--- /dev/null
+++ b/code/modules/nano/nanoprocs.dm
@@ -0,0 +1,11 @@
+/atom/movable/proc/nano_host()
+ return src
+
+/obj/nano_module/nano_host()
+ return loc
+
+/atom/movable/proc/nano_can_update()
+ return 1
+
+/obj/machinery/nano_can_update()
+ return !(stat & (NOPOWER|BROKEN))
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index 01792ad0c3d..6b37eb96948 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -6,11 +6,6 @@ nanoui class (or whatever Byond calls classes)
nanoui is used to open and update nano browser uis
**********************************************************/
-
-#define STATUS_INTERACTIVE 2 // GREEN Visability
-#define STATUS_UPDATE 1 // ORANGE Visability
-#define STATUS_DISABLED 0 // RED Visability
-
/datum/nanoui
// the user who opened this ui
var/mob/user
@@ -143,36 +138,122 @@ nanoui is used to open and update nano browser uis
* @return nothing
*/
/datum/nanoui/proc/update_status(var/push_update = 0)
- if (istype(user, /mob/living/silicon/ai))
- set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
- else if (istype(user, /mob/living/silicon/robot))
- if (src_object in view(7, user)) // robots can see and interact with things they can see within 7 tiles
- set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
- else
- set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility)
+ var/atom/movable/host = src_object.nano_host()
+ if(!host.nano_can_update())
+ close()
+ return
+
+ var/status = user.can_interact_with_interface(host.nano_host())
+ if(status == STATUS_CLOSE)
+ close()
else
- var/dist = get_dist(src_object, user)
+ set_status(status, push_update)
+
+/*
+ Procs called by update_status()
+*/
- if (dist > 4)
- close()
- return
+/mob/living/silicon/pai/can_interact_with_interface(src_object)
+ if(src_object == src && !stat)
+ return STATUS_INTERACTIVE
+ else
+ return ..()
- if ((allowed_user_stat > -1) && (user.stat > allowed_user_stat))
- set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility)
- else if (user.restrained() || user.lying)
- set_status(STATUS_UPDATE, push_update) // update only (orange visibility)
- else if (istype(src_object, /obj/item/device/uplink/hidden)) // You know what if they have the uplink open let them use the UI
- set_status(STATUS_INTERACTIVE, push_update) // Will build in distance checks on the topics for sanity.
- else if (!(src_object in view(4, user))) // If the src object is not in visable, set status to 0
- set_status(STATUS_DISABLED, push_update) // interactive (green visibility)
- else if (dist <= 1)
- set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
- else if (dist <= 2)
- set_status(STATUS_UPDATE, push_update) // update only (orange visibility)
- else if (istype(src_object, /obj/item/device/uplink/hidden)) // You know what if they have the uplink open let them use the UI
- set_status(STATUS_INTERACTIVE, push_update) // Will build in distance checks on the topics for sanity.
- else if (dist <= 4)
- set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility)
+/mob/proc/can_interact_with_interface(var/src_object)
+ return STATUS_CLOSE // By default no mob can do anything with NanoUI
+
+/mob/dead/observer/can_interact_with_interface()
+ if(check_rights(R_ADMIN, 0))
+ return STATUS_INTERACTIVE // Admins are more equal
+ return STATUS_UPDATE // Ghosts can view updates
+
+/mob/living/silicon/robot/can_interact_with_interface(var/src_object)
+ if(stat || !client)
+ return STATUS_CLOSE
+ if(lockcharge || stunned || weakened)
+ return STATUS_DISABLED
+ if (src_object in view(client.view, src)) // robots can see and interact with things they can see within their view range
+ return STATUS_INTERACTIVE // interactive (green visibility)
+ return STATUS_DISABLED // no updates, completely disabled (red visibility)
+
+/mob/living/silicon/robot/syndicate/can_interact_with_interface(var/src_object)
+ . = ..()
+ if(. != STATUS_INTERACTIVE)
+ return
+
+ if(z in config.admin_levels) // Syndicate borgs can interact with everything on the admin level
+ return STATUS_INTERACTIVE
+ if(istype(get_area(src), /area/syndicate_station) || istype(get_area(src), /area/traitor)) // If elsewhere, they can interact with everything on the syndicate shuttle and traitor station
+ return STATUS_INTERACTIVE
+ if(istype(src_object, /obj/machinery)) // And they can also interact with everything else
+ /*var/obj/machinery/Machine = src_object
+ if(Machine.emagged) // Uncomment so they can only interact with emagged machinery
+ return STATUS_INTERACTIVE*/
+ return STATUS_INTERACTIVE
+ return STATUS_UPDATE
+
+/mob/living/silicon/ai/can_interact_with_interface(var/src_object)
+ if(!client || check_unable(1))
+ return STATUS_CLOSE
+ // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras)
+ // unless it's on the same level as the object it's interacting with.
+ var/turf/T = get_turf(src_object)
+ if(!T || !(z == T.z || (T.z in config.player_levels)))
+ return STATUS_CLOSE
+
+ // If an object is in view then we can interact with it
+ if(src_object in view(client.view, src))
+ return STATUS_INTERACTIVE
+
+ // If we're installed in a chassi, rather than transfered to an inteliCard or other container, then check if we have camera view
+ if(is_in_chassis())
+ //stop AIs from leaving windows open and using then after they lose vision
+ //apc_override is needed here because AIs use their own APC when powerless
+ if(cameranet && !cameranet.checkTurfVis(get_turf(src_object)))
+ return apc_override ? STATUS_INTERACTIVE : STATUS_CLOSE
+ return STATUS_INTERACTIVE
+
+ return STATUS_CLOSE
+
+/mob/living/proc/shared_living_nano_interaction(var/src_object)
+ if (src.stat != CONSCIOUS)
+ return STATUS_CLOSE // no updates, close the interface
+ else if (restrained() || lying || stat || stunned || weakened)
+ return STATUS_UPDATE // update only (orange visibility)
+ return STATUS_INTERACTIVE
+
+/mob/living/proc/shared_living_nano_distance(var/atom/movable/src_object)
+ if(!isturf(src_object.loc))
+ if(src_object.loc == src) // Item in the inventory
+ return STATUS_INTERACTIVE
+ if(src.contents.Find(src_object.loc)) // A hidden uplink inside an item
+ return STATUS_INTERACTIVE
+
+ if (!(src_object in view(4, src))) // If the src object is not in visable, disable updates
+ return STATUS_CLOSE
+
+ var/dist = get_dist(src_object, src)
+ if (dist <= 1)
+ return STATUS_INTERACTIVE // interactive (green visibility)
+ else if (dist <= 2)
+ return STATUS_UPDATE // update only (orange visibility)
+ else if (dist <= 4)
+ return STATUS_DISABLED // no updates, completely disabled (red visibility)
+ return STATUS_CLOSE
+
+/mob/living/can_interact_with_interface(var/src_object, var/be_close = 1)
+ . = shared_living_nano_interaction(src_object)
+ if(. == STATUS_INTERACTIVE && be_close)
+ . = shared_living_nano_distance(src_object)
+ if(STATUS_INTERACTIVE)
+ return STATUS_UPDATE
+
+/mob/living/carbon/human/can_interact_with_interface(var/src_object, var/be_close = 1)
+ . = shared_living_nano_interaction(src_object)
+ if(. == STATUS_INTERACTIVE && be_close)
+ . = shared_living_nano_distance(src_object)
+ if(. == STATUS_UPDATE && (M_TK in mutations)) // If we have telekinesis and remain close enough, allow interaction.
+ return STATUS_INTERACTIVE
/**
* Set the ui to auto update (every master_controller tick)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index a039a53edc6..33ce38ba437 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -614,11 +614,11 @@ Note that amputating the affected organ does in fact remove the infection from t
else
organ= new /obj/item/weapon/organ/head(owner.loc, owner)
owner.death()
- owner.u_equip(owner.glasses)
- owner.u_equip(owner.head)
- owner.u_equip(owner.l_ear)
- owner.u_equip(owner.r_ear)
- owner.u_equip(owner.wear_mask)
+ owner.unEquip(owner.glasses)
+ owner.unEquip(owner.head)
+ owner.unEquip(owner.l_ear)
+ owner.unEquip(owner.r_ear)
+ owner.unEquip(owner.wear_mask)
if(ARM_RIGHT)
if(!spawn_limb)
if(status & ORGAN_ROBOT)
@@ -658,7 +658,7 @@ Note that amputating the affected organ does in fact remove the infection from t
organ = new /obj/item/weapon/skeleton/r_hand(owner.loc)
else
organ= new /obj/item/weapon/organ/r_hand(owner.loc, owner)
- owner.u_equip(owner.gloves)
+ owner.unEquip(owner.gloves)
if(HAND_LEFT)
if(!spawn_limb)
if(!(status & ORGAN_ROBOT))
@@ -666,7 +666,7 @@ Note that amputating the affected organ does in fact remove the infection from t
organ = new /obj/item/weapon/skeleton/l_hand(owner.loc)
else
organ= new /obj/item/weapon/organ/l_hand(owner.loc, owner)
- owner.u_equip(owner.gloves)
+ owner.unEquip(owner.gloves)
if(FOOT_RIGHT)
if(!spawn_limb)
if(!(status & ORGAN_ROBOT))
@@ -674,7 +674,7 @@ Note that amputating the affected organ does in fact remove the infection from t
organ = new /obj/item/weapon/skeleton/r_foot(owner.loc)
else
organ= new /obj/item/weapon/organ/r_foot/(owner.loc, owner)
- owner.u_equip(owner.shoes)
+ owner.unEquip(owner.shoes)
if(FOOT_LEFT)
if(!spawn_limb)
if(!(status & ORGAN_ROBOT))
@@ -682,7 +682,7 @@ Note that amputating the affected organ does in fact remove the infection from t
organ = new /obj/item/weapon/skeleton/l_foot(owner.loc)
else
organ = new /obj/item/weapon/organ/l_foot(owner.loc, owner)
- owner.u_equip(owner.shoes)
+ owner.unEquip(owner.shoes)
destspawn = 1
//Robotic limbs explode if sabotaged.
@@ -724,14 +724,14 @@ Note that amputating the affected organ does in fact remove the infection from t
"\The [owner.handcuffed.name] falls off of [owner.name].",\
"\The [owner.handcuffed.name] falls off you.")
- owner.drop_from_inventory(owner.handcuffed)
+ owner.unEquip(owner.handcuffed)
if (owner.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
owner.visible_message(\
"\The [owner.legcuffed.name] falls off of [owner.name].",\
"\The [owner.legcuffed.name] falls off you.")
- owner.drop_from_inventory(owner.legcuffed)
+ owner.unEquip(owner.legcuffed)
/datum/organ/external/proc/bandage()
var/rval = 0
@@ -842,11 +842,11 @@ Note that amputating the affected organ does in fact remove the infection from t
return
if(is_broken())
- owner.u_equip(c_hand)
+ owner.unEquip(c_hand)
var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and")
owner.emote("me", 1, "[(owner.species && owner.species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [hand_name]!")
if(is_malfunctioning())
- owner.u_equip(c_hand)
+ owner.unEquip(c_hand)
owner.emote("me", 1, "drops what they were holding, their [hand_name] malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, owner)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index ca128c2c10c..dd311862f2c 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -9,7 +9,6 @@
throw_range = 10
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/toppaper //The topmost piece of paper.
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
/obj/item/weapon/clipboard/New()
@@ -24,10 +23,10 @@
if(!M.restrained() && !M.stat)
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_l_hand(src)
add_fingerprint(usr)
@@ -44,7 +43,7 @@
return
/obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
+
if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo))
user.drop_item()
W.loc = src
@@ -107,20 +106,20 @@
else if(href_list["write"])
var/obj/item/weapon/P = locate(href_list["write"])
-
+
if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) && (P == toppaper) )
-
+
var/obj/item/I = usr.get_active_hand()
-
+
if(istype(I, /obj/item/weapon/pen))
-
+
P.attackby(I, usr)
else if(href_list["remove"])
var/obj/item/P = locate(href_list["remove"])
-
+
if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) )
-
+
P.loc = usr.loc
usr.put_in_hands(P)
if(P == toppaper)
@@ -133,9 +132,9 @@
else if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
-
+
if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) )
-
+
if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]")
onclose(usr, "[P.name]")
diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm
index e494a68d7dd..a4b13a2876f 100644
--- a/code/modules/paperwork/fax.dm
+++ b/code/modules/paperwork/fax.dm
@@ -13,26 +13,26 @@ var/list/adminfaxes = list()
/datum/fax/New()
faxes += src
-
+
/datum/fax/admin
var/list/reply_to = null
-
+
/datum/fax/admin/New()
adminfaxes += src
-
-// Fax panel - lets admins check all faxes sent during the round
+
+// Fax panel - lets admins check all faxes sent during the round
/client/proc/fax_panel()
set name = "Fax Panel"
- set category = "Admin"
+ set category = "Event"
if(holder)
holder.fax_panel(usr)
feedback_add_details("admin_verb","FXP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
-
+
/datum/admins/proc/fax_panel(var/mob/living/user)
var/html = "Refresh"
html += "Create Fax"
-
+
html += ""
html += "
Admin Faxes
"
html += "
"
@@ -51,14 +51,14 @@ var/list/adminfaxes = list()
html += "| View | "
if(!A.reply_to)
if(A.from_department == "Administrator")
- html += "N/A | "
+ html += "N/A | "
else
html += "Reply | "
html += "N/A | "
else
html += "N/A | "
- html += "Original | "
- html += ""
+ html += "Original | "
+ html += ""
html += "
"
html += "
"
@@ -78,11 +78,10 @@ var/list/adminfaxes = list()
else
html += "Unknown | "
html += "View | "
- html += "
"
+ html += ""
html += ""
html += ""
-
+
var/datum/browser/popup = new(user, "fax_panel", "Fax Panel", 950, 450)
popup.set_content(html)
popup.open()
-
\ No newline at end of file
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index a1cf50822a5..fce6c2acda6 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -39,7 +39,7 @@
..()
pixel_y = rand(-8, 8)
pixel_x = rand(-9, 9)
-
+
spawn(2)
update_icon()
updateinfolinks()
@@ -293,7 +293,7 @@
"[class]You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.")
if(user.get_inactive_hand() == src)
- user.drop_from_inventory(src)
+ user.unEquip(src)
new /obj/effect/decal/cleanable/ash(get_turf(src))
del(src)
@@ -366,29 +366,29 @@
B.name = name
else if (P.name != "paper" && P.name != "photo")
B.name = P.name
- user.drop_from_inventory(P)
+ user.unEquip(P)
if (istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/h_user = user
if (h_user.r_hand == src)
- h_user.drop_from_inventory(src)
+ h_user.unEquip(src)
h_user.put_in_r_hand(B)
else if (h_user.l_hand == src)
- h_user.drop_from_inventory(src)
+ h_user.unEquip(src)
h_user.put_in_l_hand(B)
else if (h_user.l_store == src)
- h_user.drop_from_inventory(src)
+ h_user.unEquip(src)
B.loc = h_user
B.layer = 20
h_user.l_store = B
h_user.update_inv_pockets()
else if (h_user.r_store == src)
- h_user.drop_from_inventory(src)
+ h_user.unEquip(src)
B.loc = h_user
B.layer = 20
h_user.r_store = B
h_user.update_inv_pockets()
else if (h_user.head == src)
- h_user.u_equip(src)
+ h_user.unEquip(src)
h_user.put_in_hands(B)
else if (!istype(src.loc, /turf))
src.loc = get_turf(h_user)
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 2e834fe0562..f821871069c 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -32,7 +32,7 @@
if(screen == 2)
screen = 1
user << "
"
- user.drop_from_inventory(P)
+ user.unEquip(P)
P.loc = src
if(istype(user,/mob/living/carbon/human))
user:update_inv_l_hand()
@@ -42,12 +42,12 @@
if(screen == 2)
screen = 1
user << "
"
- user.drop_from_inventory(W)
+ user.unEquip(W)
W.loc = src
else if(istype(W, /obj/item/weapon/lighter))
burnpaper(W, user)
else if(istype(W, /obj/item/weapon/paper_bundle))
- user.drop_from_inventory(W)
+ user.unEquip(W)
for(var/obj/O in W)
O.loc = src
O.add_fingerprint(usr)
@@ -85,7 +85,7 @@
"[class]You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.")
if(user.get_inactive_hand() == src)
- user.drop_from_inventory(src)
+ user.unEquip(src)
new /obj/effect/decal/cleanable/ash(get_turf(src))
del(src)
@@ -166,7 +166,7 @@
usr << "
"
if(amount == 1)
var/obj/item/weapon/paper/P = src[1]
- usr.drop_from_inventory(src)
+ usr.unEquip(src)
usr.put_in_hands(P)
del(src)
else if(page == amount)
@@ -206,7 +206,7 @@
O.loc = usr.loc
O.layer = initial(O.layer)
O.add_fingerprint(usr)
- usr.drop_from_inventory(src)
+ usr.unEquip(src)
del(src)
return
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index fb8ba283901..6c96b62a328 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -15,7 +15,6 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pen"
item_state = "pen"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 0
w_class = 1.0
@@ -61,7 +60,7 @@
*/
/obj/item/weapon/pen/sleepypen
desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\""
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
origin_tech = "materials=2;syndicate=5"
@@ -88,7 +87,7 @@
* Parapens
*/
/obj/item/weapon/pen/paralysis
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
origin_tech = "materials=2;syndicate=5"
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index e7ee680586a..479d2510605 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -44,7 +44,7 @@
else if(istype(P, /obj/item/weapon/lighter))
burnphoto(P, user)
..()
-
+
/obj/item/weapon/photo/proc/burnphoto(obj/item/weapon/lighter/P, mob/user)
var/class = "
"
@@ -61,7 +61,7 @@
"[class]You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.")
if(user.get_inactive_hand() == src)
- user.drop_from_inventory(src)
+ user.unEquip(src)
new /obj/effect/decal/cleanable/ash(get_turf(src))
del(src)
@@ -118,10 +118,10 @@
if((!( M.restrained() ) && !( M.stat ) && M.back == src))
switch(over_object.name)
if("r_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_r_hand(src)
if("l_hand")
- M.u_equip(src)
+ M.unEquip(src)
M.put_in_l_hand(src)
add_fingerprint(usr)
return
@@ -142,7 +142,6 @@
icon_state = "camera"
item_state = "electropack"
w_class = 2.0
- flags = FPRINT | CONDUCT | TABLEPASS
slot_flags = SLOT_BELT
var/list/matter = list("metal" = 2000)
var/pictures_max = 10
@@ -364,7 +363,6 @@
icon_state = "videocam"
item_state = "videocam"
w_class = 2.0
- flags = FPRINT | CONDUCT | TABLEPASS
slot_flags = SLOT_BELT
m_amt = 2000
var/on = 0
@@ -404,4 +402,4 @@
if(get_dist(src, M) <= canhear_range)
talk_into(M, msg)
for(var/mob/living/carbon/human/H in watcherslist)
- H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1)
\ No newline at end of file
+ H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1)
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index aafd37c168f..243762eefb6 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "stamp-ok"
item_state = "stamp"
- flags = FPRINT | TABLEPASS
throwforce = 0
w_class = 1.0
throw_speed = 7
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 806434fb6df..89ba5734241 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -174,7 +174,7 @@
W.loc = src
if(user.client)
user.client.screen -= W
- user.u_equip(W)
+ user.unEquip(W)
user.update_icons()
user.visible_message("[user.name] loads an [W.name] into the [src.name].", \
"You load an [W.name].", \
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index ae96a8f9f46..6290f15f087 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -206,7 +206,7 @@ proc/cardinalrange(var/center)
icon_state = "box"
item_state = "electronic"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 5
throw_speed = 1
throw_range = 2
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 15699572da4..2e09cd993a9 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -942,7 +942,7 @@
malfai.malfhacking = 0
locked = 1
if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ if ((src.z in config.station_levels)) //if (is_type_in_list(get_area(src), the_station_areas))
ticker.mode:apcs++
if(usr:parent)
src.malfai = usr:parent
@@ -974,7 +974,7 @@
if(malfai)
if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ if ((src.z in config.station_levels)) //if (is_type_in_list(get_area(src), the_station_areas))
operating ? ticker.mode:apcs++ : ticker.mode:apcs--
src.update()
@@ -989,7 +989,7 @@
if(!malf.can_shunt)
malf << "You cannot shunt."
return
- if(src.z != 1)
+ if(!(src.z in config.station_levels))
return
src.occupant = new /mob/living/silicon/ai(src,malf.laws,null,1)
src.occupant.adjustOxyLoss(malf.getOxyLoss())
@@ -1038,7 +1038,7 @@
/obj/machinery/power/apc/proc/ion_act()
//intended to be exactly the same as an AI malf attack
- if(!src.malfhack && src.z == 1)
+ if(!src.malfhack && (src.z in config.station_levels))
if(prob(3))
src.locked = 1
if (src.cell.charge > 0)
@@ -1307,7 +1307,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
/obj/machinery/power/apc/proc/set_broken()
if(malfai && operating)
if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ if ((src.z in config.station_levels)) //if (is_type_in_list(get_area(src), the_station_areas))
ticker.mode:apcs--
stat |= BROKEN
operating = 0
@@ -1333,7 +1333,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
/obj/machinery/power/apc/Destroy()
if(malfai && operating)
if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ if ((src.z in config.station_levels)) //if (is_type_in_list(get_area(src), the_station_areas))
ticker.mode:apcs--
area.power_light = 0
area.power_equip = 0
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index ea0e85080d6..54741e0245d 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -216,7 +216,7 @@
throw_range = 5
m_amt = 50
g_amt = 20
- flags = TABLEPASS | FPRINT | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
@@ -313,7 +313,7 @@
//handle mob icon update
if(ismob(loc))
var/mob/M = loc
- M.u_equip(src)
+ M.unEquip(src)
del(src)
else
amount -= used
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index df04bacdc70..c9ac32da530 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -123,7 +123,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
O.main_part = null
qdel(O)
for(var/area/A in world)
- if (A.z != 1) continue
+ if (!(A.z in config.station_levels)) continue
A.gravitychange(0,A)
shake_everyone()
..()
@@ -294,7 +294,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
investigate_log("was brought online and is now producing gravity for this level.", "gravity")
message_admins("The gravity generator was brought online. ([area.name])")
for(var/area/A in world)
- if (A.z != 1) continue
+ if (!(A.z in config.station_levels)) continue
A.gravitychange(1,A)
else
if(gravity_in_level() == 1)
@@ -302,7 +302,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
investigate_log("was brought offline and there is now no gravity for this level.", "gravity")
message_admins("The gravity generator was brought offline with no backup generator. ([area.name])")
for(var/area/A in world)
- if (A.z != 1) continue
+ if (!(A.z in config.station_levels)) continue
A.gravitychange(0,A)
update_icon()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 353ea877b4c..5aef5c541af 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -16,7 +16,7 @@
desc = "Used for building lights."
icon = 'icons/obj/lighting.dmi'
icon_state = "tube-construct-item"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
var/fixture_type = "tube"
var/obj/machinery/light/newlight = null
var/sheets_refunded = 2
@@ -63,7 +63,7 @@
desc = "Used for building small lights."
icon = 'icons/obj/lighting.dmi'
icon_state = "bulb-construct-item"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
fixture_type = "bulb"
sheets_refunded = 1
@@ -657,7 +657,6 @@
/obj/item/weapon/light
icon = 'icons/obj/lighting.dmi'
- flags = FPRINT | TABLEPASS
force = 2
throwforce = 5
w_class = 1
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index a3065ce3bb4..3fe245d34dd 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -421,7 +421,7 @@
/obj/machinery/power/smes/proc/ion_act()
- if(src.z == 1)
+ if((src.z in config.station_levels))
if(prob(1)) //explosion
world << "\red SMES explosion in [src.loc.loc]"
for(var/mob/M in viewers(src))
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 9c622e47ca9..b8356cacc34 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -1,20 +1,8 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
#define SOLAR_MAX_DIST 40
#define SOLARGENRATE 1500
var/list/solars_list = list()
-// This will choose whether to get the solar list from the powernet or the powernet nodes,
-// depending on the size of the nodes.
-/obj/machinery/power/proc/get_solars_powernet()
- if(!powernet)
- return list()
- if(solars_list.len < powernet.nodes)
- return solars_list
- else
- return powernet.nodes
-
/obj/machinery/power/solar
name = "solar panel"
desc = "A solar electrical generator."
@@ -22,7 +10,6 @@ var/list/solars_list = list()
icon_state = "sp_base"
anchored = 1
density = 1
- directwired = 1
use_power = 0
idle_power_usage = 0
active_power_usage = 0
@@ -30,26 +17,33 @@ var/list/solars_list = list()
var/health = 10
var/obscured = 0
var/sunfrac = 0
- var/adir = SOUTH
- var/ndir = SOUTH
+ var/adir = SOUTH // actual dir
+ var/ndir = SOUTH // target dir
var/turn_angle = 0
var/obj/machinery/power/solar_control/control = null
-/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S, var/process = 1)
+/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S)
..(loc)
Make(S)
- connect_to_network(process)
+ connect_to_network()
-
-/obj/machinery/power/solar/disconnect_from_network()
+/obj/machinery/power/solar/Destroy()
+ unset_control() //remove from control computer
..()
- solars_list.Remove(src)
-/obj/machinery/power/solar/connect_to_network(var/process)
- ..()
- if(process)
- solars_list.Add(src)
+//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST
+/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC)
+ if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST))
+ return 0
+ control = SC
+ SC.connected_panels |= src
+ return 1
+//set the control of the panel to null and removes it from the control list of the previous control computer if needed
+/obj/machinery/power/solar/proc/unset_control()
+ if(control)
+ control.connected_panels.Remove(src)
+ control = null
/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
if(!S)
@@ -57,22 +51,25 @@ var/list/solars_list = list()
S.glass_type = /obj/item/stack/sheet/glass
S.anchored = 1
S.loc = src
+ if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass
+ health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
update_icon()
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
- if(iscrowbar(W))
- playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
+ if(istype(W, /obj/item/weapon/crowbar))
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ user.visible_message("[user] begins to take the glass off the solar panel.")
if(do_after(user, 50))
var/obj/item/solar_assembly/S = locate() in src
if(S)
S.loc = src.loc
S.give_glass()
- playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] takes the glass off the solar panel.")
- del(src)
+ qdel(src)
return
else if (W)
src.add_fingerprint(user)
@@ -92,9 +89,9 @@ var/list/solars_list = list()
if(!(stat & BROKEN))
broken()
else
- getFromPool(/obj/item/weapon/shard, loc)
- getFromPool(/obj/item/weapon/shard, loc)
- del(src)
+ new /obj/item/weapon/shard(src.loc)
+ new /obj/item/weapon/shard(src.loc)
+ qdel(src)
return
return
@@ -109,70 +106,58 @@ var/list/solars_list = list()
src.dir = angle2dir(adir)
return
-
+//calculates the fraction of the sunlight that the panel recieves
/obj/machinery/power/solar/proc/update_solar_exposure()
if(!sun)
return
if(obscured)
sunfrac = 0
return
- var/p_angle = abs((360+adir)%360 - (360+sun.angle)%360)
+
+ //find the smaller angle between the direction the panel is facing and the direction of the sun (the sign is not important here)
+ var/p_angle = min(abs(adir - sun.angle), 360 - abs(adir - sun.angle))
+
if(p_angle > 90) // if facing more than 90deg from sun, zero output
sunfrac = 0
return
- sunfrac = cos(p_angle) ** 2
+ sunfrac = cos(p_angle) ** 2
+ //isn't the power recieved from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ?
/obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
- if(stat & BROKEN) return
- if(!control) return
+ if(stat & BROKEN)
+ return
+ if(!sun || !control) //if there's no sun or the panel is not linked to a solar control computer, no need to proceed
+ return
- if(adir != ndir)
- adir = (360+adir+dd_range(-10,10,ndir-adir))%360
- update_icon()
- update_solar_exposure()
-
- if(obscured) return
-
- var/sgen = SOLARGENRATE * sunfrac
- add_avail(sgen)
- if(powernet && control)
- if(powernet.nodes[control])
+ if(powernet)
+ if(powernet == control.powernet)//check if the panel is still connected to the computer
+ if(obscured) //get no light from the sun, so don't generate power
+ return
+ var/sgen = SOLARGENRATE * sunfrac
+ add_avail(sgen)
control.gen += sgen
-
+ else //if we're no longer on the same powernet, remove from control computer
+ unset_control()
/obj/machinery/power/solar/proc/broken()
+ . = (!(stat & BROKEN))
stat |= BROKEN
+ unset_control()
update_icon()
return
-/obj/machinery/power/solar/meteorhit()
- if(stat & !BROKEN)
- broken()
- else
- del(src)
-
-
-/obj/machinery/power/solar/ex_act(severity)
- switch(severity)
- if(1.0)
- qdel(src)
- if(prob(15))
- getFromPool(/obj/item/weapon/shard, loc)
- return
- if(2.0)
- if (prob(25))
- getFromPool(/obj/item/weapon/shard, loc)
- qdel(src)
- return
- if (prob(50))
- broken()
- if(3.0)
- if (prob(25))
- broken()
- return
-
+/obj/machinery/power/solar/ex_act(severity, target)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50) && broken())
+ new /obj/item/weapon/shard(src.loc)
+ if(3)
+ if(prob(25) && broken())
+ new /obj/item/weapon/shard(src.loc)
/obj/machinery/power/solar/blob_act()
if(prob(75))
@@ -187,6 +172,29 @@ var/list/solars_list = list()
. = PROCESS_KILL
return
+//trace towards sun to see if we're in shadow
+/obj/machinery/power/solar/proc/occlusion()
+
+ var/ax = x // start at the solar panel
+ var/ay = y
+ var/turf/T = null
+
+ for(var/i = 1 to 20) // 20 steps is enough
+ ax += sun.dx // do step
+ ay += sun.dy
+
+ T = locate( round(ax,0.5),round(ay,0.5),z)
+
+ if(T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy) // not obscured if we reach the edge
+ break
+
+ if(T.density) // if we hit a solid turf, panel is obscured
+ obscured = 1
+ return
+
+ obscured = 0 // if hit the edge or stepped 20 times, not obscured
+ update_solar_exposure()
+
//
// Solar Assembly - For construction of solar arrays.
@@ -218,40 +226,42 @@ var/list/solars_list = list()
/obj/item/solar_assembly/attackby(var/obj/item/weapon/W, var/mob/user)
if(!anchored && isturf(loc))
- if(iswrench(W))
+ if(istype(W, /obj/item/weapon/wrench))
anchored = 1
user.visible_message("[user] wrenches the solar assembly into place.")
- playsound(get_turf(src), 'sound/items/Ratchet.ogg', 75, 1)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
return 1
else
- if(iswrench(W))
+ if(istype(W, /obj/item/weapon/wrench))
anchored = 0
user.visible_message("[user] unwrenches the solar assembly from it's place.")
- playsound(get_turf(src), 'sound/items/Ratchet.ogg', 75, 1)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
return 1
if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass))
var/obj/item/stack/sheet/S = W
- if(S.amount >= 2)
+ if(S.use(2))
glass_type = W.type
- S.use(2)
- playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] places the glass on the solar assembly.")
if(tracker)
new /obj/machinery/power/tracker(get_turf(src), src)
else
new /obj/machinery/power/solar(get_turf(src), src)
+ else
+ user << "You need two sheets of glass to put them into a solar panel."
+ return
return 1
if(!tracker)
if(istype(W, /obj/item/weapon/tracker_electronics))
tracker = 1
user.drop_item()
- del(W)
+ qdel(W)
user.visible_message("[user] inserts the electronics into the solar assembly.")
return 1
else
- if(iscrowbar(W))
+ if(istype(W, /obj/item/weapon/crowbar))
new /obj/item/weapon/tracker_electronics(src.loc)
tracker = 0
user.visible_message("[user] takes out the electronics from the solar assembly.")
@@ -269,18 +279,18 @@ var/list/solars_list = list()
icon_state = "solar"
anchored = 1
density = 1
- directwired = 1
use_power = 1
- idle_power_usage = 5
- active_power_usage = 20
+ idle_power_usage = 250
var/id = 0
var/cdir = 0
+ var/targetdir = 0 // target angle in manual tracking (since it updates every game minute)
var/gen = 0
var/lastgen = 0
- var/track = 0 // 0=off 1=manual 2=automatic
- var/trackrate = 60 // Measured in tenths of degree per minute (i.e. defaults to 6.0 deg/min)
- var/trackdir = 1 // -1=CCW, 1=CW
- var/nexttime = 0 // Next clock time that manual tracking will move the array
+ var/track = 0 // 0= off 1=timed 2=auto (tracker)
+ var/trackrate = 600 // 300-900 seconds
+ var/nexttime = 0 // time for a panel to rotate of 1� in manual tracking
+ var/obj/machinery/power/tracker/connected_tracker = null
+ var/list/connected_panels = list()
/obj/machinery/power/solar_control/New()
@@ -289,14 +299,53 @@ var/list/solars_list = list()
initialize()
connect_to_network()
+/obj/machinery/power/solar_control/Destroy()
+ for(var/obj/machinery/power/solar/M in connected_panels)
+ M.unset_control()
+ if(connected_tracker)
+ connected_tracker.unset_control()
+ ..()
+
/obj/machinery/power/solar_control/disconnect_from_network()
..()
solars_list.Remove(src)
/obj/machinery/power/solar_control/connect_to_network()
- ..()
+ var/to_return = ..()
+ if(powernet) //if connected and not already in solar_list...
+ solars_list |= src //... add it
+ return to_return
+
+//search for unconnected panels and trackers in the computer powernet and connect them
+/obj/machinery/power/solar_control/proc/search_for_connected()
if(powernet)
- solars_list.Add(src)
+ for(var/obj/machinery/power/M in powernet.nodes)
+ if(istype(M, /obj/machinery/power/solar))
+ var/obj/machinery/power/solar/S = M
+ if(!S.control) //i.e unconnected
+ S.set_control(src)
+ else if(istype(M, /obj/machinery/power/tracker))
+ if(!connected_tracker) //if there's already a tracker connected to the computer don't add another
+ var/obj/machinery/power/tracker/T = M
+ if(!T.control) //i.e unconnected
+ T.set_control(src)
+
+//called by the sun controller, update the facing angle (either manually or via tracking) and rotates the panels accordingly
+/obj/machinery/power/solar_control/proc/update()
+ if(stat & (NOPOWER | BROKEN))
+ return
+
+ switch(track)
+ if(1)
+ if(trackrate) //we're manual tracking. If we set a rotation speed...
+ cdir = targetdir //...the current direction is the targetted one (and rotates panels to it)
+ if(2) // auto-tracking
+ if(connected_tracker)
+ connected_tracker.set_angle(sun.angle)
+
+ set_panels(cdir)
+ updateDialog()
+
/obj/machinery/power/solar_control/initialize()
..()
@@ -314,32 +363,47 @@ var/list/solars_list = list()
return
icon_state = "solar"
overlays.Cut()
- if(cdir > 0)
+ if(cdir > -1)
overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir))
return
-
-/obj/machinery/power/solar_control/attack_ai(mob/user)
- src.add_hiddenprint(user)
- add_fingerprint(user)
- if(stat & (BROKEN | NOPOWER)) return
- interact(user)
-
-
/obj/machinery/power/solar_control/attack_hand(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN | NOPOWER)) return
- interact(user)
+ if(!..())
+ ui_interact(user)
+/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+
+ var/data = list()
+
+ data["generated"] = round(lastgen)
+ data["angle"] = cdir
+ data["direction"] = angle2text(cdir)
+
+ data["tracking_state"] = track
+ data["tracking_rate"] = trackrate
+ data["rotating_way"] = (trackrate<0 ? "CCW" : "CW")
+
+ data["connected_panels"] = connected_panels.len
+ data["connected_tracker"] = (connected_tracker ? 1 : 0)
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+ else
+ ui.push_data(data)
+ return
/obj/machinery/power/solar_control/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
- playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
+ user << "The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- getFromPool(/obj/item/weapon/shard, loc)
+ new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
C.loc = src.loc
@@ -347,9 +411,9 @@ var/list/solars_list = list()
A.state = 3
A.icon_state = "3"
A.anchored = 1
- del(src)
+ qdel(src)
else
- user << "\blue You disconnect the monitor."
+ user << "You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
@@ -358,12 +422,11 @@ var/list/solars_list = list()
A.state = 4
A.icon_state = "4"
A.anchored = 1
- del(src)
+ qdel(src)
else
src.attack_hand(user)
return
-
/obj/machinery/power/solar_control/process()
lastgen = gen
gen = 0
@@ -371,139 +434,64 @@ var/list/solars_list = list()
if(stat & (NOPOWER | BROKEN))
return
- use_power(250)
- if(track==1 && nexttime < world.time && trackdir*trackrate)
- // Increments nexttime using itself and not world.time to prevent drift
- nexttime = nexttime + 6000/trackrate
- // Nudges array 1 degree in desired direction
- cdir = (cdir+trackdir+360)%360
- set_panels(cdir)
- update_icon()
-
- src.updateDialog()
-
-
-// called by solar tracker when sun position changes
-/obj/machinery/power/solar_control/proc/tracker_update(var/angle)
- if(track != 2 || stat & (NOPOWER | BROKEN))
- return
- cdir = angle
- set_panels(cdir)
- update_icon()
- src.updateDialog()
-
-
-/obj/machinery/power/solar_control/interact(mob/user)
- if(stat & (BROKEN | NOPOWER)) return
- if ( (get_dist(src, user) > 1 ))
- if (!istype(user, /mob/living/silicon/ai))
- user.unset_machine()
- user << browse(null, "window=solcon")
- return
-
- add_fingerprint(user)
- user.set_machine(src)
-
-
- // AUTOFIXED BY fix_string_idiocy.py
- // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\power\solar.dm:407: var/t = "Solar Generator Control
"
- var/t = {"Solar Generator Control
-Generated power : [round(lastgen)] W
-Station Rotational Period: [60/abs(sun.rate)] minutes
-Station Rotational Direction: [sun.rate<0 ? "CCW" : "CW"]
-Star Orientation: [sun.angle]° ([angle2text(sun.angle)])
-Array Orientation: [rate_control(src,"cdir","[cdir]°",1,10,60)] ([angle2text(cdir)])
-
-Tracking:"}
- // END AUTOFIX
- switch(track)
- if(0)
- t += "Off Manual Automatic
"
- if(1)
- t += "Off Manual Automatic
"
- if(2)
- t += "Off Manual Automatic
"
-
-
- // AUTOFIXED BY fix_string_idiocy.py
- // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\power\solar.dm:423: t += "Manual Tracking Rate: [rate_control(src,"tdir","[trackrate/10]°/min ([trackdir<0 ? "CCW" : "CW"])",1,10)]
"
- t += {"Manual Tracking Rate: [rate_control(src,"tdir","[trackrate/10]°/min ([trackdir<0 ? "CCW" : "CW"])",1,10)]
-Manual Tracking Direction:"}
- // END AUTOFIX
- switch(trackdir)
- if(-1)
- t += "CW CCW
"
- if(1)
- t += "CW CCW
"
- t += "Close
"
- user << browse(t, "window=solcon")
- onclose(user, "solcon")
- return
+ if(connected_tracker) //NOTE : handled here so that we don't add trackers to the processing list
+ if(connected_tracker.powernet != powernet)
+ connected_tracker.unset_control()
+ if(track==1 && trackrate) //manual tracking and set a rotation speed
+ if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1�...
+ targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it
+ nexttime += 36000/abs(trackrate) //reset the counter for the next 1�
/obj/machinery/power/solar_control/Topic(href, href_list)
if(..())
- usr << browse(null, "window=solcon")
- usr.unset_machine()
return
- if(href_list["close"] )
- usr << browse(null, "window=solcon")
- usr.unset_machine()
- return
-
- if(href_list["dir"])
- cdir = text2num(href_list["dir"])
- set_panels(cdir)
- update_icon()
-
- if(href_list["rate control"])
+
+ if(href_list["rate_control"])
if(href_list["cdir"])
src.cdir = dd_range(0,359,(360+src.cdir+text2num(href_list["cdir"]))%360)
+ src.targetdir = src.cdir
+ if(track == 2) //manual update, so losing auto-tracking
+ track = 0
spawn(1)
set_panels(cdir)
- update_icon()
if(href_list["tdir"])
- src.trackrate = dd_range(0,360,src.trackrate+text2num(href_list["tdir"]))
- if(src.trackrate) nexttime = world.time + 6000/trackrate
+ src.trackrate = dd_range(-7200,7200,src.trackrate+text2num(href_list["tdir"]))
+ if(src.trackrate) nexttime = world.time + 36000/abs(trackrate)
if(href_list["track"])
- if(src.trackrate) nexttime = world.time + 6000/trackrate
track = text2num(href_list["track"])
- if(powernet && (track == 2))
- if(!solars_list.Find(src,1,0) || !(locate(src) in solars_list) || !(src in solars_list))
- solars_list.Add(src)
- for(var/obj/machinery/power/tracker/T in get_solars_powernet())
- if(powernet.nodes[T])
- cdir = T.sun_angle
- break
+ if(track == 2)
+ if(connected_tracker)
+ connected_tracker.set_angle(sun.angle)
+ set_panels(cdir)
+ else if (track == 1) //begin manual tracking
+ src.targetdir = src.cdir
+ if(src.trackrate) nexttime = world.time + 36000/abs(trackrate)
+ set_panels(targetdir)
- if(href_list["trackdir"])
- trackdir = text2num(href_list["trackdir"])
+ if(href_list["search_connected"])
+ search_for_connected()
+ if(connected_tracker && track == 2)
+ connected_tracker.set_angle(sun.angle)
+ set_panels(cdir)
- set_panels(cdir)
- update_icon()
- src.updateUsrDialog()
return
-
+//rotates the panel to the passed angle
/obj/machinery/power/solar_control/proc/set_panels(var/cdir)
- if(!powernet) return
- for(var/obj/machinery/power/solar/S in get_solars_powernet())
- if(powernet.nodes[S])
- if(get_dist(S, src) < SOLAR_MAX_DIST)
- if(!S.control)
- S.control = src
- S.ndir = cdir
+
+ for(var/obj/machinery/power/solar/S in connected_panels)
+ S.adir = cdir //instantly rotates the panel
+ S.occlusion()//and
+ S.update_icon() //update it
+
+ update_icon()
/obj/machinery/power/solar_control/power_change()
- if(powered())
- stat &= ~NOPOWER
- update_icon()
- else
- spawn(rand(0, 15))
- stat |= NOPOWER
- update_icon()
+ ..()
+ update_icon()
/obj/machinery/power/solar_control/proc/broken()
@@ -511,25 +499,16 @@ Manual Tracking Direction:"}
update_icon()
-/obj/machinery/power/solar_control/meteorhit()
- broken()
- return
-
-
-/obj/machinery/power/solar_control/ex_act(severity)
- switch(severity)
- if(1.0)
- //SN src = null
- qdel(src)
- return
- if(2.0)
- if (prob(50))
- broken()
- if(3.0)
- if (prob(25))
- broken()
- return
-
+/obj/machinery/power/solar_control/ex_act(severity, target)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ broken()
+ if(3)
+ if(prob(25))
+ broken()
/obj/machinery/power/solar_control/blob_act()
if (prob(75))
@@ -543,4 +522,4 @@ Manual Tracking Direction:"}
/obj/item/weapon/paper/solar
name = "paper- 'Going green! Setup your own solar array instructions.'"
- info = "Welcome
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!.
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
"
+ info = "Welcome
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
"
\ No newline at end of file
diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm
index 05683bd9c57..8c846cdb76b 100644
--- a/code/modules/power/switch.dm
+++ b/code/modules/power/switch.dm
@@ -10,7 +10,6 @@
icon_state = "switch-dbl-up"
var/icon_state_on = "switch-dbl-down"
var/icon_state_off = "switch-dbl-up"
- flags = FPRINT
density = 0
anchored = 1
var/on = 0 //up is off, down is on
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index d35cf81ed45..5cf341f9fbb 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -10,78 +10,70 @@
icon_state = "tracker"
anchored = 1
density = 1
- directwired = 1
use_power = 0
+ var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
+ var/obj/machinery/power/solar_control/control = null
/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S)
..(loc)
+ Make(S)
+ connect_to_network()
+
+/obj/machinery/power/tracker/Destroy()
+ unset_control() //remove from control computer
+ ..()
+
+//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
+/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
+ if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST))
+ return 0
+ control = SC
+ SC.connected_tracker = src
+ return 1
+
+//set the control of the tracker to null and removes it from the previous control computer if needed
+/obj/machinery/power/tracker/proc/unset_control()
+ if(control)
+ control.connected_tracker = null
+ control = null
+
+/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S)
if(!S)
S = new /obj/item/solar_assembly(src)
S.glass_type = /obj/item/stack/sheet/glass
S.tracker = 1
S.anchored = 1
S.loc = src
- connect_to_network()
+ update_icon()
-/obj/machinery/power/tracker/disconnect_from_network()
- ..()
- solars_list.Remove(src)
-
-/obj/machinery/power/tracker/connect_to_network()
- ..()
- solars_list.Add(src)
-
-// called by datum/sun/calc_position() as sun's angle changes
+//updates the tracker icon and the facing angle for the control computer
/obj/machinery/power/tracker/proc/set_angle(var/angle)
sun_angle = angle
//set icon dir to show sun illumination
dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST
- // check we can draw power
- if(stat & NOPOWER)
- return
-
- // find all solar controls and update them
- // currently, just update all controllers in world
- // ***TODO: better communication system using network
- if(powernet)
- for(var/obj/machinery/power/solar_control/C in get_solars_powernet())
- if(powernet.nodes[C])
- if(get_dist(C, src) < SOLAR_MAX_DIST)
- C.tracker_update(angle)
-
+ if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet
+ control.cdir = angle
/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user)
- if(iscrowbar(W))
- playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
+ if(istype(W, /obj/item/weapon/crowbar))
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ user.visible_message("[user] begins to take the glass off the solar tracker.")
if(do_after(user, 50))
var/obj/item/solar_assembly/S = locate() in src
if(S)
S.loc = src.loc
S.give_glass()
- playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] takes the glass off the tracker.")
- del(src)
+ qdel(src)
return
..()
-// timed process
-// make sure we can draw power from the powernet
-/obj/machinery/power/tracker/process()
-
- var/avail = surplus()
-
- if(avail > 500)
- add_load(500)
- stat &= ~NOPOWER
- else
- stat |= NOPOWER
-
-
// Tracker Electronic
/obj/item/weapon/tracker_electronics
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index b84eb480138..fc7641ab552 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -3,7 +3,7 @@
desc = "A bullet casing."
icon = 'icons/obj/ammo.dmi'
icon_state = "s-casing"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 1
w_class = 1.0
@@ -57,7 +57,7 @@
desc = "A box of ammo?"
icon_state = "357"
icon = 'icons/obj/ammo.dmi'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "syringe_kit"
m_amt = 30000
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index bd823f3c4ee..35fbeb2de35 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "detective"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
m_amt = 2000
w_class = 3.0
@@ -313,10 +313,10 @@
set name = "Toggle Gunlight"
set category = "Object"
set desc = "Click to toggle your weapon's attached flashlight."
-
+
if(!F)
return
-
+
var/mob/living/carbon/human/user = usr
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]."
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 51a607890a0..b2951fb8eb2 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -78,7 +78,7 @@ obj/item/weapon/gun/energy/laser/retro
item_state = "laser"
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
fire_sound = 'sound/weapons/lasercannonfire.ogg'
origin_tech = "combat=4;materials=3;powerstorage=3"
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 22d9bb2f47e..db58dedb0ea 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -7,7 +7,7 @@
fire_sound = 'sound/weapons/Laser.ogg'
origin_tech = "combat=2;magnets=4"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
projectile_type = "/obj/item/projectile/ion"
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index 9401783c54a..a874573aa25 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -5,7 +5,7 @@
icon_state = "staffofnothing"
item_state = "staff"
fire_sound = 'sound/weapons/emitter.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 5
var/projectile_type = "/obj/item/projectile/magic"
var/max_charges = 6
diff --git a/code/modules/projectiles/guns/projectile/crossbow.dm b/code/modules/projectiles/guns/projectile/crossbow.dm
index 655fcfb92a8..eea9054fce5 100644
--- a/code/modules/projectiles/guns/projectile/crossbow.dm
+++ b/code/modules/projectiles/guns/projectile/crossbow.dm
@@ -7,7 +7,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "bolt"
item_state = "bolt"
- flags = FPRINT | TABLEPASS
throwforce = 8
w_class = 3.0
sharp = 1
diff --git a/code/modules/projectiles/guns/projectile/grenade launcher.dm b/code/modules/projectiles/guns/projectile/grenade launcher.dm
index 8833a63b280..d4b2c6fc167 100644
--- a/code/modules/projectiles/guns/projectile/grenade launcher.dm
+++ b/code/modules/projectiles/guns/projectile/grenade launcher.dm
@@ -4,7 +4,7 @@
desc = "A device that launches things."
icon = 'icons/obj/weapons.dmi'
w_class = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
var/release_force = 0
diff --git a/code/modules/projectiles/guns/projectile/pneumatic.dm b/code/modules/projectiles/guns/projectile/pneumatic.dm
index e3bcc5517a5..6729a18663e 100644
--- a/code/modules/projectiles/guns/projectile/pneumatic.dm
+++ b/code/modules/projectiles/guns/projectile/pneumatic.dm
@@ -5,7 +5,7 @@
icon_state = "pneumatic"
item_state = "pneumatic"
w_class = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
fire_sound_text = "a loud whoosh of moving air"
fire_delay = 50
fire_sound = 'sound/weapons/tablehit1.ogg'
diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm
index 5f939e59073..d21987e4a1c 100644
--- a/code/modules/projectiles/guns/projectile/rocket.dm
+++ b/code/modules/projectiles/guns/projectile/rocket.dm
@@ -8,7 +8,7 @@
throw_speed = 2
throw_range = 10
force = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ flags = CONDUCT | USEDELAY
origin_tech = "combat=8;materials=5"
projectile = /obj/item/missile
var/missile_speed = 2
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 90436a500d0..a4c006512de 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -5,7 +5,7 @@
item_state = "shotgun"
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
origin_tech = "combat=4;materials=2"
var/recentpump = 0 // to prevent spammage
@@ -108,7 +108,7 @@
item_state = "shotgun"
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
origin_tech = "combat=3;materials=1"
mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/dualshot"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 5f5eef7c03d..a7a02867871 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -16,7 +16,6 @@
density = 1
unacidable = 1
anchored = 1 //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
- flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE
mouse_opacity = 0
hitsound = 'sound/weapons/pierce.ogg'
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index ece204afaf9..b030faa14d6 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -444,7 +444,7 @@
usr << browse(null, "window=chemmaster")
usr.unset_machine()
return
-
+
if (href_list["print_p"])
if (!(src.printing))
src.printing = 1
@@ -469,7 +469,7 @@
P.info += "
Notes:
"
P.name = "Chemical Analysis - [href_list["name"]]"
src.printing = null
-
+
if(beaker)
var/datum/reagents/R = beaker:reagents
if (href_list["analyze"])
@@ -1073,7 +1073,7 @@
user << "Cannot refine into a reagent."
return 1
- user.before_take_item(O)
+ user.unEquip(O)
O.loc = src
holdingitems += O
src.updateUsrDialog()
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 10ca1d5f5a6..0cc8356150c 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -31,12 +31,6 @@ datum
on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
- e.holder_damage(holder.my_atom)
- if(isliving(holder.my_atom))
- e.amount *= 0.5
- var/mob/living/L = holder.my_atom
- if(L.stat!=DEAD)
- e.amount *= 0.5
e.start()
holder.clear_reagents()
return
@@ -356,12 +350,6 @@ datum
on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
- e.holder_damage(holder.my_atom)
- if(isliving(holder.my_atom))
- e.amount *= 0.5
- var/mob/living/L = holder.my_atom
- if(L.stat!=DEAD)
- e.amount *= 0.5
e.start()
holder.clear_reagents()
@@ -385,23 +373,14 @@ datum
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
- for(var/mob/living/carbon/M in viewers(world.view, location))
- switch(get_dist(M, location))
- if(0 to 3)
- if(hasvar(M, "glasses"))
- if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
- continue
-
- flick("e_flash", M.flash)
- M.Weaken(15)
-
- if(4 to 5)
- if(hasvar(M, "glasses"))
- if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
- continue
-
- flick("e_flash", M.flash)
- M.Stun(5)
+ for(var/mob/living/carbon/C in hearers(5, location))
+ if(C.eyecheck())
+ continue
+ flick("e_flash", C.flash)
+ if(get_dist(C, location) < 4)
+ C.Weaken(5)
+ continue
+ C.Stun(5)
napalm
name = "Napalm"
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 31d68ef7b15..afe56a4f731 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -8,7 +8,6 @@
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
- flags = FPRINT
var/mode = 1
var/charge_cost = 50
var/charge_tick = 0
@@ -68,14 +67,14 @@
var/datum/reagents/R = reagent_list[reagent_list.len]
R.add_reagent(reagent, 30)
-/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
+/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M as mob, mob/user as mob)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
user << "\red The injector is empty."
return
- if (!( istype(M, /mob) ))
+ if (!(istype(M)))
return
- if (R.total_volume)
+ if (R.total_volume && M.can_inject(user,1))
user << "\blue You inject [M] with the injector."
M << "\red You feel a tiny prick!"
diff --git a/code/modules/reagents/reagent_containers/drugs.dm b/code/modules/reagents/reagent_containers/drugs.dm
index 1f9dced0500..6d8c83cf2c4 100644
--- a/code/modules/reagents/reagent_containers/drugs.dm
+++ b/code/modules/reagents/reagent_containers/drugs.dm
@@ -8,7 +8,7 @@
amount_per_transfer_from_this = 2
possible_transfer_amounts = 2
volume = 10
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/label_text = ""
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index bd61291a099..dde17fa7f9a 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -10,7 +10,7 @@
desc = "Just your average condiment container."
icon = 'icons/obj/food.dmi'
icon_state = "emptycondiment"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
possible_transfer_amounts = list(1,5,10)
volume = 50
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites.
@@ -172,7 +172,6 @@
volume = 10
amount_per_transfer_from_this = 10
possible_transfer_amounts = 10
- flags = FPRINT | TABLEPASS
possible_states = list("ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"))
var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 25a4fd2f47a..2024b18c95f 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -6,7 +6,7 @@
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
icon_state = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
possible_transfer_amounts = list(5,10,25)
volume = 50
@@ -161,7 +161,7 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = null
volume = 150
- flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER
+ flags = CONDUCT | OPENCONTAINER
/obj/item/weapon/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011
desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index fb025cb37da..93841370d75 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -22,7 +22,7 @@
if(M == usr)
usr << "You finish eating \the [src]."
usr.visible_message("[usr] finishes eating \the [src].")
- usr.drop_from_inventory(src) //so icons update :[
+ usr.unEquip(src) //so icons update :[
if(trash)
if(ispath(trash,/obj/item))
@@ -39,7 +39,7 @@
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
user << "\red None of [src] left, oh no!"
- M.drop_from_inventory(src) //so icons update :[
+ M.unEquip(src) //so icons update :[
del(src)
return 0
@@ -194,7 +194,7 @@
if(!iscarbon(user))
return 1
user << "\red You slip [W] inside [src]."
- user.u_equip(W)
+ user.unEquip(W)
if ((user.client && user.s_active != src))
user.client.screen -= W
W.dropped(user)
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index 036e19439d9..c2c86c01039 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -241,7 +241,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris/attackby(var/obj/item/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/rollingpaper))
- user.u_equip(W)
+ user.unEquip(W)
var/obj/item/clothing/mask/cigarette/joint/J = new /obj/item/clothing/mask/cigarette/joint(user.loc)
J.chem_volume = src.reagents.total_volume
src.reagents.trans_to(J, J.chem_volume)
@@ -264,7 +264,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus/attackby(var/obj/item/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/rollingpaper))
- user.u_equip(W)
+ user.unEquip(W)
var/obj/item/clothing/mask/cigarette/joint/deus/J = new /obj/item/clothing/mask/cigarette/joint/deus(user.loc)
J.chem_volume = src.reagents.total_volume
src.reagents.trans_to(J, J.chem_volume)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 0d1b64dacd3..ee8b39ce66b 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -12,7 +12,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50)
volume = 50
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
var/label_text = ""
@@ -226,11 +226,11 @@
name = "large beaker"
desc = "A large beaker. Can hold up to 100 units."
icon_state = "beakerlarge"
-
g_amt = 5000
+
g_amt = 2500
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
@@ -240,7 +240,7 @@
volume = 25
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25)
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/noreact
name = "cryostasis beaker"
@@ -249,7 +249,7 @@
g_amt = 500
volume = 50
amount_per_transfer_from_this = 10
-
flags = FPRINT | TABLEPASS | OPENCONTAINER | NOREACT
+
flags = OPENCONTAINER | NOREACT
/obj/item/weapon/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker"
@@ -259,7 +259,7 @@
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
New()
@@ -291,14 +291,14 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120)
volume = 120
-
flags = FPRINT | OPENCONTAINER
+
flags = OPENCONTAINER
attackby(var/obj/D, mob/user as mob)
if(isprox(D))
user << "You add [D] to [src]."
del(D)
user.put_in_hands(new /obj/item/weapon/bucket_sensor)
-
user.drop_from_inventory(src)
+
user.unEquip(src)
del(src)
/obj/item/weapon/reagent_containers/glass/beaker/vial
@@ -309,7 +309,7 @@
volume = 15
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1,5,15)
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
@@ -341,7 +341,6 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
-
flags = FPRINT
/obj/item/weapon/reagent_containers/glass/dispenser
name = "reagent glass"
@@ -349,7 +348,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker0"
amount_per_transfer_from_this = 10
-
flags = FPRINT | TABLEPASS | OPENCONTAINER
+
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
name = "reagent glass (surfactant)"
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 419abe144c1..5c903608707 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -9,7 +9,7 @@
item_state = "atoxinbottle"
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
volume = 30
New()
diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
index 9286e5ab03b..7c8bf02a5bb 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
@@ -2,7 +2,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/robot
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
volume = 60
var/reagent = ""
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index cd0a0cca72f..4d19e402f3d 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -12,7 +12,7 @@
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
slot_flags = SLOT_BELT
/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index e7b4ddf987f..5f4bdc09166 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -27,7 +27,7 @@
return
M << "\blue You swallow [src]."
- M.drop_from_inventory(src) //icon update
+ M.unEquip(src) //icon update
if(reagents.total_volume)
reagents.reaction(M, INGEST)
spawn(5)
@@ -49,7 +49,7 @@
if(!do_mob(user, M)) return
- user.drop_from_inventory(src) //icon update
+ user.unEquip(src) //icon update
for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] forces [M] to swallow [src].", 1)
@@ -195,7 +195,7 @@
New()
..()
reagents.add_reagent("paroxetine", 15)
-
+
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 4f53ce68f19..3d2db2468af 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "cleaner"
item_state = "cleaner"
- flags = TABLEPASS|OPENCONTAINER|FPRINT|NOBLUDGEON
+ flags = OPENCONTAINER | NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 0
w_class = 2.0
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index e24bcb4c90a..7ef798f86e5 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -294,7 +294,7 @@
if (target != user && target.getarmor(target_zone, "melee") > 5 && prob(50))
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1)
- user.u_equip(src)
+ user.unEquip(src)
del(src)
return
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 1d69fd6fecd..58e883716a0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -7,7 +7,6 @@
icon_state = "watertank"
density = 1
anchored = 0
- flags = FPRINT
pressure_resistance = 2*ONE_ATMOSPHERE
var/amount_per_transfer_from_this = 10
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 13740067ff2..9de451fd848 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -44,7 +44,7 @@
// attack by item places it in to disposal
attackby(var/obj/item/I, var/mob/user)
- if(stat & BROKEN || !I || !user)
+ if(stat & BROKEN || !I || !user || (I.flags & NODROP))
return
if(isrobot(user) && !istype(I, /obj/item/weapon/storage/bag/trash))
@@ -102,7 +102,7 @@
T.update_icon()
update()
return
-
+
if(istype(I, /obj/item/weapon/storage/part_replacer))
var/obj/item/weapon/storage/part_replacer/P = I
if(P.contents.len)
@@ -111,7 +111,7 @@
P.remove_from_storage(O,src)
update()
return
-
+
var/obj/item/weapon/grab/G = I
if(istype(G)) // handle grabbed mob
if(ismob(G.affecting))
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index a30e15a58ec..17f62fc9c67 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -6,7 +6,7 @@
var/obj/wrapped = null
density = 1
var/sortTag = 0
- flags = FPRINT | NOBLUDGEON
+ flags = NOBLUDGEON
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
attack_hand(mob/user as mob)
@@ -45,7 +45,6 @@
icon_state = "deliverycrateSmall"
var/obj/item/wrapped = null
var/sortTag = 0
- flags = FPRINT
attack_self(mob/user as mob)
@@ -164,7 +163,7 @@
w_class = 1
item_state = "electronic"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
proc/openwindow(mob/user as mob)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 5620f5dcd7a..cd3acea26fe 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -230,7 +230,7 @@
name = "Metal"
id = "metal"
build_type = AUTOLATHE
- materials = list("$metal" = MINERAL_MATERIAL_AMOUNT)
+ materials = list("$metal" = 3750)
build_path = /obj/item/stack/sheet/metal
category = list("initial","Construction")
@@ -254,7 +254,7 @@
name = "Reinforced Glass"
id = "rglass"
build_type = AUTOLATHE
- materials = list("$metal" = 1000, "$glass" = MINERAL_MATERIAL_AMOUNT)
+ materials = list("$metal" = 1875, "$glass" = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/rglass
category = list("initial","Construction")
@@ -262,7 +262,7 @@
name = "Metal Rod"
id = "rods"
build_type = AUTOLATHE
- materials = list("$metal" = 1000)
+ materials = list("$metal" = 1875)
build_path = /obj/item/stack/rods
category = list("initial","Construction")
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 3c4469f1859..d22d31ceeae 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -52,7 +52,7 @@
req_tech = list("programming" = 2, "biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 30, "$glass" = 20)
- reliability_base = 74
+ reliability_base = 76
build_path = /obj/item/device/robotanalyzer
category = list("Medical")
@@ -77,6 +77,17 @@
build_path = /obj/item/weapon/implantcase/freedom
category = list("Medical")
+/datum/design/sensor_device
+ name = "Handheld Crew Monitor"
+ desc = "A device for tracking crew members on the station."
+ id = "sensor_device"
+ req_tech = list("biotech" = 4, "magnets" = 3, "materials" = 3)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 30, "$glass" = 20)
+ reliability_base = 76
+ build_path = /obj/item/device/sensor_device
+ category = list("Medical")
+
/datum/design/implanter
name = "Implanter"
desc = "A basic implanter for injecting implants"
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 7aca9b588bf..94db17abdc4 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -130,8 +130,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
files.known_tech=files.possible_tech
for(var/datum/tech/KT in files.known_tech)
if(KT.level < KT.max_level)
- KT.level=KT.max_level
-
+ KT.level=KT.max_level
+
/obj/machinery/computer/rdconsole/New()
..()
files = new /datum/research(src) //Setup the research data holder.
@@ -250,11 +250,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
linked_destroy.loaded_item = null
linked_destroy.icon_state = "d_analyzer"
screen = 2.1
-
+
else if(href_list["maxresearch"]) //Eject the item inside the destructive analyzer.
if(!usr.client.holder) return
+ if(usr.client.holder & R_MENTOR) return
screen = 0.0
- if(alert("Are you sure you want to maximize research levels?","Confirmation","Yes","No")=="No")
+ if(alert("Are you sure you want to maximize research levels?","Confirmation","Yes","No")=="No")
return
log_admin("[key_name(usr)] has maximized the research levels.")
message_admins("[key_name_admin(usr)] has maximized the research levels.")
@@ -262,7 +263,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
Maximize()
screen = 1.0
updateUsrDialog()
- griefProtection() //Update centcomm too
+ griefProtection() //Update centcomm too
else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
if(linked_destroy)
@@ -593,7 +594,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
spawn(20)
screen = 1.6
updateUsrDialog()
-
+
else if(href_list["search"]) //Search for designs with name matching pattern
var/compare
@@ -611,7 +612,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
if(findtext(D.name,href_list["to_search"]))
matching_designs.Add(D)
-
+
updateUsrDialog()
return
@@ -873,7 +874,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += " | LOCKED"
dat += "
"
dat += "