mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Merge branch 'master' of git://github.com/Baystation12/Baystation12
This commit is contained in:
@@ -179,19 +179,16 @@ proc/countJob(rank)
|
||||
del(W)
|
||||
return equipped
|
||||
|
||||
/proc/AutoUpdateAI(obj/subject)
|
||||
/*
|
||||
/proc/AutoUpdateAI(obj/subject) // Needed for AI's to not have to click on every computer after every change.
|
||||
if (subject!=null)
|
||||
for(var/mob/living/silicon/ai/M in world)
|
||||
if ((M.client && M.machine == subject))
|
||||
subject.attack_ai(M)
|
||||
*/
|
||||
|
||||
/proc/AutoUpdateTK(obj/subject)
|
||||
/* if (subject!=null)
|
||||
/proc/AutoUpdateTK(obj/subject) // Commented where used due to lag.
|
||||
if (subject!=null)
|
||||
for(var/obj/item/tk_grab/T in world)
|
||||
if (T.host)
|
||||
var/mob/M = T.host
|
||||
if(M.client && M.machine == subject)
|
||||
subject.attack_hand(M)
|
||||
*/
|
||||
|
||||
@@ -3,22 +3,28 @@
|
||||
Announce()
|
||||
|
||||
for (var/obj/machinery/power/apc/temp_apc in world)
|
||||
if(istype(get_area(temp_apc), /area/security/prison))
|
||||
temp_apc.overload_lighting()
|
||||
if(istype(get_area(temp_apc), /area/security/brig))
|
||||
temp_apc.overload_lighting()
|
||||
// for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world)
|
||||
// temp_shuttle.prison_break()
|
||||
for (var/obj/structure/closet/secure_closet/security/temp_closet in world)
|
||||
if(istype(get_area(temp_closet), /area/security/brig))
|
||||
for (var/obj/structure/closet/secure_closet/brig/temp_closet in world)
|
||||
if(istype(get_area(temp_closet), /area/security/prison))
|
||||
temp_closet.locked = 0
|
||||
temp_closet.icon_state = temp_closet.icon_closed
|
||||
for (var/obj/machinery/door/airlock/security/temp_airlock in world)
|
||||
if(istype(get_area(temp_airlock), /area/security/prison))
|
||||
temp_airlock.prison_open()
|
||||
if(istype(get_area(temp_airlock), /area/security/brig))
|
||||
temp_airlock.prison_open()
|
||||
for (var/obj/machinery/door/airlock/glass/glass_security/temp_glassairlock in world)
|
||||
if(istype(get_area(temp_glassairlock), /area/security/prison))
|
||||
temp_glassairlock.prison_open()
|
||||
if(istype(get_area(temp_glassairlock), /area/security/brig))
|
||||
temp_glassairlock.prison_open()
|
||||
for (var/obj/machinery/door_timer/temp_timer in world)
|
||||
if(istype(get_area(temp_timer), /area/security/brig))
|
||||
temp_timer.releasetime = 1
|
||||
sleep(150)
|
||||
command_alert("Glitch in imprisonment subroutines detected on [station_name()]. Recommend station AI involvement.", "Security Alert")
|
||||
command_alert("Glitch in imprisonment subroutines detected on [station_name()]. Recommend station AI involvement.", "Security Alert")
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
del(usr)
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
/client/proc/changeling_greater_form() // Oh shit, it's on now.
|
||||
|
||||
set category = "Changeling"
|
||||
@@ -429,7 +429,7 @@
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
//animation = null
|
||||
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
|
||||
var/mob/living/carbon/human/O = new /mob/living/carbon/human( src )//Removed Emissary shit -Sieve{R}
|
||||
del(animation)
|
||||
|
||||
O.real_name = usr.real_name
|
||||
@@ -495,7 +495,7 @@
|
||||
new_objective.owner = O.mind
|
||||
O.mind.objectives += new_objective
|
||||
|
||||
spawn(0)
|
||||
/* spawn(0)
|
||||
while(emergency_shuttle.online == 0)
|
||||
sleep(10)
|
||||
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
|
||||
@@ -512,8 +512,8 @@
|
||||
sleep(10)
|
||||
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
|
||||
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
|
||||
Tarjan shit, not recoding this -Sieve{R}*/
|
||||
|
||||
*/
|
||||
/client/proc/changeling_fakedeath()
|
||||
set category = "Changeling"
|
||||
set name = "Regenerative Stasis (20)"
|
||||
|
||||
@@ -41,14 +41,14 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
verbpath = /client/proc/changeling_lesser_form
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/effect/proc_holder/power/changeling_greater_form
|
||||
name = "Greater Form"
|
||||
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
|
||||
genomecost = 250
|
||||
|
||||
// verbpath = /client/proc/changeling_greater_form
|
||||
|
||||
verbpath = /client/proc/changeling_greater_form
|
||||
*/
|
||||
/obj/effect/proc_holder/power/fakedeath
|
||||
name = "Fake Death"
|
||||
desc = "We fake our death while we heal."
|
||||
@@ -92,7 +92,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
/obj/effect/proc_holder/power/silence_sting
|
||||
name = "Silence Sting"
|
||||
desc = "We silently sting a human, completely silencing them for a short time."
|
||||
helptext = "Does not provide a warning to a victim that they've been stung, until they try to speak and can't." // Man, fuck javascript. ' == '
|
||||
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and can not."
|
||||
genomecost = 2
|
||||
allowduringlesserform = 1
|
||||
|
||||
@@ -190,7 +190,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
/obj/effect/proc_holder/power/LSDSting
|
||||
name = "Hallucination Sting"
|
||||
desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical."
|
||||
helptext = "The target does not notice they've been stung. The effect occurs after 30 to 60 seconds."
|
||||
helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds."
|
||||
genomecost = 3
|
||||
|
||||
verbpath = /client/proc/changeling_lsdsting
|
||||
|
||||
@@ -45,7 +45,6 @@ Stealth and Camouflage Items;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover and Forger;
|
||||
Whitespace:Seperator;
|
||||
@@ -56,11 +55,12 @@ Devices and Tools;
|
||||
/obj/item/device/encryptionkey/traitor:3:Traitor Radio Key;
|
||||
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
|
||||
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
|
||||
/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
|
||||
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
/obj/item/weapon/circuitboard/teleporter:10:Teleporter Circuit Board;
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
@@ -70,8 +70,7 @@ Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);
|
||||
Whitespace:Seperator;"}
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
|
||||
// Items removed from above:
|
||||
/*
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
traitor.objectives += block_objective
|
||||
|
||||
else
|
||||
for(var/datum/objective/o in SelectObjectives((traitor.current:wear_id ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor))
|
||||
for(var/datum/objective/o in SelectObjectives((istype(traitor.current:wear_id, /obj/item/weapon/card/id) ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor))
|
||||
o.owner = traitor
|
||||
traitor.objectives += o
|
||||
return
|
||||
@@ -238,7 +238,7 @@
|
||||
if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio))
|
||||
R = traitor_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio) || prob(10))
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio))
|
||||
R = traitor_mob.l_ear
|
||||
loc = "on your head"
|
||||
if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio))
|
||||
|
||||
+49
-41
@@ -82,28 +82,29 @@
|
||||
|
||||
/obj/var/list/req_access = null
|
||||
/obj/var/req_access_txt = "0"
|
||||
/obj/var/list/req_one_access = null
|
||||
/obj/var/req_one_access_txt = "0"
|
||||
|
||||
/obj/var/list/req_combined_access = null
|
||||
/obj/var/req_combined_access_txt = "0"
|
||||
|
||||
/obj/New()
|
||||
//NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6
|
||||
if(src.req_access_txt)
|
||||
if(req_access_txt)
|
||||
var/list/req_access_str = dd_text2list(req_access_txt,";")
|
||||
if(!req_access)
|
||||
req_access = list()
|
||||
for(var/x in req_access_str)
|
||||
var/n = text2num(x)
|
||||
if(n)
|
||||
req_access += n
|
||||
req_access |= n
|
||||
|
||||
if(src.req_one_access_txt)
|
||||
var/list/req_one_access_str = dd_text2list(req_one_access_txt,";")
|
||||
if(!req_one_access)
|
||||
req_one_access = list()
|
||||
for(var/x in req_one_access_str)
|
||||
if(req_combined_access_txt)
|
||||
var/list/req_access_str = dd_text2list(req_combined_access_txt,";")
|
||||
if(!req_combined_access)
|
||||
req_combined_access = list()
|
||||
for(var/x in req_access_str)
|
||||
var/n = text2num(x)
|
||||
if(n)
|
||||
req_one_access += n
|
||||
req_combined_access |= n
|
||||
|
||||
..()
|
||||
|
||||
@@ -133,40 +134,47 @@
|
||||
var/obj/item/device/pda/pda = I
|
||||
I = pda.id
|
||||
|
||||
if(!src.req_access && !src.req_one_access) //no requirements
|
||||
if(!req_access) //no requirements
|
||||
return 1
|
||||
if(!istype(src.req_access, /list)) //something's very wrong
|
||||
return 1
|
||||
|
||||
var/list/L = src.req_access
|
||||
if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements
|
||||
if(!istype(req_access, /list)) //something's very wrong
|
||||
return 1
|
||||
if(!req_access.len) //no requirements
|
||||
if(!req_combined_access || !islist(req_combined_access) || !req_combined_access.len)
|
||||
return 1
|
||||
if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access
|
||||
return 0
|
||||
if(src.req_one_access && src.req_one_access.len)
|
||||
for(var/req in src.req_one_access)
|
||||
if(req in I.access) //has an access from the single access list
|
||||
return 1
|
||||
for(var/req in src.req_access)
|
||||
if(!(req in I.access)) //doesn't have this access - Leave like this DMTG
|
||||
return 0
|
||||
return 1
|
||||
for(var/req in req_access)
|
||||
if(req in I.access) //has an access from the single access list
|
||||
return 1
|
||||
if(req_combined_access && req_combined_access.len)
|
||||
for(var/req in req_combined_access)
|
||||
if(!req in I.access)
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/proc/check_access_list(var/list/L)
|
||||
if(!src.req_access && !src.req_one_access) return 1
|
||||
if(!istype(src.req_access, /list)) return 1
|
||||
if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) return 1
|
||||
if(!L) return 0
|
||||
if(!istype(L, /list)) return 0
|
||||
if(src.req_one_access && src.req_one_access.len)
|
||||
for(var/req in src.req_one_access)
|
||||
if(req in L) //has an access from the single access list
|
||||
return 1
|
||||
for(var/req in src.req_access)
|
||||
if(!(req in L)) //doesn't have this access - Leave like this DMTG
|
||||
return 0
|
||||
return 1
|
||||
if(!req_access)
|
||||
return 1
|
||||
if(!istype(req_access, /list))
|
||||
return 1
|
||||
if(!req_access.len)
|
||||
if(!req_combined_access || !islist(req_combined_access) || !req_combined_access.len)
|
||||
return 1
|
||||
if(!L)
|
||||
return 0
|
||||
if(!istype(L, /list))
|
||||
return 0
|
||||
for(var/req in req_access)
|
||||
if(req in L) //has an access from the single access list
|
||||
return 1
|
||||
if(req_combined_access && req_combined_access.len)
|
||||
for(var/req in req_combined_access)
|
||||
if(!req in L)
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/proc/get_access(job)
|
||||
@@ -207,9 +215,9 @@
|
||||
access_tox, access_tox_storage, access_chemistry, access_medical, access_genetics, access_engine,
|
||||
access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
|
||||
access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_hydroponics, access_lawyer,
|
||||
access_theatre, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth)
|
||||
access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth)
|
||||
if("Atmospheric Technician")
|
||||
return list(access_atmospherics, access_maint_tunnels, access_emergency_storage)
|
||||
if("Bartender")
|
||||
@@ -231,7 +239,7 @@
|
||||
if("Shaft Miner")
|
||||
return list(access_mining, access_mint, access_mining_station)
|
||||
if("Quartermaster")
|
||||
return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining)
|
||||
return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
|
||||
if("Chief Engineer")
|
||||
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/cargo(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/cargotech(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt)
|
||||
return 1
|
||||
@@ -146,6 +146,7 @@
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back)
|
||||
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
|
||||
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_eng(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/device/pda/shaftminer(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/miner(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
if(H.backbag == 1)
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/device/pda/roboticist(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(H), H.slot_l_hand)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the chief medical officer"
|
||||
supervisors = "the chief medical officer and research director"
|
||||
selection_color = "#ffeef0"
|
||||
|
||||
|
||||
|
||||
@@ -304,6 +304,11 @@ var/global/datum/controller/occupations/job_master
|
||||
C.assignment = title
|
||||
C.name = "[C.registered_name]'s ID Card ([C.assignment])"
|
||||
C.access = get_access(rank)
|
||||
C.pin = rand(1000,9999)
|
||||
C.money = 10 * rand(50,200)
|
||||
H << "<b>\blue Your station account has [C.money] credits. The pin-code is [C.pin].</b>"
|
||||
if(H.mind)
|
||||
H.mind.memory += "Your pin-code is - [C.pin]<br>"
|
||||
H.equip_if_possible(C, H.slot_wear_id)
|
||||
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
|
||||
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)
|
||||
|
||||
@@ -175,7 +175,10 @@ obj/machinery/access_button
|
||||
icon_state = "access_button_off"
|
||||
|
||||
attack_hand(mob/user)
|
||||
if(radio_connection)
|
||||
if(!allowed(user))
|
||||
user << "\red Access Denied"
|
||||
|
||||
else if(radio_connection)
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.data["tag"] = master_tag
|
||||
|
||||
@@ -23,6 +23,8 @@ var/global/list/autolathe_recipes = list( \
|
||||
new /obj/item/weapon/kitchenknife(), \
|
||||
new /obj/item/weapon/scalpel(), \
|
||||
new /obj/item/weapon/circular_saw(), \
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker(), \
|
||||
new /obj/item/weapon/reagent_containers/glass/large(), \
|
||||
new /obj/item/ammo_casing/shotgun/blank(), \
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(), \
|
||||
new /obj/item/ammo_magazine/c38(), \
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
var/active = 0
|
||||
var/list/holographic_items = list()
|
||||
var/damaged = 0
|
||||
|
||||
var/last_change = 0
|
||||
var/safety = 1
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
@@ -34,7 +35,11 @@
|
||||
|
||||
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
|
||||
|
||||
if(emagged)
|
||||
if(!safety)
|
||||
if(issilicon(user) && (emagged))
|
||||
dat += "<font color=red>ERROR: SAFETY PROTOCOLS UNRESPONSIVE</font><BR>"
|
||||
else if(issilicon(user) && (!emagged))
|
||||
dat += "<A href='?src=\ref[src];AIrelock=1'>(<font color=red>Enable Safety Protocols?</font>)</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
|
||||
dat += "Ensure the holodeck is empty before testing.<BR>"
|
||||
dat += "<BR>"
|
||||
@@ -42,12 +47,11 @@
|
||||
dat += "Ensure the holodeck is empty before testing.<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
|
||||
else
|
||||
else if(safety)
|
||||
if(issilicon(user))
|
||||
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Disable Safety Protocols?</font>)</A><BR>"
|
||||
dat += "<BR>"
|
||||
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
|
||||
@@ -100,7 +104,13 @@
|
||||
|
||||
else if(href_list["AIoverride"])
|
||||
if(!issilicon(usr)) return
|
||||
emagged = 1
|
||||
safety = 0
|
||||
log_admin("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
|
||||
message_admins("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
|
||||
|
||||
else if(href_list["AIrelock"])
|
||||
if(!issilicon(usr)) return
|
||||
safety = 1
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
@@ -140,8 +150,11 @@
|
||||
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
playsound(src.loc, 'sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
safety = 0
|
||||
user << "\blue You vastly increase projector power and override the safety and security protocols."
|
||||
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintence and do not use the simulator."
|
||||
log_admin("[user] ([user.ckey]) emagged Holodeck Safeties.")
|
||||
message_admins("[user] ([user.ckey]) emagged Holodeck Safeties.")
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -233,6 +246,15 @@
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
|
||||
|
||||
if(world.time < (last_change + 25))
|
||||
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
|
||||
return
|
||||
for(var/mob/M in range(3,src))
|
||||
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
|
||||
last_change = world.time
|
||||
return
|
||||
|
||||
last_change = world.time
|
||||
active = 1
|
||||
|
||||
for(var/item in holographic_items)
|
||||
@@ -330,7 +352,64 @@
|
||||
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(G.state<2)
|
||||
user << "\red You need a better grip to do that!"
|
||||
if(ishuman(G.affecting))
|
||||
var/mob/living/carbon/human/H = G.affecting
|
||||
var/datum/organ/external/affecting = H.get_organ("head")
|
||||
//Fucking hacky, but whatever.
|
||||
var/obj/machinery/computer/HolodeckControl/HC = locate() in world
|
||||
if(istype(HC) && HC.safety) //If the computer exists, and the safety is active...
|
||||
if(prob(25))
|
||||
add_blood(G.affecting)
|
||||
H.halloss += rand(10, 15)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to engage \the [src]'s safeties!",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to engage \the [src]'s safeties!",\
|
||||
"\red You hear a whine as \the [src]'s engage.")
|
||||
else
|
||||
H.halloss += rand(5, 10)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src]!",\
|
||||
"\red You smash \the [H]'s head on \the [src]!",\
|
||||
"\red You hear a whine as \the [src]'s is hit by something dense.")
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
|
||||
else //Lets do REAL DAMAGE, YEAH!
|
||||
G.affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])</font>")
|
||||
G.assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.</font>")
|
||||
|
||||
log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
log_attack("<font color='red'>[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.</font>")
|
||||
if(prob(25))
|
||||
add_blood(G.affecting)
|
||||
affecting.take_damage(rand(10,15), 0)
|
||||
H.Weaken(2)
|
||||
if(prob(20)) // One chance in 20 to DENT THE TABLE
|
||||
affecting.take_damage(rand(0,5), 0) //Extra damage
|
||||
if(dented)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else
|
||||
dented = 1
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else if(prob(50))
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
|
||||
else
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
|
||||
else
|
||||
affecting.take_damage(rand(5,10), 0)
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src]!",\
|
||||
"\red You smash \the [H]'s head on \the [src]!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
|
||||
@@ -42,20 +42,34 @@
|
||||
dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>"
|
||||
if(src.table && (src.table.check_victim()))
|
||||
src.victim = src.table.victim
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
if(istype(victim))
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Blood Type:</B> [(victim.dna? victim.dna.b_type : "ERROR")]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
else if(istype(victim, /mob/living))
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
else
|
||||
src.victim = null
|
||||
dat += {"
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
|
||||
var/obj/item/weapon/circuitboard/B = P
|
||||
if(B.board_type == "computer")
|
||||
if(B.build_path != "")
|
||||
if(B.build_path != "" && !isnull(B.build_path))
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
user << "\blue You place the circuit board inside the frame."
|
||||
src.icon_state = "1"
|
||||
@@ -324,13 +324,14 @@
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||
user << "\blue You connect the monitor."
|
||||
var/B = new src.circuit.build_path ( src.loc )
|
||||
if(circuit.powernet) B:powernet = circuit.powernet
|
||||
if(circuit.id) B:id = circuit.id
|
||||
if(circuit.records) B:records = circuit.records
|
||||
if(circuit.frequency) B:frequency = circuit.frequency
|
||||
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||
var/obj/machinery/computer/supplycomp/SC = B
|
||||
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||
SC.can_order_contraband = C.contraband_enabled
|
||||
del(src)
|
||||
if(circuit && circuit.build_path)
|
||||
var/B = new circuit.build_path (loc)
|
||||
if(circuit.powernet) B:powernet = circuit.powernet
|
||||
if(circuit.id) B:id = circuit.id
|
||||
if(circuit.records) B:records = circuit.records
|
||||
if(circuit.frequency) B:frequency = circuit.frequency
|
||||
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||
var/obj/machinery/computer/supplycomp/SC = B
|
||||
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||
SC.can_order_contraband = C.contraband_enabled
|
||||
del(src)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
if (I && istype(I))
|
||||
if(src.check_access(I))
|
||||
authenticated = 1
|
||||
if(20 in I.access)
|
||||
if((access_hop in I.access) || (access_captain in I.access))
|
||||
authenticated = 2
|
||||
if("logout")
|
||||
authenticated = 0
|
||||
@@ -71,7 +71,7 @@
|
||||
var/obj/item/device/pda/pda = I
|
||||
I = pda.id
|
||||
if (I && istype(I))
|
||||
if(access_captain in I.access)
|
||||
if((access_hop in I.access) || (access_captain in I.access))
|
||||
var/old_level = security_level
|
||||
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
//only load blast doors for map-defined departments for the moment
|
||||
switch(department)
|
||||
if("SinguloEngineering-Antiqua")
|
||||
if("Engineering")
|
||||
connectedDoorIds.Add("Engineering Primary Access")
|
||||
connectedDoorIds.Add("Engineering Secondary Access")
|
||||
connectedDoorIds.Add("Fore Maintenance Access")
|
||||
@@ -34,7 +34,7 @@
|
||||
connectedDoorIds.Add("Central aft shell access")
|
||||
connectedDoorIds.Add("Port aft shell access")
|
||||
connectedDoorIds.Add("Starboard aft shell access")
|
||||
if("Medbay-Exodus")
|
||||
if("Medbay")
|
||||
connectedDoorIds.Add("Genetics Outer Shutters")
|
||||
connectedDoorIds.Add("Genetics Inner Shutters")
|
||||
connectedDoorIds.Add("Chemistry Outer Shutters")
|
||||
@@ -143,4 +143,4 @@
|
||||
t += "</table>"
|
||||
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
user << browse(t, "window=lockdown;size=500x800")
|
||||
onclose(user, "lockdown")
|
||||
onclose(user, "lockdown")
|
||||
@@ -86,6 +86,8 @@
|
||||
background = "'background-color:#CD853F;'"
|
||||
if("Released")
|
||||
background = "'background-color:#3BB9FF;'"
|
||||
if("Deceased")
|
||||
background = "'background-color:#CD853F;'"
|
||||
if("None")
|
||||
background = "'background-color:#00FF7F;'"
|
||||
if("")
|
||||
@@ -171,6 +173,8 @@
|
||||
background = "'background-color:#CD853F;'"
|
||||
if("Released")
|
||||
background = "'background-color:#3BB9FF;'"
|
||||
if("Deceased")
|
||||
background = "'background-color:#CD853F;'"
|
||||
if("None")
|
||||
background = "'background-color:#00FF7F;'"
|
||||
if("")
|
||||
@@ -472,6 +476,7 @@ What a mess.*/
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>"
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>"
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=deceased'>Deceased</a></li>"
|
||||
temp += "</ul>"
|
||||
if("rank")
|
||||
var/list/L = list( "Head of Personnel", "Captain", "AI" )
|
||||
@@ -525,6 +530,8 @@ What a mess.*/
|
||||
active2.fields["criminal"] = "Parolled"
|
||||
if("released")
|
||||
active2.fields["criminal"] = "Released"
|
||||
if("deceased")
|
||||
active2.fields["criminal"] = "Deceased"
|
||||
|
||||
if ("Delete Record (Security) Execute")
|
||||
if (active2)
|
||||
|
||||
@@ -1,3 +1,35 @@
|
||||
/obj/machinery/door_control
|
||||
name = "remote door-control"
|
||||
desc = "It controls doors, remotely."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "doorctrl0"
|
||||
desc = "A remote control-switch for a door."
|
||||
var/id = null
|
||||
var/range = 10
|
||||
var/normaldoorcontrol = 0
|
||||
var/desiredstate = 0 // Zero is closed, 1 is open.
|
||||
var/specialfunctions = 1
|
||||
/*
|
||||
Bitflag, 1= open
|
||||
2= idscan,
|
||||
4= bolts
|
||||
8= shock
|
||||
16= door safties
|
||||
|
||||
*/
|
||||
|
||||
var/exposedwires = 0
|
||||
var/wires = 3
|
||||
/*
|
||||
Bitflag, 1=checkID
|
||||
2=Network Access
|
||||
*/
|
||||
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 4
|
||||
|
||||
/obj/machinery/door_control/attack_ai(mob/user as mob)
|
||||
if(wires & 2)
|
||||
return src.attack_hand(user)
|
||||
@@ -31,6 +63,7 @@
|
||||
return
|
||||
|
||||
if(!allowed(user) && (wires & 1))
|
||||
user << "\red Access Denied"
|
||||
flick("doorctrl-denied",src)
|
||||
return
|
||||
|
||||
@@ -49,8 +82,8 @@
|
||||
if(specialfunctions & IDSCAN)
|
||||
D.aiDisabledIdScanner = 1
|
||||
if(specialfunctions & BOLTS)
|
||||
spawn(5)
|
||||
D.locked = 1
|
||||
D.locked = 1
|
||||
D.update_icon()
|
||||
if(specialfunctions & SHOCK)
|
||||
D.secondsElectrified = -1
|
||||
|
||||
@@ -63,8 +96,8 @@
|
||||
if(specialfunctions & IDSCAN)
|
||||
D.aiDisabledIdScanner = 0
|
||||
if(specialfunctions & BOLTS)
|
||||
spawn(5)
|
||||
D.locked = 0
|
||||
D.locked = 0
|
||||
D.update_icon()
|
||||
if(specialfunctions & SHOCK)
|
||||
D.secondsElectrified = 0
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
|
||||
|
||||
dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
|
||||
dat += "<a href='?src=\ref[src];tp=-600'>-</a> <a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/> <A href='?src=\ref[src];tp=600'>+</a><br/>"
|
||||
dat += "<a href='?src=\ref[src];tp=-600'>-</a> <a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a> <A href='?src=\ref[src];tp=600'>+</a><br/>"
|
||||
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
if(F.last_flash && (F.last_flash + 150) > world.time)
|
||||
|
||||
@@ -820,7 +820,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable
|
||||
var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
@@ -828,7 +828,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.potency = potency
|
||||
t_prod.changePotency(potency) // -QualityVan
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
@@ -840,7 +840,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable
|
||||
var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
@@ -848,7 +848,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.potency = potency
|
||||
t_prod.changePotency(potency) // -QualityVan
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
|
||||
@@ -677,10 +677,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //list that will contain r
|
||||
var/scribble=""
|
||||
var/scribble_page = null
|
||||
|
||||
/*obj/item/weapon/newspaper/attack_hand(mob/user as mob)
|
||||
..()
|
||||
world << "derp"*/
|
||||
|
||||
obj/item/weapon/newspaper/attack_self(mob/user as mob)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
|
||||
@@ -59,9 +59,9 @@ datum/controller/game_controller
|
||||
|
||||
setupgenetics()
|
||||
|
||||
for(var/i = 0, i < max_secret_rooms, i++)
|
||||
make_mining_asteroid_secret()
|
||||
|
||||
// for(var/i = 0, i < max_secret_rooms, i++)
|
||||
// make_mining_asteroid_secret()
|
||||
// Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo
|
||||
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
|
||||
syndicate_code_response = generate_code_phrase()
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
A.yo = targloc.y - curloc.y
|
||||
A.xo = targloc.x - curloc.x
|
||||
chassis.use_power(energy_drain)
|
||||
A.process()
|
||||
A.fired()
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
@@ -215,7 +215,7 @@
|
||||
A.yo = targloc.y - curloc.y
|
||||
A.xo = targloc.x - curloc.x
|
||||
set_ready_state(0)
|
||||
A.process()
|
||||
A.fired()
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
@@ -256,7 +256,7 @@
|
||||
A.current = curloc
|
||||
A.yo = targloc.y - curloc.y
|
||||
A.xo = targloc.x - curloc.x
|
||||
A.process()
|
||||
A.fired()
|
||||
sleep(2)
|
||||
set_ready_state(0)
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
|
||||
@@ -1,87 +1,57 @@
|
||||
|
||||
/obj/structure/closet/extinguisher
|
||||
name = "extinguisher closet"
|
||||
name = "extinguisher cabinet"
|
||||
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
|
||||
icon_state = "extinguisher10"
|
||||
icon_opened = "extinguisher11"
|
||||
icon_closed = "extinguisher10"
|
||||
opened = 1
|
||||
icon = 'closet.dmi'
|
||||
icon_state = "extinguisher_closed"
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher
|
||||
var/localopened = 1
|
||||
var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher
|
||||
|
||||
open()
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
close()
|
||||
return
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (isrobot(usr))
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
if(!EXTINGUISHER)
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
EXTINGUISHER = O
|
||||
user << "\blue You place the extinguisher in the [src.name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
if(!has_extinguisher && opened)
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
has_extinguisher = O
|
||||
user << "\blue You place the extinguisher in the [src.name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(localopened)
|
||||
if(EXTINGUISHER)
|
||||
user.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
user << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/toggle_openness() //nice name, huh? HUH?!
|
||||
set name = "Open/Close"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/remove_extinguisher()
|
||||
set name = "Remove Extinguisher"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
if (localopened)
|
||||
if(EXTINGUISHER)
|
||||
usr.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
usr << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
usr << "\blue The [name] is empty."
|
||||
else
|
||||
usr << "\blue The [name] is closed."
|
||||
update_icon()
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
return
|
||||
|
||||
opened = !opened
|
||||
else
|
||||
opened = !opened
|
||||
update_icon()
|
||||
var/hasextinguisher = 0
|
||||
if(EXTINGUISHER)
|
||||
hasextinguisher = 1
|
||||
icon_state = text("extinguisher[][]",hasextinguisher,src.localopened)
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_hand(mob/user as mob)
|
||||
if(has_extinguisher)
|
||||
user.put_in_hand(has_extinguisher)
|
||||
has_extinguisher = null
|
||||
user << "\blue You take the extinguisher from the [name]."
|
||||
opened = 1
|
||||
else
|
||||
opened = !opened
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/update_icon()
|
||||
if(!opened)
|
||||
icon_state = "extinguisher_closed"
|
||||
return
|
||||
if(has_extinguisher)
|
||||
if(istype(has_extinguisher, /obj/item/weapon/extinguisher/mini))
|
||||
icon_state = "extinguisher_mini"
|
||||
else
|
||||
icon_state = "extinguisher_full"
|
||||
else
|
||||
icon_state = "extinguisher_empty"
|
||||
@@ -13,7 +13,7 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
new /obj/item/clothing/under/rank/cargotech(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
new /obj/item/clothing/under/rank/hydroponics(src)
|
||||
new /obj/item/clothing/suit/storage/apron(src)
|
||||
new /obj/item/clothing/under/rank/hydroponics(src)
|
||||
new /obj/item/clothing/head/helmet/greenbandana(src)
|
||||
new /obj/item/device/analyzer/plant_analyzer(src)
|
||||
new /obj/item/clothing/head/helmet/greenbandana(src)
|
||||
new /obj/item/weapon/minihoe(src)
|
||||
new /obj/item/weapon/hatchet(src)
|
||||
return
|
||||
@@ -72,6 +72,20 @@
|
||||
new /obj/item/device/pda/medical(src)
|
||||
new /obj/item/weapon/storage/firstaid/regular(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
switch(pick(list("blue", "green", "purple")))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
switch(pick(list("blue", "green", "purple")))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
return
|
||||
|
||||
@@ -144,9 +144,9 @@
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
return
|
||||
|
||||
@@ -110,6 +110,9 @@
|
||||
default_cartridge = /obj/item/weapon/cartridge/quartermaster
|
||||
icon_state = "pda-q"
|
||||
|
||||
/obj/item/device/pda/shaftminer
|
||||
icon_state = "pda-miner"
|
||||
|
||||
/obj/item/device/pda/syndicate
|
||||
default_cartridge = /obj/item/weapon/cartridge/syndicate
|
||||
icon_state = "pda-syn"
|
||||
@@ -129,6 +132,11 @@
|
||||
//default_cartridge = /obj/item/weapon/cartridge/botanist
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/roboticist
|
||||
icon_state = "pda-robot"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Turbo Edition!"
|
||||
|
||||
/obj/item/device/pda/librarian
|
||||
icon_state = "pda-libb"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
|
||||
@@ -500,11 +508,15 @@
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
if("Message")
|
||||
var/t = input(U, "Please enter message", name, null) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
var/t
|
||||
if(!href_list["pAI_mess"])
|
||||
t = input(U, "Please enter message", name, null) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
else
|
||||
t = href_list["pAI_mess"]
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, U) && loc != U)
|
||||
if (!in_range(src, U) && loc != U && !href_list["pAI_mess"])
|
||||
return
|
||||
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
@@ -697,7 +709,7 @@
|
||||
honkamt--
|
||||
playsound(loc, 'bikehorn.ogg', 30, 1)
|
||||
|
||||
if(U.machine == src)//Final safety.
|
||||
if(U.machine == src && !href_list["pAI_mess"])//Final safety.
|
||||
attack_self(U)//It auto-closes the menu prior if the user is not in range and so on.
|
||||
else
|
||||
U.machine = null
|
||||
|
||||
@@ -411,15 +411,16 @@ steam.start() -- spawns the effect
|
||||
var/obj/R = new /obj()
|
||||
R.reagents = new/datum/reagents(500)
|
||||
R.reagents.my_atom = R
|
||||
reagents.trans_to(R, reagents.total_volume/divisor)
|
||||
for(var/atom/A in view(1, src))
|
||||
if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve
|
||||
if(prob(5))
|
||||
if(reagents)
|
||||
reagents.trans_to(R, reagents.total_volume/divisor)
|
||||
for(var/atom/A in view(1, src))
|
||||
if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve
|
||||
if(prob(5))
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
else if(R && R.reagents)
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
else
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
return
|
||||
|
||||
/obj/effect/effect/chem_smoke/HasEntered(mob/living/carbon/M as mob )
|
||||
@@ -1033,7 +1034,8 @@ steam.start() -- spawns the effect
|
||||
user << "\blue You hit the metal foam to no effect."
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
if(air_group) return 0
|
||||
if(!istype(mover))
|
||||
return 0
|
||||
return !density
|
||||
|
||||
|
||||
|
||||
@@ -63,7 +63,10 @@
|
||||
O.place = "handcuff"
|
||||
M.requests += O
|
||||
spawn( 0 )
|
||||
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
|
||||
if(istype(src, /obj/item/weapon/handcuffs/cable))
|
||||
playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
|
||||
else
|
||||
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
|
||||
O.process()
|
||||
return
|
||||
else
|
||||
@@ -77,7 +80,10 @@
|
||||
O.place = "handcuff"
|
||||
M.requests += O
|
||||
spawn( 0 )
|
||||
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
|
||||
if(istype(src, /obj/item/weapon/handcuffs/cable))
|
||||
playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
|
||||
else
|
||||
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
|
||||
O.process()
|
||||
return
|
||||
return
|
||||
@@ -372,7 +378,7 @@
|
||||
|
||||
if(M:brain_op_stage == 4.0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O == (user || M))
|
||||
if(O == user || O == M)
|
||||
continue
|
||||
if(M == user)
|
||||
O.show_message(text("\red [user] inserts [src] into his head!"), 1)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/obj/item/weapon/camera_test
|
||||
name = "camera"
|
||||
icon = 'items.dmi'
|
||||
desc = "A one use - polaroid camera. 10 photos left."
|
||||
desc = "A polaroid camera. It has 30 photos left."
|
||||
icon_state = "camera"
|
||||
item_state = "electropack"
|
||||
w_class = 2.0
|
||||
@@ -47,6 +47,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
var/pictures_max = 30
|
||||
var/pictures_left = 30
|
||||
var/can_use = 1
|
||||
|
||||
@@ -60,6 +61,13 @@
|
||||
var/icon/img //Big photo image
|
||||
var/scribble //Scribble on the back.
|
||||
|
||||
/obj/item/weapon/camera_film
|
||||
name = "film cartridge"
|
||||
icon = 'items.dmi'
|
||||
desc = "A camera film cartridge. Insert it into a camera to reload it."
|
||||
icon_state = "film"
|
||||
item_state = "electropack"
|
||||
w_class = 1.0
|
||||
|
||||
/obj/item/weapon/photo/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
@@ -145,9 +153,11 @@
|
||||
if (can_use)
|
||||
can_use = 0
|
||||
icon_state = "camera_off"
|
||||
usr << "\red You turn the camera off."
|
||||
else
|
||||
can_use = 1
|
||||
icon_state = "camera"
|
||||
usr << "\blue You turn the camera on."
|
||||
|
||||
/obj/item/weapon/camera_test/proc/get_mobs(turf/the_turf as turf)
|
||||
var/mob_detail
|
||||
@@ -209,7 +219,7 @@
|
||||
playsound(src.loc, pick('polaroid1.ogg','polaroid2.ogg'), 75, 1, -3)
|
||||
|
||||
pictures_left--
|
||||
src.desc = "A one use - polaroid camera. [pictures_left] photos left."
|
||||
src.desc = "A polaroid camera. It has [pictures_left] photos left."
|
||||
user << "\blue [pictures_left] photos left."
|
||||
can_use = 0
|
||||
icon_state = "camera_off"
|
||||
@@ -217,4 +227,16 @@
|
||||
can_use = 1
|
||||
icon_state = "camera"
|
||||
|
||||
|
||||
/obj/item/weapon/camera_test/attackby(A as obj, mob/user as mob)
|
||||
if (istype(A, /obj/item/weapon/camera_film))
|
||||
if (src.pictures_left >= pictures_max)
|
||||
user << "\blue It's already full!"
|
||||
return 1
|
||||
else
|
||||
del(A)
|
||||
src.pictures_left = src.pictures_max
|
||||
src.desc = "A polaroid camera. It has [pictures_left] photos left."
|
||||
user << text("\blue You reload the camera film!",)
|
||||
user.update_clothing()
|
||||
return 1
|
||||
return
|
||||
|
||||
@@ -107,6 +107,12 @@ FINGERPRINT CARD
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/proc/checkaccess(p,var/mob/user)
|
||||
if(p == pin)
|
||||
user << "\green Access granted"
|
||||
return 1
|
||||
user << "\red Access denied"
|
||||
return 0
|
||||
|
||||
// FINGERPRINT HOLDER
|
||||
|
||||
|
||||
@@ -97,6 +97,10 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
usr << "All the leaves have fallen off the nettle from violent whacking."
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
force = round((5+potency/5), 1)
|
||||
|
||||
|
||||
// Deathnettle
|
||||
|
||||
@@ -137,6 +141,10 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
usr << "All the leaves have fallen off the deathnettle from violent whacking."
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
force = round((5+potency/2.5), 1)
|
||||
|
||||
//Crafting
|
||||
|
||||
/obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
@@ -164,10 +164,10 @@ KNIFE
|
||||
playsound(M, 'trayhit2.ogg', 50, 1) //sound playin'
|
||||
return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3
|
||||
|
||||
var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later.
|
||||
var/mob/living/carbon/human/H = M // Let's have this ready for later.
|
||||
|
||||
|
||||
if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes
|
||||
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") //hitting anything else other than the eyes
|
||||
if(prob(33))
|
||||
src.add_blood(H)
|
||||
var/turf/location = H.loc
|
||||
|
||||
@@ -27,18 +27,17 @@ MEDICAL
|
||||
return 1
|
||||
|
||||
var/stoppedblood = 0
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/affecting = H.get_organ("chest")
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
user.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -69,7 +68,7 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
@@ -146,18 +145,17 @@ MEDICAL
|
||||
return 1
|
||||
|
||||
var/stoppedblood = 0
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/affecting = H.get_organ("chest")
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
M.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does their best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -179,7 +177,7 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/obj/item/robot_parts/l_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
/obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
var/limbloc = null
|
||||
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
@@ -8,230 +10,59 @@
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "l_arm")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.destroyed)
|
||||
if(!S.attachable)
|
||||
user << "\red The wound is not ready for a replacement!"
|
||||
return 0
|
||||
if((user.zone_sel.selecting == "l_arm") && (istype(src, /obj/item/robot_parts/l_arm)))
|
||||
limbloc = "l_hand"
|
||||
else if((user.zone_sel.selecting == "r_arm") && (istype(src, /obj/item/robot_parts/r_arm)))
|
||||
limbloc = "r_hand"
|
||||
else if((user.zone_sel.selecting == "r_leg") && (istype(src, /obj/item/robot_parts/r_leg)))
|
||||
limbloc = "r_foot"
|
||||
else if((user.zone_sel.selecting == "l_leg") && (istype(src, /obj/item/robot_parts/l_leg)))
|
||||
limbloc = "l_foot"
|
||||
else
|
||||
user << "\red That doesn't fit there!"
|
||||
return ..()
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.destroyed)
|
||||
if(!S.attachable)
|
||||
user << "\red The wound is not ready for a replacement!"
|
||||
return 0
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be.", \
|
||||
"\red [user] begins to attach \the [src] where your [S.display_name] used to be.")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
|
||||
"\red You begin to attach \the [src] where your [S.display_name] used to be.")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
|
||||
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
|
||||
"\red [user] finishes attaching [H]'s new [S.display_name].", \
|
||||
"\red [user] finishes attaching your new [S.display_name].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
|
||||
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
|
||||
"\red [user] finishes attaching \his new [S.display_name].", \
|
||||
"\red You finish attaching your new [S.display_name].")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching [H]'s new [S.display_name].", \
|
||||
"\red [user] finishes attaching your new [S.display_name].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching \his new [S.display_name].", \
|
||||
"\red You finish attaching your new [S.display_name].")
|
||||
if(H == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
S.take_damage(15)
|
||||
|
||||
if(H == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
S.take_damage(15)
|
||||
S.broken = 0
|
||||
S.attachable = 0
|
||||
S.destroyed = 0
|
||||
S.robot = 1
|
||||
var/datum/organ/external/T = H.organs[limbloc]
|
||||
T.attachable = 0
|
||||
T.destroyed = 0
|
||||
T.broken = 0
|
||||
T.robot = 1
|
||||
del(src)
|
||||
M.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
|
||||
S.broken = 0
|
||||
S.attachable = 0
|
||||
S.destroyed = 0
|
||||
S.robot = 1
|
||||
var/datum/organ/external/T = H.organs["l_hand"]
|
||||
T.attachable = 0
|
||||
T.destroyed = 0
|
||||
T.broken = 0
|
||||
T.robot = 1
|
||||
user.drop_item()
|
||||
M.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
|
||||
return 1
|
||||
else
|
||||
user << "\red That doesn't fit there!."
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/robot_parts/r_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
|
||||
return ..()
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "r_arm")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.destroyed)
|
||||
if(!S.attachable)
|
||||
user << "\red The wound is not ready for a replacement!"
|
||||
return 0
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
|
||||
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
|
||||
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching [H]'s new [S.display_name].", \
|
||||
"\red [user] finishes attaching your new [S.display_name].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching \his new [S.display_name].", \
|
||||
"\red You finish attaching your new [S.display_name].")
|
||||
|
||||
if(H == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
S.take_damage(15)
|
||||
|
||||
S.broken = 0
|
||||
S.attachable = 0
|
||||
S.destroyed = 0
|
||||
S.robot = 1
|
||||
var/datum/organ/external/T = H.organs["r_hand"]
|
||||
T.attachable = 0
|
||||
T.destroyed = 0
|
||||
T.broken = 0
|
||||
T.robot = 1
|
||||
user.drop_item()
|
||||
M.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
|
||||
return 1
|
||||
else
|
||||
user << "\red That doesn't fit there!."
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_parts/l_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
|
||||
return ..()
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "l_leg")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.destroyed)
|
||||
if(!S.attachable)
|
||||
user << "\red The wound is not ready for a replacement!"
|
||||
return 0
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
|
||||
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
|
||||
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching [H]'s new [S.display_name].", \
|
||||
"\red [user] finishes attaching your new [S.display_name].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching \his new [S.display_name].", \
|
||||
"\red You finish attaching your new [S.display_name].")
|
||||
|
||||
if(H == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
S.take_damage(15)
|
||||
|
||||
S.broken = 0
|
||||
S.attachable = 0
|
||||
S.destroyed = 0
|
||||
S.robot = 1
|
||||
var/datum/organ/external/T = H.organs["l_foot"]
|
||||
T.attachable = 0
|
||||
T.destroyed = 0
|
||||
T.broken = 0
|
||||
T.robot = 1
|
||||
user.drop_item()
|
||||
M.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
|
||||
return 1
|
||||
else
|
||||
user << "\red That doesn't fit there!."
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/robot_parts/r_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
|
||||
return ..()
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "r_leg")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.destroyed)
|
||||
if(!S.attachable)
|
||||
user << "\red The wound is not ready for a replacement!"
|
||||
return 0
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
|
||||
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
|
||||
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching [H]'s new [S.display_name].", \
|
||||
"\red [user] finishes attaching your new [S.display_name].")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] finishes attaching \his new [S.display_name].", \
|
||||
"\red You finish attaching your new [S.display_name].")
|
||||
|
||||
if(H == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
S.take_damage(15)
|
||||
|
||||
S.broken = 0
|
||||
S.attachable = 0
|
||||
S.destroyed = 0
|
||||
S.robot = 1
|
||||
var/datum/organ/external/T = H.organs["r_foot"]
|
||||
T.attachable = 0
|
||||
T.destroyed = 0
|
||||
T.broken = 0
|
||||
T.robot = 1
|
||||
user.drop_item()
|
||||
M.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
|
||||
return 1
|
||||
else
|
||||
user << "\red That doesn't fit there!."
|
||||
return ..()
|
||||
return 1
|
||||
@@ -16,6 +16,14 @@ RACK PARTS
|
||||
new /obj/item/stack/sheet/metal( src.loc )
|
||||
//SN src = null
|
||||
del(src)
|
||||
if (istype(W, /obj/item/stack/rods))
|
||||
if (W:amount >= 4)
|
||||
new /obj/item/weapon/table_parts/reinforced( user.loc )
|
||||
user << "\blue You reinforce the [name]."
|
||||
W:use(4)
|
||||
del(src)
|
||||
else if (W:amount < 4)
|
||||
user << "\red You need at least four rods to do this."
|
||||
|
||||
/obj/item/weapon/table_parts/attack_self(mob/user as mob)
|
||||
var/obj/structure/table/T = new /obj/structure/table( user.loc )
|
||||
@@ -29,8 +37,6 @@ RACK PARTS
|
||||
new /obj/item/stack/sheet/wood( src.loc )
|
||||
//SN src = null
|
||||
del(src)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob)
|
||||
new /obj/structure/table/woodentable( user.loc )
|
||||
@@ -40,9 +46,9 @@ RACK PARTS
|
||||
|
||||
// REINFORCED TABLE PARTS
|
||||
/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
new /obj/item/stack/sheet/plasteel( src.loc )
|
||||
new /obj/item/stack/sheet/metal( src.loc )
|
||||
new /obj/item/stack/rods( src.loc )
|
||||
//SN src = null
|
||||
del(src)
|
||||
|
||||
|
||||
@@ -263,6 +263,9 @@ WELDINGTOOOL
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
|
||||
if(S)
|
||||
message_admins("It appears [M] has \"null\" where there should be a [user.zone_sel.selecting]. Check into this, and tell SkyMarshal: \"[M.type]\"")
|
||||
return ..()
|
||||
if(!S.robot || user.a_intent != "help")
|
||||
return ..()
|
||||
if(S.brute_dam)
|
||||
@@ -320,4 +323,15 @@ WELDINGTOOOL
|
||||
|
||||
New()
|
||||
if(prob(50))
|
||||
icon_state = "cutters-y"
|
||||
icon_state = "cutters-y"
|
||||
|
||||
/obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob)
|
||||
if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable)))
|
||||
M.visible_message("You cut \the [M]'s restraints with \the [src]!",\
|
||||
"\The [usr] cuts \the [M]'s restraints with \the [src]!",\
|
||||
"You hear cable being cut.")
|
||||
M.handcuffed = null
|
||||
M.update_clothing()
|
||||
return
|
||||
else
|
||||
..()
|
||||
@@ -9,7 +9,7 @@
|
||||
src.attack_ai(usr)
|
||||
|
||||
// check for TK users
|
||||
AutoUpdateTK(src)
|
||||
//AutoUpdateTK(src)
|
||||
if (istype(usr, /mob/living/carbon/human))
|
||||
if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/))
|
||||
if(!(usr in nearby))
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
var/code = "electronic"
|
||||
origin_tech = "bluespace=1"
|
||||
|
||||
|
||||
/obj/item/device/radio/beacon/hear_talk()
|
||||
return
|
||||
|
||||
@@ -32,3 +31,19 @@
|
||||
proc/digest_delay()
|
||||
spawn(600)
|
||||
del(src)
|
||||
|
||||
|
||||
// SINGULO BEACON SPAWNER
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate
|
||||
name = "suspicious beacon"
|
||||
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
|
||||
origin_tech = "bluespace=1;syndicate=7"
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
if(user)
|
||||
user << "\blue Locked In"
|
||||
new /obj/machinery/singularity_beacon/syndicate( user.loc )
|
||||
playsound(src, 'pop.ogg', 100, 1, 1)
|
||||
del(src)
|
||||
return
|
||||
@@ -83,6 +83,9 @@ SHARDS
|
||||
if("full (2 sheets)")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
@@ -142,6 +145,9 @@ SHARDS
|
||||
if("full (2 sheets)")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
|
||||
@@ -103,7 +103,6 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
|
||||
// /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0)
|
||||
var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
|
||||
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/reinforced, 2), \
|
||||
new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, one_per_turf = 1), \
|
||||
)
|
||||
|
||||
|
||||
@@ -151,6 +151,18 @@
|
||||
icon_state = "down"
|
||||
anchored = 0
|
||||
|
||||
/obj/item/roller
|
||||
name = "roller bed"
|
||||
desc = "A collapsed roller bed that can be carried around."
|
||||
icon = 'rollerbed.dmi'
|
||||
icon_state = "folded"
|
||||
w_class = 4.0 // Can't be put in backpacks. Oh well.
|
||||
|
||||
attack_self(mob/user)
|
||||
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
del(src)
|
||||
|
||||
//obj/structure/stool/bed/roller/Move()
|
||||
/obj/structure/stool/bed/Move()
|
||||
..()
|
||||
@@ -181,7 +193,20 @@
|
||||
buckled_mob.pixel_y = 0
|
||||
buckled_mob.anchored = 0
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob = null
|
||||
density = 0
|
||||
icon_state = "down"
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
|
||||
..()
|
||||
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
|
||||
if(!ishuman(usr)) return
|
||||
if(buckled_mob) return 0
|
||||
visible_message("[usr] collapses \the [src.name]")
|
||||
new/obj/item/roller(get_turf(src))
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -149,6 +149,7 @@
|
||||
"/obj/item/weapon/melee/baton",
|
||||
"/obj/item/weapon/melee/classic_baton",
|
||||
"/obj/item/weapon/camera_test",
|
||||
"/obj/item/weapon/camera_film",
|
||||
"/obj/item/weapon/cigpacket",
|
||||
"/obj/item/weapon/zippo",
|
||||
"/obj/item/device/taperecorder",
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if(istype(W,/obj/item/weapon/evidencebag) && src.loc != user)
|
||||
return
|
||||
if(src.contents.len >= 2)
|
||||
user << "You have nowhere to place that"
|
||||
user << "\red There's nowhere to place that!"
|
||||
return
|
||||
user.u_equip(W)
|
||||
W.loc = src
|
||||
@@ -84,42 +84,62 @@
|
||||
if (src.loc == user)
|
||||
if (user.s_active)
|
||||
user.s_active.close(user)
|
||||
view_inv(user)
|
||||
orient2hud(user)
|
||||
src.show_to(user)
|
||||
else
|
||||
..()
|
||||
for(var/mob/M in range(1))
|
||||
if (M.s_active == src)
|
||||
src.close(M)
|
||||
src.orient2hud(user)
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/clothing/suit/storage/proc/orient2hud(mob/user as mob)
|
||||
if (src == user.l_hand)
|
||||
src.orient_objs(3, 5, 3, 3)
|
||||
src.orient_objs(3, 4, 3, 3)
|
||||
else if (src == user.r_hand)
|
||||
src.orient_objs(1, 5, 1, 3)
|
||||
src.orient_objs(1, 4, 1, 3)
|
||||
else if (istype(user,/mob/living/carbon/human) && src == user:wear_suit)
|
||||
src.orient_objs(1, 3, 3, 3)
|
||||
src.orient_objs(1, 3, 2, 3)
|
||||
else
|
||||
src.orient_objs(4, 4, 4, 2)
|
||||
src.orient_objs(4, 3, 4, 2)
|
||||
return
|
||||
|
||||
/obj/item/clothing/suit/storage/proc/orient_objs(tx, ty, mx, my)
|
||||
|
||||
var/cx = tx
|
||||
var/cy = ty
|
||||
src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my)
|
||||
src.boxes.screen_loc = "[tx],[ty] to [mx],[my]"
|
||||
for(var/obj/O in src.contents)
|
||||
O.screen_loc = text("[],[]", cx, cy)
|
||||
O.screen_loc = "[cx],[cy]"
|
||||
O.layer = 20
|
||||
cx++
|
||||
if (cx > mx)
|
||||
cx = tx
|
||||
cy--
|
||||
//Foreach goto(56)
|
||||
src.closer.screen_loc = text("[],[]", mx+1, my)
|
||||
src.closer.screen_loc = "[mx+1],[my]"
|
||||
return
|
||||
|
||||
/obj/item/clothing/suit/storage/proc/show_to(mob/user as mob)
|
||||
for(var/obj/item/weapon/mousetrap/MT in src)
|
||||
if(MT.armed)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
if(O == user)
|
||||
user.show_message(text("\red <B>You reach into the [src.name], but there was a live mousetrap in there!</B>"), 1)
|
||||
else
|
||||
user.show_message(text("\red <B>[user] reaches into the [src.name] and sets off a hidden mousetrap!</B>"), 1)
|
||||
MT.loc = user.loc
|
||||
MT.triggered(user, user.hand ? "l_hand" : "r_hand")
|
||||
MT.layer = OBJ_LAYER
|
||||
return
|
||||
user.client.screen -= src.boxes
|
||||
user.client.screen -= src.closer
|
||||
user.client.screen -= src.contents
|
||||
user.client.screen += src.boxes
|
||||
user.client.screen += src.closer
|
||||
user.client.screen += src.contents
|
||||
user.s_active = src
|
||||
return
|
||||
|
||||
/*/obj/item/clothing/suit/storage/New()
|
||||
|
||||
src.boxes = new /obj/screen/storage( )
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
icon_opened = "trashcartopen"
|
||||
icon_closed = "trashcart"
|
||||
|
||||
/*these aren't needed anymore
|
||||
/obj/structure/closet/crate/hat
|
||||
desc = "A crate filled with Valuable Collector's Hats!."
|
||||
name = "Hat Crate"
|
||||
@@ -39,15 +40,6 @@
|
||||
icon_closed = "crate"
|
||||
|
||||
/obj/structure/closet/crate/contraband
|
||||
name = "Contraband crate"
|
||||
desc = "A random assortment of items manufactured by providers NOT listed under Nanotrasen's whitelist."
|
||||
icon = 'storage.dmi'
|
||||
icon_state = "crate"
|
||||
density = 1
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
|
||||
/obj/structure/closet/crate/poster
|
||||
name = "Poster crate"
|
||||
desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist."
|
||||
icon = 'storage.dmi'
|
||||
@@ -55,15 +47,7 @@
|
||||
density = 1
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
|
||||
/obj/structure/closet/crate/cigarettes
|
||||
name = "DromedaryCo cigarettes crate"
|
||||
desc = "A crate of cigarettes manufactured by the notorious DromedaryCo company."
|
||||
icon = 'storage.dmi'
|
||||
icon_state = "crate"
|
||||
density = 1
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
*/
|
||||
|
||||
/obj/structure/closet/crate/medical
|
||||
desc = "A medical crate."
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate/New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1)))
|
||||
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1)))
|
||||
if ("bloodyspai")
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/clothing/mask/gas/voice(src)
|
||||
@@ -352,6 +352,19 @@
|
||||
U.imp = new /obj/item/weapon/implant/uplink(U)
|
||||
return
|
||||
|
||||
if ("hacker")
|
||||
new /obj/item/weapon/aiModule/syndicate(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/device/encryptionkey/binary(src)
|
||||
return
|
||||
|
||||
if ("lordsingulo")
|
||||
new /obj/item/device/radio/beacon/syndicate(src)
|
||||
new /obj/item/clothing/suit/space/syndicate(src)
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/dice/New()
|
||||
new /obj/item/weapon/dice( src )
|
||||
new /obj/item/weapon/dice/d20( src )
|
||||
|
||||
@@ -149,7 +149,47 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(G.state<2)
|
||||
user << "\red You need a better grip to do that!"
|
||||
if(ishuman(G.affecting))
|
||||
G.affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])</font>")
|
||||
G.assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.</font>")
|
||||
|
||||
log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
log_attack("<font color='red'>[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.</font>")
|
||||
|
||||
var/mob/living/carbon/human/H = G.affecting
|
||||
var/datum/organ/external/affecting = H.get_organ("head")
|
||||
if(prob(25))
|
||||
add_blood(G.affecting)
|
||||
affecting.take_damage(rand(10,15), 0)
|
||||
H.Weaken(2)
|
||||
if(prob(20)) // One chance in 20 to DENT THE TABLE
|
||||
affecting.take_damage(rand(0,5), 0) //Extra damage
|
||||
if(dented)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else
|
||||
dented = 1
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else if(prob(50))
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
|
||||
else
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
|
||||
else
|
||||
affecting.take_damage(rand(5,10), 0)
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src]!",\
|
||||
"\red You smash \the [H]'s head on \the [src]!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
//todo: flushing, flushing heads, showers actually cleaning people
|
||||
|
||||
/obj/structure/toilet
|
||||
name = "toilet"
|
||||
desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."
|
||||
icon = 'watercloset.dmi'
|
||||
icon_state = "toilet0"
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/open = 0
|
||||
|
||||
/obj/structure/toilet/New()
|
||||
open = round(rand(0, 1))
|
||||
update_icon()
|
||||
|
||||
/obj/structure/toilet/attack_hand()
|
||||
open = !open
|
||||
update_icon()
|
||||
|
||||
/obj/structure/toilet/update_icon()
|
||||
icon_state = "toilet[open]"
|
||||
|
||||
|
||||
|
||||
/obj/structure/urinal
|
||||
name = "urinal"
|
||||
desc = "The HU-452, an experimental urinal."
|
||||
icon = 'watercloset.dmi'
|
||||
icon_state = "urinal"
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
|
||||
|
||||
/obj/structure/shower
|
||||
name = "shower"
|
||||
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
|
||||
icon = 'watercloset.dmi'
|
||||
icon_state = "shower"
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/on = 0
|
||||
var/mist = 0 //needs a var so we can make it linger~
|
||||
|
||||
//add heat controls? when emagged, you can freeze to death in it?
|
||||
|
||||
/obj/structure/shower/attack_hand()
|
||||
on = !on
|
||||
update_icon()
|
||||
|
||||
/obj/structure/shower/update_icon()
|
||||
overlays = null
|
||||
if(on)
|
||||
overlays += image('watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
|
||||
spawn(50)
|
||||
if(src && on)
|
||||
overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir)
|
||||
mist = 1
|
||||
else if(mist)
|
||||
overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir)
|
||||
spawn(100)
|
||||
if(src && !on)
|
||||
overlays = null
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/bikehorn/rubberducky
|
||||
name = "rubber ducky"
|
||||
desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl
|
||||
icon = 'watercloset.dmi'
|
||||
icon_state = "rubberducky"
|
||||
item_state = "rubberducky"
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/obj/structure/shuttle
|
||||
name = "shuttle"
|
||||
icon = 'shuttle.dmi'
|
||||
@@ -11,6 +10,9 @@
|
||||
opacity = 0
|
||||
anchored = 1
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height, air_group)
|
||||
if(!height || air_group) return 0
|
||||
else return ..()
|
||||
|
||||
/obj/structure/shuttle/engine
|
||||
name = "engine"
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
s["host"] = host ? host : null
|
||||
s["players"] = list()
|
||||
s["admins"] = 0
|
||||
var/admins = 0
|
||||
var/n = 0
|
||||
|
||||
for(var/client/C)
|
||||
@@ -30,6 +29,5 @@
|
||||
s["end"] = "#end"
|
||||
|
||||
// 7 + s["players"] + 1 = index of s["revinfo"]
|
||||
s["admins"] = admins
|
||||
|
||||
return list2params(s)
|
||||
|
||||
Reference in New Issue
Block a user