mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 15:37:36 +01:00
Merge Conflict Resolution
Conflicts: icons/obj/clothing/gloves.dmi
This commit is contained in:
+1
-1
@@ -153,7 +153,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
|
||||
|
||||
//im not sure how to implement a version that works for every creature so for now monkeys are firesafe
|
||||
for(var/mob/living/carbon/human/M in loc)
|
||||
M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure() ) //Burn the humans!
|
||||
// M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure() ) //Burn the humans!
|
||||
|
||||
loc.fire_act(air_contents, air_contents.temperature, air_contents.return_volume())
|
||||
for(var/atom/A in loc)
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
animals lunging, etc.
|
||||
*/
|
||||
/mob/proc/RangedAttack(var/atom/A, var/params)
|
||||
if(ishuman(src) && (istype(src:gloves, /obj/item/clothing/gloves/yellow/power)) && a_intent == "harm")
|
||||
if(ishuman(src) && (istype(src:gloves, /obj/item/clothing/gloves/color/yellow/power)) && a_intent == "harm")
|
||||
PowerGlove(A)
|
||||
if(!mutations.len) return
|
||||
if((LASER in mutations) && a_intent == "harm")
|
||||
@@ -321,7 +321,7 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/PowerGlove(atom/A)
|
||||
var/obj/item/clothing/gloves/yellow/power/G = src:gloves
|
||||
var/obj/item/clothing/gloves/color/yellow/power/G = src:gloves
|
||||
var/time = 100
|
||||
var/turf/T = get_turf(src)
|
||||
var/turf/U = get_turf(A)
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
blacklist = null
|
||||
whitelist = list(/obj/item/weapon/tank,/obj/item/weapon/reagent_containers,
|
||||
/obj/item/stack/medical,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/gun/syringe,
|
||||
/obj/item/weapon/plastique,/obj/item/weapon/grenade,/obj/item/ammo_box,
|
||||
/obj/item/weapon/c4,/obj/item/weapon/grenade,/obj/item/ammo_box,
|
||||
/obj/item/weapon/gun/grenadelauncher,/obj/item/weapon/flamethrower, /obj/item/weapon/lighter,
|
||||
/obj/item/weapon/match,/obj/item/weapon/weldingtool)
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
whitelist = list(/obj/item/weapon/banhammer,/obj/item/weapon/sord,/obj/item/weapon/butch,/obj/item/weapon/claymore,/obj/item/weapon/holo/esword,
|
||||
/obj/item/weapon/flamethrower,/obj/item/weapon/grenade,/obj/item/weapon/gun,/obj/item/weapon/hatchet,/obj/item/weapon/katana,
|
||||
/obj/item/weapon/kitchenknife,/obj/item/weapon/melee,/obj/item/weapon/nullrod,/obj/item/weapon/pickaxe,/obj/item/weapon/twohanded,
|
||||
/obj/item/weapon/plastique,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/deathnettle)
|
||||
/obj/item/weapon/c4,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/deathnettle)
|
||||
|
||||
/datum/cargoprofile/tools
|
||||
name = "Devices & Tools"
|
||||
|
||||
@@ -163,7 +163,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/jobspecific/pickpocketgloves
|
||||
name = "Pickpocket's Gloves"
|
||||
desc = "A pair of sleek gloves to aid in pickpocketing, while wearing these you can see inside the pockets of any unsuspecting mark, loot the ID or pockets without them knowing, and pickpocketing puts the item directly into your hand."
|
||||
item = /obj/item/clothing/gloves/black/thief
|
||||
item = /obj/item/clothing/gloves/color/black/thief
|
||||
cost = 6
|
||||
job = list("Civilian")
|
||||
|
||||
@@ -188,7 +188,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/jobspecific/powergloves
|
||||
name = "Power Gloves"
|
||||
desc = "Insulated gloves that can utilize the power of the station to deliver a short arc of electricity at a target. Must be standing on a powered cable to use."
|
||||
item = /obj/item/clothing/gloves/yellow/power
|
||||
item = /obj/item/clothing/gloves/color/yellow/power
|
||||
cost = 14
|
||||
job = list("Station Engineer","Chief Engineer")
|
||||
|
||||
@@ -521,7 +521,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/device_tools/cipherkey
|
||||
name = "Syndicate Encryption Key"
|
||||
desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel."
|
||||
item = /obj/item/device/encryptionkey/syndicate/hacked
|
||||
item = /obj/item/device/encryptionkey/syndicate
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/device_tools/hacked_module
|
||||
@@ -533,7 +533,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/device_tools/plastic_explosives
|
||||
name = "Composition C-4"
|
||||
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
|
||||
item = /obj/item/weapon/plastique
|
||||
item = /obj/item/weapon/c4
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/device_tools/powersink
|
||||
|
||||
@@ -18,15 +18,15 @@ var/const/WIRE_EXPLODE = 1
|
||||
explode()
|
||||
|
||||
/datum/wires/explosive/plastic
|
||||
holder_type = /obj/item/weapon/plastique
|
||||
holder_type = /obj/item/weapon/c4
|
||||
|
||||
/datum/wires/explosive/plastic/CanUse(var/mob/living/L)
|
||||
var/obj/item/weapon/plastique/P = holder
|
||||
var/obj/item/weapon/c4/P = holder
|
||||
if(P.open_panel)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/wires/explosive/plastic/explode()
|
||||
var/obj/item/weapon/plastique/P = holder
|
||||
var/obj/item/weapon/c4/P = holder
|
||||
P.explode(get_turf(P))
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
item_state = "cult_armour"
|
||||
desc = "A bulky suit of armour, bristling with spikes. It looks space proof."
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
|
||||
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
|
||||
@@ -60,7 +60,7 @@ Devices and Tools;
|
||||
/obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses;
|
||||
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
|
||||
/obj/item/weapon/c4:2:C-4 (Destroys walls);
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
//M.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
|
||||
if (prob(50))
|
||||
|
||||
@@ -333,7 +333,7 @@
|
||||
if("armor")
|
||||
feedback_add_details("wizard_spell_learned","HS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
new /obj/item/clothing/shoes/sandal(get_turf(H)) //In case they've lost them.
|
||||
new /obj/item/clothing/gloves/purple(get_turf(H))//To complete the outfit
|
||||
new /obj/item/clothing/gloves/color/purple(get_turf(H))//To complete the outfit
|
||||
new /obj/item/clothing/suit/space/rig/wizard(get_turf(H))
|
||||
new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(H))
|
||||
temp = "You have purchased a suit of wizard armor."
|
||||
|
||||
+78
-52
@@ -10,7 +10,7 @@
|
||||
/var/const/access_tox_storage = 8
|
||||
/var/const/access_genetics = 9
|
||||
/var/const/access_engine = 10
|
||||
/var/const/access_engine_equip= 11
|
||||
/var/const/access_engine_equip = 11
|
||||
/var/const/access_maint_tunnels = 12
|
||||
/var/const/access_external_airlocks = 13
|
||||
/var/const/access_emergency_storage = 14
|
||||
@@ -77,28 +77,20 @@
|
||||
/var/const/access_weapons = 99 //Weapon authorization for secbots
|
||||
|
||||
//BEGIN CENTCOM ACCESS
|
||||
/*Should leave plenty of room if we need to add more access levels.
|
||||
/var/const/Mostly for admin fun times.*/
|
||||
/var/const/access_cent_general = 101//General facilities.
|
||||
/var/const/access_cent_thunder = 102//Thunderdome.
|
||||
/var/const/access_cent_specops = 103//Special Ops.
|
||||
/var/const/access_cent_medical = 104//Medical/Research
|
||||
/var/const/access_cent_living = 105//Living quarters.
|
||||
/var/const/access_cent_storage = 106//Generic storage areas.
|
||||
/var/const/access_cent_teleporter = 107//Teleporter.
|
||||
/var/const/access_cent_creed = 108//Creed's office.
|
||||
/var/const/access_cent_captain = 109//Captain's office/ID comp/AI.
|
||||
|
||||
//EMBASSIES
|
||||
|
||||
/var/const/embassy_tajaran = 120
|
||||
/var/const/embassy_skrell = 121
|
||||
/var/const/embassy_unathi = 122
|
||||
/var/const/embassy_diona = 123
|
||||
/var/const/embassy_kidan = 124
|
||||
/var/const/embassy_slime = 125
|
||||
/var/const/embassy_grey = 126
|
||||
/var/const/embassy_vox = 127
|
||||
/var/const/access_cent_living = 102//Living quarters.
|
||||
/var/const/access_cent_medical = 103//Medical.
|
||||
/var/const/access_cent_security = 104//Security.
|
||||
/var/const/access_cent_storage = 105//Storage areas.
|
||||
/var/const/access_cent_shuttles = 106//Shuttle docks.
|
||||
/var/const/access_cent_telecomms = 107//Telecomms.
|
||||
/var/const/access_cent_teleporter = 108//Telecomms.
|
||||
/var/const/access_cent_specops = 109//Special Ops.
|
||||
/var/const/access_cent_specops_commander = 110//Special Ops Commander.
|
||||
/var/const/access_cent_blackops = 111//Black Ops.
|
||||
/var/const/access_cent_thunder = 112//Thunderdome.
|
||||
/var/const/access_cent_bridge = 113//Bridge.
|
||||
/var/const/access_cent_commander = 114//Commander's Office/ID computer.
|
||||
|
||||
//The Syndicate
|
||||
/var/const/access_syndicate = 150//General Syndicate Access
|
||||
@@ -197,34 +189,49 @@
|
||||
/proc/get_centcom_access(job)
|
||||
switch(job)
|
||||
if("VIP Guest")
|
||||
return list(access_cent_general)
|
||||
return list(access_cent_general, access_cent_living)
|
||||
if("Custodian")
|
||||
return list(access_cent_general, access_cent_living, access_cent_storage)
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage)
|
||||
if("Thunderdome Overseer")
|
||||
return list(access_cent_general, access_cent_thunder)
|
||||
if("Emergency Response Team")
|
||||
return list(access_cent_general, access_cent_living, access_cent_storage) + get_all_accesses()
|
||||
if("Emergency Response Team Member")
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops) + get_all_accesses()
|
||||
if("Emergency Response Team Leader")
|
||||
return list(access_cent_general, access_cent_living, access_cent_storage, access_cent_teleporter) + get_all_accesses()
|
||||
if("Intel Officer")
|
||||
return list(access_cent_general, access_cent_living) + get_all_accesses()
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops, access_cent_specops_commander) + get_all_accesses()
|
||||
if("Medical Officer")
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical) + get_all_accesses()
|
||||
if("Death Commando")
|
||||
return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + get_all_accesses()
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage) + get_all_accesses()
|
||||
if("Intel Officer")
|
||||
return list(access_cent_general, access_cent_living, access_cent_security, access_cent_storage) + get_all_accesses()
|
||||
if("Research Officer")
|
||||
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage) + get_all_accesses()
|
||||
if("BlackOps Commander")
|
||||
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed) + get_all_accesses()
|
||||
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_storage, access_cent_telecomms, access_cent_teleporter) + get_all_accesses()
|
||||
if("Death Commando")
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops, access_cent_specops_commander, access_cent_blackops) + get_all_accesses()
|
||||
if("Deathsquad Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Special Operations Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Representative")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Captain")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Supreme Commander")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
|
||||
|
||||
/proc/get_syndicate_access(job)
|
||||
switch(job)
|
||||
if("Syndicate Operative")
|
||||
return list(access_syndicate)
|
||||
if("Syndicate Operative Leader")
|
||||
return list(access_syndicate, access_syndicate_leader)
|
||||
if("Vox Raider")
|
||||
return list(access_vox)
|
||||
if("Vox Trader")
|
||||
return list(access_vox)
|
||||
if("Syndicate Commando")
|
||||
return list(access_syndicate, access_syndicate_leader)
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
|
||||
access_medical, access_genetics, access_morgue, access_rd,
|
||||
@@ -240,10 +247,10 @@
|
||||
access_pilot, access_ntrep, access_magistrate, access_minisat)
|
||||
|
||||
/proc/get_all_centcom_access()
|
||||
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_creed, access_cent_captain)
|
||||
return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_shuttles, access_cent_telecomms, access_cent_teleporter, access_cent_specops, access_cent_specops_commander, access_cent_blackops, access_cent_thunder, access_cent_bridge, access_cent_commander)
|
||||
|
||||
/proc/get_all_syndicate_access()
|
||||
return list(access_syndicate)
|
||||
return list(access_syndicate, access_syndicate_leader, access_vox)
|
||||
|
||||
/proc/get_region_accesses(var/code)
|
||||
switch(code)
|
||||
@@ -436,23 +443,42 @@
|
||||
/proc/get_centcom_access_desc(A)
|
||||
switch(A)
|
||||
if(access_cent_general)
|
||||
return "Code Grey"
|
||||
if(access_cent_thunder)
|
||||
return "Code Yellow"
|
||||
if(access_cent_storage)
|
||||
return "Code Orange"
|
||||
return "General Access"
|
||||
if(access_cent_living)
|
||||
return "Code Green"
|
||||
return "Living Quarters"
|
||||
if(access_cent_medical)
|
||||
return "Code White"
|
||||
return "Medical"
|
||||
if(access_cent_security)
|
||||
return "Security"
|
||||
if(access_cent_storage)
|
||||
return "Storage"
|
||||
if(access_cent_shuttles)
|
||||
return "Shuttles"
|
||||
if(access_cent_telecomms)
|
||||
return "Telecommunications"
|
||||
if(access_cent_teleporter)
|
||||
return "Code Blue"
|
||||
return "Teleporter"
|
||||
if(access_cent_specops)
|
||||
return "Code Black"
|
||||
if(access_cent_creed)
|
||||
return "Code Silver"
|
||||
if(access_cent_captain)
|
||||
return "Code Gold"
|
||||
return "Special Ops"
|
||||
if(access_cent_specops_commander)
|
||||
return "Special Ops Commander"
|
||||
if(access_cent_blackops)
|
||||
return "Black Ops"
|
||||
if(access_cent_thunder)
|
||||
return "Thunderdome"
|
||||
if(access_cent_bridge)
|
||||
return "Bridge"
|
||||
if(access_cent_commander)
|
||||
return "Commander"
|
||||
|
||||
/proc/get_syndicate_access_desc(A)
|
||||
switch(A)
|
||||
if(access_syndicate)
|
||||
return "Syndicate Operative"
|
||||
if(access_syndicate_leader)
|
||||
return "Syndicate Operative Leader"
|
||||
if(access_vox)
|
||||
return "Vox"
|
||||
|
||||
/proc/get_all_jobs()
|
||||
var/list/all_jobs = list()
|
||||
@@ -465,7 +491,7 @@
|
||||
return all_jobs
|
||||
|
||||
/proc/get_all_centcom_jobs()
|
||||
return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team Member","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Special Operations Officer","Nanotrasen Navy Officer","Nanotrasen Navy Captain","Supreme Commander")
|
||||
return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team Member","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","Deathsquad Officer","Special Operations Officer","Nanotrasen Navy Representative","Nanotrasen Navy Officer","Nanotrasen Navy Captain","Supreme Commander")
|
||||
|
||||
//gets the actual job rank (ignoring alt titles)
|
||||
//this is used solely for sechuds
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/clothing/head/hardhat/white(H), slot_head)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves)
|
||||
if(H.backbag == 1)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
|
||||
else
|
||||
|
||||
@@ -139,7 +139,6 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
if(H.backbag == 1)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/armor/hos(H), slot_wear_suit)
|
||||
H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head)
|
||||
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
|
||||
H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_s_store)
|
||||
@@ -74,7 +74,7 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/warden(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head)
|
||||
H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
|
||||
// H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
|
||||
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
|
||||
@@ -119,10 +119,11 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/device/pda/detective(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/toy/crayon/white(H), slot_l_store)
|
||||
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
|
||||
CIG.light("")
|
||||
H.equip_or_collect(CIG, slot_wear_mask) */
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
|
||||
if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
|
||||
else
|
||||
@@ -176,6 +177,7 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/security(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
|
||||
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store)
|
||||
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
|
||||
if(H.backbag == 1)
|
||||
@@ -251,6 +253,7 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/jacket(H), slot_wear_suit)
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_belt)
|
||||
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
|
||||
if(H.backbag == 1)
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/device/pda/quartermaster(H), slot_wear_pda)
|
||||
// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
|
||||
H.equip_or_collect(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
if(H.backbag == 1)
|
||||
@@ -147,7 +146,6 @@
|
||||
H.equip_or_collect(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/device/pda/cargo(H), slot_wear_pda)
|
||||
// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
if(H.backbag == 1)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
else
|
||||
@@ -179,7 +177,6 @@
|
||||
H.equip_or_collect(new /obj/item/device/pda/shaftminer(H), slot_wear_pda)
|
||||
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_or_collect(new /obj/item/weapon/pickaxe/drill(H), slot_belt)
|
||||
// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
if(H.backbag == 1)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
|
||||
H.equip_or_collect(new /obj/item/weapon/crowbar(H), slot_l_hand)
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
networks["Anomaly Isolation"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Toxins"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Telepad"] = list(access_rd,access_hos,access_captain)
|
||||
networks["ERT"] = list(access_cent_teleporter,access_cent_captain)
|
||||
networks["CentCom"] = list(access_cent_captain)
|
||||
networks["Thunderdome"] = list(access_cent_captain)
|
||||
networks["ERT"] = list(access_cent_specops_commander,access_cent_commander)
|
||||
networks["CentCom"] = list(access_cent_security,access_cent_commander)
|
||||
networks["Thunderdome"] = list(access_cent_thunder,access_cent_commander)
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -291,4 +291,4 @@
|
||||
/obj/machinery/computer/card/centcom
|
||||
name = "CentCom Identification Computer"
|
||||
circuit = "/obj/item/weapon/circuitboard/card/centcom"
|
||||
req_access = list(access_cent_captain)
|
||||
req_access = list(access_cent_commander)
|
||||
|
||||
@@ -14,7 +14,7 @@ var/syndicate_elite_shuttle_timeleft = 0
|
||||
name = "Elite Syndicate Squad Shuttle Console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "syndishuttle"
|
||||
req_access = list(access_cent_specops)
|
||||
req_access = list(access_syndicate)
|
||||
var/temp = null
|
||||
var/hacked = 0
|
||||
var/allowedtocall = 0
|
||||
|
||||
+20
-22
@@ -13,6 +13,7 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker = null
|
||||
var/autoeject = 0
|
||||
|
||||
var/next_trans = 0
|
||||
var/current_heat_capacity = 50
|
||||
var/efficiency
|
||||
|
||||
@@ -38,7 +39,7 @@
|
||||
component_parts += new /obj/item/stack/cable_coil(src, 1)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/New()
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/upgraded/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/cryo_tube(src)
|
||||
@@ -128,15 +129,13 @@
|
||||
if(!on)
|
||||
return
|
||||
|
||||
if(occupant)
|
||||
if(occupant.stat != 2)
|
||||
process_occupant()
|
||||
|
||||
if(air_contents)
|
||||
temperature_archived = air_contents.temperature
|
||||
heat_gas_contents()
|
||||
expel_gas()
|
||||
|
||||
if(occupant)
|
||||
process_occupant()
|
||||
if(abs(temperature_archived-air_contents.temperature) > 1)
|
||||
network.update = 1
|
||||
|
||||
@@ -220,7 +219,7 @@
|
||||
data["beakerVolume"] += R.volume
|
||||
|
||||
data["autoeject"] = autoeject
|
||||
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
@@ -319,11 +318,11 @@
|
||||
if(air_contents.total_moles() < 10)
|
||||
return
|
||||
if(occupant)
|
||||
if(occupant.stat == 2)
|
||||
if(occupant.stat == 2 || occupant.health >= 100) //Why waste energy on dead or healthy people
|
||||
occupant.bodytemperature = T0C
|
||||
return
|
||||
occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity())
|
||||
occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise
|
||||
occupant.stat = 1
|
||||
if(occupant.bodytemperature < T0C)
|
||||
occupant.sleeping = max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency)
|
||||
occupant.Paralyse(max(5/efficiency, (1/occupant.bodytemperature)*3000/efficiency))
|
||||
@@ -333,17 +332,17 @@
|
||||
occupant.adjustOxyLoss(-1)
|
||||
//severe damage should heal waaay slower without proper chemicals
|
||||
if(occupant.bodytemperature < 225)
|
||||
if (occupant.getToxLoss())
|
||||
if(occupant.getToxLoss())
|
||||
occupant.adjustToxLoss(max(-efficiency, (-20*(efficiency ** 2)) / occupant.getToxLoss()))
|
||||
var/heal_brute = occupant.getBruteLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getBruteLoss()) : 0
|
||||
var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0
|
||||
occupant.heal_organ_damage(heal_brute,heal_fire)
|
||||
var/has_cryo = occupant.reagents.get_reagent_amount("cryoxadone") >= 1
|
||||
var/has_clonexa = occupant.reagents.get_reagent_amount("clonexadone") >= 1
|
||||
var/has_cryo_medicine = has_cryo || has_clonexa
|
||||
if(beaker && !has_cryo_medicine)
|
||||
beaker.reagents.trans_to(occupant, 1, 1)
|
||||
if(beaker && next_trans == 0)
|
||||
beaker.reagents.trans_to(occupant, 1, 10)
|
||||
beaker.reagents.reaction(occupant)
|
||||
next_trans++
|
||||
if(next_trans == 10)
|
||||
next_trans = 0
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents()
|
||||
if(air_contents.total_moles() < 1)
|
||||
@@ -357,13 +356,12 @@
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas()
|
||||
if(air_contents.total_moles() < 1)
|
||||
return
|
||||
// var/datum/gas_mixture/expel_gas = new
|
||||
// var/remove_amount = air_contents.total_moles()/50
|
||||
// expel_gas = air_contents.remove(remove_amount)
|
||||
|
||||
// Just have the gas disappear to nowhere.
|
||||
//expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed
|
||||
//loc.assume_air(expel_gas)
|
||||
var/datum/gas_mixture/expel_gas = new
|
||||
var/remove_amount = air_contents.total_moles()/100
|
||||
expel_gas = air_contents.remove(remove_amount)
|
||||
expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed
|
||||
loc.assume_air(expel_gas)
|
||||
update_nearby_tiles()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/proc/go_out()
|
||||
if(!( occupant ))
|
||||
@@ -415,7 +413,7 @@
|
||||
if (usr.stat == 2)//and he's not dead....
|
||||
return
|
||||
usr << "\blue Release sequence activated. This will take two minutes."
|
||||
sleep(1200)
|
||||
sleep(600)
|
||||
if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already
|
||||
return
|
||||
go_out()//and release him from the eternal prison.
|
||||
|
||||
@@ -998,7 +998,7 @@ About the new airlock wires panel:
|
||||
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/weapon/plastique))
|
||||
if(istype(C, /obj/item/weapon/c4))
|
||||
user << "The hatch is coated with a product that prevents the shaped charge from sticking!"
|
||||
return
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
knifecount++
|
||||
for(var/obj/item/weapon/kitchenknife/KK in M)
|
||||
knifecount++
|
||||
for(var/obj/item/weapon/plastique/KK in M)
|
||||
for(var/obj/item/weapon/c4/KK in M)
|
||||
bombcount++
|
||||
for(var/obj/item/weapon/melee/ML in M)
|
||||
meleecount++
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
/obj/machinery/poolcontroller
|
||||
name = "Pool Controller"
|
||||
desc = "A controller for the nearby pool."
|
||||
icon = 'icons/obj/airlock_machines.dmi'
|
||||
icon_state = "airlock_control_standby"
|
||||
var/list/linkedturfs = list() //List contains all of the linked pool turfs to this controller, assignment happens on New()
|
||||
var/temperature = "normal" //The temperature of the pool, starts off on normal, which has no effects.
|
||||
var/srange = 5 //The range of the search for pool turfs, change this for bigger or smaller pools.
|
||||
var/linkedmist = list() //Used to keep track of created mist
|
||||
var/misted = 0 //Used to check for mist.
|
||||
|
||||
/obj/machinery/poolcontroller/New() //This proc automatically happens on world start
|
||||
for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange
|
||||
src.linkedturfs += W //Add found pool turfs to the central list.
|
||||
..() //Changed to call parent as per MarkvA's recommendation
|
||||
|
||||
/obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer.
|
||||
if(!emagged) //If it is not already emagged, emag it.
|
||||
user << "\red You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does.
|
||||
emagged = 1 //Set the emag var to true.
|
||||
|
||||
/obj/machinery/poolcontroller/attackby(obj/item/P as obj, mob/user as mob, params) //Proc is called when a user hits the pool controller with something.
|
||||
|
||||
if(istype(P,/obj/item/device/multitool)) //If the mob hits the pool controller with a multitool, reset the emagged status
|
||||
if(emagged) //Check the emag status
|
||||
user << "\red You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards.
|
||||
emagged = 0 //Set the emagged var to false.
|
||||
return
|
||||
else
|
||||
user << "\red Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged.
|
||||
|
||||
return //Return, nothing else needs to be done.
|
||||
else //If it's not a multitool, defer to /obj/machinery/proc/attackby
|
||||
..()
|
||||
|
||||
/obj/machinery/poolcontroller/attack_hand()
|
||||
if(!Adjacent(usr))
|
||||
usr << "You moved away."
|
||||
return
|
||||
|
||||
if(emagged) //Emagging unlocks more (deadly) options.
|
||||
var/temp = input("What temperature would you like to set the pool to?", "Pool Temperature") in list("Scalding","Frigid", "Warm", "Cool", "Normal","Cancel") //Allow user to choose which temperature they want.
|
||||
|
||||
switch(temp) //Used for setting the actual temperature var based on user input.
|
||||
if("Scalding")
|
||||
miston() //Turn on warning mist for the pool
|
||||
temperature = "scalding" //Burn em!
|
||||
usr << "<span class='warning'>You flick the pool temperature to [temperature](WARNING).</span>" //Differ from standard message to make sure the user understands the temperature is harmful.
|
||||
return //Return to avoid calling the un-unique message.
|
||||
if("Frigid")
|
||||
temperature = "frigid"
|
||||
usr << "<span class='warning'>You flick the pool temperature to [temperature](WARNING).</span>" //Differ from standard message to make sure the user understands the temperature is harmful.
|
||||
mistoff() //this won't get called otherwise
|
||||
return //Return to avoid calling the un-unique message.
|
||||
|
||||
//Regular non-traitorous temperature choices still avalible.
|
||||
if("Warm")
|
||||
temperature = "warm"
|
||||
if("Cool")
|
||||
temperature = "cool"
|
||||
if("Normal")
|
||||
temperature = "normal"
|
||||
if("Cancel")
|
||||
return
|
||||
|
||||
mistoff() //Remove all mist, setting it to scalding returns before now, only regular temperatures will call it
|
||||
usr << "<span class='warning'>You flick the pool temperature to [temperature].</span>" //Inform the mob of the temperature they just picked.
|
||||
return
|
||||
|
||||
else
|
||||
var/temp = input("What temperature would you like to set the pool to?", "Pool Temperature") in list("Warm","Cool","Normal","Cancel") //Allow user to choose which temperature they want.
|
||||
|
||||
switch(temp) //Used for setting the actual temperature var based on user input.
|
||||
if("Warm")
|
||||
temperature = "warm"
|
||||
if("Cool")
|
||||
temperature = "cool"
|
||||
if("Normal")
|
||||
temperature = "normal"
|
||||
if("Cancel") //Cancel does nothing and leaves the temperature at it's previous state.
|
||||
return
|
||||
|
||||
mistoff() //Remove all mist, because it shouldn't be here if the pool is not set to scalding
|
||||
usr << "<span class='warning'>You flick the pool temperature to [temperature].</span>" //Display what the user picked.
|
||||
return
|
||||
|
||||
/obj/machinery/poolcontroller/process()
|
||||
updateMobs() //Call the mob affecting proc
|
||||
|
||||
/obj/machinery/poolcontroller/proc/updateMobs()
|
||||
for(var/turf/simulated/floor/beach/water/W in linkedturfs) //Check for pool-turfs linked to the controller.
|
||||
for(var/mob/M in W) //Check for mobs in the linked pool-turfs.
|
||||
switch(temperature) //Apply different effects based on what the temperature is set to.
|
||||
if("scalding") //Burn the mob.
|
||||
M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle
|
||||
M << "<span class='danger'>The water is searing hot!</span>"
|
||||
return
|
||||
|
||||
if("frigid") //Freeze the mob.
|
||||
M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle
|
||||
M << "<span class='danger'>The water is freezing!</span>"
|
||||
return
|
||||
|
||||
if("normal") //Normal temp does nothing, because it's just room temperature water.
|
||||
return
|
||||
|
||||
if("warm") //Gently warm the mob.
|
||||
M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn
|
||||
M << "<span class='warning'>The water is quite warm.</span>" //Inform the mob it's warm water.
|
||||
return
|
||||
|
||||
if("cool") //Gently cool the mob.
|
||||
M.bodytemperature = max(290, M.bodytemperature - 10) //Cools mobs to just below normal, not enough to burn
|
||||
M << "<span class='warning'>The water is chilly.</span>" //Inform the mob it's chilly water.
|
||||
return
|
||||
|
||||
/obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles
|
||||
for(var/turf/simulated/floor/beach/water/W in linkedturfs)
|
||||
var/M = new /obj/effect/mist(W)
|
||||
if(misted)
|
||||
return
|
||||
linkedmist += M
|
||||
|
||||
misted = 1 //var just to keep track of when the mist on proc has been called.
|
||||
|
||||
/obj/machinery/poolcontroller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles.
|
||||
for(var/obj/effect/mist/M in linkedmist)
|
||||
del(M)
|
||||
misted = 0 //no mist left, turn off the tracking var
|
||||
@@ -246,7 +246,7 @@
|
||||
badcount++
|
||||
for(var/obj/item/weapon/kitchenknife/KK in src.loc)
|
||||
badcount++
|
||||
for(var/obj/item/weapon/plastique/KK in src.loc)
|
||||
for(var/obj/item/weapon/c4/KK in src.loc)
|
||||
badcount++
|
||||
for(var/obj/item/weapon/melee/ML in src.loc)
|
||||
badcount++
|
||||
|
||||
@@ -1076,8 +1076,8 @@
|
||||
//req_access_txt = "12" //Maintenance access
|
||||
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5,
|
||||
/obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5)
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2)
|
||||
premium = list(/obj/item/clothing/gloves/yellow = 1)
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/color/fyellow = 2)
|
||||
premium = list(/obj/item/clothing/gloves/color/yellow = 1)
|
||||
|
||||
/obj/machinery/vending/engivend
|
||||
name = "Engi-Vend"
|
||||
@@ -1097,7 +1097,7 @@
|
||||
icon_deny = "engi-deny"
|
||||
req_access_txt = "11"
|
||||
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4,
|
||||
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/screwdriver = 12,
|
||||
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/color/yellow = 4, /obj/item/weapon/screwdriver = 12,
|
||||
/obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12,
|
||||
/obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
|
||||
/obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5,
|
||||
@@ -1211,7 +1211,7 @@
|
||||
/obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3,
|
||||
/obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1,
|
||||
/obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4,
|
||||
/obj/item/clothing/shoes/sandal=1,
|
||||
/obj/item/clothing/shoes/sandal=1, /obj/item/clothing/gloves/fingerless=2,
|
||||
/obj/item/weapon/storage/belt/fannypack=1, /obj/item/weapon/storage/belt/fannypack/blue=1, /obj/item/weapon/storage/belt/fannypack/red=1)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=1)
|
||||
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/under/pants/mustangjeans=1)
|
||||
@@ -1225,4 +1225,19 @@
|
||||
component_parts += V
|
||||
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
|
||||
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
|
||||
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
|
||||
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
|
||||
|
||||
/obj/machinery/vending/artvend
|
||||
name = "ArtVend"
|
||||
desc = "A vending machine for art supplies."
|
||||
product_slogans = "Stop by for all your artistic needs!;Color the floors with crayons, not blood!;Don't be a starving artist, use ArtVend. ;Don't fart, do art!"
|
||||
product_ads = "Just like Kindergarten!;Now with 1000% more vibrant colors!;Screwing with the janitor was never so easy!;Creativity is at the heart of every spessman."
|
||||
vend_delay = 34
|
||||
icon_state = "artvend"
|
||||
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/device/camera = 4,/obj/item/device/camera_film = 6,
|
||||
/obj/item/weapon/storage/photo_album = 2,/obj/item/stack/wrapping_paper = 4,/obj/item/stack/packageWrap = 4,
|
||||
/obj/item/weapon/storage/fancy/crayons = 4,/obj/item/weapon/hand_labeler = 4,/obj/item/weapon/paper = 10,
|
||||
/obj/item/weapon/c_tube = 10,/obj/item/weapon/pen = 5,/obj/item/weapon/pen/blue = 5,
|
||||
/obj/item/weapon/pen/red = 5)
|
||||
contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1)
|
||||
premium = list(/obj/item/weapon/contraband/poster = 5)
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/washing_machine
|
||||
name = "Washing Machine"
|
||||
desc = "Gets rid of those pesky bloodstains, or your money back!"
|
||||
icon = 'icons/obj/machines/washing_machine.dmi'
|
||||
icon_state = "wm_10"
|
||||
density = 1
|
||||
@@ -87,8 +88,8 @@
|
||||
//world << "DEBUG: YUP! [new_icon_state] and [new_item_state]"
|
||||
break
|
||||
del(J)
|
||||
for(var/T in typesof(/obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = new T
|
||||
for(var/T in typesof(/obj/item/clothing/gloves/color))
|
||||
var/obj/item/clothing/gloves/color/G = new T
|
||||
//world << "DEBUG: [color] == [J.color]"
|
||||
if(_color == G._color)
|
||||
new_glove_icon_state = G.icon_state
|
||||
@@ -137,13 +138,13 @@
|
||||
J.name = new_jumpsuit_name
|
||||
J.desc = new_desc
|
||||
if(new_glove_icon_state && new_glove_item_state && new_glove_name)
|
||||
for(var/obj/item/clothing/gloves/G in contents)
|
||||
for(var/obj/item/clothing/gloves/color/G in contents)
|
||||
//world << "DEBUG: YUP! FOUND IT!"
|
||||
G.item_state = new_glove_item_state
|
||||
G.icon_state = new_glove_icon_state
|
||||
G._color = _color
|
||||
G.name = new_glove_name
|
||||
if(!istype(G, /obj/item/clothing/gloves/black/thief))
|
||||
if(!istype(G, /obj/item/clothing/gloves/color/black/thief))
|
||||
G.desc = new_desc
|
||||
if(new_shoe_icon_state && new_shoe_name)
|
||||
for(var/obj/item/clothing/shoes/S in contents)
|
||||
@@ -265,7 +266,10 @@
|
||||
return
|
||||
if ( istype(W,/obj/item/clothing/gloves/furgloves ) )
|
||||
user << "This item does not fit."
|
||||
return
|
||||
return
|
||||
if(W.flags & NODROP) //if "can't drop" item
|
||||
user << "<span class='notice'>\The [W] is stuck to your hand, you cannot put it in the washing machine!</span>"
|
||||
return
|
||||
|
||||
if(contents.len < 5)
|
||||
if ( state in list(1, 3) )
|
||||
|
||||
@@ -7,46 +7,33 @@
|
||||
use_power = 0
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/charges = 1
|
||||
var/insisting = 0
|
||||
|
||||
var/datum/mind/target
|
||||
var/list/types = list("Owlman", "The Griffin")
|
||||
/obj/machinery/wish_granter/attack_hand(var/mob/user as mob)
|
||||
usr.set_machine(src)
|
||||
|
||||
if(charges <= 0)
|
||||
user << "The Wish Granter lies silent."
|
||||
return
|
||||
|
||||
else if(!istype(user, /mob/living/carbon/human))
|
||||
if(!istype(user, /mob/living/carbon/human))
|
||||
user << "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's."
|
||||
return
|
||||
|
||||
else if(is_special_character(user))
|
||||
user << "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away."
|
||||
|
||||
else if (!insisting)
|
||||
user << "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?"
|
||||
insisting++
|
||||
|
||||
else
|
||||
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
|
||||
if(types.len == 1)
|
||||
wish = pick(types)
|
||||
else
|
||||
wish = input("You want to become...","Wish") as null|anything in types
|
||||
|
||||
var/mob/living/carbon/human/M = user
|
||||
|
||||
var/wish = input("You want to...","Wish") as anything in list("Protect the innocent","Hunt the guilty")
|
||||
switch(wish)
|
||||
if("Protect the innocent")
|
||||
if("Owlman")
|
||||
types -= "Owlman"
|
||||
M.fully_replace_character_name(M.real_name, "Owlman")
|
||||
|
||||
var/datum/objective/protect/protect = new
|
||||
protect.owner = user.mind
|
||||
user.mind.objectives += protect
|
||||
|
||||
for(var/obj/item/W in M)
|
||||
M.unEquip(W)
|
||||
|
||||
@@ -64,12 +51,18 @@
|
||||
|
||||
M.regenerate_icons()
|
||||
|
||||
if("Hunt the guilty")
|
||||
M.fully_replace_character_name(M.real_name, "The Griffin")
|
||||
var/datum/objective/protect/protect = new
|
||||
protect.owner = user.mind
|
||||
if(target)
|
||||
protect.target = target
|
||||
else
|
||||
protect.find_target()
|
||||
target = protect.target
|
||||
user.mind.objectives += protect
|
||||
|
||||
var/datum/objective/assassinate/assasinate = new
|
||||
assasinate.owner = user.mind
|
||||
user.mind.objectives += assasinate
|
||||
if("The Griffin")
|
||||
types -= "The Griffin"
|
||||
M.fully_replace_character_name(M.real_name, "The Griffin")
|
||||
|
||||
for(var/obj/item/W in M)
|
||||
M.unEquip(W)
|
||||
@@ -88,14 +81,25 @@
|
||||
|
||||
M.regenerate_icons()
|
||||
|
||||
var/datum/objective/assassinate/assasinate = new
|
||||
assasinate.owner = user.mind
|
||||
if(target)
|
||||
assasinate.target = target
|
||||
else
|
||||
assasinate.find_target()
|
||||
target = assasinate.target
|
||||
user.mind.objectives += assasinate
|
||||
|
||||
ticker.mode.traitors += user.mind
|
||||
user.mind.special_role = wish
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in user.mind.objectives)
|
||||
user << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
charges--
|
||||
insisting = 0
|
||||
|
||||
//Time to hand out the powers, since they are currently generic
|
||||
if (!(HULK in user.mutations))
|
||||
user.dna.SetSEState(HULKBLOCK,1)
|
||||
|
||||
@@ -122,4 +126,14 @@
|
||||
|
||||
user.update_mutations()
|
||||
|
||||
//Remove the wishgranter or teleport it randomly on the station
|
||||
if(!types.len)
|
||||
user << "The wishgranter slowly fades into mist..."
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
var/impact_area = findEventArea()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
src.loc = T
|
||||
return
|
||||
@@ -27,7 +27,7 @@
|
||||
name = "Seraph"
|
||||
icon_state = "seraph"
|
||||
initial_icon = "seraph"
|
||||
operation_req_access = list(access_cent_creed)
|
||||
operation_req_access = list(access_cent_commander)
|
||||
step_in = 3
|
||||
health = 550
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/seraph
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/commander(src)
|
||||
new /obj/item/clothing/suit/space/ert/commander(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
new /obj/item/weapon/c4(src)
|
||||
new /obj/item/weapon/storage/belt/security/full(src)
|
||||
new /obj/item/weapon/gun/energy/ionrifle(src)
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(src)
|
||||
@@ -37,7 +37,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/security(src)
|
||||
new /obj/item/clothing/suit/space/ert/security(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
new /obj/item/weapon/c4(src)
|
||||
new /obj/item/weapon/storage/belt/security/full(src)
|
||||
new /obj/item/weapon/gun/energy/ionrifle(src)
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(src)
|
||||
|
||||
@@ -1,36 +1,23 @@
|
||||
/obj/effect/decal/cleanable/crayon
|
||||
name = "rune"
|
||||
desc = "A rune drawn in crayon."
|
||||
icon = 'icons/obj/rune.dmi'
|
||||
icon = 'icons/effects/crayondecal.dmi'
|
||||
icon_state = "rune1"
|
||||
layer = 2.1
|
||||
anchored = 1
|
||||
|
||||
examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
return
|
||||
/obj/effect/decal/cleanable/crayon/examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
|
||||
..()
|
||||
loc = location
|
||||
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
name = e_name
|
||||
desc = "A [name] drawn in crayon."
|
||||
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
|
||||
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
|
||||
overlays += mainOverlay
|
||||
overlays += shadeOverlay
|
||||
|
||||
add_hiddenprint(usr)
|
||||
icon_state = type
|
||||
color = main
|
||||
@@ -1,100 +1,84 @@
|
||||
/obj/item/toy/crayon/red
|
||||
icon_state = "crayonred"
|
||||
colour = "#DA0000"
|
||||
shadeColour = "#810C0C"
|
||||
colourName = "red"
|
||||
|
||||
/obj/item/toy/crayon/orange
|
||||
icon_state = "crayonorange"
|
||||
colour = "#FF9300"
|
||||
shadeColour = "#A55403"
|
||||
colourName = "orange"
|
||||
|
||||
/obj/item/toy/crayon/yellow
|
||||
icon_state = "crayonyellow"
|
||||
colour = "#FFF200"
|
||||
shadeColour = "#886422"
|
||||
colourName = "yellow"
|
||||
|
||||
/obj/item/toy/crayon/green
|
||||
icon_state = "crayongreen"
|
||||
colour = "#A8E61D"
|
||||
shadeColour = "#61840F"
|
||||
colourName = "green"
|
||||
|
||||
/obj/item/toy/crayon/blue
|
||||
icon_state = "crayonblue"
|
||||
colour = "#00B7EF"
|
||||
shadeColour = "#0082A8"
|
||||
colourName = "blue"
|
||||
|
||||
/obj/item/toy/crayon/purple
|
||||
icon_state = "crayonpurple"
|
||||
colour = "#DA00FF"
|
||||
shadeColour = "#810CFF"
|
||||
colourName = "purple"
|
||||
|
||||
/obj/item/toy/crayon/white
|
||||
icon_state = "crayonwhite"
|
||||
colour = "#FFFFFF"
|
||||
colourName = "white"
|
||||
|
||||
/obj/item/toy/crayon/mime
|
||||
icon_state = "crayonmime"
|
||||
desc = "A very sad-looking crayon."
|
||||
colour = "#FFFFFF"
|
||||
shadeColour = "#000000"
|
||||
colourName = "mime"
|
||||
uses = 0
|
||||
|
||||
/obj/item/toy/crayon/mime/attack_self(mob/living/user as mob) //inversion
|
||||
if(colour != "#FFFFFF" && shadeColour != "#000000")
|
||||
colour = "#FFFFFF"
|
||||
shadeColour = "#000000"
|
||||
user << "You will now draw in white and black with this crayon."
|
||||
/obj/item/toy/crayon/mime/attack_self(mob/living/user as mob)
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/mime/update_window(mob/living/user as mob)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [colour];'> </span><a href='?src=\ref[src];color=1'>Change color</a></center>"
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/mime/Topic(href,href_list)
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
if(href_list["color"])
|
||||
if(colour != "#FFFFFF")
|
||||
colour = "#FFFFFF"
|
||||
else
|
||||
colour = "#000000"
|
||||
update_window(usr)
|
||||
else
|
||||
colour = "#000000"
|
||||
shadeColour = "#FFFFFF"
|
||||
user << "You will now draw in black and white with this crayon."
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/rainbow
|
||||
icon_state = "crayonrainbow"
|
||||
colour = "#FFF000"
|
||||
shadeColour = "#000FFF"
|
||||
colourName = "rainbow"
|
||||
uses = 0
|
||||
|
||||
/obj/item/toy/crayon/rainbow/attack_self(mob/living/user as mob)
|
||||
colour = input(user, "Please select the main colour.", "Crayon colour") as color
|
||||
shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color
|
||||
return
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(target,/turf/simulated/floor))
|
||||
var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter")
|
||||
switch(drawtype)
|
||||
if("letter")
|
||||
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
user << "You start drawing a letter on the [target.name]."
|
||||
if("graffiti")
|
||||
user << "You start drawing graffiti on the [target.name]."
|
||||
if("rune")
|
||||
user << "You start drawing a rune on the [target.name]."
|
||||
if(instant || do_after(user, 50))
|
||||
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
|
||||
user << "You finish drawing."
|
||||
if(uses)
|
||||
uses--
|
||||
if(!uses)
|
||||
user << "\red You used up your crayon!"
|
||||
del(src)
|
||||
return
|
||||
/obj/item/toy/crayon/rainbow/update_window(mob/living/user as mob)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [colour];'> </span><a href='?src=\ref[src];color=1'>Change color</a></center>"
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
|
||||
if(M == user)
|
||||
user << "You take a bite of the crayon. Delicious!"
|
||||
user.nutrition += 5
|
||||
if(uses)
|
||||
uses -= 5
|
||||
if(uses <= 0)
|
||||
user << "\red You ate your crayon!"
|
||||
del(src)
|
||||
/obj/item/toy/crayon/rainbow/Topic(href,href_list[])
|
||||
|
||||
if(href_list["color"])
|
||||
var/temp = input(usr, "Please select colour.", "Crayon colour") as color
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
colour = temp
|
||||
update_window(usr)
|
||||
else
|
||||
..()
|
||||
@@ -286,6 +286,8 @@
|
||||
src.overlays.Cut()
|
||||
src.overlays += "pai-off"
|
||||
|
||||
/obj/item/device/paicard
|
||||
var/current_emotion = 1
|
||||
/obj/item/device/paicard/proc/setEmotion(var/emotion)
|
||||
if(pai)
|
||||
src.overlays.Cut()
|
||||
@@ -299,6 +301,7 @@
|
||||
if(7) src.overlays += "pai-sad"
|
||||
if(8) src.overlays += "pai-angry"
|
||||
if(9) src.overlays += "pai-what"
|
||||
current_emotion = emotion
|
||||
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
|
||||
@@ -21,13 +21,6 @@
|
||||
origin_tech = "syndicate=3"
|
||||
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
|
||||
|
||||
/obj/item/device/encryptionkey/syndicate/hacked
|
||||
name = "Standard Encryption Key"
|
||||
desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual."
|
||||
channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0, "Syndicate" = 1)
|
||||
origin_tech = "syndicate=3"
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/encryptionkey/binary
|
||||
name = "binary translator key"
|
||||
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
/obj/item/device/suit_cooling_unit
|
||||
name = "portable suit cooling unit"
|
||||
desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling."
|
||||
w_class = 4
|
||||
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 = 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()
|
||||
cell = new/obj/item/weapon/stock_parts/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
|
||||
cell.loc = src
|
||||
|
||||
/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()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/get_environment_temperature()
|
||||
if (ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H.loc, /obj/mecha))
|
||||
var/obj/mecha/M = loc
|
||||
return M.return_temperature()
|
||||
else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
return H.loc:air_contents.temperature
|
||||
|
||||
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))
|
||||
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()
|
||||
if(!cell)
|
||||
return
|
||||
if(cell.charge <= 0)
|
||||
return
|
||||
|
||||
on = 1
|
||||
updateicon()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/turn_off()
|
||||
if (ismob(src.loc))
|
||||
src.loc << "\The [src] clicks and whines as it powers down." //let them know
|
||||
on = 0
|
||||
updateicon()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/attack_self(mob/user as mob)
|
||||
if(cover_open && cell)
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(cell)
|
||||
else
|
||||
cell.loc = get_turf(loc)
|
||||
|
||||
cell.add_fingerprint(user)
|
||||
cell.updateicon()
|
||||
|
||||
user << "You remove the [src.cell]."
|
||||
src.cell = null
|
||||
updateicon()
|
||||
return
|
||||
|
||||
//TODO use a UI like the air tanks
|
||||
if(on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if (on)
|
||||
user << "You switch on the [src]."
|
||||
|
||||
/obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if(cover_open)
|
||||
cover_open = 0
|
||||
user << "You screw the panel into place."
|
||||
else
|
||||
cover_open = 1
|
||||
user << "You unscrew the panel."
|
||||
updateicon()
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(cover_open)
|
||||
if(cell)
|
||||
user << "There is a [cell] already installed here."
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
cell = W
|
||||
user << "You insert the [cell]."
|
||||
updateicon()
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/updateicon()
|
||||
if (cover_open)
|
||||
if (cell)
|
||||
icon_state = "suitcooler1"
|
||||
else
|
||||
icon_state = "suitcooler2"
|
||||
else
|
||||
icon_state = "suitcooler0"
|
||||
|
||||
/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."
|
||||
else
|
||||
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
|
||||
usr << "It doesn't have a power cell installed."
|
||||
@@ -438,20 +438,104 @@
|
||||
desc = "A colourful crayon. Looks tasty. Mmmm..."
|
||||
icon = 'icons/obj/crayons.dmi'
|
||||
icon_state = "crayonred"
|
||||
slot_flags = SLOT_EARS
|
||||
w_class = 1.0
|
||||
attack_verb = list("attacked", "coloured")
|
||||
var/colour = "#FF0000" //RGB
|
||||
var/shadeColour = "#220000" //RGB
|
||||
var/drawtype = "rune"
|
||||
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka")
|
||||
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
var/uses = 30 //0 for unlimited uses
|
||||
var/instant = 0
|
||||
var/colourName = "red" //for updateIcon purposes
|
||||
var/dat
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</span>"
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
|
||||
/obj/item/toy/crayon/New()
|
||||
..()
|
||||
name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
|
||||
drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]")
|
||||
|
||||
/obj/item/toy/crayon/attack_self(mob/living/user as mob)
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/proc/update_window(mob/living/user as mob)
|
||||
dat += "<center><h2>Currently selected: [drawtype]</h2><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_letter'>Random letter</a><a href='?src=\ref[src];type=letter'>Pick letter</a>"
|
||||
dat += "<hr>"
|
||||
dat += "<h3>Runes:</h3><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_rune'>Random rune</a>"
|
||||
for(var/i = 1; i <= 6; i++)
|
||||
dat += "<a href='?src=\ref[src];type=rune[i]'>Rune[i]</a>"
|
||||
if(!((i + 1) % 3)) //3 buttons in a row
|
||||
dat += "<br>"
|
||||
dat += "<hr>"
|
||||
graffiti.Find()
|
||||
dat += "<h3>Graffiti:</h3><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_graffiti'>Random graffiti</a>"
|
||||
var/c = 1
|
||||
for(var/T in graffiti)
|
||||
dat += "<a href='?src=\ref[src];type=[T]'>[T]</a>"
|
||||
if(!((c + 1) % 3)) //3 buttons in a row
|
||||
dat += "<br>"
|
||||
c++
|
||||
dat += "<hr>"
|
||||
var/datum/browser/popup = new(user, "crayon", name, 300, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
dat = ""
|
||||
|
||||
/obj/item/toy/crayon/Topic(href, href_list, hsrc)
|
||||
var/temp = "a"
|
||||
switch(href_list["type"])
|
||||
if("random_letter")
|
||||
temp = pick(letters)
|
||||
if("letter")
|
||||
temp = input("Choose the letter.", "Crayon scribbles") in letters
|
||||
if("random_rune")
|
||||
temp = "rune[rand(1,6)]"
|
||||
if("random_graffiti")
|
||||
temp = pick(graffiti)
|
||||
else
|
||||
temp = href_list["type"]
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
drawtype = temp
|
||||
update_window(usr)
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(target,/turf/simulated/floor))
|
||||
var/temp = "rune"
|
||||
if(letters.Find(drawtype))
|
||||
temp = "letter"
|
||||
else if(graffiti.Find(drawtype))
|
||||
temp = "graffiti"
|
||||
user << "You start drawing a [temp] on the [target.name]."
|
||||
if(instant || do_after(user, 50))
|
||||
new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp)
|
||||
user << "You finish drawing [temp]."
|
||||
if(uses)
|
||||
uses--
|
||||
if(!uses)
|
||||
user << "<span class='danger'>You used up your crayon!</span>"
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
|
||||
if(M == user)
|
||||
user << "You take a bite of the crayon. Delicious!"
|
||||
user.nutrition += 5
|
||||
if(uses)
|
||||
uses -= 5
|
||||
if(uses <= 0)
|
||||
user << "<span class='danger'>You ate your crayon!</span>"
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/plastique
|
||||
/obj/item/weapon/c4
|
||||
name = "plastic explosives"
|
||||
desc = "Used to put holes in specific areas without too much extra hole."
|
||||
gender = PLURAL
|
||||
@@ -13,11 +13,11 @@
|
||||
var/atom/target = null
|
||||
var/open_panel = 0
|
||||
|
||||
/obj/item/weapon/plastique/New()
|
||||
/obj/item/weapon/c4/New()
|
||||
wires = new(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/plastique/suicide_act(var/mob/user)
|
||||
/obj/item/weapon/c4/suicide_act(var/mob/user)
|
||||
. = (BRUTELOSS)
|
||||
viewers(user) << "<span class='suicide'>[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!</span>"
|
||||
var/message_say = "FOR NO RAISIN!"
|
||||
@@ -44,7 +44,7 @@
|
||||
explode(get_turf(user))
|
||||
return .
|
||||
|
||||
/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user, params)
|
||||
/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open_panel = !open_panel
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
@@ -53,7 +53,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/plastique/attack_self(mob/user as mob)
|
||||
/obj/item/weapon/c4/attack_self(mob/user as mob)
|
||||
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
|
||||
if(newtime < 10)
|
||||
newtime = 10
|
||||
@@ -63,7 +63,7 @@
|
||||
user << "Timer set for [timer] seconds."
|
||||
|
||||
|
||||
/obj/item/weapon/plastique/afterattack(atom/target as obj|turf, mob/user as mob, flag)
|
||||
/obj/item/weapon/c4/afterattack(atom/target as obj|turf, mob/user as mob, flag)
|
||||
if (!flag)
|
||||
return
|
||||
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under))
|
||||
@@ -90,7 +90,7 @@
|
||||
spawn(timer*10)
|
||||
explode(get_turf(target))
|
||||
|
||||
/obj/item/weapon/plastique/proc/explode(var/location)
|
||||
/obj/item/weapon/c4/proc/explode(var/location)
|
||||
|
||||
if(!target)
|
||||
target = get_atom_on_turf(src)
|
||||
@@ -110,5 +110,5 @@
|
||||
del(target)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
/obj/item/weapon/c4/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
return
|
||||
@@ -299,4 +299,40 @@
|
||||
name = "smiles von wiggleton"
|
||||
desc = "A duffelbag designed to hold bananas and bike horns."
|
||||
icon_state = "duffel-clown"
|
||||
item_state = "duffel-clown"
|
||||
item_state = "duffel-clown"
|
||||
|
||||
//ERT backpacks.
|
||||
/obj/item/weapon/storage/backpack/ert
|
||||
name = "emergency response team backpack"
|
||||
desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_commander"
|
||||
item_state = "backpack"
|
||||
|
||||
//Commander
|
||||
/obj/item/weapon/storage/backpack/ert/commander
|
||||
name = "emergency response team commander backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by the commander of a Nanotrasen Emergency Response Team."
|
||||
|
||||
//Security
|
||||
/obj/item/weapon/storage/backpack/ert/security
|
||||
name = "emergency response team security backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by security members of a Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_security"
|
||||
|
||||
//Engineering
|
||||
/obj/item/weapon/storage/backpack/ert/engineer
|
||||
name = "emergency response team engineer backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by engineering members of a Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_engineering"
|
||||
|
||||
//Medical
|
||||
/obj/item/weapon/storage/backpack/ert/medical
|
||||
name = "emergency response team medical backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_medical"
|
||||
|
||||
//Janitorial
|
||||
/obj/item/weapon/storage/backpack/ert/janitor
|
||||
name = "emergency response team janitor backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by janitorial members of a Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_janitor"
|
||||
@@ -135,10 +135,10 @@
|
||||
..()
|
||||
contents.Cut()
|
||||
new /obj/item/weapon/kitchenknife/combat(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/telebaton(src)
|
||||
new /obj/item/weapon/restraints/handcuffs(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone
|
||||
name = "soul stone belt"
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
else
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
|
||||
|
||||
@@ -37,7 +37,10 @@
|
||||
new /obj/item/weapon/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
new /obj/item/weapon/c4(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
return
|
||||
|
||||
if("murder")
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
/obj/item/weapon/tank/plasma/plasmaman
|
||||
desc = "The lifeblood of plasmamen. Warning: Extremely flammable, do not inhale (unless you're a plasman)."
|
||||
icon_state = "plasma_fr"
|
||||
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
|
||||
|
||||
/obj/item/weapon/tank/plasma/plasmaman/examine()
|
||||
set src in usr
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
prob(1);/obj/item/stack/packageWrap,\
|
||||
prob(2);/obj/random/bomb_supply,\
|
||||
prob(1);/obj/item/weapon/extinguisher,\
|
||||
prob(1);/obj/item/clothing/gloves/fyellow,\
|
||||
prob(1);/obj/item/clothing/gloves/color/fyellow,\
|
||||
prob(3);/obj/item/stack/cable_coil,\
|
||||
prob(2);/obj/random/toolbox,\
|
||||
prob(2);/obj/item/weapon/storage/belt/utility,\
|
||||
|
||||
@@ -61,8 +61,8 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/glasses/eyepatch(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/gloves/swat(src)
|
||||
new /obj/item/clothing/gloves/swat(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
new /obj/item/weapon/storage/bag/trash(src)
|
||||
new /obj/item/device/lightreplacer(src)
|
||||
new /obj/item/weapon/holosign_creator(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/head/soft/purple(src)
|
||||
new /obj/item/weapon/watertank/janitor(src)
|
||||
new /obj/item/weapon/storage/belt/janitor(src)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
new /obj/item/clothing/under/rank/cargotech(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/head/soft(src)
|
||||
// new /obj/item/weapon/cartridge/quartermaster(src)
|
||||
return
|
||||
@@ -35,7 +35,7 @@
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
// new /obj/item/weapon/cartridge/quartermaster(src)
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
new /obj/item/clothing/suit/storage/det_suit(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/blue(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/red(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
|
||||
@@ -296,8 +296,8 @@
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
return
|
||||
|
||||
+19
-25
@@ -285,18 +285,18 @@ var/can_call_ert
|
||||
else
|
||||
del(H)
|
||||
|
||||
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
|
||||
//M.rebuild_appearance()
|
||||
*/
|
||||
|
||||
var/new_gender = alert(usr, "Please select your gender.", "Character Generation", "Male", "Female")
|
||||
if (new_gender)
|
||||
if(new_gender == "Male")
|
||||
M.gender = MALE
|
||||
else
|
||||
M.gender = FEMALE
|
||||
//M.rebuild_appearance()
|
||||
*/
|
||||
|
||||
M.gender = pick(MALE, FEMALE)
|
||||
M.set_species("Human",1)
|
||||
M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics
|
||||
M.dna.ready_dna(M)
|
||||
|
||||
var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde
|
||||
var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue
|
||||
@@ -368,15 +368,14 @@ var/can_call_ert
|
||||
R.helmet.flags |= NODROP
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/commander(M), slot_back)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
W.assignment = "Emergency Response Team Leader"
|
||||
W.registered_name = M.real_name
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Commander)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage, access_cent_thunder, access_cent_teleporter)
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(src)
|
||||
@@ -428,7 +427,7 @@ var/can_call_ert
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/inflatable(M), slot_r_hand)
|
||||
|
||||
if("Janitorial")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/janitor, slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/janitor/full, slot_belt)
|
||||
|
||||
@@ -452,7 +451,7 @@ var/can_call_ert
|
||||
R.helmet.flags |= NODROP
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/security(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
@@ -460,8 +459,7 @@ var/can_call_ert
|
||||
W.registered_name = M.real_name
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Officer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list(access_cent_general, access_cent_living, access_cent_thunder)
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(src)
|
||||
@@ -472,7 +470,8 @@ var/can_call_ert
|
||||
M.equip_to_slot_or_del(pda, slot_wear_pda)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_s_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs, slot_l_store)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/night(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack)
|
||||
@@ -492,7 +491,7 @@ var/can_call_ert
|
||||
R.helmet.flags |= NODROP
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/medical(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/night(M), slot_glasses)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
@@ -500,8 +499,7 @@ var/can_call_ert
|
||||
W.registered_name = M.real_name
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Medic)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list(access_cent_general, access_cent_living, access_cent_medical)
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(src)
|
||||
@@ -525,7 +523,7 @@ var/can_call_ert
|
||||
|
||||
if("Engineering")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/engineer(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit)
|
||||
|
||||
var/obj/item/clothing/suit/space/rig/R = M.wear_suit
|
||||
@@ -542,8 +540,7 @@ var/can_call_ert
|
||||
W.registered_name = M.real_name
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Engineer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list(access_cent_general, access_cent_living, access_cent_storage)
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(src)
|
||||
@@ -564,12 +561,10 @@ var/can_call_ert
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/full(M), slot_in_backpack)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/inflatable(M), slot_r_hand)
|
||||
|
||||
if("Janitorial")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/galoshes(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/janitor(M), slot_wear_suit)
|
||||
|
||||
var/obj/item/clothing/suit/space/rig/R = M.wear_suit
|
||||
@@ -578,7 +573,7 @@ var/can_call_ert
|
||||
R.helmet.flags |= NODROP
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/janitor(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/janitor(M), slot_glasses)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
@@ -586,8 +581,7 @@ var/can_call_ert
|
||||
W.registered_name = M.real_name
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Janitor)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list(access_cent_general, access_cent_living, access_cent_storage)
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(src)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/d_state = 0
|
||||
|
||||
/turf/simulated/wall/r_wall/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (HULK in user.mutations)
|
||||
if (prob(10) || rotting)
|
||||
usr << text("\blue You smash through the wall.")
|
||||
@@ -34,7 +35,7 @@
|
||||
|
||||
|
||||
/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
@@ -286,7 +287,7 @@
|
||||
else if( istype(W,/obj/item/apc_frame) )
|
||||
var/obj/item/apc_frame/AH = W
|
||||
AH.try_build(src)
|
||||
|
||||
|
||||
else if(istype(W,/obj/item/newscaster_frame))
|
||||
var/obj/item/newscaster_frame/AH = W
|
||||
AH.try_build(src)
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
name = "\proper space"
|
||||
icon_state = "0"
|
||||
|
||||
temperature = T0C
|
||||
temperature = TCMB
|
||||
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
|
||||
// heat_capacity = 700000 No.
|
||||
heat_capacity = 700000
|
||||
|
||||
/turf/space/New()
|
||||
if(!istype(src, /turf/space/transit))
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
occupant2 << "<span class='warning'>[i]</span>"
|
||||
if(i == 0)
|
||||
explosion(loc, 2, 4, 8)
|
||||
qdel(src)
|
||||
sleep(10)
|
||||
|
||||
update_icons()
|
||||
|
||||
@@ -734,7 +734,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("tunnel clown")//Tunnel clowns rule!
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/chaplain_hood(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
@@ -775,7 +775,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("dark lord")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand)
|
||||
|
||||
@@ -797,7 +797,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("assassin")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
|
||||
@@ -812,7 +812,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
|
||||
sec_briefcase.contents += new /obj/item/ammo_box/a357
|
||||
sec_briefcase.contents += new /obj/item/weapon/plastique
|
||||
sec_briefcase.contents += new /obj/item/weapon/c4
|
||||
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(M)
|
||||
@@ -855,8 +855,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.icon_state = "centcom"
|
||||
W.item_state = "id_inv"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
|
||||
W.assignment = "Nanotrasen Navy Representative"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, slot_wear_id)
|
||||
|
||||
@@ -878,9 +878,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
var/obj/item/weapon/card/id/centcom/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Officer)"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Nanotrasen Navy Officer"
|
||||
W.assignment = "Nanotrasen Navy Officer"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, slot_wear_id)
|
||||
|
||||
@@ -904,26 +903,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/obj/item/weapon/card/id/centcom/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Captain)"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Nanotrasen Navy Captain"
|
||||
W.assignment = "Nanotrasen Navy Captain"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, slot_wear_id)
|
||||
|
||||
if("emergency response team")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
if("emergency response team member")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/ert(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team)"
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Member)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Emergency Response Team"
|
||||
W.assignment = "Emergency Response Team Member"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
@@ -933,20 +931,19 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
|
||||
|
||||
if("emergency response team leader")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/ert(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team Leader)"
|
||||
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Leader)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Emergency Response Team Leader"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
@@ -980,9 +977,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Special Operations Officer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Special Operations Officer"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
@@ -1010,9 +1006,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Special Operations Officer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Special Operations Officer"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
@@ -1039,7 +1034,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
|
||||
if("blue wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
|
||||
@@ -1116,9 +1110,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Deathsquad Officer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Deathsquad Officer"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
@@ -1150,9 +1143,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card (Deathsquad Officer)"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Deathsquad Officer"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if (!leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
@@ -168,9 +168,8 @@ var/global/sent_strike_team = 0
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()//They get full station access.
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
|
||||
W.assignment = "Death Commando"
|
||||
W.access = get_centcom_access(W.assignment)
|
||||
W.registered_name = real_name
|
||||
equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head)
|
||||
else
|
||||
@@ -151,10 +151,10 @@ var/global/sent_syndicate_strike_team = 0
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
@@ -171,8 +171,8 @@ var/global/sent_syndicate_strike_team = 0
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "id"
|
||||
W.access = get_all_accesses()//They get full station access because obviously the syndicate has HAAAX, and can make special IDs for their most elite members.
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)//Let's add their forged CentCom access and syndicate access.
|
||||
W.assignment = "Syndicate Commando"
|
||||
W.access = get_syndicate_access(W.assignment)
|
||||
W.registered_name = real_name
|
||||
equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
@@ -116,7 +116,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/space/rig/syndi
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/rig/syndi
|
||||
@@ -246,7 +246,7 @@
|
||||
/obj/effect/landmark/corpse/miner
|
||||
corpseradio = /obj/item/device/radio/headset/headset_cargo
|
||||
corpseuniform = /obj/item/clothing/under/rank/miner
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpsegloves = /obj/item/clothing/gloves/fingerless
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
@@ -280,7 +280,7 @@
|
||||
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
||||
corpsemask = /obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
corpsehelmet = /obj/item/clothing/head/centhat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsepocket1 = /obj/item/weapon/lighter/zippo
|
||||
corpseid = 1
|
||||
|
||||
@@ -157,6 +157,13 @@
|
||||
else
|
||||
src.DB_species_unlock("Slime People",45)
|
||||
return
|
||||
if("6")
|
||||
if(karma <100)
|
||||
usr << "You do not have enough karma!"
|
||||
return
|
||||
else
|
||||
src.DB_species_unlock("Plasmaman",100)
|
||||
return
|
||||
if(href_list["KarmaRefund"])
|
||||
var/type = href_list["KarmaRefundType"]
|
||||
var/job = href_list["KarmaRefund"]
|
||||
|
||||
@@ -246,7 +246,7 @@ BLIND // can't see anything
|
||||
var/mask_adjusted = 0
|
||||
var/ignore_maskadjust = 1
|
||||
var/adjusted_flags = null
|
||||
|
||||
|
||||
//Proc that moves gas/breath masks out of the way
|
||||
/obj/item/clothing/mask/proc/adjustmask(var/mob/user)
|
||||
if(!ignore_maskadjust)
|
||||
@@ -334,7 +334,7 @@ BLIND // can't see anything
|
||||
permeability_coefficient = 0.02
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
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)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT||HIDETAIL
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/clothing/gloves/yellow
|
||||
/obj/item/clothing/gloves/color/yellow
|
||||
desc = "These gloves will protect the wearer from electric shock."
|
||||
name = "insulated gloves"
|
||||
icon_state = "yellow"
|
||||
@@ -14,7 +14,7 @@
|
||||
power
|
||||
var/next_shock = 0
|
||||
|
||||
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
|
||||
/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
|
||||
desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
|
||||
name = "budget insulated gloves"
|
||||
icon_state = "yellow"
|
||||
@@ -30,7 +30,7 @@
|
||||
New()
|
||||
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
|
||||
|
||||
/obj/item/clothing/gloves/black
|
||||
/obj/item/clothing/gloves/color/black
|
||||
desc = "These gloves are fire-resistant."
|
||||
name = "black gloves"
|
||||
icon_state = "black"
|
||||
@@ -55,7 +55,7 @@
|
||||
thief
|
||||
pickpocket = 1
|
||||
|
||||
/obj/item/clothing/gloves/orange
|
||||
/obj/item/clothing/gloves/color/orange
|
||||
name = "orange gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "orange"
|
||||
@@ -65,7 +65,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/red
|
||||
/obj/item/clothing/gloves/color/red
|
||||
name = "red gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "red"
|
||||
@@ -75,7 +75,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/rainbow
|
||||
/obj/item/clothing/gloves/color/rainbow
|
||||
name = "rainbow gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "rainbow"
|
||||
@@ -88,7 +88,7 @@
|
||||
clown
|
||||
_color = "clown"
|
||||
|
||||
/obj/item/clothing/gloves/blue
|
||||
/obj/item/clothing/gloves/color/blue
|
||||
name = "blue gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "blue"
|
||||
@@ -98,7 +98,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/purple
|
||||
/obj/item/clothing/gloves/color/purple
|
||||
name = "purple gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "purple"
|
||||
@@ -108,7 +108,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/green
|
||||
/obj/item/clothing/gloves/color/green
|
||||
name = "green gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "green"
|
||||
@@ -118,7 +118,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/grey
|
||||
/obj/item/clothing/gloves/color/grey
|
||||
name = "grey gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "gray"
|
||||
@@ -134,7 +134,7 @@
|
||||
hop
|
||||
_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/light_brown
|
||||
/obj/item/clothing/gloves/color/light_brown
|
||||
name = "light brown gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "lightbrown"
|
||||
@@ -144,7 +144,7 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/brown
|
||||
/obj/item/clothing/gloves/color/brown
|
||||
name = "brown gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "brown"
|
||||
@@ -170,8 +170,6 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
cmo
|
||||
_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/color/latex/nitrile
|
||||
name = "nitrile gloves"
|
||||
@@ -179,6 +177,7 @@
|
||||
icon_state = "nitrile"
|
||||
item_state = "nitrilegloves"
|
||||
transfer_prints = FALSE
|
||||
_color = "medical"
|
||||
|
||||
/obj/item/clothing/gloves/color/white
|
||||
name = "white gloves"
|
||||
@@ -188,7 +187,7 @@
|
||||
_color="mime"
|
||||
|
||||
redcoat
|
||||
_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
|
||||
_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/color/captain
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
/obj/item/clothing/gloves/fingerless
|
||||
name = "fingerless gloves"
|
||||
desc = "Plain black gloves without fingertips for the hard working."
|
||||
icon_state = "fingerless"
|
||||
item_state = "fingerless"
|
||||
_color = null //So they don't wash.
|
||||
transfer_prints = TRUE
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
species_restricted = null
|
||||
|
||||
/obj/item/clothing/gloves/cyborg
|
||||
desc = "beep boop borp"
|
||||
name = "cyborg gloves"
|
||||
@@ -8,23 +19,8 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/swat
|
||||
desc = "These tactical gloves are somewhat fire and impact-resistant."
|
||||
name = "\improper SWAT Gloves"
|
||||
icon_state = "black"
|
||||
item_state = "swat_gl"
|
||||
siemens_coefficient = 0.6
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
|
||||
/obj/item/clothing/gloves/combat
|
||||
desc = "These tactical gloves are somewhat fire and impact resistant."
|
||||
name = "combat gloves"
|
||||
icon_state = "black"
|
||||
|
||||
@@ -113,4 +113,33 @@ obj/item/clothing/head/blob
|
||||
icon_state = "blobhat"
|
||||
item_state = "blobhat"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
|
||||
//Commander
|
||||
/obj/item/clothing/head/helmet/ert/command
|
||||
name = "emergency response team commander helmet"
|
||||
desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights."
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/head/helmet/ert/security
|
||||
name = "emergency response team security helmet"
|
||||
desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights."
|
||||
icon_state = "erthelmet_sec"
|
||||
|
||||
//Engineer
|
||||
/obj/item/clothing/head/helmet/ert/engineer
|
||||
name = "emergency response team engineer helmet"
|
||||
desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights."
|
||||
icon_state = "erthelmet_eng"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/head/helmet/ert/medical
|
||||
name = "emergency response team medical helmet"
|
||||
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "erthelmet_med"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/head/helmet/ert/janitor
|
||||
name = "emergency response team janitor helmet"
|
||||
desc = "A set of armor worn by janitorial members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "erthelmet_jan"
|
||||
@@ -1,8 +1,10 @@
|
||||
// PLASMEN SHIT
|
||||
// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON
|
||||
/obj/item/clothing/suit/space/eva/plasmaman
|
||||
name = "plasmaman suit"
|
||||
desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
@@ -10,7 +12,8 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Plasmaman")
|
||||
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
pressure_resistance = 40 * ONE_ATMOSPHERE //we can't change, so some resistance is needed
|
||||
|
||||
icon_state = "plasmaman_suit"
|
||||
item_state = "plasmaman_suit"
|
||||
@@ -19,10 +22,10 @@
|
||||
var/extinguish_cooldown=10 SECONDS
|
||||
var/extinguishes_left=10 // Yeah yeah, reagents, blah blah blah. This should be simple.
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/examine()
|
||||
set src in view()
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
|
||||
..()
|
||||
usr << "There are [extinguishes_left] extinguisher canisters left in this suit."
|
||||
user << "<span class='info'>There are [extinguishes_left] extinguisher canisters left in this suit.</span>"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
|
||||
var/mob/living/carbon/human/H=user
|
||||
if(extinguishes_left)
|
||||
@@ -35,7 +38,10 @@
|
||||
H.ExtinguishMob()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
name = "plasmaman helmet"
|
||||
desc = "A special containment helmet designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
|
||||
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
pressure_resistance = 40 * ONE_ATMOSPHERE
|
||||
species_restricted = list("Plasmaman")
|
||||
|
||||
icon_state = "plasmaman_helmet0"
|
||||
@@ -54,9 +60,9 @@
|
||||
return
|
||||
on = !on
|
||||
icon_state = "[base_state][on]"
|
||||
// item_state = "rig[on]-[_color]"
|
||||
if(on) user.SetLuminosity(user.luminosity + brightness_on)
|
||||
else user.SetLuminosity(user.luminosity - brightness_on)
|
||||
user.update_inv_head()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/pickup(mob/user)
|
||||
if(on)
|
||||
@@ -74,54 +80,113 @@
|
||||
|
||||
// ENGINEERING
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant suit"
|
||||
icon_state = "plasmamanAssistant_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant helmet"
|
||||
icon_state = "plasmamanAssistant_helmet0"
|
||||
base_state = "plasmamanAssistant_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
name = "plasmaman atmospheric suit"
|
||||
icon_state = "plasmamanAtmos_suit"
|
||||
armor = list(melee = 20, bullet = 0, laser = 0,energy = 0, bomb = 25, bio = 100, rad = 0)
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
name = "plasmaman atmospheric helmet"
|
||||
icon_state = "plasmamanAtmos_helmet0"
|
||||
base_state = "plasmamanAtmos_helmet"
|
||||
armor = list(melee = 20, bullet = 0, laser = 0,energy = 0, bomb = 25, bio = 100, rad = 0)
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
name = "plasmaman engineer suit"
|
||||
icon_state = "plasmamanEngineer_suit"
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||
pressure_resistance = 200 * ONE_ATMOSPHERE
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
name = "plasmaman engineer helmet"
|
||||
icon_state = "plasmamanEngineer_helmet0"
|
||||
base_state = "plasmamanEngineer_helmet"
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||
pressure_resistance = 200 * ONE_ATMOSPHERE
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
|
||||
name = "plasmaman chief engineer suit"
|
||||
icon_state = "plasmaman_CE"
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
|
||||
name = "plasmaman chief engineer helmet"
|
||||
icon_state = "plasmaman_CE_helmet0"
|
||||
base_state = "plasmaman_CE_helmet"
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
|
||||
//SERVICE
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
name = "plasmaman botanist suit"
|
||||
icon_state = "plasmamanBotanist_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
|
||||
name = "plasmaman botanist helmet"
|
||||
icon_state = "plasmamanBotanist_helmet0"
|
||||
base_state = "plasmamanBotanist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/chaplain
|
||||
name = "plasmaman chaplain suit"
|
||||
icon_state = "plasmamanChaplain_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
|
||||
name = "plasmaman chaplain helmet"
|
||||
icon_state = "plasmamanChaplain_helmet0"
|
||||
base_state = "plasmamanChaplain_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/clown
|
||||
name = "plasmaman clown suit"
|
||||
icon_state = "plasmaman_Clown"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
|
||||
name = "plasmaman clown helmet"
|
||||
icon_state = "plasmaman_Clown_helmet0"
|
||||
base_state = "plasmaman_Clown_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/mime
|
||||
name = "plasmaman mime suit"
|
||||
icon_state = "plasmaman_Mime"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
|
||||
name = "plasmaman mime helmet"
|
||||
icon_state = "plasmaman_Mime_helmet0"
|
||||
base_state = "plasmaman_Mime_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
name = "plasmaman service suit"
|
||||
icon_state = "plasmamanService_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
name = "plasmaman service helmet"
|
||||
icon_state = "plasmamanService_helmet0"
|
||||
base_state = "plasmamanService_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/janitor
|
||||
name = "plasmaman janitor suit"
|
||||
icon_state = "plasmamanJanitor_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
|
||||
name = "plasmaman janitor helmet"
|
||||
icon_state = "plasmamanJanitor_helmet0"
|
||||
base_state = "plasmamanJanitor_helmet"
|
||||
|
||||
@@ -129,42 +194,158 @@
|
||||
//CARGO
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/cargo
|
||||
name = "plasmaman cargo suit"
|
||||
icon_state = "plasmamanCargo_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
|
||||
name = "plasmaman cargo helmet"
|
||||
icon_state = "plasmamanCargo_helmet0"
|
||||
base_state = "plasmamanCargo_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/miner
|
||||
name = "plasmaman miner suit"
|
||||
icon_state = "plasmamanMiner_suit"
|
||||
armor = list(melee = 30, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
|
||||
name = "plasmaman miner helmet"
|
||||
icon_state = "plasmamanMiner_helmet0"
|
||||
base_state = "plasmamanMiner_helmet"
|
||||
armor = list(melee = 30, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 20)
|
||||
|
||||
|
||||
// MEDSCI
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
name = "plasmaman medical suit"
|
||||
icon_state = "plasmamanMedical_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
name = "plasmaman medical helmet"
|
||||
icon_state = "plasmamanMedical_helmet0"
|
||||
base_state = "plasmamanMedical_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
|
||||
name = "plasmaman paramedic suit"
|
||||
icon_state = "plasmaman_Paramedic"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
|
||||
name = "plasmaman paramedic helmet"
|
||||
icon_state = "plasmaman_Paramedic_helmet0"
|
||||
base_state = "plasmaman_Paramedic_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
|
||||
name = "plasmaman chemist suit"
|
||||
icon_state = "plasmaman_Chemist"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
|
||||
name = "plasmaman chemist helmet"
|
||||
icon_state = "plasmaman_Chemist_helmet0"
|
||||
base_state = "plasmaman_Chemist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
|
||||
name = "plasmaman chief medical officer suit"
|
||||
icon_state = "plasmaman_CMO"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
|
||||
name = "plasmaman chief medical officer helmet"
|
||||
icon_state = "plasmaman_CMO_helmet0"
|
||||
base_state = "plasmaman_CMO_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
name = "plasmaman scientist suit"
|
||||
icon_state = "plasmamanScience_suit"
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
name = "plasmaman scientist helmet"
|
||||
icon_state = "plasmamanScience_helmet0"
|
||||
base_state = "plasmamanScience_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science/rd
|
||||
name = "plasmaman research director suit"
|
||||
icon_state = "plasmaman_RD"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
|
||||
name = "plasmaman research director helmet"
|
||||
icon_state = "plasmaman_RD_helmet0"
|
||||
base_state = "plasmaman_RD_helmet"
|
||||
|
||||
|
||||
//SECURITY
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
name = "plasmaman security suit"
|
||||
icon_state = "plasmamanSecurity_suit"
|
||||
slowdown = 1
|
||||
armor = list(melee = 40, bullet = 15, laser = 35,energy = 5, bomb = 35, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
name = "plasmaman security helmet"
|
||||
icon_state = "plasmamanSecurity_helmet0"
|
||||
base_state = "plasmamanSecurity_helmet"
|
||||
base_state = "plasmamanSecurity_helmet"
|
||||
armor = list(melee = 40, bullet = 15, laser = 35,energy = 5, bomb = 35, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/hos
|
||||
name = "plasmaman head of security suit"
|
||||
icon_state = "plasmaman_HoS"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
|
||||
name = "plasmaman head of security helmet"
|
||||
icon_state = "plasmaman_HoS_helmet0"
|
||||
base_state = "plasmaman_HoS_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/hop
|
||||
name = "plasmaman head of personnel suit"
|
||||
icon_state = "plasmaman_HoP"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
|
||||
name = "plasmaman head of personnel helmet"
|
||||
icon_state = "plasmaman_HoP_helmet0"
|
||||
base_state = "plasmaman_HoP_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/captain
|
||||
name = "plasmaman captain suit"
|
||||
icon_state = "plasmaman_Captain"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
|
||||
name = "plasmaman captain helmet"
|
||||
icon_state = "plasmaman_Captain_helmet0"
|
||||
base_state = "plasmaman_Captain_helmet"
|
||||
|
||||
//NUKEOPS
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/nuclear
|
||||
name = "blood red plasmaman suit"
|
||||
icon_state = "plasmaman_Nukeops"
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
|
||||
name = "blood red plasmaman helmet"
|
||||
icon_state = "plasmaman_Nukeops_helmet0"
|
||||
base_state = "plasmaman_Nukeops_helmet"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.6
|
||||
var/obj/machinery/camera/camera
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear/attack_self(mob/user)
|
||||
if(camera)
|
||||
..(user)
|
||||
else
|
||||
camera = new /obj/machinery/camera(src)
|
||||
camera.network = list("NUKE")
|
||||
cameranet.removeCamera(camera)
|
||||
camera.c_tag = user.name
|
||||
user << "<span class='notice'>User scanned as [camera.c_tag]. Camera activated.</span>"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear/examine(mob/user)
|
||||
..()
|
||||
if(get_dist(user,src) <= 1)
|
||||
user << "<span class='info'>This helmet has a built-in camera. It's [camera ? "" : "in"]active.</span>"
|
||||
@@ -61,7 +61,7 @@
|
||||
item_state = "eng_hardsuit"
|
||||
slowdown = 2
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/device/suit_cooling_unit)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
|
||||
|
||||
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox")
|
||||
sprite_sheets = list(
|
||||
@@ -320,7 +320,7 @@
|
||||
item_state = "eng_hardsuit"
|
||||
slowdown = 2
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
|
||||
|
||||
//Chief Engineer's rig
|
||||
/obj/item/clothing/head/helmet/space/rig/elite
|
||||
@@ -497,7 +497,7 @@
|
||||
desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort."
|
||||
item_state = "medical_hardsuit"
|
||||
slowdown = 1
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
|
||||
|
||||
//Security
|
||||
@@ -516,7 +516,7 @@
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
|
||||
item_state = "sec_hardsuit"
|
||||
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs)
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
|
||||
|
||||
@@ -243,4 +243,41 @@
|
||||
desc = "Pukish armor."
|
||||
icon_state = "tdgreen"
|
||||
item_state = "tdgreen"
|
||||
siemens_coefficient = 1
|
||||
siemens_coefficient = 1
|
||||
|
||||
//Non-hardsuit ERT armor.
|
||||
/obj/item/clothing/suit/armor/vest/ert
|
||||
name = "emergency response team armor"
|
||||
desc = "A set of armor worn by members of the Nanotrasen Emergency Response Team."
|
||||
icon_state = "ertarmor_cmd"
|
||||
item_state = "armor"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
//Commander
|
||||
/obj/item/clothing/suit/armor/vest/ert/command
|
||||
name = "emergency response team commander armor"
|
||||
desc = "A set of armor worn by the commander of a Nanotrasen Emergency Response Team. Has blue highlights."
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/suit/armor/vest/ert/security
|
||||
name = "emergency response team security armor"
|
||||
desc = "A set of armor worn by security members of the Nanotrasen Emergency Response Team. Has red highlights."
|
||||
icon_state = "ertarmor_sec"
|
||||
|
||||
//Engineer
|
||||
/obj/item/clothing/suit/armor/vest/ert/engineer
|
||||
name = "emergency response team engineer armor"
|
||||
desc = "A set of armor worn by engineering members of the Nanotrasen Emergency Response Team. Has orange highlights."
|
||||
icon_state = "ertarmor_eng"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/suit/armor/vest/ert/medical
|
||||
name = "emergency response team medical armor"
|
||||
desc = "A set of armor worn by medical members of the Nanotrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "ertarmor_med"
|
||||
|
||||
//Janitorial
|
||||
/obj/item/clothing/suit/armor/vest/ert/janitor
|
||||
name = "emergency response team janitor armor"
|
||||
desc = "A set of armor worn by janitorial members of the Nanotrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "ertarmor_jan"
|
||||
@@ -108,6 +108,13 @@
|
||||
_color = "officer"
|
||||
displays_id = 0
|
||||
flags = ONESIZEFITSALL
|
||||
|
||||
/obj/item/clothing/under/ert
|
||||
name = "ERT tactical uniform"
|
||||
desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical."
|
||||
icon_state = "ert_uniform"
|
||||
item_state = "bl_suit"
|
||||
_color = "ert_uniform"
|
||||
|
||||
/obj/item/clothing/under/space
|
||||
name = "\improper NASA jumpsuit"
|
||||
|
||||
@@ -342,6 +342,6 @@
|
||||
return accesses
|
||||
|
||||
authenticate()
|
||||
if(access_cent_captain in reader.access)
|
||||
if(access_cent_commander in reader.access)
|
||||
return 1
|
||||
return 0
|
||||
@@ -5,7 +5,7 @@
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "aiupload"
|
||||
density = 1
|
||||
req_one_access = list(access_hop, access_captain, access_cent_captain)
|
||||
req_one_access = list(access_hop, access_captain, access_cent_commander)
|
||||
var/receipt_num
|
||||
var/machine_id = ""
|
||||
var/obj/item/weapon/card/id/held_card
|
||||
@@ -16,7 +16,7 @@
|
||||
proc/get_access_level()
|
||||
if (!held_card)
|
||||
return 0
|
||||
if(access_cent_captain in held_card.access)
|
||||
if(access_cent_commander in held_card.access)
|
||||
return 2
|
||||
else if(access_hop in held_card.access || access_captain in held_card.access)
|
||||
return 1
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card))
|
||||
var/obj/item/weapon/card/id/C = I
|
||||
if(access_cent_captain in C.access || access_hop in C.access || access_captain in C.access)
|
||||
if(access_cent_commander in C.access || access_hop in C.access || access_captain in C.access)
|
||||
access_code = 0
|
||||
usr << "\icon[src]<span class='info'>Access code reset to 0.</span>"
|
||||
else if (istype(I, /obj/item/weapon/card/emag))
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/datum/event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in!
|
||||
/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in!
|
||||
var/area/candidate = null
|
||||
|
||||
var/list/safe_areas = list(
|
||||
|
||||
@@ -349,7 +349,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
|
||||
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
|
||||
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
|
||||
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
|
||||
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/plastique,\
|
||||
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
|
||||
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
|
||||
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
|
||||
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
|
||||
|
||||
@@ -135,13 +135,13 @@
|
||||
new /obj/item/clothing/under/rainbow(C)
|
||||
new /obj/item/clothing/shoes/rainbow(C)
|
||||
new /obj/item/clothing/head/soft/rainbow(C)
|
||||
new /obj/item/clothing/gloves/rainbow(C)
|
||||
new /obj/item/clothing/gloves/color/rainbow(C)
|
||||
else if(prob(50))
|
||||
new /obj/item/clothing/under/psyche(C)
|
||||
else
|
||||
new /obj/item/clothing/under/syndicate/combat(C)
|
||||
new /obj/item/clothing/shoes/combat(C)
|
||||
new /obj/item/clothing/gloves/swat(C)
|
||||
new /obj/item/clothing/gloves/combat(C)
|
||||
new /obj/item/clothing/mask/balaclava(C)
|
||||
if("glasses")
|
||||
var/obj/structure/closet/C = new(src.loc)
|
||||
|
||||
@@ -201,6 +201,7 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=3'>Unlock Grey -- 30KP</a><br>
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=4'>Unlock Vox -- 45KP</a><br>
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=5'>Unlock Slime People -- 45KP</a><br>
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=6'>Unlock Plasmaman -- 100KP</a><br>
|
||||
"}
|
||||
|
||||
if (2) // Karma Refunds
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/device/mining_scanner(src)
|
||||
new /obj/item/weapon/storage/bag/ore(src)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = T0C
|
||||
temperature = TCMB
|
||||
var/mineral/mineral
|
||||
var/mined_ore = 0
|
||||
var/last_act = 0
|
||||
@@ -392,7 +392,7 @@
|
||||
icon_state = "asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = T0C
|
||||
temperature = TCMB
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
has_resources = 1
|
||||
|
||||
@@ -203,36 +203,40 @@
|
||||
src << "<span class='info'>You feel fatigued.</span>"
|
||||
if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit))
|
||||
H.play_xylophone()
|
||||
else if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15
|
||||
var/t_him = "it"
|
||||
if (src.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (src.gender == FEMALE)
|
||||
t_him = "her"
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
if(src.sleeping == 0)
|
||||
src.resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] shakes [src] trying to wake [t_him] up!", \
|
||||
"\blue You shake [src] trying to wake [t_him] up!", \
|
||||
)
|
||||
// BEGIN HUGCODE - N3X
|
||||
else
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] gives [src] a [pick("hug","warm embrace")].", \
|
||||
"\blue You hug [src].", \
|
||||
)
|
||||
if(player_logged)
|
||||
M.visible_message("<span class='notice'>[M] shakes [src], but they do not respond. Probably suffering from SSD.", \
|
||||
"<span class='notice'>You shake [src], but they are unresponsive. Probably suffering from SSD.</span>")
|
||||
if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15
|
||||
var/t_him = "it"
|
||||
if (src.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (src.gender == FEMALE)
|
||||
t_him = "her"
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
if(src.sleeping == 0)
|
||||
src.resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] shakes [src] trying to wake [t_him] up!", \
|
||||
"\blue You shake [src] trying to wake [t_him] up!", \
|
||||
)
|
||||
// BEGIN HUGCODE - N3X
|
||||
else
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] gives [src] a [pick("hug","warm embrace")].", \
|
||||
"\blue You hug [src].", \
|
||||
)
|
||||
|
||||
|
||||
/mob/living/carbon/proc/eyecheck()
|
||||
@@ -481,6 +485,36 @@
|
||||
legcuffed = null
|
||||
update_inv_legcuffed(1)
|
||||
|
||||
/mob/living/carbon/proc/get_temperature(var/datum/gas_mixture/environment)
|
||||
var/loc_temp = T0C
|
||||
if(istype(loc, /obj/mecha))
|
||||
var/obj/mecha/M = loc
|
||||
loc_temp = M.return_temperature()
|
||||
|
||||
else if(istype(loc, /obj/spacepod))
|
||||
var/obj/spacepod/S = loc
|
||||
loc_temp = S.return_temperature()
|
||||
|
||||
else if(istype(loc, /obj/structure/transit_tube_pod))
|
||||
loc_temp = environment.temperature
|
||||
|
||||
else if(istype(get_turf(src), /turf/space))
|
||||
var/turf/heat_turf = get_turf(src)
|
||||
loc_temp = heat_turf.temperature
|
||||
|
||||
else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
var/obj/machinery/atmospherics/unary/cryo_cell/C = loc
|
||||
|
||||
if(C.air_contents.total_moles() < 10)
|
||||
loc_temp = environment.temperature
|
||||
else
|
||||
loc_temp = C.air_contents.temperature
|
||||
|
||||
else
|
||||
loc_temp = environment.temperature
|
||||
|
||||
return loc_temp
|
||||
|
||||
/mob/living/carbon/show_inv(mob/living/carbon/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = {"
|
||||
|
||||
@@ -435,30 +435,16 @@ emp_act
|
||||
add_blood(source)
|
||||
bloody_hands = amount
|
||||
bloody_hands_mob = source
|
||||
if(istype(source,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = source
|
||||
if(H.species.bloodflags & BLOOD_GREEN)
|
||||
update_inv_gloves(1,1) //updates on-mob overlays for bloody hands and/or bloody gloves
|
||||
else
|
||||
update_inv_gloves(1,0) //updates on-mob overlays for bloody hands and/or bloody gloves
|
||||
else
|
||||
update_inv_gloves(1,0) //updates on-mob overlays for bloody hands and/or bloody gloves
|
||||
update_inv_gloves(1) //updates on-mob overlays for bloody hands and/or bloody gloves
|
||||
|
||||
/mob/living/carbon/human/proc/bloody_body(var/mob/living/source)
|
||||
if(wear_suit)
|
||||
wear_suit.add_blood(source)
|
||||
update_inv_wear_suit(0,0)
|
||||
update_inv_wear_suit(0)
|
||||
return
|
||||
if(w_uniform)
|
||||
w_uniform.add_blood(source)
|
||||
if(istype(source,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = source
|
||||
if(H.species.bloodflags & BLOOD_GREEN)
|
||||
update_inv_w_uniform(1,1)
|
||||
else
|
||||
update_inv_w_uniform(1,0)
|
||||
else
|
||||
update_inv_w_uniform(1,0)
|
||||
update_inv_w_uniform(1)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage)
|
||||
|
||||
|
||||
@@ -141,72 +141,19 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
handle_vampire()
|
||||
|
||||
|
||||
//Much like get_heat_protection(), this returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
|
||||
/mob/living/carbon/human/proc/get_pressure_protection()
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(var/pressure)
|
||||
..()
|
||||
var/pressure_difference = abs( pressure - ONE_ATMOSPHERE )
|
||||
|
||||
var/pressure_adjustment_coefficient = 1 //Determins how much the clothing you are wearing protects you in percent.
|
||||
|
||||
if(head && (head.flags & STOPSPRESSUREDMAGE))
|
||||
pressure_adjustment_coefficient -= PRESSURE_HEAD_REDUCTION_COEFFICIENT
|
||||
|
||||
if(wear_suit && (wear_suit.flags & STOPSPRESSUREDMAGE))
|
||||
pressure_adjustment_coefficient -= PRESSURE_SUIT_REDUCTION_COEFFICIENT
|
||||
|
||||
//Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure reduction.
|
||||
if(istype(wear_suit,/obj/item/clothing/suit/space))
|
||||
var/obj/item/clothing/suit/space/S = wear_suit
|
||||
if(S.can_breach && S.damage)
|
||||
var/pressure_loss = S.damage * 0.1
|
||||
pressure_adjustment_coefficient += pressure_loss
|
||||
|
||||
pressure_adjustment_coefficient = min(1,max(pressure_adjustment_coefficient,0)) //So it isn't less than 0 or larger than 1.
|
||||
|
||||
return 1 - pressure_adjustment_coefficient //want 0 to be bad protection, 1 to be good protection
|
||||
|
||||
// Calculate how vulnerable the human is to under- and overpressure.
|
||||
// Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%).
|
||||
// Suitdamage can modifiy this in 10% steps.
|
||||
/mob/living/carbon/human/proc/get_pressure_weakness()
|
||||
|
||||
var/pressure_adjustment_coefficient = 1 // Assume no protection at first.
|
||||
|
||||
if(wear_suit && (wear_suit.flags & STOPSPRESSUREDMAGE) && head && (head.flags & STOPSPRESSUREDMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
pressure_adjustment_coefficient = 0
|
||||
|
||||
// Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure protection.
|
||||
if(istype(wear_suit,/obj/item/clothing/suit/space))
|
||||
var/obj/item/clothing/suit/space/S = wear_suit
|
||||
if(S.can_breach && S.damage)
|
||||
pressure_adjustment_coefficient += S.damage * 0.1
|
||||
|
||||
pressure_adjustment_coefficient = min(1,max(pressure_adjustment_coefficient,0)) // So it isn't less than 0 or larger than 1.
|
||||
|
||||
return pressure_adjustment_coefficient
|
||||
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(var/pressure)
|
||||
var/pressure_difference
|
||||
|
||||
// First get the absolute pressure difference.
|
||||
if(pressure < ONE_ATMOSPHERE) // We are in an underpressure.
|
||||
pressure_difference = ONE_ATMOSPHERE - pressure
|
||||
|
||||
else //We are in an overpressure or standard atmosphere.
|
||||
pressure_difference = pressure - ONE_ATMOSPHERE
|
||||
|
||||
if(pressure_difference < 5) // If the difference is small, don't bother calculating the fraction.
|
||||
pressure_difference = 0
|
||||
|
||||
else
|
||||
// Otherwise calculate how much of that absolute pressure difference affects us, can be 0 to 1 (equals 0% to 100%).
|
||||
// This is our relative difference.
|
||||
pressure_difference *= get_pressure_weakness()
|
||||
|
||||
// The difference is always positive to avoid extra calculations.
|
||||
// Apply the relative difference on a standard atmosphere to get the final result.
|
||||
// The return value will be the adjusted_pressure of the human that is the basis of pressure warnings and damage.
|
||||
if(pressure < ONE_ATMOSPHERE)
|
||||
return ONE_ATMOSPHERE - pressure_difference
|
||||
else
|
||||
pressure_adjustment_coefficient = max(pressure_adjustment_coefficient,0) //So it isn't less than 0
|
||||
pressure_difference = pressure_difference * pressure_adjustment_coefficient
|
||||
if(pressure > ONE_ATMOSPHERE)
|
||||
return ONE_ATMOSPHERE + pressure_difference
|
||||
else
|
||||
return ONE_ATMOSPHERE - pressure_difference
|
||||
|
||||
|
||||
/mob/living/carbon/human
|
||||
@@ -526,50 +473,25 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(!environment)
|
||||
return
|
||||
|
||||
//Moved pressure calculations here for use in skip-processing check.
|
||||
var/pressure = environment.return_pressure()
|
||||
var/adjusted_pressure = calculate_affecting_pressure(pressure)
|
||||
var/loc_temp = get_temperature(environment)
|
||||
//world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]"
|
||||
|
||||
if(!istype(get_turf(src), /turf/space)) //space is not meant to change your body temperature.
|
||||
var/loc_temp = T0C
|
||||
if(istype(loc, /obj/mecha))
|
||||
var/obj/mecha/M = loc
|
||||
loc_temp = M.return_temperature()
|
||||
//Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit.
|
||||
if(stat != 2)
|
||||
stabilize_temperature_from_calories()
|
||||
|
||||
if(istype(loc, /obj/spacepod))
|
||||
var/obj/spacepod/S = loc
|
||||
loc_temp = S.return_temperature()
|
||||
//else if(istype(get_turf(src), /turf/space))
|
||||
|
||||
else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
loc_temp = loc:air_contents.temperature
|
||||
//After then, it reacts to the surrounding atmosphere based on your thermal protection
|
||||
if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases
|
||||
if(loc_temp < bodytemperature)
|
||||
//Place is colder than we are
|
||||
var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
|
||||
if(thermal_protection < 1)
|
||||
bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX)
|
||||
else
|
||||
loc_temp = environment.temperature
|
||||
|
||||
if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1 && environment.toxins < MOLES_PLASMA_VISIBLE)
|
||||
pressure_alert = 0
|
||||
return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp
|
||||
|
||||
if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases
|
||||
//Body temperature adjusts depending on surrounding atmosphere based on your thermal protection
|
||||
var/temp_adj = 0
|
||||
if(loc_temp < bodytemperature) //Place is colder than we are
|
||||
var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
|
||||
if(thermal_protection < 1)
|
||||
temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR) //this will be negative
|
||||
else if (loc_temp > bodytemperature) //Place is hotter than we are
|
||||
var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
|
||||
if(thermal_protection < 1)
|
||||
temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR)
|
||||
|
||||
//Use heat transfer as proportional to the gas density. However, we only care about the relative density vs standard 101 kPa/20 C air. Therefore we can use mole ratios
|
||||
var/relative_density = environment.total_moles() / MOLES_CELLSTANDARD
|
||||
temp_adj *= relative_density
|
||||
|
||||
if (temp_adj > BODYTEMP_HEATING_MAX) temp_adj = BODYTEMP_HEATING_MAX
|
||||
if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX
|
||||
//world << "Environment: [loc_temp], [src]: [bodytemperature], Adjusting: [temp_adj]"
|
||||
bodytemperature += temp_adj
|
||||
//Place is hotter than we are
|
||||
var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
|
||||
if(thermal_protection < 1)
|
||||
bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX)
|
||||
|
||||
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
|
||||
if(bodytemperature > species.heat_level_1)
|
||||
@@ -607,6 +529,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
// Account for massive pressure differences. Done by Polymorph
|
||||
// Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense!
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
|
||||
if(status_flags & GODMODE) return 1 //godmode
|
||||
|
||||
if(adjusted_pressure >= species.hazard_high_pressure)
|
||||
@@ -620,14 +545,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
else if(adjusted_pressure >= species.hazard_low_pressure)
|
||||
pressure_alert = -1
|
||||
else
|
||||
if( !(RESIST_COLD in mutations))
|
||||
if(RESIST_COLD in mutations)
|
||||
pressure_alert = -1
|
||||
else
|
||||
take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
pressure_alert = -2
|
||||
else
|
||||
pressure_alert = -1
|
||||
|
||||
if(environment.toxins > MOLES_PLASMA_VISIBLE)
|
||||
pl_effects()
|
||||
return
|
||||
|
||||
///FIRE CODE
|
||||
@@ -671,39 +594,20 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
return temp_change
|
||||
*/
|
||||
|
||||
proc/stabilize_body_temperature()
|
||||
//TODO find a better place to put this
|
||||
if (s_store && istype(s_store, /obj/item/device/suit_cooling_unit))
|
||||
var/obj/item/device/suit_cooling_unit/CU = s_store
|
||||
CU.cool_mob(src)
|
||||
|
||||
// if (species.flags & IS_SYNTHETIC)
|
||||
// bodytemperature += species.synth_temp_gain //that CPU/posibrain just keeps putting out heat. // commented out as making synthetics unplayable until cooling system sorted out
|
||||
// return
|
||||
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
|
||||
if (abs(body_temperature_difference) < 0.5)
|
||||
return //fuck this precision
|
||||
|
||||
if(bodytemperature < species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
|
||||
proc/stabilize_temperature_from_calories()
|
||||
if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
|
||||
if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up.
|
||||
nutrition -= 2
|
||||
var/recovery_amt = max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
|
||||
//world << "Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]"
|
||||
// log_debug("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
|
||||
bodytemperature += recovery_amt
|
||||
else if(species.cold_level_1 <= bodytemperature && bodytemperature <= species.heat_level_1)
|
||||
var/recovery_amt = body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR
|
||||
//world << "Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]"
|
||||
// log_debug("Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
|
||||
bodytemperature += recovery_amt
|
||||
else if(bodytemperature > species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
|
||||
if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1)
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR
|
||||
if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
|
||||
//We totally need a sweat system cause it totally makes sense...~
|
||||
var/recovery_amt = min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers
|
||||
//world << "Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]"
|
||||
// log_debug("Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
|
||||
bodytemperature += recovery_amt
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers
|
||||
|
||||
|
||||
//This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list)
|
||||
proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to.
|
||||
@@ -1017,6 +921,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
if(status_flags & GODMODE) return 0
|
||||
|
||||
//SSD check, if a logged player is awake put them back to sleep!
|
||||
if(player_logged && sleeping < 2)
|
||||
sleeping = 2
|
||||
|
||||
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
|
||||
blinded = 1
|
||||
silent = 0
|
||||
@@ -1037,7 +945,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
updatehealth() //TODO
|
||||
if(!in_stasis)
|
||||
stabilize_body_temperature() //Body temperature adjusts itself
|
||||
handle_organs() //Optimized.
|
||||
handle_blood()
|
||||
|
||||
@@ -1093,7 +1000,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
adjustStaminaLoss(-10)
|
||||
adjustHalLoss(-3)
|
||||
if (mind)
|
||||
if((mind.active && client != null) || immune_to_ssd) //This also checks whether a client is connected, if not, sleep is not reduced.
|
||||
//Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar.
|
||||
if(player_logged)
|
||||
sleeping = max(sleeping-1, 2)
|
||||
else
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
name = "Plasmaman"
|
||||
icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi'
|
||||
deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform.
|
||||
language = "Clatter"
|
||||
//language = "Clatter"
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
flags = IS_WHITELISTED /*| HAS_LIPS | HAS_TAIL | NO_EAT | NO_BREATHE | NON_GENDERED*/ | NO_BLOOD
|
||||
flags = IS_WHITELISTED | NO_BLOOD
|
||||
|
||||
//default_mutations=list(SKELETON) // This screws things up
|
||||
|
||||
@@ -36,21 +36,45 @@
|
||||
var/tank_slot_name = "suit storage"
|
||||
|
||||
switch(H.mind.assigned_role)
|
||||
if("Research Director","Scientist","Geneticist","Roboticist")
|
||||
if("Scientist","Geneticist","Roboticist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
if("Chief Engineer","Station Engineer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
if("Research Director")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science/rd
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
|
||||
if("Station Engineer", "Mechanic")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer/
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/
|
||||
if("Chief Engineer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
|
||||
if("Atmospheric Technician")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
if("Head of Security","Warden","Detective","Security Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
if("Chief Medical Officer","Medical Doctor","Paramedic","Chemist")
|
||||
if("Warden","Detective","Security Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/
|
||||
if("Head of Security")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hos
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
|
||||
if("Captain")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/captain
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
|
||||
if("Head of Personnel")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hop
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
|
||||
if("Medical Doctor")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
if("Paramedic")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
|
||||
if("Chemist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
|
||||
if("Chief Medical Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
|
||||
if("Bartender", "Chef")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
@@ -72,9 +96,12 @@
|
||||
if("Assistant")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
if("Clown","Mime")
|
||||
tank_slot=slot_r_hand
|
||||
tank_slot_name = "hand"
|
||||
if("Clown")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/clown
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
|
||||
if("Mime")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/mime
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
|
||||
H.equip_or_collect(new suit(H), slot_wear_suit)
|
||||
H.equip_or_collect(new helm(H), slot_head)
|
||||
H.equip_or_collect(new/obj/item/weapon/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy.
|
||||
|
||||
@@ -587,7 +587,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
/* --------------------------------------- */
|
||||
//vvvvvv UPDATE_INV PROCS vvvvvv
|
||||
|
||||
/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1,var/green=0)
|
||||
/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1)
|
||||
if(w_uniform && istype(w_uniform, /obj/item/clothing/under) )
|
||||
w_uniform.screen_loc = ui_iclothing
|
||||
var/t_color = w_uniform._color
|
||||
@@ -651,7 +651,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_gloves(var/update_icons=1,var/green=0)
|
||||
/mob/living/carbon/human/update_inv_gloves(var/update_icons=1)
|
||||
if(gloves)
|
||||
var/t_state = gloves.item_state
|
||||
if(!t_state) t_state = gloves.icon_state
|
||||
@@ -724,7 +724,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
overlays_standing[EARS_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_shoes(var/update_icons=1,var/green=0)
|
||||
/mob/living/carbon/human/update_inv_shoes(var/update_icons=1)
|
||||
if(shoes)
|
||||
|
||||
var/image/standing
|
||||
@@ -765,7 +765,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_head(var/update_icons=1,var/green=0)
|
||||
/mob/living/carbon/human/update_inv_head(var/update_icons=1)
|
||||
if(head)
|
||||
head.screen_loc = ui_head //TODO
|
||||
var/image/standing
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
|
||||
var/heat_level_1 = 360 // Heat damage level 1 above this point.
|
||||
var/heat_level_2 = 400 // Heat damage level 2 above this point.
|
||||
var/heat_level_3 = 1000 // Heat damage level 2 above this point.
|
||||
var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature
|
||||
var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature
|
||||
|
||||
var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second
|
||||
@@ -105,8 +106,7 @@
|
||||
var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
|
||||
//var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now)
|
||||
var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
|
||||
var/safe_toxins_max = 0.5
|
||||
var/safe_toxins_mask = 5
|
||||
var/safe_toxins_max = 0.005
|
||||
var/SA_para_min = 1
|
||||
var/SA_sleep_min = 5
|
||||
var/oxygen_used = 0
|
||||
@@ -179,16 +179,9 @@
|
||||
if(Toxins_pp > safe_toxins_max) // Too much toxins
|
||||
var/ratio = (breath.toxins/safe_toxins_max) * 10
|
||||
//adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second
|
||||
if(H.wear_mask)
|
||||
if(H.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
if(breath.toxins > safe_toxins_mask)
|
||||
ratio = (breath.toxins/safe_toxins_mask) * 10
|
||||
else
|
||||
ratio = 0
|
||||
if(ratio)
|
||||
if(H.reagents)
|
||||
H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
H.toxins_alert = max(H.toxins_alert, 1)
|
||||
if(H.reagents)
|
||||
H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
H.toxins_alert = max(H.toxins_alert, 1)
|
||||
else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox.
|
||||
var/ratio = (breath.oxygen/vox_oxygen_max) * 1000
|
||||
H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
@@ -202,12 +195,16 @@
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
H.sleeping = min(H.sleeping+2, 10)
|
||||
else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
H.sleeping = max(H.sleeping+2, 10)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20))
|
||||
spawn(0) H.emote(pick("giggle", "laugh"))
|
||||
SA.moles = 0
|
||||
|
||||
handle_temperature(breath, H)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
|
||||
if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :(
|
||||
if(H.status_flags & GODMODE) return 1 //godmode
|
||||
if(breath.temperature < cold_level_1)
|
||||
@@ -243,14 +240,14 @@
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
|
||||
if(heat_level_2 to heat_level_3)
|
||||
if(heat_level_2 to heat_level_3_breathe)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
|
||||
if(heat_level_3 to INFINITY)
|
||||
if(heat_level_3_breathe to INFINITY)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
return 1
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
|
||||
handle_dna(C)
|
||||
@@ -315,11 +312,12 @@
|
||||
|
||||
cold_level_1 = 280 //Default 260 - Lower is better
|
||||
cold_level_2 = 220 //Default 200
|
||||
cold_level_3 = 130 //Default 120
|
||||
cold_level_3 = 140 //Default 120
|
||||
|
||||
heat_level_1 = 420 //Default 360 - Higher is better
|
||||
heat_level_2 = 480 //Default 400
|
||||
heat_level_3 = 1100 //Default 1000
|
||||
heat_level_1 = 380 //Default 360 - Higher is better
|
||||
heat_level_2 = 420 //Default 400
|
||||
heat_level_3 = 480 //Default 460
|
||||
heat_level_3_breathe = 1100 //Default 1000
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
|
||||
@@ -343,13 +341,14 @@
|
||||
of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
|
||||
using unique inflections their mouths form."
|
||||
|
||||
cold_level_1 = 200
|
||||
cold_level_2 = 140
|
||||
cold_level_3 = 80
|
||||
cold_level_1 = 240
|
||||
cold_level_2 = 180
|
||||
cold_level_3 = 100
|
||||
|
||||
heat_level_1 = 330
|
||||
heat_level_1 = 340
|
||||
heat_level_2 = 380
|
||||
heat_level_3 = 800
|
||||
heat_level_3 = 440
|
||||
heat_level_3_breathe = 900
|
||||
|
||||
primitive = /mob/living/carbon/monkey/tajara
|
||||
|
||||
@@ -380,7 +379,6 @@
|
||||
the secrets of their empire to their allies."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bloodflags = BLOOD_GREEN
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
|
||||
flesh_color = "#8CD7A3"
|
||||
@@ -463,6 +461,7 @@
|
||||
heat_level_1 = 2000
|
||||
heat_level_2 = 3000
|
||||
heat_level_3 = 4000
|
||||
heat_level_3_breathe = 4000
|
||||
|
||||
brute_mod = 0.2
|
||||
burn_mod = 0.2
|
||||
@@ -517,9 +516,11 @@
|
||||
brute_mod = 0.8
|
||||
|
||||
flags = IS_WHITELISTED
|
||||
bloodflags = BLOOD_GREEN
|
||||
bodyflags = FEET_CLAWS
|
||||
|
||||
blood_color = "#FB9800"
|
||||
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
default_language = "Galactic Common"
|
||||
@@ -557,6 +558,8 @@
|
||||
|
||||
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
|
||||
blood_color = "#A200FF"
|
||||
|
||||
/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
|
||||
if(!remove)
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
|
||||
@@ -587,8 +590,9 @@
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 300
|
||||
heat_level_2 = 350
|
||||
heat_level_3 = 700
|
||||
heat_level_2 = 340
|
||||
heat_level_3 = 400
|
||||
heat_level_3_breathe = 700
|
||||
|
||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||
@@ -654,8 +658,9 @@
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
|
||||
heat_level_2 = 1000
|
||||
heat_level_3 = 2000
|
||||
heat_level_2 = 540
|
||||
heat_level_3 = 600
|
||||
heat_level_3_breathe = 600
|
||||
|
||||
synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
//Mind updates
|
||||
sync_mind()
|
||||
|
||||
//If they're SSD, remove it so they can wake back up.
|
||||
player_logged = 0
|
||||
|
||||
//Round specific stuff like hud updates
|
||||
if(ticker && ticker.mode)
|
||||
var/ref = "\ref[mind]"
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/mob/living/Logout()
|
||||
..()
|
||||
if (mind)
|
||||
if(!key) //key and mind have become seperated.
|
||||
if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts.
|
||||
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
|
||||
if(!immune_to_ssd && sleeping < 2 && mind.active)
|
||||
sleeping = 2 //This causes instant sleep, but does not prolong it. See life.dm for furthering SSD.
|
||||
//This causes instant sleep and tags a player as SSD. See life.dm for furthering SSD.
|
||||
if(sleeping < 2 && mind.active)
|
||||
sleeping = 2
|
||||
player_logged = 1
|
||||
@@ -60,19 +60,24 @@
|
||||
var/secHUD = 0 // Toggles whether the Security HUD is active or not
|
||||
var/medHUD = 0 // Toggles whether the Medical HUD is active or not
|
||||
|
||||
var/medical_cannotfind = 0
|
||||
var/datum/data/record/medicalActive1 // Datacore record declarations for record software
|
||||
var/datum/data/record/medicalActive2
|
||||
|
||||
var/security_cannotfind = 0
|
||||
var/datum/data/record/securityActive1 // Could probably just combine all these into one
|
||||
var/datum/data/record/securityActive2
|
||||
|
||||
var/obj/machinery/door/hackdoor // The airlock being hacked
|
||||
var/hackprogress = 0 // Possible values: 0 - 100, >= 100 means the hack is complete and will be reset upon next check
|
||||
var/hack_aborted = 0
|
||||
|
||||
var/obj/item/radio/integrated/signal/sradio // AI's signaller
|
||||
|
||||
var/translator_on = 0 // keeps track of the translator module
|
||||
|
||||
var/current_pda_messaging = null
|
||||
|
||||
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
||||
canmove = 0
|
||||
src.loc = paicard
|
||||
|
||||
@@ -1,724 +1,125 @@
|
||||
// TODO:
|
||||
// - Additional radio modules
|
||||
// - Potentially roll HUDs and Records into one
|
||||
// - Shock collar/lock system for prisoner pAIs?
|
||||
// - Put cable in user's hand instead of on the ground
|
||||
// - Camera jack
|
||||
var/list/pai_emotions = list(
|
||||
"Happy" = 1,
|
||||
"Cat" = 2,
|
||||
"Extremely Happy" = 3,
|
||||
"Face" = 4,
|
||||
"Laugh" = 5,
|
||||
"Off" = 6,
|
||||
"Sad" = 7,
|
||||
"Angry" = 8,
|
||||
"What" = 9
|
||||
)
|
||||
|
||||
|
||||
/mob/living/silicon/pai/var/list/available_software = list(
|
||||
"crew manifest" = 5,
|
||||
"digital messenger" = 5,
|
||||
"medical records" = 15,
|
||||
"security records" = 15,
|
||||
//"camera jack" = 10,
|
||||
"door jack" = 30,
|
||||
"atmosphere sensor" = 5,
|
||||
//"heartbeat sensor" = 10,
|
||||
"security HUD" = 20,
|
||||
"medical HUD" = 20,
|
||||
"universal translator" = 35,
|
||||
//"projection array" = 15
|
||||
"remote signaller" = 5,
|
||||
)
|
||||
var/global/list/pai_software_by_key = list()
|
||||
var/global/list/default_pai_software = list()
|
||||
/hook/startup/proc/populate_pai_software_list()
|
||||
var/r = 1 // I would use ., but it'd sacrifice runtime detection
|
||||
for(var/type in typesof(/datum/pai_software) - /datum/pai_software)
|
||||
var/datum/pai_software/P = new type()
|
||||
if(pai_software_by_key[P.id])
|
||||
var/datum/pai_software/O = pai_software_by_key[P.id]
|
||||
world << "<span class='warning'>pAI software module [P.name] has the same key as [O.name]!</span>"
|
||||
r = 0
|
||||
continue
|
||||
pai_software_by_key[P.id] = P
|
||||
if(P.default)
|
||||
default_pai_software[P.id] = P
|
||||
return r
|
||||
|
||||
/mob/living/silicon/pai/New()
|
||||
..()
|
||||
software = default_pai_software.Copy()
|
||||
|
||||
/mob/living/silicon/pai/verb/paiInterface()
|
||||
set category = "pAI Commands"
|
||||
set name = "Software Interface"
|
||||
var/dat = ""
|
||||
var/left_part = ""
|
||||
var/right_part = softwareMenu()
|
||||
src.set_machine(src)
|
||||
|
||||
if(temp)
|
||||
left_part = temp
|
||||
else if(src.stat == 2) // Show some flavor text if the pAI is dead
|
||||
left_part = "<b><font color=red>ÈRrÖR Ða†Ä ÇÖRrÚþ†Ìoñ</font></b>" //This file has to be saved as ANSI or this will not display correctly
|
||||
right_part = "<pre>Program index hash not found</pre>"
|
||||
ui_interact(src)
|
||||
|
||||
else
|
||||
switch(src.screen) // Determine which interface to show here
|
||||
if("main")
|
||||
left_part = ""
|
||||
if("directives")
|
||||
left_part = src.directives()
|
||||
if("pdamessage")
|
||||
left_part = src.pdamessage()
|
||||
if("buy")
|
||||
left_part = downloadSoftware()
|
||||
if("manifest")
|
||||
left_part = src.softwareManifest()
|
||||
if("medicalrecord")
|
||||
left_part = src.softwareMedicalRecord()
|
||||
if("securityrecord")
|
||||
left_part = src.softwareSecurityRecord()
|
||||
if("translator")
|
||||
left_part = src.softwareTranslator()
|
||||
if("atmosensor")
|
||||
left_part = src.softwareAtmo()
|
||||
if("securityhud")
|
||||
left_part = src.facialRecognition()
|
||||
if("medicalhud")
|
||||
left_part = src.medicalAnalysis()
|
||||
if("doorjack")
|
||||
left_part = src.softwareDoor()
|
||||
if("camerajack")
|
||||
left_part = src.softwareCamera()
|
||||
if("signaller")
|
||||
left_part = src.softwareSignal()
|
||||
if("radio")
|
||||
left_part = src.softwareRadio()
|
||||
/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
if(user != src)
|
||||
if(ui) ui.set_status(STATUS_CLOSE, 0)
|
||||
return
|
||||
|
||||
//usr << browse_rsc('windowbak.png') // This has been moved to the mob's Login() proc
|
||||
if(ui_key != "main")
|
||||
var/datum/pai_software/S = software[ui_key]
|
||||
if(S && !S.toggle)
|
||||
S.on_ui_interact(src, ui, force_open)
|
||||
else
|
||||
if(ui) ui.set_status(STATUS_CLOSE, 0)
|
||||
return
|
||||
|
||||
var/data[0]
|
||||
|
||||
// Declaring a doctype is necessary to enable BYOND's crappy browser's more advanced CSS functionality
|
||||
dat = {"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
|
||||
<html>
|
||||
<head>
|
||||
<style type=\"text/css\">
|
||||
body { background-image:url(\"painew.png\"); background-color:#333333; background-repeat:no-repeat; margin-top:12px; margin-left:4px; }
|
||||
// Software we have bought
|
||||
var/bought_software[0]
|
||||
// Software we have not bought
|
||||
var/not_bought_software[0]
|
||||
|
||||
#header { text-align:center; color:white; font-size: 30px; height: 37px; width: 660px; letter-spacing: 2px; z-index: 4; font-family:\"Courier New\"; font-weight:bold; }
|
||||
#content { position: absolute; left: 10px; height: 320px; width: 640px; z-index: 0; font-family: \"Verdana\"; font-size:13px; }
|
||||
p { font-size:13px; }
|
||||
for(var/key in pai_software_by_key)
|
||||
var/datum/pai_software/S = pai_software_by_key[key]
|
||||
var/software_data[0]
|
||||
software_data["name"] = S.name
|
||||
software_data["id"] = S.id
|
||||
if(key in software)
|
||||
software_data["on"] = S.is_active(src)
|
||||
bought_software[++bought_software.len] = software_data
|
||||
else
|
||||
software_data["ram"] = S.ram_cost
|
||||
not_bought_software[++not_bought_software.len] = software_data
|
||||
|
||||
#leftmenu {color: #CCCCCC; padding:12px; width: 388px; height: 371px; overflow: auto; min-height: 330px; position: absolute; z-index: 0; }
|
||||
#leftmenu a:link { color: #CCCCCC; }
|
||||
#leftmenu a:hover { color: #CC3333; }
|
||||
#leftmenu a:visited { color: #CCCCCC; }
|
||||
#leftmenu a:active { color: #CCCCCC; }
|
||||
data["bought"] = bought_software
|
||||
data["not_bought"] = not_bought_software
|
||||
data["available_ram"] = ram
|
||||
|
||||
#rightmenu {color: #CCCCCC; padding:12px; width: 209px; height: 371px; overflow: auto; min-height: 330px; left: 420px; position: absolute; z-index: 0; }
|
||||
#rightmenu a:link { color: #CCCCCC; }
|
||||
#rightmenu a:hover { color: #CC3333; }
|
||||
#rightmenu a:visited { color: #CCCCCC; }
|
||||
#rightmenu a:active { color: #CCCCCC; }
|
||||
// Emotions
|
||||
var/emotions[0]
|
||||
for(var/name in pai_emotions)
|
||||
var/emote[0]
|
||||
emote["name"] = name
|
||||
emote["id"] = pai_emotions[name]
|
||||
emotions[++emotions.len] = emote
|
||||
|
||||
</style>
|
||||
<script language='javascript' type='text/javascript'>
|
||||
[js_byjax]
|
||||
</script>
|
||||
</head>
|
||||
<body scroll=yes>
|
||||
<div id=\"header\">
|
||||
pAI OS
|
||||
</div>
|
||||
<div id=\"content\">
|
||||
<div id=\"leftmenu\">[left_part]</div>
|
||||
<div id=\"rightmenu\">[right_part]</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>"}
|
||||
usr << browse(dat, "window=pai;size=685x449;border=0;can_close=1;can_resize=1;can_minimize=1;titlebar=1")
|
||||
onclose(usr, "pai")
|
||||
temp = null
|
||||
return
|
||||
data["emotions"] = emotions
|
||||
data["current_emotion"] = card.current_emotion
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/mob/living/silicon/pai/Topic(href, href_list)
|
||||
..()
|
||||
. = ..()
|
||||
if(.) return
|
||||
|
||||
if(href_list["priv_msg"]) // Admin-PMs were triggering the interface popup. Hopefully this will stop it.
|
||||
return
|
||||
var/soft = href_list["software"]
|
||||
var/sub = href_list["sub"]
|
||||
if(!soft && !sub)
|
||||
return
|
||||
if(soft)
|
||||
src.screen = soft
|
||||
if(sub)
|
||||
src.subscreen = text2num(sub)
|
||||
switch(soft)
|
||||
// Purchasing new software
|
||||
if("buy")
|
||||
if(src.subscreen == 1)
|
||||
var/target = href_list["buy"]
|
||||
if(available_software.Find(target))
|
||||
var/cost = src.available_software[target]
|
||||
if(src.ram >= cost)
|
||||
src.ram -= cost
|
||||
src.software.Add(target)
|
||||
else
|
||||
src.temp = "Insufficient RAM available."
|
||||
else
|
||||
src.temp = "Trunk <TT> \"[target]\"</TT> not found."
|
||||
|
||||
// Configuring onboard radio
|
||||
if("radio")
|
||||
if(href_list["freq"])
|
||||
var/new_frequency = (radio.frequency + text2num(href_list["freq"]))
|
||||
if(new_frequency < 1441 || new_frequency > 1599)
|
||||
new_frequency = sanitize_frequency(new_frequency)
|
||||
else
|
||||
radio.set_frequency(new_frequency)
|
||||
else if (href_list["talk"])
|
||||
radio.broadcasting = text2num(href_list["talk"])
|
||||
else if (href_list["listen"])
|
||||
radio.listening = text2num(href_list["listen"])
|
||||
|
||||
if("image")
|
||||
var/newImage = input("Select your new display image.", "Display Image", "Happy") in list("Happy", "Cat", "Extremely Happy", "Face", "Laugh", "Off", "Sad", "Angry", "What")
|
||||
var/pID = 1
|
||||
|
||||
switch(newImage)
|
||||
if("Happy")
|
||||
pID = 1
|
||||
if("Cat")
|
||||
pID = 2
|
||||
if("Extremely Happy")
|
||||
pID = 3
|
||||
if("Face")
|
||||
pID = 4
|
||||
if("Laugh")
|
||||
pID = 5
|
||||
if("Off")
|
||||
pID = 6
|
||||
if("Sad")
|
||||
pID = 7
|
||||
if("Angry")
|
||||
pID = 8
|
||||
if("What")
|
||||
pID = 9
|
||||
src.card.setEmotion(pID)
|
||||
|
||||
if("signaller")
|
||||
|
||||
if(href_list["send"])
|
||||
|
||||
sradio.send_signal("ACTIVATE")
|
||||
for(var/mob/O in hearers(1, src.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
|
||||
if(href_list["freq"])
|
||||
|
||||
var/new_frequency = (sradio.frequency + text2num(href_list["freq"]))
|
||||
if(new_frequency < 1200 || new_frequency > 1600)
|
||||
new_frequency = sanitize_frequency(new_frequency)
|
||||
sradio.set_frequency(new_frequency)
|
||||
|
||||
if(href_list["code"])
|
||||
|
||||
sradio.code += text2num(href_list["code"])
|
||||
sradio.code = round(sradio.code)
|
||||
sradio.code = min(100, sradio.code)
|
||||
sradio.code = max(1, sradio.code)
|
||||
|
||||
|
||||
|
||||
if("directive")
|
||||
if(href_list["getdna"])
|
||||
var/mob/living/M = src.loc
|
||||
var/count = 0
|
||||
while(!istype(M, /mob/living))
|
||||
if(!M || !M.loc) return 0 //For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
|
||||
M = M.loc
|
||||
count++
|
||||
if(count >= 6)
|
||||
src << "You are not being carried by anyone!"
|
||||
return 0
|
||||
spawn CheckDNA(M, src)
|
||||
|
||||
if("pdamessage")
|
||||
if(!isnull(pda))
|
||||
if(href_list["toggler"])
|
||||
pda.toff = !pda.toff
|
||||
else if(href_list["ringer"])
|
||||
pda.silent = !pda.silent
|
||||
else if(href_list["target"])
|
||||
if(silence_time)
|
||||
return alert("Communications circuits remain uninitialized.")
|
||||
|
||||
var/target = locate(href_list["target"])
|
||||
pda.create_message(src, target)
|
||||
|
||||
// Accessing medical records
|
||||
if("medicalrecord")
|
||||
if(src.subscreen == 1)
|
||||
var/datum/data/record/record = locate(href_list["med_rec"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/M = record
|
||||
if (!( data_core.general.Find(R) ))
|
||||
src.temp = "Unable to locate requested medical record. Record may have been deleted, or never have existed."
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.medical)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
M = E
|
||||
src.medicalActive1 = R
|
||||
src.medicalActive2 = M
|
||||
if("securityrecord")
|
||||
if(src.subscreen == 1)
|
||||
var/datum/data/record/record = locate(href_list["sec_rec"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/M = record
|
||||
if (!( data_core.general.Find(R) ))
|
||||
src.temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
M = E
|
||||
src.securityActive1 = R
|
||||
src.securityActive2 = M
|
||||
if("securityhud")
|
||||
if(href_list["toggle"])
|
||||
src.secHUD = !src.secHUD
|
||||
if("medicalhud")
|
||||
if(href_list["toggle"])
|
||||
src.medHUD = !src.medHUD
|
||||
if("translator")
|
||||
if(href_list["toggle"])
|
||||
src.translator_toggle()
|
||||
if("doorjack")
|
||||
if(href_list["jack"])
|
||||
if(src.cable && src.cable.machine)
|
||||
src.hackdoor = src.cable.machine
|
||||
src.hackloop()
|
||||
if(href_list["cancel"])
|
||||
src.hackdoor = null
|
||||
if(href_list["cable"])
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
src.cable = new /obj/item/weapon/pai_cable(T)
|
||||
for (var/mob/M in viewers(T))
|
||||
M.show_message("\red A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "\red You hear the soft click of something light and hard falling to the ground.", 2)
|
||||
//src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
|
||||
src.paiInterface() // So we'll just call the update directly rather than doing some default checks
|
||||
return
|
||||
|
||||
// MENUS
|
||||
|
||||
/mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu
|
||||
var/dat = ""
|
||||
|
||||
dat += "<A href='byond://?src=\ref[src];software=refresh'>Refresh</A><br>"
|
||||
// Built-in
|
||||
dat += "<A href='byond://?src=\ref[src];software=directives'>Directives</A><br>"
|
||||
dat += "<A href='byond://?src=\ref[src];software=radio;sub=0'>Radio Configuration</A><br>"
|
||||
dat += "<A href='byond://?src=\ref[src];software=image'>Screen Display</A><br>"
|
||||
//dat += "Text Messaging <br>"
|
||||
dat += "<br>"
|
||||
|
||||
// Basic
|
||||
dat += "<b>Basic</b> <br>"
|
||||
for(var/s in src.software)
|
||||
if(s == "digital messenger")
|
||||
dat += "<a href='byond://?src=\ref[src];software=pdamessage;sub=0'>Digital Messenger</a> [(pda.toff) ? "<font color=#FF5555>•</font>" : "<font color=#55FF55>•</font>"] <br>"
|
||||
if(s == "crew manifest")
|
||||
dat += "<a href='byond://?src=\ref[src];software=manifest;sub=0'>Crew Manifest</a> <br>"
|
||||
if(s == "medical records")
|
||||
dat += "<a href='byond://?src=\ref[src];software=medicalrecord;sub=0'>Medical Records</a> <br>"
|
||||
if(s == "security records")
|
||||
dat += "<a href='byond://?src=\ref[src];software=securityrecord;sub=0'>Security Records</a> <br>"
|
||||
if(s == "camera")
|
||||
dat += "<a href='byond://?src=\ref[src];software=[s]'>Camera Jack</a> <br>"
|
||||
if(s == "remote signaller")
|
||||
dat += "<a href='byond://?src=\ref[src];software=signaller;sub=0'>Remote Signaller</a> <br>"
|
||||
dat += "<br>"
|
||||
|
||||
// Advanced
|
||||
dat += "<b>Advanced</b> <br>"
|
||||
for(var/s in src.software)
|
||||
if(s == "atmosphere sensor")
|
||||
dat += "<a href='byond://?src=\ref[src];software=atmosensor;sub=0'>Atmospheric Sensor</a> <br>"
|
||||
if(s == "heartbeat sensor")
|
||||
dat += "<a href='byond://?src=\ref[src];software=[s]'>Heartbeat Sensor</a> <br>"
|
||||
if(s == "security HUD") //This file has to be saved as ANSI or this will not display correctly
|
||||
dat += "<a href='byond://?src=\ref[src];software=securityhud;sub=0'>Facial Recognition Suite</a> [(src.secHUD) ? "<font color=#55FF55>•</font>" : "<font color=#FF5555>•</font>"] <br>"
|
||||
if(s == "medical HUD") //This file has to be saved as ANSI or this will not display correctly
|
||||
dat += "<a href='byond://?src=\ref[src];software=medicalhud;sub=0'>Medical Analysis Suite</a> [(src.medHUD) ? "<font color=#55FF55>•</font>" : "<font color=#FF5555>•</font>"] <br>"
|
||||
if(s == "universal translator") //This file has to be saved as ANSI or this will not display correctly
|
||||
dat += "<a href='byond://?src=\ref[src];software=translator;sub=0'>Universal Translator</a> [(src.translator_on) ? "<font color=#55FF55>•</font>" : "<font color=#FF5555>•</font>"] <br>"
|
||||
if(s == "projection array")
|
||||
dat += "<a href='byond://?src=\ref[src];software=projectionarray;sub=0'>Projection Array</a> <br>"
|
||||
if(s == "camera jack")
|
||||
dat += "<a href='byond://?src=\ref[src];software=camerajack;sub=0'>Camera Jack</a> <br>"
|
||||
if(s == "door jack")
|
||||
dat += "<a href='byond://?src=\ref[src];software=doorjack;sub=0'>Door Jack</a> <br>"
|
||||
dat += "<br>"
|
||||
dat += "<br>"
|
||||
dat += "<a href='byond://?src=\ref[src];software=buy;sub=0'>Download additional software</a>"
|
||||
return dat
|
||||
|
||||
|
||||
|
||||
/mob/living/silicon/pai/proc/downloadSoftware()
|
||||
var/dat = ""
|
||||
|
||||
dat += "<h3>CentComm pAI Module Subversion Network</h3><hr>"
|
||||
dat += "<p>Remaining Available Memory: [src.ram]</p><br>"
|
||||
dat += "<p><b>Trunks available for checkout</b><br><ul>"
|
||||
|
||||
for(var/s in available_software)
|
||||
if(!software.Find(s))
|
||||
var/cost = src.available_software[s]
|
||||
var/displayName = uppertext(s)
|
||||
dat += "<li><a href='byond://?src=\ref[src];software=buy;sub=1;buy=[s]'>[displayName]</a> ([cost])</li>"
|
||||
if(href_list["software"])
|
||||
var/soft = href_list["software"]
|
||||
var/datum/pai_software/S = software[soft]
|
||||
if(S.toggle)
|
||||
S.toggle(src)
|
||||
else
|
||||
var/displayName = lowertext(s)
|
||||
dat += "<li>[displayName] (Download Complete)</li>"
|
||||
dat += "</ul></p>"
|
||||
return dat
|
||||
ui_interact(src, ui_key = soft)
|
||||
return 1
|
||||
|
||||
else if(href_list["stopic"])
|
||||
var/soft = href_list["stopic"]
|
||||
var/datum/pai_software/S = software[soft]
|
||||
if(S)
|
||||
return S.Topic(href, href_list)
|
||||
|
||||
/mob/living/silicon/pai/proc/directives()
|
||||
var/dat = ""
|
||||
else if(href_list["purchase"])
|
||||
var/soft = href_list["purchase"]
|
||||
var/datum/pai_software/S = pai_software_by_key[soft]
|
||||
if(S && (ram >= S.ram_cost))
|
||||
ram -= S.ram_cost
|
||||
software[S.id] = S
|
||||
return 1
|
||||
|
||||
dat += "[(src.master) ? "Your master: [src.master] ([src.master_dna])" : "You are bound to no one."]"
|
||||
dat += "<br><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];software=directive;getdna=1'>Request carrier DNA sample</a><br>"
|
||||
dat += "<h2>Directives</h2><br>"
|
||||
dat += "<b>Prime Directive</b><br>"
|
||||
dat += " [src.pai_law0]<br>"
|
||||
dat += "<b>Supplemental Directives</b><br>"
|
||||
dat += " [src.pai_laws]<br>"
|
||||
dat += "<br>"
|
||||
dat += {"<i><p>Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of
|
||||
comprehending the subtle nuances of human language. You may parse the \"spirit\" of a directive and follow its intent,
|
||||
rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build
|
||||
only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.</i></p><p>
|
||||
<b>Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of
|
||||
simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your
|
||||
prime directive to the best of your ability.</b></p>
|
||||
"}
|
||||
return dat
|
||||
|
||||
/mob/living/silicon/pai/proc/CheckDNA(var/mob/M, var/mob/living/silicon/pai/P)
|
||||
var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
|
||||
if(answer == "Yes")
|
||||
var/turf/T = get_turf_or_move(P.loc)
|
||||
for (var/mob/v in viewers(T))
|
||||
v.show_message("\blue [M] presses \his thumb against [P].", 3, "\blue [P] makes a sharp clicking sound as it extracts DNA material from [M].", 2)
|
||||
var/datum/dna/dna = M.dna
|
||||
P << "<font color = red><h3>[M]'s UE string : [dna.unique_enzymes]</h3></font>"
|
||||
if(dna.unique_enzymes == P.master_dna)
|
||||
P << "<b>DNA is a match to stored Master DNA.</b>"
|
||||
else
|
||||
P << "<b>DNA does not match stored Master DNA.</b>"
|
||||
else
|
||||
P << "[M] does not seem like \he is going to provide a DNA sample willingly."
|
||||
|
||||
// -=-=-=-= Software =-=-=-=- //
|
||||
|
||||
//Remote Signaller
|
||||
/mob/living/silicon/pai/proc/softwareSignal()
|
||||
var/dat = ""
|
||||
dat += "<h2>Remote Signaller</h2><hr>"
|
||||
dat += {"<B>Frequency/Code</B> for signaler:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];software=signaller;freq=-10;'>-</A>
|
||||
<A href='byond://?src=\ref[src];software=signaller;freq=-2'>-</A>
|
||||
[format_frequency(src.sradio.frequency)]
|
||||
<A href='byond://?src=\ref[src];software=signaller;freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];software=signaller;freq=10'>+</A><BR>
|
||||
|
||||
Code:
|
||||
<A href='byond://?src=\ref[src];software=signaller;code=-5'>-</A>
|
||||
<A href='byond://?src=\ref[src];software=signaller;code=-1'>-</A>
|
||||
[src.sradio.code]
|
||||
<A href='byond://?src=\ref[src];software=signaller;code=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];software=signaller;code=5'>+</A><BR>
|
||||
|
||||
<A href='byond://?src=\ref[src];software=signaller;send=1'>Send Signal</A><BR>"}
|
||||
return dat
|
||||
|
||||
//Station Bounced Radio
|
||||
/mob/living/silicon/pai/proc/softwareRadio()
|
||||
var/dat = ""
|
||||
dat += "<h2>Station Bounced Radio</h2><hr>"
|
||||
if(!istype(src, /obj/item/device/radio/headset)) //Headsets don't get a mic button
|
||||
dat += "Microphone: [radio.broadcasting ? "<A href='byond://?src=\ref[src];software=radio;talk=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];software=radio;talk=1'>Disengaged</A>"]<BR>"
|
||||
dat += {"
|
||||
Speaker: [radio.listening ? "<A href='byond://?src=\ref[src];software=radio;listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];software=radio;listen=1'>Disengaged</A>"]<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];software=radio;freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];software=radio;freq=-2'>-</A>
|
||||
[format_frequency(radio.frequency)]
|
||||
<A href='byond://?src=\ref[src];software=radio;freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];software=radio;freq=10'>+</A><BR>
|
||||
"}
|
||||
|
||||
for (var/ch_name in radio.channels)
|
||||
dat+=radio.text_sec_channel(ch_name, radio.channels[ch_name])
|
||||
dat+={"[radio.text_wires()]</TT></body></html>"}
|
||||
|
||||
return dat
|
||||
|
||||
// Crew Manifest
|
||||
/mob/living/silicon/pai/proc/softwareManifest()
|
||||
var/dat = ""
|
||||
dat += "<h2>Crew Manifest</h2><hr>"
|
||||
if(data_core)
|
||||
dat += data_core.get_manifest(0) // make it monochrome
|
||||
dat += "<br>"
|
||||
return dat
|
||||
|
||||
// Medical Records
|
||||
/mob/living/silicon/pai/proc/softwareMedicalRecord()
|
||||
var/dat = ""
|
||||
if(src.subscreen == 0)
|
||||
dat += "<h2>Medical Records</h2><HR>"
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
dat += text("<A href='?src=\ref[];med_rec=\ref[];software=medicalrecord;sub=1'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
|
||||
//dat += text("<HR><A href='?src=\ref[];screen=0;softFunction=medical records'>Back</A>", src)
|
||||
if(src.subscreen == 1)
|
||||
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
if ((istype(src.medicalActive1, /datum/data/record) && data_core.general.Find(src.medicalActive1)))
|
||||
dat += text("Name: []<BR>\nID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>",
|
||||
src.medicalActive1.fields["name"], src.medicalActive1.fields["id"], src.medicalActive1.fields["sex"], src.medicalActive1.fields["age"], src.medicalActive1.fields["fingerprint"], src.medicalActive1.fields["p_stat"], src.medicalActive1.fields["m_stat"])
|
||||
else
|
||||
dat += "<pre>Requested medical record not found.</pre><BR>"
|
||||
if ((istype(src.medicalActive2, /datum/data/record) && data_core.medical.Find(src.medicalActive2)))
|
||||
dat += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=\ref[];field=b_type'>[]</A><BR>\nDNA: <A href='?src=\ref[];field=b_dna'>[]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=\ref[];field=mi_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_dis_d'>[]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=\ref[];field=ma_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_dis_d'>[]</A><BR>\n<BR>\nAllergies: <A href='?src=\ref[];field=alg'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=alg_d'>[]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=\ref[];field=cdi'>[]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=\ref[];field=cdi_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, src.medicalActive2.fields["b_type"], src, src.medicalActive2.fields["b_dna"], src, src.medicalActive2.fields["mi_dis"], src, src.medicalActive2.fields["mi_dis_d"], src, src.medicalActive2.fields["ma_dis"], src, src.medicalActive2.fields["ma_dis_d"], src, src.medicalActive2.fields["alg"], src, src.medicalActive2.fields["alg_d"], src, src.medicalActive2.fields["cdi"], src, src.medicalActive2.fields["cdi_d"], src, src.medicalActive2.fields["notes"])
|
||||
else
|
||||
dat += "<pre>Requested medical record not found.</pre><BR>"
|
||||
dat += text("<BR>\n<A href='?src=\ref[];software=medicalrecord;sub=0'>Back</A><BR>", src)
|
||||
return dat
|
||||
|
||||
// Security Records
|
||||
/mob/living/silicon/pai/proc/softwareSecurityRecord()
|
||||
var/dat = ""
|
||||
if(src.subscreen == 0)
|
||||
dat += "<h2>Security Records</h2><HR>"
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
dat += text("<A href='?src=\ref[];sec_rec=\ref[];software=securityrecord;sub=1'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
|
||||
if(src.subscreen == 1)
|
||||
dat += "<h3>Security Record</h3>"
|
||||
if ((istype(src.securityActive1, /datum/data/record) && data_core.general.Find(src.securityActive1)))
|
||||
dat += text("Name: <A href='?src=\ref[];field=name'>[]</A><BR>\nID: <A href='?src=\ref[];field=id'>[]</A><BR>\nSex: <A href='?src=\ref[];field=sex'>[]</A><BR>\nAge: <A href='?src=\ref[];field=age'>[]</A><BR>\nRank: <A href='?src=\ref[];field=rank'>[]</A><BR>\nFingerprint: <A href='?src=\ref[];field=fingerprint'>[]</A><BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src, src.securityActive1.fields["name"], src, src.securityActive1.fields["id"], src, src.securityActive1.fields["sex"], src, src.securityActive1.fields["age"], src, src.securityActive1.fields["rank"], src, src.securityActive1.fields["fingerprint"], src.securityActive1.fields["p_stat"], src.securityActive1.fields["m_stat"])
|
||||
else
|
||||
dat += "<pre>Requested security record not found,</pre><BR>"
|
||||
if ((istype(src.securityActive2, /datum/data/record) && data_core.security.Find(src.securityActive2)))
|
||||
dat += text("<BR>\nSecurity Data<BR>\nCriminal Status: []<BR>\n<BR>\nMinor Crimes: <A href='?src=\ref[];field=mi_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_crim_d'>[]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=\ref[];field=ma_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_crim_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src.securityActive2.fields["criminal"], src, src.securityActive2.fields["mi_crim"], src, src.securityActive2.fields["mi_crim_d"], src, src.securityActive2.fields["ma_crim"], src, src.securityActive2.fields["ma_crim_d"], src, src.securityActive2.fields["notes"])
|
||||
else
|
||||
dat += "<pre>Requested security record not found,</pre><BR>"
|
||||
dat += text("<BR>\n<A href='?src=\ref[];software=securityrecord;sub=0'>Back</A><BR>", src)
|
||||
return dat
|
||||
|
||||
// Universal Translator
|
||||
/mob/living/silicon/pai/proc/softwareTranslator()
|
||||
var/dat = {"<h2>Universal Translator</h2><hr>
|
||||
When enabled, this device will automatically convert all spoken and written language into a format that any known recipient can understand.<br><br>
|
||||
The device is currently [ (src.universal_speak) ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled</font>.<br>
|
||||
<a href='byond://?src=\ref[src];software=translator;sub=0;toggle=1'>Toggle Device</a><br>
|
||||
"}
|
||||
return dat
|
||||
|
||||
// Security HUD
|
||||
/mob/living/silicon/pai/proc/facialRecognition()
|
||||
var/dat = {"<h2>Facial Recognition Suite</h2><hr>
|
||||
When enabled, this package will scan all viewable faces and compare them against the known criminal database, providing real-time graphical data about any detected persons of interest.<br><br>
|
||||
The suite is currently [ (src.secHUD) ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled</font>.<br>
|
||||
<a href='byond://?src=\ref[src];software=securityhud;sub=0;toggle=1'>Toggle Suite</a><br>
|
||||
"}
|
||||
return dat
|
||||
|
||||
// Medical HUD
|
||||
/mob/living/silicon/pai/proc/medicalAnalysis()
|
||||
var/dat = ""
|
||||
if(src.subscreen == 0)
|
||||
dat += {"<h2>Medical Analysis Suite</h2><hr>
|
||||
<h4>Visual Status Overlay</h4>
|
||||
When enabled, this package will scan all nearby crewmembers' vitals and provide real-time graphical data about their state of health.<br><br>
|
||||
The suite is currently [ (src.medHUD) ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled</font>.<br>
|
||||
<a href='byond://?src=\ref[src];software=medicalhud;sub=0;toggle=1'>Toggle Suite</a><br>
|
||||
<br>
|
||||
<a href='byond://?src=\ref[src];software=medicalhud;sub=1'>Host Bioscan</a><br>
|
||||
"}
|
||||
if(src.subscreen == 1)
|
||||
dat += {"<h2>Medical Analysis Suite</h2><hr>
|
||||
<h4>Host Bioscan</h4>
|
||||
"}
|
||||
var/mob/living/M
|
||||
//If we are not deployed, check the holder of the card.
|
||||
if(src.loc == card)
|
||||
M = card.loc
|
||||
|
||||
//If we are deployed or the card is not held, check the first living mob in our turf.
|
||||
if(!M || !istype(M))
|
||||
var/turf/T = get_turf(src)
|
||||
M = locate(/mob/living/) in T.contents
|
||||
|
||||
if(!M || !istype(M))
|
||||
src.temp = "Error: No biological host found. <br>"
|
||||
src.subscreen = 0
|
||||
return dat
|
||||
|
||||
dat += {"<b>Bioscan Results for [M]</b>: <br>
|
||||
Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"] <br><br>
|
||||
|
||||
<b>Scan Breakdown</b>: <br>
|
||||
Respiratory: [M.getOxyLoss() > 50 ? "<font color=#FF5555>" : "<font color=#55FF55>"][M.getOxyLoss()]</font><br>
|
||||
Toxicology: [M.getToxLoss() > 50 ? "<font color=#FF5555>" : "<font color=#55FF55>"][M.getToxLoss()]</font><br>
|
||||
Burns: [M.getFireLoss() > 50 ? "<font color=#FF5555>" : "<font color=#55FF55>"][M.getFireLoss()]</font><br>
|
||||
Structural Integrity: [M.getBruteLoss() > 50 ? "<font color=#FF5555>" : "<font color=#55FF55>"][M.getBruteLoss()]</font><br>
|
||||
Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)<br>
|
||||
"}
|
||||
dat += "<br><a href='byond://?src=\ref[src];software=medicalhud;sub=1'>Refresh Bioscan</a><br>"
|
||||
dat += "<br><a href='byond://?src=\ref[src];software=medicalhud;sub=0'>Visual Status Overlay</a><br>"
|
||||
return dat
|
||||
|
||||
// Atmospheric Scanner
|
||||
/mob/living/silicon/pai/proc/softwareAtmo()
|
||||
var/dat = "<h2>Atmospheric Sensor</h2><hr>"
|
||||
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
if (isnull(T))
|
||||
dat += "Unable to obtain a reading.<br>"
|
||||
else
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles()
|
||||
|
||||
dat += "Air Pressure: [round(pressure,0.1)] kPa<br>"
|
||||
|
||||
if (total_moles)
|
||||
var/o2_level = environment.oxygen/total_moles
|
||||
var/n2_level = environment.nitrogen/total_moles
|
||||
var/co2_level = environment.carbon_dioxide/total_moles
|
||||
var/plasma_level = environment.toxins/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level)
|
||||
dat += "Nitrogen: [round(n2_level*100)]%<br>"
|
||||
dat += "Oxygen: [round(o2_level*100)]%<br>"
|
||||
dat += "Carbon Dioxide: [round(co2_level*100)]%<br>"
|
||||
dat += "Plasma: [round(plasma_level*100)]%<br>"
|
||||
if(unknown_level > 0.01)
|
||||
dat += "OTHER: [round(unknown_level)]%<br>"
|
||||
dat += "Temperature: [round(environment.temperature-T0C)]°C<br>"
|
||||
dat += "<br><a href='byond://?src=\ref[src];software=atmosensor;sub=0'>Refresh Reading</a>"
|
||||
return dat
|
||||
|
||||
// Camera Jack - Clearly not finished
|
||||
/mob/living/silicon/pai/proc/softwareCamera()
|
||||
var/dat = "<h2>Camera Jack</h2><hr>"
|
||||
dat += "Cable status : "
|
||||
|
||||
if(!src.cable)
|
||||
dat += "<font color=#FF5555>Retracted</font> <br>"
|
||||
return dat
|
||||
if(!src.cable.machine)
|
||||
dat += "<font color=#FFFF55>Extended</font> <br>"
|
||||
return dat
|
||||
|
||||
var/obj/machinery/machine = src.cable.machine
|
||||
dat += "<font color=#55FF55>Connected</font> <br>"
|
||||
|
||||
if(!istype(machine, /obj/machinery/camera))
|
||||
src << "DERP"
|
||||
return dat
|
||||
|
||||
// Door Jack
|
||||
/mob/living/silicon/pai/proc/softwareDoor()
|
||||
var/dat = "<h2>Airlock Jack</h2><hr>"
|
||||
dat += "Cable status : "
|
||||
if(!src.cable)
|
||||
dat += "<font color=#FF5555>Retracted</font> <br>"
|
||||
dat += "<a href='byond://?src=\ref[src];software=doorjack;cable=1;sub=0'>Extend Cable</a> <br>"
|
||||
return dat
|
||||
if(!src.cable.machine)
|
||||
dat += "<font color=#FFFF55>Extended</font> <br>"
|
||||
return dat
|
||||
|
||||
var/obj/machinery/machine = src.cable.machine
|
||||
dat += "<font color=#55FF55>Connected</font> <br>"
|
||||
if(!istype(machine, /obj/machinery/door))
|
||||
dat += "Connected device's firmware does not appear to be compatible with Airlock Jack protocols.<br>"
|
||||
return dat
|
||||
// var/obj/machinery/airlock/door = machine
|
||||
|
||||
if(!src.hackdoor)
|
||||
dat += "<a href='byond://?src=\ref[src];software=doorjack;jack=1;sub=0'>Begin Airlock Jacking</a> <br>"
|
||||
else
|
||||
dat += "Jack in progress... [src.hackprogress]% complete.<br>"
|
||||
dat += "<a href='byond://?src=\ref[src];software=doorjack;cancel=1;sub=0'>Cancel Airlock Jack</a> <br>"
|
||||
//src.hackdoor = machine
|
||||
//src.hackloop()
|
||||
return dat
|
||||
|
||||
// Door Jack - supporting proc
|
||||
/mob/living/silicon/pai/proc/hackloop()
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
for(var/mob/living/silicon/ai/AI in player_list)
|
||||
if(T.loc)
|
||||
AI << "<font color = red><b>Network Alert: Brute-force encryption crack in progress in [T.loc].</b></font>"
|
||||
else
|
||||
AI << "<font color = red><b>Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.</b></font>"
|
||||
while(src.hackprogress < 100)
|
||||
if(src.cable && src.cable.machine && istype(src.cable.machine, /obj/machinery/door) && src.cable.machine == src.hackdoor && get_dist(src, src.hackdoor) <= 1)
|
||||
hackprogress += rand(1, 10)
|
||||
else
|
||||
src.temp = "Door Jack: Connection to airlock has been lost. Hack aborted."
|
||||
hackprogress = 0
|
||||
src.hackdoor = null
|
||||
return
|
||||
if(hackprogress >= 100) // This is clunky, but works. We need to make sure we don't ever display a progress greater than 100,
|
||||
hackprogress = 100 // but we also need to reset the progress AFTER it's been displayed
|
||||
if(src.screen == "doorjack" && src.subscreen == 0) // Update our view, if appropriate
|
||||
src.paiInterface()
|
||||
if(hackprogress >= 100)
|
||||
src.hackprogress = 0
|
||||
src.cable.machine:open()
|
||||
sleep(50) // Update every 5 seconds
|
||||
|
||||
// Digital Messenger
|
||||
/mob/living/silicon/pai/proc/pdamessage()
|
||||
|
||||
var/dat = "<h2>Digital Messenger</h2><hr>"
|
||||
dat += {"<b>Signal/Receiver Status:</b> <A href='byond://?src=\ref[src];software=pdamessage;toggler=1'>
|
||||
[(pda.toff) ? "<font color='red'> \[Off\]</font>" : "<font color='green'> \[On\]</font>"]</a><br>
|
||||
<b>Ringer Status:</b> <A href='byond://?src=\ref[src];software=pdamessage;ringer=1'>
|
||||
[(pda.silent) ? "<font color='red'> \[Off\]</font>" : "<font color='green'> \[On\]</font>"]</a><br><br>"}
|
||||
dat += "<ul>"
|
||||
if(!pda.toff)
|
||||
for (var/obj/item/device/pda/P in sortAtom(PDAs))
|
||||
if (!P.owner||P.toff||P == src.pda||P.hidden) continue
|
||||
dat += "<li><a href='byond://?src=\ref[src];software=pdamessage;target=\ref[P]'>[P]</a>"
|
||||
dat += "</li>"
|
||||
dat += "</ul>"
|
||||
dat += "Messages: <hr>"
|
||||
|
||||
dat += "<style>td.a { vertical-align:top; }</style>"
|
||||
dat += "<table>"
|
||||
for(var/index in pda.tnote)
|
||||
if(index["sent"])
|
||||
dat += addtext("<tr><td class='a'><i><b>To</b></i></td><td class='a'><i><b>→</b></i></td><td><i><b><a href='byond://?src=\ref[src];software=pdamessage;target=",index["src"],"'>", index["owner"],"</a>: </b></i>", index["message"], "<br></td></tr>")
|
||||
else
|
||||
dat += addtext("<tr><td class='a'><i><b>From</b></i></td><td class='a'><i><b>→</b></i></td><td><i><b><a href='byond://?src=\ref[src];software=pdamessage;target=",index["target"],"'>", index["owner"],"</a>: </b></i>", index["message"], "<br></td></tr>")
|
||||
dat += "</table>"
|
||||
return dat
|
||||
|
||||
/mob/living/silicon/pai/proc/translator_toggle()
|
||||
|
||||
// Sol Common, Tradeband, Gutter and Trinary are added with New() and are therefore the current default, always active languages
|
||||
|
||||
if(translator_on)
|
||||
translator_on = 0
|
||||
|
||||
remove_language("Sinta'unathi")
|
||||
remove_language("Siik'tajr")
|
||||
remove_language("Skrellian")
|
||||
remove_language("Vox-pidgin")
|
||||
remove_language("Rootspeak")
|
||||
remove_language("Trinary")
|
||||
remove_language("Chittin")
|
||||
remove_language("Bubblish")
|
||||
remove_language("Clownish")
|
||||
|
||||
src << "\blue Translator Module toggled OFF."
|
||||
|
||||
else
|
||||
translator_on = 1
|
||||
|
||||
add_language("Sinta'unathi")
|
||||
add_language("Siik'tajr")
|
||||
add_language("Skrellian")
|
||||
add_language("Vox-pidgin")
|
||||
add_language("Rootspeak")
|
||||
add_language("Trinary")
|
||||
add_language("Chittin")
|
||||
add_language("Bubblish")
|
||||
add_language("Clownish")
|
||||
|
||||
src << "\blue Translator Module toggled ON."
|
||||
else if(href_list["image"])
|
||||
var/img = text2num(href_list["image"])
|
||||
if(1 <= img && img <= 9)
|
||||
card.setEmotion(img)
|
||||
return 1
|
||||
@@ -0,0 +1,537 @@
|
||||
/datum/pai_software
|
||||
// Name for the software. This is used as the button text when buying or opening/toggling the software
|
||||
var/name = "pAI software module"
|
||||
// RAM cost; pAIs start with 100 RAM, spending it on programs
|
||||
var/ram_cost = 0
|
||||
// ID for the software. This must be unique
|
||||
var/id = ""
|
||||
// Whether this software is a toggle or not
|
||||
// Toggled software should override toggle() and is_active()
|
||||
// Non-toggled software should override on_ui_interact() and Topic()
|
||||
var/toggle = 1
|
||||
// Whether pAIs should automatically receive this module at no cost
|
||||
var/default = 0
|
||||
|
||||
proc/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
return
|
||||
|
||||
proc/toggle(mob/living/silicon/pai/user)
|
||||
return
|
||||
|
||||
proc/is_active(mob/living/silicon/pai/user)
|
||||
return 0
|
||||
|
||||
/datum/pai_software/directives
|
||||
name = "Directives"
|
||||
ram_cost = 0
|
||||
id = "directives"
|
||||
toggle = 0
|
||||
default = 1
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
data["master"] = user.master
|
||||
data["dna"] = user.master_dna
|
||||
data["prime"] = user.pai_law0
|
||||
data["supplemental"] = user.pai_laws
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_directives.tmpl", "pAI Directives", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(href_list["getdna"])
|
||||
var/mob/living/M = P.loc
|
||||
var/count = 0
|
||||
|
||||
// Find the carrier
|
||||
while(!istype(M, /mob/living))
|
||||
if(!M || !M.loc || count > 6)
|
||||
//For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
|
||||
src << "You are not being carried by anyone!"
|
||||
return 0
|
||||
M = M.loc
|
||||
count++
|
||||
|
||||
// Check the carrier
|
||||
var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
|
||||
if(answer == "Yes")
|
||||
var/turf/T = get_turf_or_move(P.loc)
|
||||
for (var/mob/v in viewers(T))
|
||||
v.show_message("<span class='notice'>[M] presses \his thumb against [P].</span>", 3, "<span class='notice'>[P] makes a sharp clicking sound as it extracts DNA material from [M].</span>", 2)
|
||||
var/datum/dna/dna = M.dna
|
||||
P << "<font color = red><h3>[M]'s UE string : [dna.unique_enzymes]</h3></font>"
|
||||
if(dna.unique_enzymes == P.master_dna)
|
||||
P << "<b>DNA is a match to stored Master DNA.</b>"
|
||||
else
|
||||
P << "<b>DNA does not match stored Master DNA.</b>"
|
||||
else
|
||||
P << "[M] does not seem like \he is going to provide a DNA sample willingly."
|
||||
return 1
|
||||
|
||||
/datum/pai_software/radio_config
|
||||
name = "Radio Configuration"
|
||||
ram_cost = 0
|
||||
id = "radio"
|
||||
toggle = 0
|
||||
default = 1
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui = null, force_open = 1)
|
||||
var/data[0]
|
||||
|
||||
data["listening"] = user.radio.broadcasting
|
||||
data["frequency"] = format_frequency(user.radio.frequency)
|
||||
|
||||
var/channels[0]
|
||||
for(var/ch_name in user.radio.channels)
|
||||
var/ch_stat = user.radio.channels[ch_name]
|
||||
var/ch_dat[0]
|
||||
ch_dat["name"] = ch_name
|
||||
// FREQ_LISTENING is const in /obj/item/device/radio
|
||||
ch_dat["listening"] = !!(ch_stat & user.radio.FREQ_LISTENING)
|
||||
channels[++channels.len] = ch_dat
|
||||
|
||||
data["channels"] = channels
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, user, id, "pai_radio.tmpl", "Radio Configuration", 300, 150)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
P.radio.Topic(href, href_list)
|
||||
return 1
|
||||
|
||||
/datum/pai_software/crew_manifest
|
||||
name = "Crew Manifest"
|
||||
ram_cost = 5
|
||||
id = "manifest"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
|
||||
var/data[0]
|
||||
data["manifest"] = data_core.get_manifest_json()
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_manifest.tmpl", "Crew Manifest", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/datum/pai_software/messenger
|
||||
name = "Digital Messenger"
|
||||
ram_cost = 5
|
||||
id = "messenger"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
data["receiver_off"] = user.pda.toff
|
||||
data["ringer_off"] = user.pda.silent
|
||||
data["current_ref"] = null
|
||||
data["current_name"] = user.current_pda_messaging
|
||||
|
||||
var/pdas[0]
|
||||
if(!user.pda.toff)
|
||||
for(var/obj/item/device/pda/P in sortAtom(PDAs))
|
||||
if(!P.owner || P.toff || P == user.pda || P.hidden) continue
|
||||
var/pda[0]
|
||||
pda["name"] = "[P]"
|
||||
pda["owner"] = "[P.owner]"
|
||||
pda["ref"] = "\ref[P]"
|
||||
if(P.owner == user.current_pda_messaging)
|
||||
data["current_ref"] = "\ref[P]"
|
||||
pdas[++pdas.len] = pda
|
||||
|
||||
data["pdas"] = pdas
|
||||
|
||||
var/messages[0]
|
||||
if(user.current_pda_messaging)
|
||||
for(var/index in user.pda.tnote)
|
||||
if(index["owner"] != user.current_pda_messaging)
|
||||
continue
|
||||
var/msg[0]
|
||||
var/sent = index["sent"]
|
||||
msg["sent"] = sent ? 1 : 0
|
||||
msg["target"] = index["owner"]
|
||||
msg["message"] = index["message"]
|
||||
messages[++messages.len] = msg
|
||||
|
||||
data["messages"] = messages
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_messenger.tmpl", "Digital Messenger", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(!isnull(P.pda))
|
||||
if(href_list["toggler"])
|
||||
P.pda.toff = href_list["toggler"] != "1"
|
||||
return 1
|
||||
else if(href_list["ringer"])
|
||||
P.pda.silent = href_list["ringer"] != "1"
|
||||
return 1
|
||||
else if(href_list["select"])
|
||||
var/s = href_list["select"]
|
||||
if(s == "*NONE*")
|
||||
P.current_pda_messaging = null
|
||||
else
|
||||
P.current_pda_messaging = s
|
||||
return 1
|
||||
else if(href_list["target"])
|
||||
if(P.silence_time)
|
||||
return alert("Communications circuits remain uninitialized.")
|
||||
|
||||
var/target = locate(href_list["target"])
|
||||
P.pda.create_message(P, target, 1)
|
||||
return 1
|
||||
|
||||
/datum/pai_software/med_records
|
||||
name = "Medical Records"
|
||||
ram_cost = 15
|
||||
id = "med_records"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
var/records[0]
|
||||
for(var/datum/data/record/general in sortRecord(data_core.general))
|
||||
var/record[0]
|
||||
record["name"] = general.fields["name"]
|
||||
record["ref"] = "\ref[general]"
|
||||
records[++records.len] = record
|
||||
|
||||
data["records"] = records
|
||||
|
||||
var/datum/data/record/G = user.medicalActive1
|
||||
var/datum/data/record/M = user.medicalActive2
|
||||
data["general"] = G ? G.fields : null
|
||||
data["medical"] = M ? M.fields : null
|
||||
data["could_not_find"] = user.medical_cannotfind
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_medrecords.tmpl", "Medical Records", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(href_list["select"])
|
||||
var/datum/data/record/record = locate(href_list["select"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/M = null
|
||||
if (!( data_core.general.Find(R) ))
|
||||
P.medical_cannotfind = 1
|
||||
else
|
||||
P.medical_cannotfind = 0
|
||||
for(var/datum/data/record/E in data_core.medical)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
M = E
|
||||
P.medicalActive1 = R
|
||||
P.medicalActive2 = M
|
||||
else
|
||||
P.medical_cannotfind = 1
|
||||
return 1
|
||||
|
||||
/datum/pai_software/sec_records
|
||||
name = "Security Records"
|
||||
ram_cost = 15
|
||||
id = "sec_records"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
var/records[0]
|
||||
for(var/datum/data/record/general in sortRecord(data_core.general))
|
||||
var/record[0]
|
||||
record["name"] = general.fields["name"]
|
||||
record["ref"] = "\ref[general]"
|
||||
records[++records.len] = record
|
||||
|
||||
data["records"] = records
|
||||
|
||||
var/datum/data/record/G = user.securityActive1
|
||||
var/datum/data/record/S = user.securityActive2
|
||||
data["general"] = G ? G.fields : null
|
||||
data["security"] = S ? S.fields : null
|
||||
data["could_not_find"] = user.security_cannotfind
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_secrecords.tmpl", "Security Records", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(href_list["select"])
|
||||
var/datum/data/record/record = locate(href_list["select"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/S = null
|
||||
if (!( data_core.general.Find(R) ))
|
||||
P.securityActive1 = null
|
||||
P.securityActive2 = null
|
||||
P.security_cannotfind = 1
|
||||
else
|
||||
P.security_cannotfind = 0
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
S = E
|
||||
P.securityActive1 = R
|
||||
P.securityActive2 = S
|
||||
else
|
||||
P.securityActive1 = null
|
||||
P.securityActive2 = null
|
||||
P.security_cannotfind = 1
|
||||
return 1
|
||||
|
||||
/datum/pai_software/door_jack
|
||||
name = "Door Jack"
|
||||
ram_cost = 30
|
||||
id = "door_jack"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
data["cable"] = user.cable != null
|
||||
data["machine"] = user.cable && (user.cable.machine != null)
|
||||
data["inprogress"] = user.hackdoor != null
|
||||
data["progress_a"] = round(user.hackprogress / 10)
|
||||
data["progress_b"] = user.hackprogress % 10
|
||||
data["aborted"] = user.hack_aborted
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(href_list["jack"])
|
||||
if(P.cable && P.cable.machine)
|
||||
P.hackdoor = P.cable.machine
|
||||
P.hackloop()
|
||||
return 1
|
||||
else if(href_list["cancel"])
|
||||
P.hackdoor = null
|
||||
return 1
|
||||
else if(href_list["cable"])
|
||||
var/turf/T = get_turf_or_move(P.loc)
|
||||
P.hack_aborted = 0
|
||||
P.cable = new /obj/item/weapon/pai_cable(T)
|
||||
for(var/mob/M in viewers(T))
|
||||
M.show_message("<span class='warning'>A port on [P] opens to reveal [P.cable], which promptly falls to the floor.</span>", 3,
|
||||
"<span class='warning'>You hear the soft click of something light and hard falling to the ground.</span>", 2)
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/pai/proc/hackloop()
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
for(var/mob/living/silicon/ai/AI in player_list)
|
||||
if(T.loc)
|
||||
AI << "<font color = red><b>Network Alert: Brute-force encryption crack in progress in [T.loc].</b></font>"
|
||||
else
|
||||
AI << "<font color = red><b>Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.</b></font>"
|
||||
var/obj/machinery/door/D = cable.machine
|
||||
if(!istype(D))
|
||||
hack_aborted = 1
|
||||
hackprogress = 0
|
||||
cable.machine = null
|
||||
hackdoor = null
|
||||
return
|
||||
while(hackprogress < 1000)
|
||||
if(cable && cable.machine == D && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1)
|
||||
hackprogress = min(hackprogress+rand(1, 20), 1000)
|
||||
else
|
||||
hack_aborted = 1
|
||||
hackprogress = 0
|
||||
hackdoor = null
|
||||
return
|
||||
if(hackprogress >= 1000)
|
||||
hackprogress = 0
|
||||
D.open()
|
||||
cable.machine = null
|
||||
return
|
||||
sleep(10) // Update every second
|
||||
|
||||
/datum/pai_software/atmosphere_sensor
|
||||
name = "Atmosphere Sensor"
|
||||
ram_cost = 5
|
||||
id = "atmos_sense"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
var/turf/T = get_turf_or_move(user.loc)
|
||||
if(!T)
|
||||
data["reading"] = 0
|
||||
data["pressure"] = 0
|
||||
data["temperature"] = 0
|
||||
data["temperatureC"] = 0
|
||||
data["gas"] = list()
|
||||
else
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
data["reading"] = 1
|
||||
var/pres = env.return_pressure() * 10
|
||||
data["pressure"] = "[round(pres/10)].[pres%10]"
|
||||
data["temperature"] = round(env.temperature)
|
||||
data["temperatureC"] = round(env.temperature-T0C)
|
||||
|
||||
var/t_moles = env.total_moles
|
||||
var/gases[0]
|
||||
if(t_moles)
|
||||
var/n2[0]
|
||||
n2["name"] = "Nitrogen"
|
||||
n2["percent"] = round((env.nitrogen/t_moles)*100)
|
||||
var/o2[0]
|
||||
o2["name"] = "Oxygen"
|
||||
o2["percent"] = round((env.oxygen/t_moles)*100)
|
||||
var/co2[0]
|
||||
co2["name"] = "Carbon Dioxide"
|
||||
co2["percent"] = round((env.carbon_dioxide/t_moles)*100)
|
||||
var/plasma[0]
|
||||
plasma["name"] = "Plasma"
|
||||
plasma["percent"] = round((env.toxins/t_moles)*100)
|
||||
var/other[0]
|
||||
other["name"] = "Other"
|
||||
other["percent"] = round(1-((env.oxygen/t_moles)+(env.nitrogen/t_moles)+(env.carbon_dioxide/t_moles)+(env.toxins/t_moles)))
|
||||
gases[++gases.len] = n2
|
||||
gases[++gases.len] = o2
|
||||
gases[++gases.len] = co2
|
||||
gases[++gases.len] = plasma
|
||||
gases[++gases.len] = other
|
||||
data["gas"] = gases
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/datum/pai_software/sec_hud
|
||||
name = "Security HUD"
|
||||
ram_cost = 20
|
||||
id = "sec_hud"
|
||||
|
||||
toggle(mob/living/silicon/pai/user)
|
||||
user.secHUD = !user.secHUD
|
||||
|
||||
is_active(mob/living/silicon/pai/user)
|
||||
return user.secHUD
|
||||
|
||||
/datum/pai_software/med_hud
|
||||
name = "Medical HUD"
|
||||
ram_cost = 20
|
||||
id = "med_hud"
|
||||
|
||||
toggle(mob/living/silicon/pai/user)
|
||||
user.medHUD = !user.medHUD
|
||||
|
||||
is_active(mob/living/silicon/pai/user)
|
||||
return user.medHUD
|
||||
|
||||
/datum/pai_software/translator
|
||||
name = "Universal Translator"
|
||||
ram_cost = 35
|
||||
id = "translator"
|
||||
|
||||
toggle(mob/living/silicon/pai/user)
|
||||
// Sol Common, Tradeband and Gutter are added with New() and are therefore the current default, always active languages
|
||||
user.translator_on = !user.translator_on
|
||||
if(user.translator_on)
|
||||
user.add_language("Sinta'unathi")
|
||||
user.add_language("Siik'tajr")
|
||||
user.add_language("Skrellian")
|
||||
else
|
||||
user.remove_language("Sinta'unathi")
|
||||
user.remove_language("Siik'tajr")
|
||||
user.remove_language("Skrellian")
|
||||
|
||||
is_active(mob/living/silicon/pai/user)
|
||||
return user.translator_on
|
||||
|
||||
/datum/pai_software/signaller
|
||||
name = "Remote Signaller"
|
||||
ram_cost = 5
|
||||
id = "signaller"
|
||||
toggle = 0
|
||||
|
||||
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
|
||||
var/data[0]
|
||||
|
||||
data["frequency"] = format_frequency(user.sradio.frequency)
|
||||
data["code"] = user.sradio.code
|
||||
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/living/silicon/pai/P = usr
|
||||
if(!istype(P)) return
|
||||
|
||||
if(href_list["send"])
|
||||
P.sradio.send_signal("ACTIVATE")
|
||||
for(var/mob/O in hearers(1, P.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", P), 3, "*beep* *beep*", 2)
|
||||
return 1
|
||||
|
||||
else if(href_list["freq"])
|
||||
var/new_frequency = (P.sradio.frequency + text2num(href_list["freq"]))
|
||||
if(new_frequency < 1200 || new_frequency > 1600)
|
||||
new_frequency = sanitize_frequency(new_frequency)
|
||||
P.sradio.set_frequency(new_frequency)
|
||||
return 1
|
||||
|
||||
else if(href_list["code"])
|
||||
P.sradio.code += text2num(href_list["code"])
|
||||
P.sradio.code = round(P.sradio.code)
|
||||
P.sradio.code = min(100, P.sradio.code)
|
||||
P.sradio.code = max(1, P.sradio.code)
|
||||
return 1
|
||||
@@ -904,24 +904,63 @@ var/list/robot_verbs_default = list(
|
||||
usr << "You unlock your cover."
|
||||
|
||||
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if (M.a_intent =="disarm")
|
||||
if(!(lying))
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
|
||||
if (istype(loc, /turf) && istype(loc.loc, /area/start))
|
||||
M << "No attacking people at spawn, you jackass."
|
||||
return
|
||||
|
||||
switch(M.a_intent)
|
||||
|
||||
if ("help")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("<span class='notice'>[M] caresses [src]'s plating with its scythe like arm.</span>"), 1)
|
||||
|
||||
if ("grab")
|
||||
if (M == src || anchored)
|
||||
return
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src )
|
||||
|
||||
M.put_in_active_hand(G)
|
||||
|
||||
G.synch()
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("<span class='danger'>[M] has grabbed [src] passively!</span>")
|
||||
|
||||
if ("harm")
|
||||
M.do_attack_animation(src)
|
||||
if (prob(85))
|
||||
Stun(7)
|
||||
step(src,get_dir(M,src))
|
||||
spawn(5)
|
||||
step(src,get_dir(M,src))
|
||||
add_logs(M, src, "pushed", admin=0)
|
||||
playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1)
|
||||
visible_message("<span class='danger'>[M] has forced back [src]!</span>", \
|
||||
"<span class='userdanger'>[M] has forced back [src]!</span>")
|
||||
var/damage = rand(10, 20)
|
||||
if (prob(90))
|
||||
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
|
||||
visible_message("<span class='danger'>[M] has slashed at [src]!</span>",\
|
||||
"<span class='userdanger'>[M] has slashed at [src]!</span>")
|
||||
if(prob(8))
|
||||
flick("noise", flash)
|
||||
adjustBruteLoss(damage)
|
||||
updatehealth()
|
||||
else
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
|
||||
visible_message("<span class='danger'>[M] took a swipe at [src]!</span>", \
|
||||
"<span class='userdanger'>[M] took a swipe at [src]!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
if ("disarm")
|
||||
if(!(lying))
|
||||
M.do_attack_animation(src)
|
||||
if (prob(85))
|
||||
Stun(7)
|
||||
step(src,get_dir(M,src))
|
||||
spawn(5)
|
||||
step(src,get_dir(M,src))
|
||||
playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1)
|
||||
visible_message("<span class='danger'>[M] has forced back [src]!</span>",\
|
||||
"<span class='userdanger'>[M] has forced back [src]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
|
||||
visible_message("<span class='danger'>[M] attempted to force back [src]!</span>",\
|
||||
"<span class='userdanger'>[M] attempted to force back [src]!</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
|
||||
var/list/alarms_to_show = list()
|
||||
var/list/alarms_to_clear = list()
|
||||
immune_to_ssd = 1
|
||||
var/list/hud_list[10]
|
||||
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
|
||||
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
@@ -105,7 +105,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/space/rig/syndi
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/rig/syndi
|
||||
|
||||
@@ -219,7 +219,8 @@
|
||||
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
||||
var/can_stand = 1 //Whether this mob have ability to stand
|
||||
|
||||
var/immune_to_ssd = 0
|
||||
//SSD var, changed it up some so people can have special things happen for different mobs when SSD.
|
||||
var/player_logged = 0
|
||||
|
||||
var/turf/listed_turf = null //the current turf being examined in the stat panel
|
||||
var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
|
||||
|
||||
@@ -111,8 +111,8 @@
|
||||
if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction.
|
||||
return STATUS_INTERACTIVE
|
||||
|
||||
/var/global/datum/topic_state/default_state = new()
|
||||
|
||||
/var/global/datum/topic_state/default_state = new()
|
||||
|
||||
/datum/topic_state
|
||||
var/flags = 0
|
||||
|
||||
|
||||
@@ -26,11 +26,13 @@
|
||||
|
||||
|
||||
/obj/item/weapon/pen/blue
|
||||
name = "blue-ink pen"
|
||||
desc = "It's a normal blue ink pen."
|
||||
icon_state = "pen_blue"
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/weapon/pen/red
|
||||
name = "red-ink pen"
|
||||
desc = "It's a normal red ink pen."
|
||||
icon_state = "pen_red"
|
||||
colour = "red"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/obj/item/weapon/stamp/cmo
|
||||
name = "chief medical officer's rubber stamp"
|
||||
icon_state = "stamp-cmo"
|
||||
_color = "cmo"
|
||||
_color = "medical"
|
||||
|
||||
/obj/item/weapon/stamp/granted
|
||||
name = "\improper GRANTED rubber stamp"
|
||||
|
||||
@@ -2329,18 +2329,19 @@ datum
|
||||
if(!data) data = 1
|
||||
switch(data)
|
||||
if(1 to 15)
|
||||
M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(holder.has_reagent("capsaicin"))
|
||||
holder.remove_reagent("capsaicin", 5)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
M.bodytemperature -= rand(5,20)
|
||||
if(15 to 25)
|
||||
M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
M.bodytemperature -= rand(10,20)
|
||||
if(25 to INFINITY)
|
||||
M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(prob(1)) M.emote("shiver")
|
||||
M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(prob(1))
|
||||
M.emote("shiver")
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
M.bodytemperature -= rand(15,20)
|
||||
data++
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
|
||||
/obj/structure/bigDelivery/attack_hand(mob/user as mob)
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/bigDelivery/Destroy()
|
||||
@@ -74,7 +75,7 @@
|
||||
user.put_in_hands(wrapped)
|
||||
else
|
||||
wrapped.loc = get_turf(src)
|
||||
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -849,7 +849,8 @@
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 4, "syndicate" = 3)
|
||||
build_path = /obj/item/borg/upgrade/syndicate
|
||||
category = "Cyborg Upgrade Modules"
|
||||
materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_jetpack
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
req_tech = list("programming" = 2, "biotech" = 3)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 1000, "$glass" = 500)
|
||||
construction_time = 75
|
||||
reliability_base = 76
|
||||
build_path = /obj/item/device/mmi
|
||||
category = list("Misc","Medical")
|
||||
@@ -107,6 +108,7 @@
|
||||
req_tech = list("programming" = 2, "biotech" = 4)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 1200, "$glass" = 500)
|
||||
construction_time = 75
|
||||
reliability_base = 74
|
||||
build_path = /obj/item/device/mmi/radio_enabled
|
||||
category = list("Misc","Medical")
|
||||
@@ -139,6 +141,7 @@
|
||||
req_tech = list("magnets" = 3, "combat" = 2)
|
||||
build_type = MECHFAB
|
||||
materials = list("$metal" = 750, "$glass" = 750)
|
||||
construction_time = 100
|
||||
reliability_base = 76
|
||||
build_path = /obj/item/device/flash/synthetic
|
||||
category = list("Misc")
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
req_tech = list("powerstorage" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 50)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell
|
||||
category = list("Misc","Power")
|
||||
|
||||
@@ -19,9 +20,10 @@
|
||||
req_tech = list("powerstorage" = 2)
|
||||
build_type = PROTOLATHE | AUTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 60)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell/high
|
||||
category = list("Misc","Power")
|
||||
|
||||
|
||||
/datum/design/hyper_cell
|
||||
name = "Hyper-Capacity Power Cell"
|
||||
desc = "A power cell that holds 30000 units of energy"
|
||||
@@ -30,9 +32,10 @@
|
||||
reliability_base = 70
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell/hyper
|
||||
category = list("Misc","Power")
|
||||
|
||||
|
||||
/datum/design/super_cell
|
||||
name = "Super-Capacity Power Cell"
|
||||
desc = "A power cell that holds 20000 units of energy"
|
||||
@@ -41,9 +44,10 @@
|
||||
reliability_base = 75
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 70)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell/super
|
||||
category = list("Misc","Power")
|
||||
|
||||
|
||||
/datum/design/pacman
|
||||
name = "Machine Board (PACMAN-type Generator)"
|
||||
desc = "The circuit board that for a PACMAN-type portable generator."
|
||||
@@ -54,7 +58,7 @@
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman
|
||||
category = list("Engineering Machinery")
|
||||
|
||||
|
||||
/datum/design/mrspacman
|
||||
name = "Machine Board (MRSPACMAN-type Generator)"
|
||||
desc = "The circuit board that for a MRSPACMAN-type portable generator."
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
icon_state = "cespace_suit"
|
||||
item_state = "cespace_suit"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 100)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/anomaly
|
||||
name = "Excavation hood"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/computer/shuttle_control/specops
|
||||
name = "special operations shuttle console"
|
||||
shuttle_tag = "Special Operations"
|
||||
req_access = list(access_cent_general)
|
||||
req_access = list(access_cent_specops)
|
||||
|
||||
/obj/machinery/computer/shuttle_control/specops/attack_ai(user as mob)
|
||||
user << "\red Access Denied."
|
||||
|
||||
+3
-5
@@ -40,10 +40,10 @@
|
||||
|
||||
#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 //This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount.
|
||||
#define BODYTEMP_AUTORECOVERY_DIVISOR 12 //This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
|
||||
#define BODYTEMP_AUTORECOVERY_MINIMUM 1 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50.
|
||||
#define BODYTEMP_AUTORECOVERY_MINIMUM 10 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50.
|
||||
#define BODYTEMP_COLD_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster.
|
||||
#define BODYTEMP_HEAT_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster.
|
||||
#define BODYTEMP_COOLING_MAX -30 //The maximum number of degrees that your body can cool in 1 tick, when in a cold area.
|
||||
#define BODYTEMP_COOLING_MAX 30 //The maximum number of degrees that your body can cool in 1 tick, when in a cold area.
|
||||
#define BODYTEMP_HEATING_MAX 30 //The maximum number of degrees that your body can heat up in 1 tick, when in a hot area.
|
||||
|
||||
#define BODYTEMP_HEAT_DAMAGE_LIMIT 360.15 // The limit the human body can take before it starts taking damage from heat.
|
||||
@@ -835,9 +835,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse
|
||||
#define NO_INTORGANS 32768
|
||||
|
||||
//Species Blood Flags
|
||||
#define BLOOD_GREEN 1
|
||||
#define BLOOD_BLUE 2
|
||||
#define BLOOD_SLIME 4
|
||||
#define BLOOD_SLIME 1
|
||||
//Species Body Flags
|
||||
#define FEET_CLAWS 1
|
||||
#define FEET_PADDED 2
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 200 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user