Merge pull request #119 from ZomgPonies/master

sync
This commit is contained in:
melandor0
2014-11-24 02:45:57 +01:00
283 changed files with 33228 additions and 28927 deletions
+1 -1
View File
@@ -304,7 +304,7 @@ var/list/admin_verbs_mod = list(
/client/proc/colorooc()
set category = "Admin"
set name = "OOC Text Color"
set name = "Personal OOC Text Color"
if(!holder) return
var/new_ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color|null
if(new_ooccolor)
+30 -3
View File
@@ -2,6 +2,14 @@
name = "clothing"
var/list/species_restricted = null //Only these species can wear this kit.
/*
Sprites used when the clothing item is refit. This is done by setting icon_override.
For best results, if this is set then sprite_sheets should be null and vice versa, but that is by no means necessary.
Ideally, sprite_sheets_refit should be used for "hard" clothing items that can't change shape very well to fit the wearer (e.g. helmets, hardsuits),
while sprite_sheets should be used for "flexible" clothing items that do not need to be refitted (e.g. vox wearing jumpsuits).
*/
var/list/sprite_sheets_refit = null
//BS12: Species-restricted clothing check.
/obj/item/clothing/mob_can_equip(M as mob, slot)
@@ -32,6 +40,25 @@
return 1
/obj/item/clothing/proc/refit_for_species(var/target_species)
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox")
else
species_restricted = list(target_species)
//Set icon
if (sprite_sheets && (target_species in sprite_sheets))
icon_override = sprite_sheets[target_species]
else
icon_override = initial(icon_override)
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
else
icon = initial(icon)
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
name = "ears"
@@ -214,10 +241,10 @@ BLIND // can't see anything
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona","Vox")
loose = 1 // very rarely falls off
loose = 0 // What kind of idiot designs a pressurized suit where the helmet can fall off?
/obj/item/clothing/suit/space
name = "Space suit"
@@ -234,7 +261,7 @@ BLIND // can't see anything
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT||HIDETAIL
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona","Vox")
+1 -1
View File
@@ -196,7 +196,7 @@
desc = "Covers the eyes, preventing sight."
icon_state = "blindfold"
item_state = "blindfold"
vision_flags = BLIND
//vision_flags = BLIND
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
+2 -2
View File
@@ -41,9 +41,9 @@
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
hos
@@ -5,9 +5,9 @@
item_state = "egloves"
_color = "captain"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
@@ -31,9 +31,9 @@
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
@@ -46,9 +46,9 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
+2 -2
View File
@@ -50,7 +50,7 @@
name = "firefighter helmet"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
@@ -58,7 +58,7 @@
_color = "white"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
+10 -4
View File
@@ -7,9 +7,9 @@
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
cold_protection = HEAD
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HEAD
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
loose = 4 // generally well seated
@@ -74,9 +74,15 @@
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.5
/obj/item/clothing/head/helmet/swat/syndicate
name = "blood-red helmet"
desc = "An extremely robust, space-worthy helmet without a visor to allow for goggle usage underneath. Property of Gorlex Marauders."
icon_state = "helmetsyndi"
item_state = "helmet"
/obj/item/clothing/head/helmet/thunderdome
name = "\improper Thunderdome helmet"
desc = "<i>'Let the battle commence!'</i>"
@@ -85,7 +91,7 @@
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 1
/obj/item/clothing/head/helmet/gladiator
+1 -1
View File
@@ -28,7 +28,7 @@
flags = FPRINT|TABLEPASS
flags_inv = 0
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
loose = 17
+2 -2
View File
@@ -6,9 +6,9 @@
species_fit = list("Vox")
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
redcoat
_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
+35 -31
View File
@@ -2,39 +2,43 @@
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
name = "magboots"
icon_state = "magboots0"
var/magboot_state = "magboots"
var/magpulse = 0
species_restricted = null
action_button_name = "Toggle the magboots"
// flags = NOSLIP //disabled by default
var/slowdown_active = 2
action_button_name = "Toggle Magboots"
icon_action_button = "action_magboots"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/shoes.dmi'
)
species_restricted = list("Skrell","Human","Unathi","Tajaran","Machine","Slime People","Kidan","Grey","Diona") //Vox get their own booties doubt they'd fix on talons anyway.
attack_self(mob/user)
if(magpulse)
flags &= ~NOSLIP
slowdown = SHOES_SLOWDOWN
magpulse = 0
icon_state = "magboots0"
user << "You disable the mag-pulse traction system."
else
flags |= NOSLIP
slowdown = 2
magpulse = 1
icon_state = "magboots1"
user << "You enable the mag-pulse traction system."
user.update_inv_shoes() //so our mob-overlays update
user.update_gravity(user.mob_has_gravity())
examine()
set src in view()
..()
var/state = "disabled"
if(src.flags&NOSLIP)
state = "enabled"
usr << "Its mag-pulse traction system appears to be [state]."
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(src.magpulse)
src.flags &= ~NOSLIP
src.slowdown = SHOES_SLOWDOWN
else
src.flags |= NOSLIP
src.slowdown = slowdown_active
magpulse = !magpulse
icon_state = "[magboot_state][magpulse]"
user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system."
user.update_inv_shoes() //so our mob-overlays update
user.update_gravity(user.mob_has_gravity())
/obj/item/clothing/shoes/magboots/negates_gravity()
return flags & NOSLIP
return flags & NOSLIP
/obj/item/clothing/shoes/magboots/examine(mob/user)
..()
user << "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]."
/obj/item/clothing/shoes/magboots/advance
desc = "Advanced magnetic boots that have a lighter magnetic pull, placing less burden on the wearer."
name = "advanced magboots"
icon_state = "advmag0"
magboot_state = "advmag"
slowdown_active = SHOES_SLOWDOWN
/obj/item/clothing/shoes/magboots/syndie
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
name = "blood-red magboots"
icon_state = "syndiemag0"
magboot_state = "syndiemag"
+6 -6
View File
@@ -36,9 +36,9 @@
siemens_coefficient = 0.6
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/shoes/space_ninja
name = "ninja shoes"
@@ -50,9 +50,9 @@
siemens_coefficient = 0.2
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = null
/obj/item/clothing/shoes/sandal
@@ -106,9 +106,9 @@
siemens_coefficient = 0.7
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = null
/obj/item/clothing/shoes/cyborg
+58 -93
View File
@@ -1,24 +1,9 @@
// Tajaran rigs.
/obj/item/clothing/head/helmet/space/rig/tajara
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding. This one doesn't look like it was made for humans."
icon_state = "rig0-taj-helmet"
item_state = "rig0-taj-helmet"
_color = "taj-helmet"
species_restricted = list("Tajaran")
/obj/item/clothing/suit/space/rig/tajara
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding. This one doesn't look like it was made for humans."
icon_state = "rig-taj"
item_state = "rig-taj"
_color = "rig-taj"
species_restricted = list("Tajaran")
//Skrell space gear. Sleek like a wetsuit.
/obj/item/clothing/head/helmet/space/skrell
name = "Skrellian helmet"
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl."
armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100)
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
/obj/item/clothing/head/helmet/space/skrell/white
@@ -37,7 +22,7 @@
armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
/obj/item/clothing/suit/space/skrell/white
@@ -50,6 +35,49 @@
item_state = "skrell_suit_black"
_color = "skrell_suit_black"
//Unathi space gear. Huge and restrictive.
/obj/item/clothing/head/helmet/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
var/up = 0 //So Unathi helmets play nicely with the weldervision check.
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/unathi/helmet_cheap
name = "NT breacher helmet"
desc = "Hey! Watch it with that thing! It's a knock-off of a Unathi battle-helm, and that spike could put someone's eye out."
icon_state = "unathi_helm_cheap"
item_state = "unathi_helm_cheap"
_color = "unathi_helm_cheap"
/obj/item/clothing/suit/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Unathi")
/obj/item/clothing/suit/space/unathi/rig_cheap
name = "NT breacher chassis"
desc = "A cheap NT knock-off of a Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
icon_state = "rig-unathi-cheap"
item_state = "rig-unathi-cheap"
slowdown = 3
/obj/item/clothing/head/helmet/space/unathi/breacher
name = "breacher helm"
desc = "Weathered, ancient and battle-scarred. The helmet is too."
icon_state = "unathi_breacher"
item_state = "unathi_breacher"
_color = "unathi_breacher"
/obj/item/clothing/suit/space/unathi/breacher
name = "breacher chassis"
desc = "Huge, bulky and absurdly heavy. It must be like wearing a tank."
icon_state = "unathi_breacher"
item_state = "unathi_breacher"
_color = "unathi_breacher"
slowdown = 1
// Vox space gear (vaccuum suit, low pressure armour)
// Can't be equipped by any other species due to bone structure and vox cybernetics.
@@ -58,8 +86,9 @@
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/handcuffs,/obj/item/weapon/tank)
slowdown = 2
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.6
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Vox", "Vox Armalis")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi',
@@ -68,6 +97,7 @@
/obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.6
flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE
species_restricted = list("Vox","Vox Armalis")
sprite_sheets = list(
@@ -92,6 +122,7 @@
icon_state = "vox-carapace"
item_state = "vox-carapace"
desc = "A glowing visor, perhaps stolen from a depressed Cylon."
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
/obj/item/clothing/suit/space/vox/carapace
name = "alien carapace armour"
@@ -133,6 +164,7 @@
icon_state = "vox-casual-1"
_color = "vox-casual-1"
item_state = "vox-casual-1"
body_parts_covered = LEGS
/obj/item/clothing/under/vox/vox_robes
name = "alien robes"
@@ -163,8 +195,7 @@
species_restricted = list("Vox","Vox Armalis")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/feet.dmi',
"Vox Armalis" = 'icons/mob/species/armalis/feet.dmi',
"Vox Armalis" = 'icons/mob/species/armalis/feet.dmi'
)
action_button_name = "Toggle the magclaws"
@@ -177,7 +208,10 @@
user << "You relax your deathgrip on the flooring."
else
//make sure these can only be used when equipped.
if (!is_equipped())
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if (H.shoes != src)
user << "You will have to put on the [src] before you can do that."
return
@@ -202,76 +236,7 @@
..()
if (magpulse)
usr << "It would be hard to take these off without relaxing your grip first." //theoretically this message should only be seen by the wearer when the claws are equipped.
////////////////UNATHI/////////////////////
/obj/item/clothing/suit/space/rig/unathi
icon_state = "rig-unathi-engineering"
item_state = "rig-unathi-engineering"
species_restricted = list("Unathi")
/obj/item/clothing/suit/space/rig/security/unathi
icon_state = "rig-unathi-sec"
item_state = "rig-unathi-sec"
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/rig/unathi
icon_state = "rig0-unathi-engineering"
item_state = "rig0-unathi-engineering"
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/rig/security/unathi
icon_state = "rig0-unathi-sec"
item_state = "rig0-unathi-sec"
species_restricted = list("Unathi")
//Unathi space gear. Huge and restrictive.
/obj/item/clothing/head/helmet/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
var/up = 0 //So Unathi helmets play nicely with the weldervision check.
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/unathi/helmet_cheap
name = "NT breacher helmet"
desc = "Hey! Watch it with that thing! It's a knock-off of a Unathi battle-helm, and that spike could put someone's eye out."
icon_state = "unathi_helm_cheap"
item_state = "unathi_helm_cheap"
_color = "unathi_helm_cheap"
/obj/item/clothing/suit/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
species_restricted = list("Unathi")
/obj/item/clothing/suit/space/unathi/rig_cheap
name = "NT breacher chassis"
desc = "A cheap NT knock-off of a Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
icon_state = "rig-unathi-cheap"
item_state = "rig-unathi-cheap"
slowdown = 3
/obj/item/clothing/head/helmet/space/unathi/breacher
name = "breacher helm"
desc = "Weathered, ancient and battle-scarred. The helmet is too."
icon_state = "unathi_breacher"
item_state = "unathi_breacher"
_color = "unathi_breacher"
/obj/item/clothing/suit/space/unathi/breacher
name = "breacher chassis"
desc = "Huge, bulky and absurdly heavy. It must be like wearing a tank."
icon_state = "unathi_breacher"
item_state = "unathi_breacher"
_color = "unathi_breacher"
slowdown = 1
// PLASMEN SHIT
// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON
/obj/item/clothing/suit/space/plasmaman
w_class = 3
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box/magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
@@ -280,7 +245,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Plasmaman")
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | PLASMAGUARD
@@ -321,4 +286,4 @@
if(on)
user.SetLuminosity(user.luminosity - brightness_on)
// user.UpdateLuminosity()
SetLuminosity(brightness_on)
SetLuminosity(brightness_on)
+1 -1
View File
@@ -25,5 +25,5 @@
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT||HIDETAIL
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
@@ -24,7 +24,7 @@
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
//Deathsquad suit
@@ -6,7 +6,6 @@
allowed = list(/obj/item/weapon/cell)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
siemens_coefficient = 0.2
loose = 0
/obj/item/clothing/suit/space/space_ninja
+61 -136
View File
@@ -1,89 +1,29 @@
//Species modification item.
/obj/item/weapon/modkit/tajaran
name = "tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Tajara."
icon = 'icons/obj/custom_items.dmi'
icon_state = "royce_kit"
/obj/item/weapon/modkit/unathi
name = "Unathi hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi."
icon = 'icons/obj/custom_items.dmi'
icon_state = "royce_kit"
/obj/item/clothing/head/helmet/space/rig/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/modkit/tajaran))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << "\red You painstakingly modify [src] to make it more suitable for a Tajaran user."
new /obj/item/clothing/head/helmet/space/rig/tajara(user.loc)
del(I)
del(src)
return
if(istype(I,/obj/item/weapon/modkit/unathi))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << "\red You painstakingly modify [src] to make it more suitable for a Tajaran user."
new /obj/item/clothing/head/helmet/space/rig/unathi(user.loc)
del(I)
del(src)
return
..()
/obj/item/clothing/suit/space/rig/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/modkit/tajaran))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
if(helmet)
helmet.loc = get_turf(src)
src.helmet = null
user << "\red You painstakingly modify [src] to make it more suitable for a Tajaran user. You pop the helmet on the floor"
else
user << "\red You painstakingly modify [src] to make it more suitable for a Tajaran user."
new /obj/item/clothing/suit/space/rig/tajara(user.loc)
del(I)
del(src)
return
if(istype(I,/obj/item/weapon/modkit/unathi))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
if(helmet)
helmet.loc = get_turf(src)
src.helmet = null
user << "\red You painstakingly modify [src] to make it more suitable for a Unathi user. You pop the helmet on the floor"
else
user << "\red You painstakingly modify [src] to make it more suitable for a Unathi user."
new /obj/item/clothing/suit/space/rig/unathi(user.loc)
del(I)
del(src)
return
..()
//Regular rig suits
/obj/item/clothing/head/helmet/space/rig
name = "engineering hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
name = "hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
icon_state = "rig0-engineering"
item_state = "eng_helm"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/device/flashlight)
var/brightness_on = 4 //luminosity when on
var/on = 0
_color = "engineering" //Determines used sprites: rig[on]-[color] and rig[on]-[color]2 (lying down sprite)
icon_action_button = "action_hardhat"
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
//Species-specific stuff.
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox")
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
"Tajaran" = 'icons/obj/clothing/species/tajaran/hats.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
)
attack_self(mob/user)
@@ -97,6 +37,10 @@
if(on) user.SetLuminosity(user.luminosity + brightness_on)
else user.SetLuminosity(user.luminosity - brightness_on)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_head()
pickup(mob/user)
if(on)
user.SetLuminosity(user.luminosity + brightness_on)
@@ -110,22 +54,26 @@
SetLuminosity(brightness_on)
/obj/item/clothing/suit/space/rig
name = "engineering hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
name = "hardsuit"
desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit."
icon_state = "rig-engineering"
item_state = "eng_hardsuit"
slowdown = 1
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox")
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
"Tajaran" = 'icons/obj/clothing/species/tajaran/suits.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi',
)
//Breach thresholds, should ideally be inherited by most (if not all) hardsuits.
@@ -267,6 +215,7 @@
return
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
helmet.pickup(H)
H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
H << "\blue You deploy your hardsuit helmet, sealing you off from the world."
@@ -354,6 +303,23 @@
..()
//Engineering rig
/obj/item/clothing/head/helmet/space/rig/engineering
name = "engineering hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
icon_state = "rig0-engineering"
item_state = "eng_helm"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
/obj/item/clothing/suit/space/rig/engineering
name = "engineering hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "rig-engineering"
item_state = "eng_hardsuit"
slowdown = 1
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
//Chief Engineer's rig
/obj/item/clothing/head/helmet/space/rig/elite
name = "advanced hardsuit helmet"
@@ -361,7 +327,6 @@
icon_state = "rig0-white"
item_state = "ce_helm"
_color = "white"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
sprite_sheets = null
/obj/item/clothing/suit/space/rig/elite
@@ -369,27 +334,8 @@
name = "advanced hardsuit"
desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish."
item_state = "ce_hardsuit"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
sprite_sheets = null
//Singuloth armor
/obj/item/clothing/head/helmet/space/rig/singuloth
name = "singuloth knight's helmet"
desc = "This is an adamantium helmet from the chapter of the Singuloth Knights. It shines with a holy aura."
icon_state = "rig0-singuloth"
item_state = "singuloth_helm"
_color = "singuloth"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
/obj/item/clothing/suit/space/rig/singuloth
icon_state = "rig-singuloth"
name = "singuloth knight's armor"
desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium."
item_state = "singuloth_hardsuit"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
//Mining rig
/obj/item/clothing/head/helmet/space/rig/mining
name = "mining hardsuit helmet"
@@ -397,26 +343,28 @@
icon_state = "rig0-mining"
item_state = "mining_helm"
_color = "mining"
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
/obj/item/clothing/suit/space/rig/mining
icon_state = "rig-mining"
name = "mining hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
item_state = "mining_hardsuit"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
//Syndicate rig
/obj/item/clothing/head/helmet/space/rig/syndi
name = "blood-red hardsuit helmet"
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
icon_state = "rig0-syndi"
icon_state = "rig0-syndie"
item_state = "syndie_helm"
_color = "syndi"
_color = "syndie"
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
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox")
/obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user)
if(camera)
@@ -441,9 +389,10 @@
slowdown = 1
w_class = 3
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_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/device/suit_cooling_unit)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box/magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
siemens_coefficient = 0.6
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox")
sprite_sheets = null
//Wizard Rig
/obj/item/clothing/head/helmet/space/rig/wizard
@@ -476,6 +425,7 @@
icon_state = "rig0-medical"
item_state = "medical_helm"
_color = "medical"
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50)
/obj/item/clothing/suit/space/rig/medical
icon_state = "rig-medical"
@@ -492,7 +442,7 @@
icon_state = "rig0-sec"
item_state = "sec_helm"
_color = "sec"
armor = list(melee = 50, bullet = 10, laser = 30, energy = 15, bomb = 45, bio = 100, rad = 10)
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
siemens_coefficient = 0.7
/obj/item/clothing/suit/space/rig/security
@@ -500,50 +450,25 @@
name = "security hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
item_state = "sec_hardsuit"
armor = list(melee = 50, bullet = 10, laser = 30, energy = 15, bomb = 45, bio = 100, rad = 10)
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
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)
siemens_coefficient = 0.7
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
/obj/item/clothing/head/helmet/space/rig/security/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/modkit/unathi))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << "\red You painstakingly modify [src] to make it more suitable for a Unathi user."
new /obj/item/clothing/head/helmet/space/rig/security/unathi(user.loc)
del(I)
del(src)
return
..()
/obj/item/clothing/suit/space/rig/security/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/modkit/unathi))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << "\red You painstakingly modify [src] to make it more suitable for a Unathi user."
new /obj/item/clothing/suit/space/rig/security/unathi(user.loc)
del(I)
del(src)
return
..()
//Atmospherics Rig (BS12)
/obj/item/clothing/head/helmet/space/rig/atmos
desc = "A special helmet designed for work in a hazardou, low pressure environments. Has reduced radiation shielding and protective plating to allow for greater mobility."
desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
name = "atmospherics hardsuit helmet"
icon_state = "rig0-atmos"
item_state = "atmos_helm"
_color = "atmos"
armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 20, bio = 100, rad = 0)
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/suit/space/rig/atmos
desc = "A special suit that protects against hazardous, low pressure environments. Has reduced radiation shielding to allow for greater mobility."
desc = "A special suit that protects against hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
icon_state = "rig-atmos"
name = "atmos hardsuit"
item_state = "atmos_hardsuit"
armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 20, bio = 100, rad = 0)
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+12 -4
View File
@@ -5,9 +5,9 @@
flags = FPRINT | TABLEPASS
cold_protection = UPPER_TORSO|LOWER_TORSO
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = UPPER_TORSO|LOWER_TORSO
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.6
@@ -60,9 +60,17 @@
icon_state = "armor_reflec"
item_state = "armor_reflec"
blood_overlay_type = "armor"
reflect_chance = 40
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0
/obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone)
var/hit_reflect_chance = reflect_chance
if(!(def_zone in list("chest", "groin"))) //If not shot where ablative is covering you, you don't get the reflection bonus!
hit_reflect_chance = 0
if (prob(hit_reflect_chance))
return 1
/obj/item/clothing/suit/armor/swat
name = "swat suit"
desc = "A heavily armored suit that protects against moderate damage. Used in special operations."
@@ -77,7 +85,7 @@
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.5
@@ -153,7 +161,7 @@
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0
/obj/item/clothing/suit/armor/heavy
+9 -2
View File
@@ -31,8 +31,15 @@
/*
* Costume
*/
/obj/item/clothing/suit/pirate
name = "pirate coat"
/obj/item/clothing/suit/pirate_brown
name = "brown pirate coat"
desc = "Yarr."
icon_state = "pirate_old"
item_state = "pirate_old"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/pirate_black
name = "black pirate coat"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
+2 -2
View File
@@ -23,7 +23,7 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
flags = FPRINT | TABLEPASS
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -68,7 +68,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT|HIDETAIL
heat_protection = UPPER_TORSO|LOWER_TORSO
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0
+9 -2
View File
@@ -88,7 +88,7 @@
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
/obj/item/clothing/under/acj
name = "administrative cybernetic jumpsuit"
@@ -102,7 +102,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0
/obj/item/clothing/under/owl
@@ -210,6 +210,13 @@
item_state = "pirate"
_color = "pirate"
/obj/item/clothing/under/pirate_rags
name = "pirate rags"
desc = "an old ragged set of clothing"
icon_state = "piraterags"
item_state = "piraterags"
_color = "piraterags"
/obj/item/clothing/under/soviet
name = "soviet uniform"
desc = "For the Motherland!"
+1 -1
View File
@@ -24,7 +24,7 @@
/datum/event/prison_break/start()
for(var/area/A in world)
if(istype(A, /area/security/prison) || istype(A, /area/security/brig) || istype(A, /area/prison) || istype(A, /area/security/lobby))
if(istype(A, /area/security/prison) || istype(A, /area/security/brig) || istype(A, /area/prison) || istype(A, /area/security/permabrig) || istype(A, /area/security/prisonlockers) || istype(A, /area/security/lobby) || istype(A, /area/security/processing))
prisonAreas += A
if(prisonAreas && prisonAreas.len > 0)
+37
View File
@@ -18,6 +18,17 @@
var/datum/seed/grown_seed
var/datum/reagents/grown_reagents
//--FalseIncarnate
var/IS_TRAY = 0 //used to track if the target is a hydroponics tray or soil. 1 if true, otherwise 0
var/tray_age //age of the plant in the tray
var/tray_weed_level //weed level of tray
var/tray_pest_level //pest level of tray
var/tray_toxins //toxicity of the tray
var/tray_yield_mod //yield modifier of the tray
var/tray_mutation_mod //mutation modifier of the tray
//--FalseIncarnate
if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target
@@ -38,6 +49,19 @@
else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics))
var/obj/machinery/portable_atmospherics/hydroponics/H = target
//--FalseIncarnate
//Flag the target as a tray for showing tray-specific stats
IS_TRAY = 1
//Save tray data to matching variables
tray_age = H.age
tray_weed_level = H.weedlevel
tray_pest_level = H.pestlevel
tray_toxins = H.toxins
tray_yield_mod = H.yield_mod
tray_mutation_mod = H.mutation_mod
//--FalseIncarnate
grown_seed = H.seed
grown_reagents = H.reagents
@@ -57,6 +81,19 @@
dat += "<tr><td><b>Maturation time</b></td><td>[grown_seed.maturation]</td></tr>"
dat += "<tr><td><b>Production time</b></td><td>[grown_seed.production]</td></tr>"
dat += "<tr><td><b>Potency</b></td><td>[grown_seed.potency]</td></tr>"
//--FalseIncarnate
//Tray-specific stats like Age and Mutation Modifier, not shown if target was not a hydroponics tray or soil
if(IS_TRAY == 1)
dat += "<tr><td></td></tr>"
dat += "<tr><td><b>Age</b></td><td>[tray_age]</td></tr>"
dat += "<tr><td><b>Weed Level</b></td><td>[tray_weed_level]</td></tr>"
dat += "<tr><td><b>Pest Level</b></td><td>[tray_pest_level]</td></tr>"
dat += "<tr><td><b>Toxins</b></td><td>[tray_toxins]</td></tr>"
dat += "<tr><td><b>Yield Modifier</b></td><td>[tray_yield_mod]</td></tr>"
dat += "<tr><td><b>Mutation Modifier</b></td><td>[tray_mutation_mod]</td></tr>"
//--FalseIncarnate
dat += "</table>"
if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len)
+1 -1
View File
@@ -15,7 +15,7 @@
spawntypes = list(
/obj/item/device/mass_spectrometer/adv=1,
/obj/item/clothing/glasses/hud/health=1,
/obj/machinery/bot/medbot/mysterious=1
/obj/machinery/bot/medbot/syndicate=1
)
fluffitems = list(
/obj/effect/decal/cleanable/blood=5,
@@ -19,6 +19,69 @@
if(src.stat == 2.0 && (act != "deathgasp"))
return
switch(act)
if("ping")
if (species.name == "Machine")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<B>[src]</B> pings at [param]."
else
message = "<B>[src]</B> pings."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 1
else
if (!species.name == "Machine")
return
if("buzz")
if (species.name == "Machine")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<B>[src]</B> buzzes at [param]."
else
message = "<B>[src]</B> buzzes."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 1
else
if (!species.name == "Machine")
return
if("beep")
if(species.name == "Machine")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<B>[src]</B> beeps at [param]."
else
message = "<B>[src]</B> beeps."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 1
else
if (!species.name == "Machine")
return
if ("airguitar")
if (!src.restrained())
message = "<B>[src]</B> is strumming the air and headbanging like a safari chimp."
@@ -567,6 +630,8 @@
message = "<B>[src]</B> makes a very loud noise."
m_type = 2
// Needed for M_TOXIC_FART
if("fart")
if(world.time-lastFart >= 600)
@@ -12,35 +12,31 @@ emp_act
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
visible_message("<span class='danger'>The [P.name] gets reflected by [src]!</span>", \
"<span class='userdanger'>The [P.name] gets reflected by [src]!</span>")
// Find a turf near or on the original location to bounce to
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.original = locate(new_x, new_y, P.z)
P.starting = curloc
P.current = curloc
P.firer = src
P.yo = new_y - curloc.y
P.xo = new_x - curloc.x
return -1 // complete projectile permutation
//Shields
if(check_shields(P.damage, "the [P.name]"))
P.on_hit(src, 2, def_zone)
return 2
//Laserproof armour
if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
var/reflectchance = 40 - round(P.damage/3)
if(!(def_zone in list("chest", "groin")))
reflectchance /= 2
if(prob(reflectchance))
visible_message("\red <B>The [P.name] gets reflected by [src]'s [wear_suit.name]!</B>")
// Find a turf near or on the original location to bounce to
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.original = locate(new_x, new_y, P.z)
P.starting = curloc
P.current = curloc
P.firer = src
P.yo = new_y - curloc.y
P.xo = new_x - curloc.x
return -1 // complete projectile permutation
//Shrapnel
if (P.damage_type == BRUTE)
@@ -138,6 +134,20 @@ emp_act
return 1
return 0
/mob/living/carbon/human/proc/check_reflect(var/def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on reflect_chance var of the object
if(wear_suit && istype(wear_suit, /obj/item/))
var/obj/item/I = wear_suit
if(I.IsReflect(def_zone) == 1)
return 1
if(l_hand && istype(l_hand, /obj/item/))
var/obj/item/I = l_hand
if(I.IsReflect(def_zone) == 1)
return 1
if(r_hand && istype(r_hand, /obj/item/))
var/obj/item/I = r_hand
if(I.IsReflect(def_zone) == 1)
return 1
return 0
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3)
@@ -254,7 +264,8 @@ emp_act
if(armor >= 2) return 0
if(!I.force) return 0
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
apply_damage(I.force, I.damtype, affecting, armor, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
var/bloody = 0
@@ -300,6 +311,10 @@ emp_act
if(bloody)
bloody_body(src)
if(Iforce > 10 || Iforce >= 5 && prob(33))
forcesay(hit_appends) //forcesay checks stat already
//Melee weapon embedded object code.
if (I.damtype == BRUTE && !I.is_robot_module())
var/damage = I.force
@@ -311,7 +326,7 @@ emp_act
var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class
//Sharp objects will always embed if they do enough damage.
if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance)))
if(((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) && (I.no_embed == 0) )
affecting.embed(I)
return 1
@@ -381,7 +396,7 @@ emp_act
//Sharp objects will always embed if they do enough damage.
//Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold
if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance)))
if(((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) && (I.no_embed == 0))
affecting.embed(I)
// Begin BS12 momentum-transfer code.
@@ -450,3 +465,35 @@ emp_act
var/penetrated_dam = max(0,(damage - max(0,(SS.breach_threshold - SS.damage))))
if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam)
/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
if(M.occupant.a_intent == "harm")
if(M.damtype == "brute")
step_away(src,M,15)
var/datum/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
if(affecting)
var/update = 0
switch(M.damtype)
if("brute")
if(M.force > 20)
Paralyse(1)
update |= affecting.take_damage(rand(M.force/2, M.force), 0)
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if("fire")
update |= affecting.take_damage(0, rand(M.force/2, M.force))
playsound(src, 'sound/items/Welder.ogg', 50, 1)
if("tox")
M.mech_toxin_damage(src)
else
return
updatehealth()
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
else
..()
return
@@ -77,6 +77,39 @@
..(message)
/mob/living/carbon/human/proc/forcesay(list/append)
if(stat == CONSCIOUS)
if(client)
var/virgin = 1 //has the text been modified yet?
var/temp = winget(client, "input", "text")
if(findtextEx(temp, "Say \"", 1, 7) && length(temp) > 5) //case sensitive means
temp = replacetext(temp, ";", "") //general radio
if(findtext(trim_left(temp), ":", 6, 7)) //dept radio
temp = copytext(trim_left(temp), 8)
virgin = 0
if(virgin)
temp = copytext(trim_left(temp), 6) //normal speech
virgin = 0
while(findtext(trim_left(temp), ":", 1, 2)) //dept radio again (necessary)
temp = copytext(trim_left(temp), 3)
if(findtext(temp, "*", 1, 2)) //emotes
return
world << "Text after stuff is [temp]"
temp = copytext(trim_left(temp), 1, rand(5,8))
world << "Text after trimming is [temp]"
var/trimmed = trim_left(temp)
if(length(trimmed))
if(append)
temp += pick(append)
say(temp)
winset(client, "input", "text=[null]")
/mob/living/carbon/human/say_understands(var/other,var/datum/language/speaking = null)
@@ -428,24 +428,26 @@ proc/get_damage_icon_part(damage_state, body_part)
if(f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
if(facial_hair_style && src.species.name in facial_hair_style.species_allowed)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
face_standing.Blend(facial_s, ICON_OVERLAY)
if(facial_hair_style && facial_hair_style.species_allowed)
if(src.species.name in facial_hair_style.species_allowed)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
face_standing.Blend(facial_s, ICON_OVERLAY)
else
warning("Invalid f_style for [species.name]: [f_style]")
//warning("Invalid f_style for [species.name]: [f_style]")
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
if(hair_style && src.species.name in hair_style.species_allowed)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
if(hair_style && hair_style.species_allowed)
if(src.species.name in hair_style.species_allowed)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
face_standing.Blend(hair_s, ICON_OVERLAY)
face_standing.Blend(hair_s, ICON_OVERLAY)
else
warning("Invalid h_style for [species.name]: [h_style]")
//warning("Invalid h_style for [species.name]: [h_style]")
overlays_standing[HAIR_LAYER] = image(face_standing)
@@ -899,9 +899,9 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
canremove = 0
armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0)
@@ -953,7 +953,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
unacidable = 1
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0)
/obj/effect/golem_rune
+29
View File
@@ -168,6 +168,35 @@
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
/mob/living/mech_melee_attack(obj/mecha/M)
if(M.occupant.a_intent == "harm")
if(M.damtype == "brute")
step_away(src,M,15)
switch(M.damtype)
if("brute")
Paralyse(1)
take_overall_damage(rand(M.force/2, M.force))
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if("fire")
take_overall_damage(0, rand(M.force/2, M.force))
playsound(src, 'sound/items/Welder.ogg', 50, 1)
if("tox")
M.mech_toxin_damage(src)
else
return
updatehealth()
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
else
step_away(src,M)
add_logs(M.occupant, src, "pushed", object=M, admin=0)
M.occupant_message("<span class='warning'>You push [src] out of the way.</span>")
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
return
//This is called when the mob is thrown into a dense turf
/mob/living/proc/turf_collision(var/turf/T, var/speed)
+23 -23
View File
@@ -30,25 +30,25 @@ var/list/department_radio_keys = list(
":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk",
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
":G" = "changeling", "#G" = "changeling", ".G" = "changeling",
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
":ð" = "department", "#ð" = "department", ".ð" = "department",
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
":û" = "Security", "#û" = "Security", ".û" = "Security",
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
":è" = "binary", "#è" = "binary", ".è" = "binary",
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling"
":G" = "changeling", "#G" = "changeling", ".G" = "changeling"
/* //kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
":ð" = "department", "#ð" = "department", ".ð" = "department",
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
":û" = "Security", "#û" = "Security", ".û" = "Security",
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
":è" = "binary", "#è" = "binary", ".è" = "binary",
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling" */
)
/mob/living/proc/binarycheck()
@@ -178,7 +178,7 @@ var/list/department_radio_keys = list(
message_mode = department_radio_keys[channel_prefix]
if (message_mode || speaking || copytext(message,1,2) == ":")
message = trim(copytext(message, 3))
if (!(istype(src,/mob/living/carbon/human) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || isAI(src) && (message_mode=="department") || (message_mode in radiochannels))))
if (!(istype(src,/mob/living/carbon/human) && !isAI(src) && !isrobot(src) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department") || isAI(src) && (message_mode=="department") || (message_mode in radiochannels)))
message_mode = null //only humans can use headsets
if(src.stunned > 2 || (traumatic_shock > 61 && prob(50)))
@@ -302,9 +302,9 @@ var/list/department_radio_keys = list(
if(issilicon(src))
if(isAI(src))//for the AI's radio. This can't be with the borg thing above due to typecasting.
var/mob/living/silicon/ai/A = src
if(A.radio)
A.radio.talk_into(src, message, message_mode)
used_radios += A.radio
if(A.aiRadio)
A.aiRadio.talk_into(src, message, message_mode)
used_radios += A.aiRadio
else
var/mob/living/silicon/Ro=src
if(!isAI(Ro))
+20 -12
View File
@@ -19,7 +19,7 @@ var/list/ai_list = list()
anchored = 1 // -- TLE
density = 1
status_flags = CANSTUN|CANPARALYSE|CANPUSH
var/list/network = list("SS13")
var/list/network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
var/obj/machinery/camera/current = null
var/list/connected_robots = list()
var/aiRestorePowerRoutine = 0
@@ -28,13 +28,14 @@ var/list/ai_list = list()
var/viewalerts = 0
var/lawcheck[1]
var/ioncheck[1]
var/lawchannel = "Common" // Default channel on which to state laws
var/icon/holo_icon//Default is assigned when AI is created.
var/obj/item/device/pda/ai/aiPDA = null
var/obj/item/device/multitool/aiMulti = null
var/custom_sprite = 0 //For our custom sprites
var/alienAI = 0
var/obj/item/device/radio/headset/heads/ai_integrated/radio = null
var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null
//MALFUNCTION
var/datum/module_picker/malf_picker
@@ -91,15 +92,15 @@ var/list/ai_list = list()
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
aiMulti = new(src)
radio = new(src)
radio.myAi = src
aiRadio = new(src)
aiRadio.myAi = src
aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
if (istype(loc, /turf))
verbs.Add(/mob/living/silicon/ai/proc/ai_network_change, \
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
/mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrateed_radio)
/mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrated_radio)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
@@ -413,9 +414,12 @@ var/list/ai_list = list()
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
checklaws()
if(href_list["say_word"])
play_vox_word(href_list["say_word"], null, src)
return
if (href_list["lawr"]) // Selects on which channel to state laws
var/setchannel = input(usr, "Specify channel.", "Channel selection") in list("State","Common","Science","Command","Medical","Engineering","Security","Supply","Binary","Holopad", "Cancel")
if(setchannel == "Cancel")
return
lawchannel = setchannel
checklaws()
if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawi"])
@@ -427,7 +431,11 @@ var/list/ai_list = list()
if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
statelaws()
if(href_list["say_word"])
play_vox_word(href_list["say_word"], null, src)
return
if (href_list["track"])
var/mob/target = locate(href_list["track"]) in mob_list
var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
@@ -786,11 +794,11 @@ var/list/ai_list = list()
return ..()
/mob/living/silicon/ai/proc/control_integrateed_radio()
/mob/living/silicon/ai/proc/control_integrated_radio()
set name = "Radio Settings"
set desc = "Allows you to change settings of your radio."
set category = "AI Commands"
src << "Accessing Subspace Transceiver control..."
if (src.radio)
src.radio.interact(src)
if (src.aiRadio)
src.aiRadio.interact(src)
+22 -14
View File
@@ -51,24 +51,32 @@
src.laws_sanity_check()
src.laws.clear_supplied_laws()
/mob/living/silicon/ai/proc/statelaws() // -- TLE
// set category = "AI Commands"
// set name = "State Laws"
src.say("Current Active Laws:")
/var/prefix = ""
switch(lawchannel)
if("Common") prefix = ";"
if("Science") prefix = ":n "
if("Command") prefix = ":c "
if("Medical") prefix = ":m "
if("Engineering") prefix = ":e "
if("Security") prefix = ":s "
if("Supply") prefix = ":u "
if("Binary") prefix = ":b "
if("Holopad") prefix = ":h "
else prefix = ""
src.say("[prefix]Current Active Laws:")
//src.laws_sanity_check()
//src.laws.show_laws(world)
var/number = 1
sleep(10)
if (src.laws.zeroth)
if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
src.say("0. [src.laws.zeroth]")
src.say("[prefix]0. [src.laws.zeroth]")
sleep(10)
for (var/index = 1, index <= src.laws.ion.len, index++)
@@ -76,7 +84,7 @@
var/num = ionnum()
if (length(law) > 0)
if (src.ioncheck[index] == "Yes")
src.say("[num]. [law]")
src.say("[prefix][num]. [law]")
sleep(10)
for (var/index = 1, index <= src.laws.inherent.len, index++)
@@ -84,7 +92,7 @@
if (length(law) > 0)
if (src.lawcheck[index+1] == "Yes")
src.say("[number]. [law]")
src.say("[prefix][number]. [law]")
sleep(10)
number++
@@ -95,7 +103,7 @@
if (length(law) > 0)
if(src.lawcheck.len >= number+1)
if (src.lawcheck[number+1] == "Yes")
src.say("[number]. [law]")
src.say("[prefix][number]. [law]")
sleep(10)
number++
@@ -106,8 +114,6 @@
var/list = "<b>Which laws do you want to include when stating them for the crew?</b><br><br>"
if (src.laws.zeroth)
if (!src.lawcheck[1])
src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
@@ -144,6 +150,8 @@
src.lawcheck[number+1] = "Yes"
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
number++
list += {"<br><br><A href='byond://?src=\ref[src];laws=1'>State Laws</A>"}
list += {"<br><A href='byond://?src=\ref[src];lawr=1'>Channel: [src.lawchannel]</A><br>"}
list += {"<A href='byond://?src=\ref[src];laws=1'>State Laws</A>"}
usr << browse(list, "window=laws")
@@ -253,6 +253,10 @@
stored_comms["wood"]++
stored_comms["wood"]++
stored_comms["wood"]++
else if(istype(W,/obj/item/weapon/broken_bottle))
stored_comms["glass"]++
stored_comms["glass"]++
stored_comms["glass"]++
else
continue
@@ -108,3 +108,92 @@
if(2)
var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default)
laws = new lawtype()
/mob/living/silicon/robot/proc/statelaws() // -- TLE
// set category = "AI Commands"
// set name = "State Laws"
src.say("Current Active Laws:")
//src.laws_sanity_check()
//src.laws.show_laws(world)
var/number = 1
sleep(10)
if (src.laws.zeroth)
if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
src.say("0. [src.laws.zeroth]")
sleep(10)
for (var/index = 1, index <= src.laws.ion.len, index++)
var/law = src.laws.ion[index]
var/num = ionnum()
if (length(law) > 0)
if (src.ioncheck[index] == "Yes")
src.say("[num]. [law]")
sleep(10)
for (var/index = 1, index <= src.laws.inherent.len, index++)
var/law = src.laws.inherent[index]
if (length(law) > 0)
if (src.lawcheck[index+1] == "Yes")
src.say("[number]. [law]")
sleep(10)
number++
for (var/index = 1, index <= src.laws.supplied.len, index++)
var/law = src.laws.supplied[index]
if (length(law) > 0)
if(src.lawcheck.len >= number+1)
if (src.lawcheck[number+1] == "Yes")
src.say("[number]. [law]")
sleep(10)
number++
/mob/living/silicon/robot/verb/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite
set category = "Robot Commands"
set name = "State Laws"
var/list = "<b>Which laws do you want to include when stating them for the crew?</b><br><br>"
if (src.laws.zeroth)
if (!src.lawcheck[1])
src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
list += {"<A href='byond://?src=\ref[src];lawc=0'>[src.lawcheck[1]] 0:</A> [src.laws.zeroth]<BR>"}
for (var/index = 1, index <= src.laws.ion.len, index++)
var/law = src.laws.ion[index]
if (length(law) > 0)
if (!src.ioncheck[index])
src.ioncheck[index] = "Yes"
list += {"<A href='byond://?src=\ref[src];lawi=[index]'>[src.ioncheck[index]] [ionnum()]:</A> [law]<BR>"}
src.ioncheck.len += 1
var/number = 1
for (var/index = 1, index <= src.laws.inherent.len, index++)
var/law = src.laws.inherent[index]
if (length(law) > 0)
src.lawcheck.len += 1
if (!src.lawcheck[number+1])
src.lawcheck[number+1] = "Yes"
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
number++
for (var/index = 1, index <= src.laws.supplied.len, index++)
var/law = src.laws.supplied[index]
if (length(law) > 0)
src.lawcheck.len += 1
if (!src.lawcheck[number+1])
src.lawcheck[number+1] = "Yes"
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
number++
list += {"<br><br><A href='byond://?src=\ref[src];laws=1'>State Laws</A>"}
usr << browse(list, "window=laws")
@@ -39,6 +39,7 @@
uneq_all()
src.stat = 1
Paralyse(3)
has_power = 0
else
if(src.module_state_1)
src.cell.use(3)
@@ -55,6 +56,7 @@
Paralyse(3)
src.stat = 0
has_power = 1
else
uneq_all()
src.stat = 1
+67 -2
View File
@@ -63,6 +63,8 @@
var/weapon_lock = 0
var/weaponlock_time = 120
var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default
var/lawcheck[1] //For stating laws.
var/ioncheck[1] //Ditto.
var/lockcharge //Used when locking down a borg to preserve cell charge
var/speed = 0 //Cause sec borgs gotta go fast //No they dont!
var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them.
@@ -70,6 +72,7 @@
var/pose
var/base_icon = ""
var/crisis = 0
var/syndicateborg = 0
/mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0, var/alien = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
@@ -141,6 +144,9 @@
hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
/mob/living/silicon/robot/proc/init(var/alien=0)
if(syndicateborg)
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
return
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
if(mmi.alien || alien)
laws = new /datum/ai_laws/alienmov()
@@ -164,6 +170,8 @@
if (!rbPDA)
rbPDA = new/obj/item/device/pda/ai(src)
rbPDA.set_name_and_job(custom_name,braintype)
if(syndicateborg)
rbPDA.hidden = 1
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
//Improved /N
@@ -185,7 +193,7 @@
if(mmi != null && mmi.alien)
modules="Hunter"
modtype = input("Please, select a module!", "Robot", null, null) in modules
designation = modtype
var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
var/channels = list()
@@ -304,6 +312,7 @@
choose_icon(6,module_sprites)
radio.config(channels)
notify_ai(2)
/mob/living/silicon/robot/proc/updatename(var/prefix as text)
if(prefix)
@@ -357,6 +366,7 @@
var/newname
newname = copytext(sanitize(input(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","") as text),1,MAX_NAME_LEN)
if (newname != "")
notify_ai(3, name, newname)
custom_name = newname
updatename()
@@ -565,7 +575,11 @@
..()
if (istype(AM, /obj/machinery/recharge_station))
var/obj/machinery/recharge_station/F = AM
F.move_inside()
if(F.panel_open)
usr << "\blue <b>Close the maintenance panel first.</b>"
return
else
F.move_inside()
if (!istype(AM, /atom/movable))
return
if (!now_pushing)
@@ -1228,6 +1242,25 @@
else
src << "Module isn't activated"
installed_modules()
if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawc"])
switch(lawcheck[L+1])
if ("Yes") lawcheck[L+1] = "No"
if ("No") lawcheck[L+1] = "Yes"
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
checklaws()
if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawi"])
switch(ioncheck[L])
if ("Yes") ioncheck[L] = "No"
if ("No") ioncheck[L] = "Yes"
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
checklaws()
if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
statelaws()
return
/mob/living/silicon/robot/proc/radio_menu()
@@ -1370,3 +1403,35 @@
return
else
src << "Your icon has been set. You now require a module reset to change it."
/mob/living/silicon/robot/syndicate
icon_state = "syndie_bloodhound"
lawupdate = 0
scrambledcodes = 1
syndicateborg = 1
modtype = "Synd"
faction = list("syndicate")
designation = "Syndicate"
req_access = list(access_syndicate)
/mob/living/silicon/robot/syndicate/New(loc)
..()
cell.maxcharge = 25000
cell.charge = 25000
radio = new /obj/item/device/radio/borg/syndicate(src)
module = new /obj/item/weapon/robot_module/syndicate(src)
laws = new /datum/ai_laws/syndicate_override()
Namepick()
/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/oldname, var/newname)
if(!connected_ai)
return
switch(notifytype)
if(1) //New Cyborg
connected_ai << "<br><br><span class='notice'>NOTICE - New cyborg connection detected: <a href='byond://?src=\ref[connected_ai];track2=\ref[connected_ai];track=\ref[src]'>[name]</a></span><br>"
if(2) //New Module
connected_ai << "<br><br><span class='notice'>NOTICE - Cyborg module change detected: [name] has loaded the [designation] module.</span><br>"
if(3) //New Name
connected_ai << "<br><br><span class='notice'>NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].</span><br>"
@@ -235,6 +235,7 @@
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/device/taperecorder(src)
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
return
@@ -250,6 +251,7 @@
src.modules += new /obj/item/weapon/storage/bag/trash(src)
src.modules += new /obj/item/weapon/mop(src)
src.modules += new /obj/item/device/lightreplacer(src)
src.modules += new /obj/item/weapon/holosign_creator(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("lube", 250)
@@ -298,6 +300,7 @@
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
src.modules += new /obj/item/device/taperecorder(src)
src.modules += new /obj/item/weapon/gripper/paperwork(src)
src.emag = new /obj/item/weapon/stamp/denied(src)
@@ -328,14 +331,16 @@
/obj/item/weapon/robot_module/syndicate
name = "syndicate robot module"
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/melee/energy/sword(src)
src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
src.modules += new /obj/item/weapon/card/emag(src)
return
/obj/item/weapon/robot_module/syndicate/New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
src.modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src)
src.modules += new /obj/item/weapon/card/emag(src)
src.modules += new /obj/item/weapon/gun/energy/laser/cyborg(src)
src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.emag = null
return
/obj/item/weapon/robot_module/combat
name = "combat robot module"
@@ -394,6 +399,7 @@
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/weapon/matter_decompiler(src)
src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
src.modules += new /obj/item/weapon/soap(src)
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
src.emag.name = "Plasma Cutter"
@@ -23,9 +23,4 @@
return tally+config.robot_delay
/mob/living/silicon/robot/Move()
if (!is_component_functioning("actuator") || !is_component_functioning("power cell") || !cell)
return
else
if (src.cell.charge > 0)
..()
..()
@@ -1,145 +0,0 @@
// robot_upgrades.dm
// Contains various borg upgrades.
/obj/item/borg/upgrade/
name = "A borg upgrade module."
desc = "Protected by FRM."
icon = 'icons/obj/module.dmi'
icon_state = "cyborg_upgrade"
var/construction_time = 120
var/construction_cost = list("metal"=10000)
var/locked = 0
var/require_module = 0
var/installed = 0
/obj/item/borg/upgrade/proc/action()
return
/obj/item/borg/upgrade/reset/
name = "Borg module reset board"
desc = "Used to reset a borg's module. Destroys any other upgrades applied to the borg."
icon_state = "cyborg_upgrade1"
require_module = 1
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
R.uneq_all()
del(R.module)
R.module = null
R.modtype = "robot"
R.real_name = "Cyborg [R.ident]"
R.name = R.real_name
R.nopush = 0
R.hands.icon_state = "nomod"
R.base_icon = "robot"
R.icon_state = "robot"
R.updateicon()
return 1
/obj/item/borg/upgrade/flashproof/
name = "Borg Flash-Supression"
desc = "A highly advanced, complicated system for supressing incoming flashes directed at the borg's optical processing system."
construction_cost = list("metal"=10000,"gold"=2000,"silver"=3000,"glass"=2000, "diamond"=5000)
icon_state = "cyborg_upgrade4"
require_module = 1
/obj/item/borg/upgrade/flashproof/New() // Why the fuck does the fabricator make a new instance of all the items?
//desc = "Sunglasses with duct tape." // Why? D:
/obj/item/borg/upgrade/flashproof/action(var/mob/living/silicon/robot/R)
if(R.module)
R.module += src
return 1
/obj/item/borg/upgrade/restart/
name = "Borg emergancy restart module"
desc = "Used to force a restart of a disabled-but-repaired borg, bringing it back online."
construction_cost = list("metal"=60000 , "glass"=5000)
icon_state = "cyborg_upgrade1"
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
if(!R.key)
for(var/mob/dead/observer/ghost in world)
if(ghost.corpse == R && ghost.client)
ghost.client.mob = ghost.corpse
if(R.health < 0)
usr << "You have to repair the borg before using this module!"
return 0
R.stat = 0
return 1
/obj/item/borg/upgrade/vtec/
name = "Borg VTEC Module"
desc = "Used to kick in a borgs VTEC systems, increasing their speed."
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000)
icon_state = "cyborg_upgrade2"
require_module = 1
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
if(R.speed == -1)
return 0
R.speed--
return 1
/obj/item/borg/upgrade/tasercooler/
name = "Borg Rapid Taser Cooling Module"
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate.."
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500)
icon_state = "cyborg_upgrade3"
require_module = 1
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
if(!istype(R.module, /obj/item/weapon/robot_module/security))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
usr << "This cyborg has had its taser removed!"
return 0
if(T.recharge_time <= 2)
R << "Maximum cooling achieved for this hardpoint!"
usr << "There's no room for another cooling unit!"
return 0
else
T.recharge_time = max(2 , T.recharge_time - 4)
return 1
/obj/item/borg/upgrade/jetpack/
name = "Mining Borg Jetpack"
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations"
construction_cost = list("metal"=10000,"plasma"=15000,"uranium" = 20000)
icon_state = "cyborg_upgrade3"
require_module = 1
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
else
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
R.icon_state="Miner+j"
return 1
+27 -7
View File
@@ -50,18 +50,28 @@
alien_talk(message)
else if (department_radio_keys[prefix] == "department")
if(isAI(src)&&client)//For patching directly into AI holopads.
if(isAI(src)&&client) //For patching directly into AI holopads.
var/mob/living/silicon/ai/U = src
message = copytext(message, 3)
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
U.holopad_talk(message)
else//Will not allow anyone by an active AI to use this function.
else //Will not allow anyone by an active AI to use this function.
src << "This function is not available to you."
return
else
return ..(message)
var/mob/living/silicon/ai/AI = src
if (isAI(src) && AI.aiRadio.disabledAi)
src << "\red System Error - Transceiver Disabled"
return
else
return ..(message)
else
return ..(message)
var/mob/living/silicon/ai/AI = src
if (isAI(src) && AI.aiRadio.disabledAi)
src << "\red System Error - Transceiver Disabled"
return
else
return ..(message)
//For holopads only. Usable by AI.
/mob/living/silicon/ai/proc/holopad_talk(var/message)
@@ -101,21 +111,31 @@
log_say("[key_name(src)] : [message]")
var/desig = "Unknown" //ezmode for taters
if(isrobot(src))
var/mob/living/silicon/S = src
if(S.designation)
desig = trim_left(S.designation)
else
desig = "Default"
else if(isAI(src))
desig = "AI"
message = trim(message)
if (!message)
return
var/message_a = say_quote(message)
var/rendered = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
var/rendered = "<i><span class='game say'>Robotic Talk, <span class='name'>[name] ([desig])</span> <span class='message'>[message_a]</span></span></i>"
for (var/mob/living/S in living_mob_list)
if(S.robot_talk_understand && (S.robot_talk_understand == robot_talk_understand)) // This SHOULD catch everything caught by the one below, but I'm not going to change it.
if(istype(S , /mob/living/silicon/ai))
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name]</span></a> <span class='message'>[message_a]</span></span></i>"
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name] ([desig])</span></a> <span class='message'>[message_a]</span></span></i>"
S.show_message(renderedAI, 2)
else if(istype(S , /mob/dead/observer) && S.stat == DEAD)
var/rendered2 = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <a href='byond://?src=\ref[S];follow2=\ref[S];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
var/rendered2 = "<i><span class='game say'>Robotic Talk, <span class='name'>[name] ([desig])</span> <a href='byond://?src=\ref[S];follow2=\ref[S];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
S.show_message(rendered2, 2)
else
S.show_message(rendered, 2)
@@ -10,6 +10,7 @@
var/list/hud_list[10]
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
var/designation = ""
var/obj/item/device/camera/siliconcam/aiCamera = null //photography
/mob/living/silicon/proc/cancelAlarm()
@@ -142,7 +142,7 @@
/obj/effect/landmark/mobcorpse/pirate/ranged
name = "Pirate Gunner"
corpsesuit = /obj/item/clothing/suit/pirate
corpsesuit = /obj/item/clothing/suit/pirate_black
corpsehelmet = /obj/item/clothing/head/pirate
@@ -251,7 +251,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
f_amt = 3000
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
/obj/item/clothing/head/furcap
name = "fur cap"
@@ -262,7 +262,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
f_amt = 5000
cold_protection = HEAD
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE
/obj/item/clothing/shoes/furboots
name = "fur boots"
@@ -273,7 +273,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
f_amt = 4000
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
/obj/item/clothing/suit/furcoat
name = "fur coat"
@@ -286,7 +286,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
body_parts_covered = UPPER_TORSO|LEGS|ARMS|LOWER_TORSO
allowed = list (/obj/item/weapon/tank/emergency_oxygen)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
/obj/item/clothing/suit/furcape
name = "fur cape"
@@ -298,4 +298,4 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
f_amt = 10000
body_parts_covered = UPPER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO | LEGS | ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
+1
View File
@@ -223,6 +223,7 @@
O.loc = loc
O.job = "Cyborg"
O.notify_ai(1)
if(O.mind.assigned_role == "Cyborg")
if(O.mind.role_alt_title == "Android")
+8 -7
View File
@@ -73,13 +73,14 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
var/datum/organ/internal/heart/heart = internal_organs_by_name["heart"]
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3
if(heart)
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3
//Effects of bloodloss
switch(blood_volume)
-3
View File
@@ -848,9 +848,6 @@
return 1
/obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1)
if(..())
return 0
if(!can_use(usr, 1))
return 0
+25 -41
View File
@@ -56,6 +56,7 @@ display round(lastgen) and plasmatank amount
var/open = 0
var/recent_fault = 0
var/power_output = 1
var/consumption = 0
/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
return 1
@@ -101,7 +102,7 @@ display round(lastgen) and plasmatank amount
var/sheet_path = /obj/item/stack/sheet/mineral/plasma
var/board_path = "/obj/item/weapon/circuitboard/pacman"
var/sheet_left = 0 // How much is left of the sheet
var/time_per_sheet = 40
var/time_per_sheet = 260
var/heat = 0
/obj/machinery/power/port_gen/pacman/initialize()
@@ -114,8 +115,8 @@ display round(lastgen) and plasmatank amount
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src, 1)
component_parts += new /obj/item/stack/cable_coil(src, 1)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new board_path(src)
var/obj/sheet = new sheet_path(null)
@@ -128,16 +129,16 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/RefreshParts()
var/temp_rating = 0
var/temp_reliability = 0
var/consumption_coeff = 0
for(var/obj/item/weapon/stock_parts/SP in component_parts)
if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
max_sheets = SP.rating * SP.rating * 50
else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
else if(istype(SP, /obj/item/weapon/stock_parts/capacitor))
temp_rating += SP.rating
for(var/obj/item/weapon/CP in component_parts)
temp_reliability += CP.reliability
reliability = min(round(temp_reliability / 4), 100)
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
else
consumption_coeff += SP.rating
power_gen = round(initial(power_gen) * temp_rating * 2)
consumption = consumption_coeff
/obj/machinery/power/port_gen/pacman/examine()
..()
@@ -160,7 +161,7 @@ display round(lastgen) and plasmatank amount
sheets -= amount
/obj/machinery/power/port_gen/pacman/UseFuel()
var/needed_sheets = 1 / (time_per_sheet / power_output)
var/needed_sheets = 1 / (time_per_sheet * consumption / power_output)
var/temp = min(needed_sheets, sheet_left)
needed_sheets -= temp
sheet_left -= temp
@@ -175,9 +176,9 @@ display round(lastgen) and plasmatank amount
var/bias = 0
if (power_output > 4)
upper_limit = 400
bias = power_output * 3
bias = power_output - consumption * (4 - consumption)
if (heat < lower_limit)
heat += 3
heat += 4 - consumption
else
heat += rand(-7 + bias, 7 + bias)
if (heat < lower_limit)
@@ -191,7 +192,6 @@ display round(lastgen) and plasmatank amount
return
/obj/machinery/power/port_gen/pacman/handleInactive()
if (heat > 0)
heat = max(heat - 2, 0)
src.updateDialog()
@@ -215,45 +215,29 @@ display round(lastgen) and plasmatank amount
emagged = 1
emp_act(1)
else if(!active)
if(istype(O, /obj/item/weapon/wrench))
if(!anchored)
if(!anchored && !isinspace())
connect_to_network()
user << "\blue You secure the generator to the floor."
anchored = 1
else
disconnect_from_network()
user << "\blue You unsecure the generator from the floor."
anchored = 0
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
anchored = !anchored
else if(istype(O, /obj/item/weapon/screwdriver))
open = !open
panel_open = !panel_open
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(open)
user << "\blue You open the access panel."
if(panel_open)
user << "<span class='notice'>You open the access panel.</span>"
else
user << "\blue You close the access panel."
else if(istype(O, /obj/item/weapon/crowbar) && open)
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
for(var/obj/item/I in component_parts)
if(I.reliability < 100)
I.crit_fail = 1
I.loc = src.loc
while ( sheets > 0 )
var/obj/item/stack/sheet/G = new sheet_path(src.loc)
if ( sheets > 50 )
G.amount = 50
else
G.amount = sheets
sheets -= G.amount
new_frame.state = 2
new_frame.icon_state = "box_1"
del(src)
user << "<span class='notice'>You close the access panel.</span>"
else if(istype(O, /obj/item/weapon/storage/part_replacer) && panel_open)
exchange_parts(user, O)
return
else if(istype(O, /obj/item/weapon/crowbar) && panel_open)
default_deconstruction_crowbar(O)
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
..()
+158 -12
View File
@@ -22,6 +22,8 @@
var/chargemode = 0
var/chargecount = 0
var/chargelevel = 50000
var/input_level_max = 200000 // cap on input_level
var/output_level_max = 200000 // cap on output_level
var/online = 1
var/name_tag = null
var/obj/machinery/power/terminal/terminal = null
@@ -29,6 +31,16 @@
/obj/machinery/power/smes/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/smes(null)
component_parts += new /obj/item/weapon/cell/high(null)
component_parts += new /obj/item/weapon/cell/high(null)
component_parts += new /obj/item/weapon/cell/high(null)
component_parts += new /obj/item/weapon/cell/high(null)
component_parts += new /obj/item/weapon/cell/high(null)
component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
spawn(5)
if(!powernet)
connect_to_network()
@@ -49,7 +61,17 @@
updateicon()
return
/obj/machinery/power/smes/RefreshParts()
var/IO = 0
var/C = 0
for(var/obj/item/weapon/stock_parts/capacitor/CP in component_parts)
IO += CP.rating
input_level_max = 200000 * IO
output_level_max = 200000 * IO
for(var/obj/item/weapon/cell/PC in component_parts)
C += PC.maxcharge
capacity = C / (15000) * 1e6
/obj/machinery/power/smes/proc/updateicon()
overlays.Cut()
if(stat & BROKEN) return
@@ -85,15 +107,139 @@
return
/obj/machinery/power/smes/attackby(obj/item/I, mob/user)
//opening using screwdriver
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
update_icon()
return
//changing direction using wrench
if(default_change_direction_wrench(user, I))
terminal = null
var/turf/T = get_step(src, dir)
for(var/obj/machinery/power/terminal/term in T)
if(term && term.dir == turn(dir, 180))
terminal = term
terminal.master = src
user << "<span class='notice'>Terminal found.</span>"
break
if(!terminal)
user << "<span class='alert'>No power source found.</span>"
return
stat &= ~BROKEN
update_icon()
return
//exchanging parts using the RPE
if(exchange_parts(user, I))
return
//building and linking a terminal
if(istype(I, /obj/item/stack/cable_coil))
var/dir = get_dir(user,src)
if(dir & (dir-1))//we don't want diagonal click
return
if(terminal) //is there already a terminal ?
user << "<span class='alert'>This SMES already have a power terminal!</span>"
return
if(!panel_open) //is the panel open ?
user << "<span class='alert'>You must open the maintenance panel first!</span>"
return
var/turf/T = get_turf(user)
if (T.intact) //is the floor plating removed ?
user << "<span class='alert'>You must first remove the floor plating!</span>"
return
var/obj/item/stack/cable_coil/C = I
if(C.amount < 10)
user << "<span class='alert'>You need more wires.</span>"
return
user << "You start building the power terminal..."
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 20) && C.amount >= 10)
var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one
if (prob(50) && electrocute_mob(usr, N, N)) //animate the electrocution if uncautious and unlucky
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
C.use(10)
user.visible_message(\
"<span class='alert'>[user.name] has built a power terminal!</span>",\
"You build the power terminal.")
//build the terminal and link it to the network
make_terminal(T)
terminal.connect_to_network()
return
//disassembling the terminal
if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open)
var/turf/T = get_turf(terminal)
if (T.intact) //is the floor plating removed ?
user << "<span class='alert'>You must first expose the power terminal!</span>"
return
user << "You begin to dismantle the power terminal..."
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
//give the wires back and delete the terminal
new /obj/item/stack/cable_coil(T,10)
user.visible_message(\
"<span class='alert'>[user.name] cuts the cables and dismantles the power terminal.</span>",\
"You cut the cables and dismantle the power terminal.")
charging = 0 //stop inputting, since we have don't have a terminal anymore
del(terminal)
return
//crowbarring it !
default_deconstruction_crowbar(I)
/obj/machinery/power/smes/Destroy()
if(ticker && ticker.current_state == GAME_STATE_PLAYING)
var/area/area = get_area(src)
message_admins("SMES deleted at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[area.name]</a>)")
log_game("SMES deleted at ([area.name])")
investigate_log("<font color='red'>deleted</font> at ([area.name])","singulo")
if(terminal)
disconnect_terminal()
..()
// create a terminal object pointing towards the SMES
// wires will attach to this
/obj/machinery/power/smes/proc/make_terminal(var/turf/T)
terminal = new/obj/machinery/power/terminal(T)
terminal.dir = get_dir(T,src)
terminal.master = src
/obj/machinery/power/smes/proc/disconnect_terminal()
if(terminal)
terminal.master = null
terminal = null
/obj/machinery/power/smes/proc/chargedisplay()
return round(5.5*charge/(capacity ? capacity : 5e6))
return round(5.5*charge/capacity)
#define SMESRATE 0.05 // rate of internal charge to external power
/obj/machinery/power/smes/process()
if(stat & BROKEN) return
if(stat & BROKEN)
return
//store machine state to see if we need to update the icon overlays
var/last_disp = chargedisplay()
@@ -205,10 +351,10 @@
data["charging"] = charging
data["chargeMode"] = chargemode
data["chargeLevel"] = chargelevel
data["chargeMax"] = SMESMAXCHARGELEVEL
data["chargeMax"] = input_level_max
data["outputOnline"] = online
data["outputLevel"] = output
data["outputMax"] = SMESMAXOUTPUT
data["outputMax"] = output_level_max
data["outputLoad"] = round(loaddemand)
// update the ui if it exists, returns null if no ui is passed/found
@@ -254,20 +400,20 @@
if("min")
chargelevel = 0
if("max")
chargelevel = SMESMAXCHARGELEVEL //30000
chargelevel = input_level_max //30000
if("set")
chargelevel = input(usr, "Enter new input level (0-[SMESMAXCHARGELEVEL])", "SMES Input Power Control", chargelevel) as num
chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range
chargelevel = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", chargelevel) as num
chargelevel = max(0, min(input_level_max, chargelevel)) // clamp to range
else if( href_list["output"] )
switch( href_list["output"] )
if("min")
output = 0
if("max")
output = SMESMAXOUTPUT //30000
output = output_level_max //30000
if("set")
output = input(usr, "Enter new output level (0-[SMESMAXOUTPUT])", "SMES Output Power Control", output) as num
output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
output = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output) as num
output = max(0, min(output_level_max, output)) // clamp to range
investigate_log("input/output; [chargelevel>output?"<font color='green'>":"<font color='red'>"][chargelevel]/[output]</font> | Output-mode: [online?"<font color='green'>on</font>":"<font color='red'>off</font>"] | Input-mode: [chargemode?"<font color='green'>auto</font>":"<font color='red'>off</font>"] by [usr.key]","singulo")
@@ -133,7 +133,7 @@ obj/item/weapon/gun/energy/laser/retro
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(100)
power_supply.give(1000)
update_icon()
return 1
@@ -170,6 +170,6 @@ obj/item/weapon/gun/energy/laser/retro
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(100)
power_supply.give(1000)
update_icon()
return 1
@@ -10,6 +10,8 @@
cell_type = "/obj/item/weapon/cell/super"
var/mode = 2
fire_delay = 15
slot_flags = SLOT_BACK
w_class = 4.0
attack_self(mob/living/user as mob)
switch(mode)
@@ -66,6 +68,7 @@
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
icon_state = "m1911-p"
cell_type = "/obj/item/weapon/cell/infinite"
w_class = 3.0
slot_flags = SLOT_BELT
isHandgun()
return 1
+48 -39
View File
@@ -18,31 +18,31 @@
var/charge_tick = 0
var/recharge_time = 10 //Time it takes for shots to recharge (in ticks)
New()
..()
processing_objects.Add(src)
/obj/item/weapon/gun/energy/taser/cyborg/New()
..()
processing_objects.Add(src)
Destroy()
processing_objects.Remove(src)
..()
/obj/item/weapon/gun/energy/taser/cyborg/Destroy()
processing_objects.Remove(src)
..()
process() //Every [recharge_time] ticks, recharge a shot for the cyborg
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
/obj/item/weapon/gun/energy/taser/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
if(!power_supply) return 0 //sanity
if(power_supply.charge >= power_supply.maxcharge) return 0 // check if we actually need to recharge
if(!power_supply) return 0 //sanity
if(power_supply.charge >= power_supply.maxcharge) return 0 // check if we actually need to recharge
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
R.cell.use(charge_cost) //Take power from the borg...
power_supply.give(charge_cost) //... to recharge the shot
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
R.cell.use(charge_cost) //Take power from the borg...
power_supply.give(charge_cost) //... to recharge the shot
update_icon()
return 1
update_icon()
return 1
/obj/item/weapon/gun/energy/stunrevolver
@@ -70,30 +70,39 @@
cell_type = "/obj/item/weapon/cell/crap"
var/charge_tick = 0
/obj/item/weapon/gun/energy/crossbow/New()
..()
processing_objects.Add(src)
New()
..()
processing_objects.Add(src)
/obj/item/weapon/gun/energy/crossbow/Destroy()
processing_objects.Remove(src)
..()
/obj/item/weapon/gun/energy/crossbow/process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(1000)
return 1
Destroy()
processing_objects.Remove(src)
..()
process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(100)
/obj/item/weapon/gun/energy/crossbow/update_icon()
return
/obj/item/weapon/gun/energy/crossbow/cyborg/process()
..()
return
/obj/item/weapon/gun/energy/crossbow/cyborg/process_chambered()
if(in_chamber)
return 1
update_icon()
return
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
R.cell.use(100)
in_chamber = new /obj/item/projectile/energy/bolt(src)
return 1
return 0
/obj/item/weapon/gun/energy/crossbow/largecrossbow
name = "Energy Crossbow"
@@ -37,7 +37,7 @@
/obj/item/weapon/gun/projectile/automatic/c20r
name = "\improper C-20r SMG"
desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses 12mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp"
desc = "A lightweight, compact bullpup SMG. Uses .45 rounds in medium-capacity magazines and has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
icon_state = "c20r"
item_state = "c20r"
w_class = 3.0
@@ -60,7 +60,7 @@
/obj/item/weapon/gun/projectile/automatic/l6_saw
name = "\improper L6 SAW"
desc = "A rather traditionally made medium machine gun with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever"
desc = "A heavily modified light machine gun with a tactical plasteel frame resting on a rather traditionally-made belt-fed ballistic weapon. Has 'Aussec Armoury - 2531' engraved on the reciever."
icon_state = "l6closed100"
item_state = "l6closedmag"
w_class = 4
@@ -119,6 +119,7 @@
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors. Compatible only with specialized magazines."
icon_state = "bulldog"
item_state = "bulldog"
icon_override = 'icons/mob/in-hand/guns.dmi'
w_class = 3.0
origin_tech = "combat=5;materials=4;syndicate=6"
mag_type = "/obj/item/ammo_box/magazine/m12g"
@@ -75,7 +75,7 @@
/obj/item/weapon/gun/projectile/automatic/pistol
name = "\improper Stechtkin pistol"
desc = "A small, easily concealable gun. Uses 10mm rounds."
desc = "A small, easily concealable gun. Uses 10mm rounds and has a threaded barrel for suppressors."
icon_state = "pistol"
w_class = 2
silenced = 0
@@ -122,8 +122,8 @@
return
/obj/item/weapon/silencer
name = "silencer"
desc = "a silencer"
name = "supressor"
desc = "A universal syndicate small-arms suppressor."
icon = 'icons/obj/gun.dmi'
icon_state = "silencer"
w_class = 2
+82 -2
View File
@@ -25,6 +25,7 @@
var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode."
var/list/broken_requirements = list()
var/broken_on_spawn = 0
var/recharge_delay = 15
/obj/machinery/chem_dispenser/proc/recharge()
@@ -48,7 +49,7 @@
if(recharged < 0)
recharge()
recharged = 15
recharged = recharge_delay
else
recharged -= 1
@@ -180,7 +181,8 @@
var/obj/item/weapon/reagent_containers/glass/B = beaker
B.loc = loc
beaker = null
icon_state = initial(icon_state)
if(!panel_open)
icon_state = initial(icon_state)
add_fingerprint(usr)
return 1 // update UIs attached to this object
@@ -266,6 +268,84 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/chem_dispenser/constructable
name = "portable chem dispenser"
icon = 'icons/obj/chemical.dmi'
icon_state = "minidispenser"
energy = 5
max_energy = 5
amount = 5
recharge_delay = 30
dispensable_reagents = list()
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
list("lithium", "sugar", "sacid", "water", "copper", "mercury", "sodium"),
list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron"))
/obj/machinery/chem_dispenser/constructable/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/weapon/cell/super(src)
RefreshParts()
/obj/machinery/chem_dispenser/constructable/RefreshParts()
var/time = 0
var/temp_energy = 0
var/i
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
temp_energy += M.rating
temp_energy--
max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
time += C.rating
for(var/obj/item/weapon/cell/P in component_parts)
time += round(P.maxcharge, 10000) / 10000
recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
for(i=1, i<=M.rating, i++)
dispensable_reagents = sortList(dispensable_reagents | special_reagents[i])
/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(panel_open)
user << "<span class='notice'>Close the maintenance panel first.</span>"
return
..()
else
..()
if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I))
return
if(exchange_parts(user, I))
return
if(istype(I, /obj/item/weapon/wrench))
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
user << "<span class='caution'>The [src] can now be moved.</span>"
else if(!anchored)
anchored = 1
user << "<span class='caution'>The [src] is now secured.</span>"
if(panel_open)
if(istype(I, /obj/item/weapon/crowbar))
if(beaker)
var/obj/item/weapon/reagent_containers/glass/B = beaker
B.loc = loc
beaker = null
default_deconstruction_crowbar(I)
return 1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/chem_master
name = "ChemMaster 3000"
density = 1
@@ -188,7 +188,14 @@
..()
reagents.add_reagent("citalopram", 15)
/obj/item/weapon/reagent_containers/pill/paroxetine
name = "Paroxetine pill"
desc = "Heavy anti-depressant."
icon_state = "pill8"
New()
..()
reagents.add_reagent("paroxetine", 15)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
@@ -17,7 +17,7 @@
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/portable_atmospherics/hydroponics))
return
if(istype(A, /obj/effect/proc_holder/spell))
+12 -16
View File
@@ -1,6 +1,6 @@
/*///////////////Circuit Imprinter (By Darem)////////////////////////
Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
a /datum/design on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
using metal and glass, it uses glass and reagents (usually sulfuric acis).
*/
@@ -14,6 +14,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
var/diamond_amount = 0
var/uranium_amount = 0
var/max_material_amount = 75000.0
var/efficiency_coeff
New()
..()
@@ -36,7 +37,10 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
T += M.rating
max_material_amount = T * 75000.0
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas
blob_act()
if (prob(50))
@@ -52,27 +56,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(exchange_parts(user, O))
return
if (shocked)
shock(user,50)
if (istype(O, /obj/item/weapon/screwdriver))
if (!opened)
opened = 1
if (default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O))
if(linked_console)
linked_console.linked_imprinter = null
linked_console = null
icon_state = "circuit_imprinter_t"
user << "You open the maintenance hatch of [src]."
else
opened = 0
icon_state = "circuit_imprinter"
user << "You close the maintenance hatch of [src]."
return
if (opened)
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
reagents.trans_to(I, reagents.total_volume)
@@ -91,7 +87,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(uranium_amount >= 2000)
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
G.amount = round(uranium_amount / 2000)
del(src)
default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
+300 -22
View File
@@ -70,13 +70,13 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
///////////////////Computer Boards///////////////////////////////////
datum/design/seccamera
name = "Circuit Design (Security)"
desc = "Allows for the construction of circuit boards used to build security camera computers."
name = "Circuit Design (Camera Monitor)"
desc = "Allows for the construction of circuit boards used to build camera monitors."
id = "seccamera"
req_tech = list("programming" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/security"
build_path = "/obj/item/weapon/circuitboard/camera"
datum/design/aicore
name = "Circuit Design (AI Core)"
@@ -142,7 +142,7 @@ datum/design/scan_console
build_path = "/obj/item/weapon/circuitboard/scan_consolenew"
datum/design/comconsole
name = "Circuit Design (Communications)"
name = "Circuit Design (Communications Console)"
desc = "Allows for the construction of circuit boards used to build a communications console."
id = "comconsole"
req_tech = list("programming" = 2, "magnets" = 2)
@@ -160,7 +160,7 @@ datum/design/idcardconsole
build_path = "/obj/item/weapon/circuitboard/card"
datum/design/crewconsole
name = "Circuit Design (Crew monitoring computer)"
name = "Circuit Design (Crew Monitoring Computer)"
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
id = "crewconsole"
req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
@@ -243,7 +243,7 @@ datum/design/clonecontrol
build_path = "/obj/item/weapon/circuitboard/cloning"
datum/design/clonepod
name = "Circuit Design (Clone Pod)"
name = "Circuit Design (Cloning Pod)"
desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
id = "clonepod"
req_tech = list("programming" = 3, "biotech" = 3)
@@ -260,10 +260,82 @@ datum/design/clonescanner
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/clonescanner"
datum/design/teleport_station
name = "Circuit Design (Teleportation Station Board)"
desc = "Allows for the construction of circuit boards used to build a Teleporter Station."
id = "tele_station"
req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/teleporter_station
datum/design/teleport_hub
name = "Circuit Design (Teleportation Hub Board)"
desc = "Allows for the construction of circuit boards used to build a Teleportation Hub."
id = "tele_hub"
req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/teleporter_hub
datum/design/telepad
name = "Circuit Design (Telepad Board)"
desc = "Allows for the construction of circuit boards used to build a Telepad."
id = "telepad"
req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/telesci_pad"
datum/design/sleeper
name = "Circuit Design (Sleeper Board)"
desc = "Allows for the construction of circuit boards used to build a Sleeper."
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/sleeper"
datum/design/sleep_console
name = "Circuit Design (Sleeper Console)"
desc = "Allows for the construction of circuit boards used to build a Sleeper Console."
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/sleep_console"
datum/design/bodyscanner
name = "Circuit Design (Body Scanner Board)"
desc = "Allows for the construction of circuit boards used to build a Body Scanner."
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/bodyscanner"
datum/design/sleep_console
name = "Circuit Design (Body Scanner Console)"
desc = "Allows for the construction of circuit boards used to build a Body Scanner Console."
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/bodyscanner_console"
datum/design/cryotube
name = "Circuit Design (Cryotube Board)"
desc = "Allows for the construction of circuit boards used to build a Cryotube."
id = "cryotube"
req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/cryo_tube"
datum/design/arcadebattle
name = "Circuit Design (Battle Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
id = "arcademachine"
id = "arcademachinebattle"
req_tech = list("programming" = 1)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
@@ -272,7 +344,7 @@ datum/design/arcadebattle
datum/design/orion_trail
name = "Circuit Design (Orion Trail Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
id = "arcademachine"
id = "arcademachineonion"
req_tech = list("programming" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
@@ -333,8 +405,8 @@ datum/design/rdconsole
build_path = "/obj/item/weapon/circuitboard/rdconsole"
datum/design/ordercomp
name = "Circuit Design (Supply ordering console)"
desc = "Allows for the construction of circuit boards used to build a Supply ordering console."
name = "Circuit Design (Supply Ordering Console)"
desc = "Allows for the construction of circuit boards used to build a supply ordering console."
id = "ordercomp"
req_tech = list("programming" = 2)
build_type = IMPRINTER
@@ -342,8 +414,8 @@ datum/design/ordercomp
build_path = "/obj/item/weapon/circuitboard/ordercomp"
datum/design/supplycomp
name = "Circuit Design (Supply shuttle console)"
desc = "Allows for the construction of circuit boards used to build a Supply shuttle console."
name = "Circuit Design (Supply Shuttle Console)"
desc = "Allows for the construction of circuit boards used to build a supply shuttle console."
id = "supplycomp"
req_tech = list("programming" = 3)
build_type = IMPRINTER
@@ -377,6 +449,24 @@ datum/design/message_monitor
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/message_monitor"
datum/design/comm_traffic
name = "Circuit Design (Telecommunications Traffic Control Console)"
desc = "Allows for the construction of circuit boards used to build a telecommunications traffic control console."
id = "comm_traffic"
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/comm_traffic"
datum/design/telesci_console
name = "Circuit Design (Telepad Control Console Board)"
desc = "Allows for the construction of circuit boards used to build a telescience console."
id = "telesci_console"
req_tech = list("programming" = 3, "bluespace" = 2)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/telesci_console"
datum/design/aifixer
name = "Circuit Design (AI Integrity Restorer)"
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
@@ -626,6 +716,7 @@ datum/design/posibrain
//////////Mecha Module Disks///////
///////////////////////////////////
// Ripley
datum/design/ripley_main
name = "Circuit Design (APLU \"Ripley\" Central Control module)"
desc = "Allows for the construction of a \"Ripley\" Central Control module."
@@ -644,6 +735,7 @@ datum/design/ripley_peri
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/ripley/peripherals"
// Odysseus
datum/design/odysseus_main
name = "Circuit Design (\"Odysseus\" Central Control module)"
desc = "Allows for the construction of a \"Odysseus\" Central Control module."
@@ -662,6 +754,7 @@ datum/design/odysseus_peri
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/odysseus/peripherals"
// Gygax
datum/design/gygax_main
name = "Circuit Design (\"Gygax\" Central Control module)"
desc = "Allows for the construction of a \"Gygax\" Central Control module."
@@ -689,6 +782,7 @@ datum/design/gygax_targ
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/gygax/targeting"
// Durand
datum/design/durand_main
name = "Circuit Design (\"Durand\" Central Control module)"
desc = "Allows for the construction of a \"Durand\" Central Control module."
@@ -716,6 +810,35 @@ datum/design/durand_targ
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting"
// Phazon
datum/design/phazon_main
name = "Exosuit Design (\"Phazon\" Central Control module)"
desc = "Allows for the construction of a \"Phazon\" Central Control module."
id = "phazon_main"
req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
datum/design/phazon_peri
name = "Exosuit Design (\"Phazon\" Peripherals Control module)"
desc = "Allows for the construction of a \"Phazon\" Peripheral Control module."
id = "phazon_peri"
req_tech = list("programming" = 5, "bluespace" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
datum/design/phazon_targ
name = "Exosuit Design (\"Phazon\" Weapons & Targeting Control module)"
desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module."
id = "phazon_targ"
req_tech = list("programming" = 5, "magnets" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
// H.O.N.K.
datum/design/honker_main
name = "Circuit Design (\"H.O.N.K\" Central Control module)"
desc = "Allows for the construction of a \"H.O.N.K\" Central Control module."
@@ -742,7 +865,8 @@ datum/design/honker_targ
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/honker/targeting"
// Space pod
/datum/design/spacepod_main
name = "Circuit Design (Space Pod Mainboard)"
desc = "Allows for the construction of a Space Pod mainboard."
@@ -750,8 +874,8 @@ datum/design/honker_targ
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/pod
build_path = /obj/item/weapon/circuitboard/mecha/pod
////////////////////////////////////////
/////////// Mecha Equpment /////////////
////////////////////////////////////////
@@ -1027,7 +1151,7 @@ datum/design/adv_capacitor
build_path = "/obj/item/weapon/stock_parts/capacitor/adv"
datum/design/adv_sensor
name = "Advanced Sensor Module"
name = "Advanced Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "adv_sensor"
req_tech = list("magnets" = 3)
@@ -1073,7 +1197,7 @@ datum/design/super_capacitor
build_path = "/obj/item/weapon/stock_parts/capacitor/super"
datum/design/phasic_sensor
name = "Phasic Sensor Module"
name = "Phasic Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "phasic_sensor"
req_tech = list("magnets" = 5, "materials" = 3)
@@ -1235,6 +1359,59 @@ datum/design/light_replacer
////////////////////////////////////////
//////////////MISC Boards///////////////
////////////////////////////////////////
datum/design/smes
name = "SMES Board"
desc = "The circuit board for a SMES."
id = "smes"
req_tech = list("programming" = 4, "power" = 5, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/smes
datum/design/thermomachine
name = "Freezer/Heater Board"
desc = "The circuit board for a freezer/heater."
id = "thermomachine"
req_tech = list("programming" = 3, "plasmatech" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/thermomachine
datum/design/biogenerator
name = "Biogenerator Board"
desc = "The circuit board for a biogenerator."
id = "biogenerator"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/biogenerator
datum/design/hydroponics
name = "Hydroponics Tray Board"
desc = "The circuit board for a hydroponics tray."
id = "hydro_tray"
req_tech = list("programming" = 1, "biotech" = 1)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/hydroponics
datum/design/microwave
name = "Microwave Board"
desc = "The circuit board for a microwave."
id = "microwave"
req_tech = list("programming" = 1)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/microwave"
datum/design/chem_dispenser
name = "Portable Chem Dispenser Board"
desc = "The circuit board for a portable chem dispenser."
id = "chem_dispenser"
req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/chem_dispenser"
datum/design/destructive_analyzer
name = "Destructive Analyzer Board"
@@ -1299,7 +1476,33 @@ datum/design/mechfab
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mechfab"
datum/design/cyborgrecharger
name = "Cyborg Recharger Board"
desc = "The circuit board for a Cyborg Recharger."
id = "cyborgrecharger"
req_tech = list("powerstorage" = 3, "engineering" = 3)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/cyborgrecharger"
datum/design/mech_recharger
name = "Mech Bay Recharger Board"
desc = "The circuit board for a Mech Bay Recharger."
id = "mech_recharger"
req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mech_recharger"
datum/design/vendor
name = "Vendor Board"
desc = "The circuit board for a Vendor."
id = "vendor"
req_tech = list("programming" = 1)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/vendor"
/////////////////////////////////////////
////////////Power Stuff//////////////////
/////////////////////////////////////////
@@ -1334,7 +1537,6 @@ datum/design/mrspacman
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/pacman/mrs"
/////////////////////////////////////////
////////////Medical Tools////////////////
/////////////////////////////////////////
@@ -1817,6 +2019,24 @@ datum/design/mesons
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/clothing/glasses/meson"
datum/design/night_vision_goggles
name = "Night Vision Goggles"
desc = "Goggles that let you see through darkness unhindered."
id = "night_visision_goggles"
req_tech = list("magnets" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 100, "$glass" = 100, "$uranium" = 1000)
build_path = /obj/item/clothing/glasses/night
datum/design/magboots
name = "Magnetic Boots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
id = "magboots"
req_tech = list("materials" = 4, "magnets" = 4, "engineering" = 5)
build_type = PROTOLATHE
materials = list("$metal" = 4500, "$silver" = 1500, "$gold" = 2500)
build_path = /obj/item/clothing/shoes/magboots
datum/design/miningblueprint1
name = "Mining Schematic Disk Version 1"
desc = "Contains the schematics for a new range of Pickaxes."
@@ -1865,8 +2085,7 @@ datum/design/telepad_beacon
build_type = PROTOLATHE
materials = list ("$metal" = 2000, "$glass" = 1750, "$silver" = 500)
build_path = "/obj/item/device/telepad_beacon"
datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
@@ -1876,6 +2095,25 @@ datum/design/bag_holding
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
reliability_base = 80
build_path = "/obj/item/weapon/storage/backpack/holding"
datum/design/bluespace_crystal
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
materials = list("$gold" = 1500, "$diamond" = 3000, "$plasma" = 1500)
reliability_base = 100
build_path = "/obj/item/bluespace_crystal/artificial"
datum/design/telesci_sps
name = "SPS Device"
desc = "A device that can track its position at all times."
id = "telesci_sps"
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 500, "$glass" = 1000)
build_path = /obj/item/device/sps
/////////////////////////////////////////
/////////////////HUDs////////////////////
@@ -1890,6 +2128,15 @@ datum/design/health_hud
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/clothing/glasses/hud/health"
datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
id = "health_hud_night"
req_tech = list("biotech" = 4, "magnets" = 5)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
build_path = /obj/item/clothing/glasses/hud/health/night
datum/design/security_hud
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
@@ -1899,6 +2146,15 @@ datum/design/security_hud
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/clothing/glasses/hud/security"
datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
id = "security_hud_night"
req_tech = list("magnets" = 5, "combat" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
/////////////////////////////////////////
//////////////////Test///////////////////
/////////////////////////////////////////
@@ -1948,7 +2204,7 @@ datum/design/borg_syndicate_module
/////////////PDA and Radio stuff/////////
/////////////////////////////////////////
datum/design/binaryencrypt
name = "Binary Encrpytion Key"
name = "Binary Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
id = "binaryencrypt"
req_tech = list("syndicate" = 2)
@@ -2107,3 +2363,25 @@ datum/design/cart_captain
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/captain"
locked = 1
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
datum/design/advmop
name = "Advanced Mop"
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
id = "advmop"
req_tech = list("materials" = 4, "engineering" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 2500, "$glass" = 200)
build_path = /obj/item/weapon/mop/advanced
datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
id = "holosign"
req_tech = list("magnets" = 3, "powerstorage" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 1000)
build_path = /obj/item/weapon/holosign_creator
+12 -21
View File
@@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console
name = "Destructive Analyzer"
icon_state = "d_analyzer"
var/obj/item/weapon/loaded_item = null
var/decon_mod = 1
var/decon_mod = 0
/obj/machinery/r_n_d/destructive_analyzer/New()
..()
@@ -24,9 +24,8 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/RefreshParts()
var/T = 0
for(var/obj/item/weapon/stock_parts/S in src)
T += S.rating * 0.1
T = between (0, T, 1)
for(var/obj/item/weapon/stock_parts/S in component_parts)
T += S.rating
decon_mod = T
/obj/machinery/r_n_d/destructive_analyzer/meteorhit()
@@ -43,28 +42,20 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
if (shocked)
shock(user,50)
if (istype(O, /obj/item/weapon/screwdriver))
if (!opened)
opened = 1
if (default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O))
if(linked_console)
linked_console.linked_destroy = null
linked_console = null
icon_state = "d_analyzer_t"
user << "You open the maintenance hatch of [src]."
else
opened = 0
icon_state = "d_analyzer"
user << "You close the maintenance hatch of [src]."
return
if (opened)
return 1
if(exchange_parts(user, O))
return 1
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
I.loc = src.loc
del(src)
default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
+19 -21
View File
@@ -22,6 +22,7 @@ Note: Must be placed west/left of and R&D console to function.
var/uranium_amount = 0.0
var/diamond_amount = 0.0
var/clown_amount = 0.0
var/efficiency_coeff
/obj/machinery/r_n_d/protolathe/New()
@@ -50,33 +51,27 @@ Note: Must be placed west/left of and R&D console to function.
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
T += M.rating
max_material_storage = T * 75000
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += (M.rating/3)
efficiency_coeff = max(T, 1)
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(exchange_parts(user, O))
return
return 1
if (shocked)
shock(user,50)
if (O.is_open_container())
return
shock(user,50)
if (istype(O, /obj/item/weapon/screwdriver))
if (!opened)
opened = 1
if (default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O))
if(linked_console)
linked_console.linked_lathe = null
linked_console.linked_imprinter = null
linked_console = null
icon_state = "protolathe_t"
user << "You open the maintenance hatch of [src]."
else
opened = 0
icon_state = "protolathe"
user << "You close the maintenance hatch of [src]."
return
if (opened)
return 1
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
reagents.trans_to(I, reagents.total_volume)
@@ -110,7 +105,7 @@ Note: Must be placed west/left of and R&D console to function.
if(clown_amount >= 2000)
var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
G.amount = round(clown_amount / G.perunit)
del(src)
default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
@@ -120,6 +115,8 @@ Note: Must be placed west/left of and R&D console to function.
if (!linked_console)
user << "\The protolathe must be linked to an R&D console first!"
return 1
if (O.is_open_container())
return
if (busy)
user << "\red The protolathe is busy. Please wait for completion of previous operation."
return 1
@@ -182,4 +179,5 @@ Note: Must be placed west/left of and R&D console to function.
new stacktype(src.loc, amount)
busy = 0
src.updateUsrDialog()
return
return
+39 -33
View File
@@ -274,7 +274,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
usr <<"\red The destructive analyzer appears to be empty."
screen = 1.0
return
if(linked_destroy.loaded_item.reliability >= 90)
if((linked_destroy.loaded_item.reliability >= 99 - (linked_destroy.decon_mod * 3)))
var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
for(var/T in temp_tech)
files.UpdateTech(T, temp_tech[T])
@@ -349,7 +349,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
for(var/datum/design/D in files.known_designs)
if(D.id == href_list["build"])
being_built = D
break
break
if(being_built)
var/power = 2000
for(var/M in being_built.materials)
@@ -358,6 +358,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.3
linked_lathe.busy = 1
flick("protolathe_n",linked_lathe)
var/prot_efficiency = linked_lathe.efficiency_coeff
var/key = usr.key //so we don't lose the info during the spawn delay
spawn(16)
use_power(power)
@@ -365,25 +366,25 @@ won't update every console in existence) but it's more of a hassle to do. Also,
for(var/M in being_built.materials)
switch(M)
if("$metal")
linked_lathe.m_amount = max(0, (linked_lathe.m_amount-being_built.materials[M]))
linked_lathe.m_amount = max(0, (linked_lathe.m_amount - (being_built.materials[M] / prot_efficiency)))
if("$glass")
linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M]))
linked_lathe.g_amount = max(0, (linked_lathe.g_amount - (being_built.materials[M] / prot_efficiency)))
if("$plasteel")
linked_lathe.plasteel_amount = max(0, (linked_lathe.plasteel_amount-being_built.materials[M]))
linked_lathe.plasteel_amount = max(0, (linked_lathe.plasteel_amount - (being_built.materials[M] / prot_efficiency)))
if("$gold")
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M]))
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount - (being_built.materials[M] / prot_efficiency)))
if("$silver")
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M]))
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount - (being_built.materials[M] / prot_efficiency)))
if("$plasma")
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-being_built.materials[M]))
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount - (being_built.materials[M] / prot_efficiency)))
if("$uranium")
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M]))
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount - (being_built.materials[M] / prot_efficiency)))
if("$diamond")
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M]))
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount - (being_built.materials[M] / prot_efficiency)))
if("$clown")
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-being_built.materials[M]))
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount - (being_built.materials[M] / prot_efficiency)))
else
linked_lathe.reagents.remove_reagent(M, being_built.materials[M])
linked_lathe.reagents.remove_reagent(M, (being_built.materials[M] / prot_efficiency))
if(being_built.build_path)
var/obj/new_item = new being_built.build_path(src)
@@ -416,20 +417,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.4
linked_imprinter.busy = 1
flick("circuit_imprinter_ani",linked_imprinter)
var/imprinter_efficiency = linked_imprinter.efficiency_coeff
spawn(16)
use_power(power)
for(var/M in being_built.materials)
switch(M)
if("$glass")
linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]))
linked_imprinter.g_amount = max(0, linked_imprinter.g_amount - (being_built.materials[M] / imprinter_efficiency))
if("$gold")
linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]))
linked_imprinter.gold_amount = max(0, linked_imprinter.gold_amount - (being_built.materials[M] / imprinter_efficiency))
if("$diamond")
linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]))
linked_imprinter.diamond_amount = max(0, linked_imprinter.diamond_amount - (being_built.materials[M] / imprinter_efficiency))
if("$uranium")
linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M]))
linked_imprinter.uranium_amount = max(0, linked_imprinter.uranium_amount - (being_built.materials[M] / imprinter_efficiency))
else
linked_imprinter.reagents.remove_reagent(M, being_built.materials[M])
linked_imprinter.reagents.remove_reagent(M, being_built.materials[M] / imprinter_efficiency)
var/obj/new_item = new being_built.build_path(src)
new_item.reliability = being_built.reliability
if(linked_imprinter.hacked) being_built.reliability = max((reliability / 2), 0)
@@ -728,28 +730,30 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
var/temp_dat = "[D.name]"
var/check_materials = 1
var/prot_efficiency = linked_lathe.efficiency_coeff
for(var/M in D.materials)
temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
var neededmaterials = (D.materials[M] / prot_efficiency)
temp_dat += " [neededmaterials] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
if(D.materials[M] > linked_lathe.g_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.g_amount) check_materials = 0
if("$metal")
if(D.materials[M] > linked_lathe.m_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.m_amount) check_materials = 0
if("$plasteel")
if(D.materials[M] > linked_lathe.plasteel_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.plasteel_amount) check_materials = 0
if("$gold")
if(D.materials[M] > linked_lathe.gold_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.gold_amount) check_materials = 0
if("$silver")
if(D.materials[M] > linked_lathe.silver_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.silver_amount) check_materials = 0
if("$plasma")
if(D.materials[M] > linked_lathe.plasma_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.plasma_amount) check_materials = 0
if("$uranium")
if(D.materials[M] > linked_lathe.uranium_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.uranium_amount) check_materials = 0
if("$diamond")
if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.diamond_amount) check_materials = 0
if("$clown")
if(D.materials[M] > linked_lathe.clown_amount) check_materials = 0
if((D.materials[M] / prot_efficiency) > linked_lathe.clown_amount) check_materials = 0
else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]))
check_materials = 0
if (check_materials)
@@ -851,19 +855,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
var/temp_dat = "[D.name]"
var/check_materials = 1
var/imp_efficiency = linked_imprinter.efficiency_coeff
for(var/M in D.materials)
temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
var/materialsneeded = (D.materials[M] / imp_efficiency)
temp_dat += " [materialsneeded] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
if(D.materials[M] > linked_imprinter.g_amount) check_materials = 0
if((D.materials[M] / imp_efficiency) > linked_imprinter.g_amount) check_materials = 0
if("$gold")
if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0
if((D.materials[M] / imp_efficiency) > linked_imprinter.gold_amount) check_materials = 0
if("$diamond")
if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0
if((D.materials[M] / imp_efficiency) > linked_imprinter.diamond_amount) check_materials = 0
if("$uranium")
if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0
else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]))
if((D.materials[M] / imp_efficiency) > linked_imprinter.uranium_amount) check_materials = 0
else if (!linked_imprinter.reagents.has_reagent(M, (D.materials[M] / imp_efficiency)))
check_materials = 0
if (check_materials)
dat += "* <A href='?src=\ref[src];imprint=[D.id]'>[temp_dat]</A><BR>"
+17 -33
View File
@@ -19,8 +19,8 @@
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src,1)
component_parts += new /obj/item/stack/cable_coil(src,1)
RefreshParts()
src.initialize(); //Agouri
@@ -89,9 +89,7 @@
griefProtection()
..()
//Backup files to centcomm to help admins recover data after greifer attacks
// Backup files to CentComm to help admins recover data after griefer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
for(var/datum/tech/T in files.known_tech)
@@ -101,7 +99,7 @@
C.files.RefreshResearch()
/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
if(!(stat & (NOPOWER|BROKEN))) // Blatantly stolen from space heater.
var/turf/simulated/L = loc
if(istype(L))
var/datum/gas_mixture/env = L.return_air()
@@ -121,49 +119,35 @@
env.merge(removed)
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(exchange_parts(user, O))
return
if (disabled)
return
if (shocked)
shock(user,50)
if (istype(O, /obj/item/weapon/screwdriver))
if (!opened)
opened = 1
icon_state = "server_o"
user << "You open the maintenance hatch of [src]."
else
opened = 0
icon_state = "server"
user << "You close the maintenance hatch of [src]."
return
if (opened)
if(istype(O, /obj/item/weapon/screwdriver))
default_deconstruction_screwdriver(user, "server_o", "server")
return 1
if(exchange_parts(user, O))
return 1
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
griefProtection()
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(I.reliability != 100 && crit_fail)
I.crit_fail = 1
I.loc = src.loc
del(src)
default_deconstruction_crowbar(O)
return 1
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
if (disabled)
return
if (shocked)
shock(user,50)
return
/obj/machinery/r_n_d/server/centcom
name = "Centcom Central R&D Database"
name = "CentComm. Central R&D Database"
server_id = -1
/obj/machinery/r_n_d/server/centcom/initialize()
@@ -52,6 +52,9 @@
stat |= NOPOWER
/obj/machinery/keycard_auth/attack_hand(mob/user as mob)
ui_interact(user)
/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(user.stat || stat & (NOPOWER|BROKEN))
user << "This device is not powered."
return
@@ -60,30 +63,21 @@
return
user.set_machine(src)
var/dat = "<h1>Keycard Authentication Device</h1>"
dat += "This device is used to trigger some high security events. It requires the simultaneous swipe of two high-level ID cards."
dat += "<br><hr><br>"
if(screen == 1)
dat += "Select an event to trigger:<ul>"
dat += "<li><A href='?src=\ref[src];triggerevent=Red alert'>Red alert</A></li>"
dat += "<li><A href='?src=\ref[src];triggerevent=Emergency Response Team'>Emergency Response Team</A></li>"
dat += "<li><A href='?src=\ref[src];triggerevent=Grant Emergency Maintenance Access'>Grant Emergency Maintenance Access</A></li>"
dat += "<li><A href='?src=\ref[src];triggerevent=Revoke Emergency Maintenance Access'>Revoke Emergency Maintenance Access</A></li>"
dat += "</ul>"
user << browse(dat, "window=keycard_auth;size=500x250")
if(screen == 2)
dat += "Please swipe your card to authorize the following event: <b>[event]</b>"
dat += "<p><A href='?src=\ref[src];reset=1'>Back</A>"
user << browse(dat, "window=keycard_auth;size=500x250")
return
var/data[0]
data["screen"] = screen
data["event"] = event
data["src"] = "\ref[src]"
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "keycard_auth.tmpl", "Keycard Authentication Device UI", 520, 260)
ui.set_initial_data(data)
ui.open()
/obj/machinery/keycard_auth/Topic(href, href_list)
..()
if(..())
return
if(busy)
usr << "This device is busy."
return
@@ -96,7 +90,7 @@
if(href_list["reset"])
reset()
updateUsrDialog()
nanomanager.update_uis(src)
add_fingerprint(usr)
return
@@ -143,7 +137,7 @@
/obj/machinery/keycard_auth/proc/trigger_event()
switch(event)
if("Red alert")
if("Red Alert")
set_security_level(SEC_LEVEL_RED)
feedback_inc("alert_keycard_auth_red",1)
if("Grant Emergency Maintenance Access")