mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-24 09:02:27 +00:00
Organs:
Moved into their own folder and got split into three files. Damage zones have been regrouped slightly to make it easier to deal with them. Currently the organ groups are head, l/r leg, l/r arm, and head. Attacking: Armor is properly checked. Currently aiming for the chest gives a higher chance to stun whereas the head will stun for longer. Stungloves/Disarm now show up in the attack log. Stungloves ignore intent. Silicon: AI units can now move between cams that are not on the ss13 network. Cyborg's alert screen should not longer pop up every time they get an alert if they have opened it once during the round. Robot vision now uses the standard amount of energy. Gamemodes: Added Deuryn's unrev message. Runes can only be examined if you are close to them. Moved the Loyalty implants to the HoS' locker at the request of HerpA. Nuke agents now come with explosive implants that will activate upon death. Projectiles: Once again went though the gun code and cleaned things up, it is much better now. Bullet_act fixed up and most mobs now use the one in living, just overload it if they need to do something diff. Freeze /caplaser/xbow no longer have an infinite loop. Shotguns have to be pumped manually. Went though the latest runtime log. Power cells now use return on their give/use procs Assemblies have been reworked and are nearly finished, just need to finish up the special assembly code, redo the signalers, and add one or two new assembly items. Laying down will now only take 3 ticks to get up, from 5. You can no longer punch people on the spawn screen. This is a big one and was cleared by two heads, TK will only allow you to pick up items. If you have an item in your hand it will act normal. This revision got much larger than originally intended my tests show everything is working fine, but you never know. Ill likely do more mob teaks in the next few days. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2333 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
log_admin("[key_name(usr)] has left build mode.")
|
||||
M.client.buildmode = 0
|
||||
M.client.show_popup_menus = 1
|
||||
for(var/obj/effect/bmode/buildholder/H)
|
||||
for(var/obj/bmode/buildholder/H)
|
||||
if(H.cl == M.client)
|
||||
del(H)
|
||||
else
|
||||
@@ -14,14 +14,14 @@
|
||||
M.client.buildmode = 1
|
||||
M.client.show_popup_menus = 0
|
||||
|
||||
var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder()
|
||||
var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H)
|
||||
var/obj/bmode/buildholder/H = new/obj/bmode/buildholder()
|
||||
var/obj/bmode/builddir/A = new/obj/bmode/builddir(H)
|
||||
A.master = H
|
||||
var/obj/effect/bmode/buildhelp/B = new/obj/effect/bmode/buildhelp(H)
|
||||
var/obj/bmode/buildhelp/B = new/obj/bmode/buildhelp(H)
|
||||
B.master = H
|
||||
var/obj/effect/bmode/buildmode/C = new/obj/effect/bmode/buildmode(H)
|
||||
var/obj/bmode/buildmode/C = new/obj/bmode/buildmode(H)
|
||||
C.master = H
|
||||
var/obj/effect/bmode/buildquit/D = new/obj/effect/bmode/buildquit(H)
|
||||
var/obj/bmode/buildquit/D = new/obj/bmode/buildquit(H)
|
||||
D.master = H
|
||||
|
||||
H.builddir = A
|
||||
@@ -34,15 +34,15 @@
|
||||
M.client.screen += D
|
||||
H.cl = M.client
|
||||
|
||||
/obj/effect/bmode//Cleaning up the tree a bit
|
||||
/obj/bmode//Cleaning up the tree a bit
|
||||
density = 1
|
||||
anchored = 1
|
||||
layer = 20
|
||||
dir = NORTH
|
||||
icon = 'buildmode.dmi'
|
||||
var/obj/effect/bmode/buildholder/master = null
|
||||
var/obj/bmode/buildholder/master = null
|
||||
|
||||
/obj/effect/bmode/builddir
|
||||
/obj/bmode/builddir
|
||||
icon_state = "build"
|
||||
screen_loc = "NORTH,WEST"
|
||||
Click()
|
||||
@@ -59,7 +59,7 @@
|
||||
dir = NORTH
|
||||
return
|
||||
|
||||
/obj/effect/bmode/buildhelp
|
||||
/obj/bmode/buildhelp
|
||||
icon = 'buildmode.dmi'
|
||||
icon_state = "buildhelp"
|
||||
screen_loc = "NORTH,WEST+1"
|
||||
@@ -97,24 +97,24 @@
|
||||
usr << "\blue ***********************************************************"
|
||||
return
|
||||
|
||||
/obj/effect/bmode/buildquit
|
||||
/obj/bmode/buildquit
|
||||
icon_state = "buildquit"
|
||||
screen_loc = "NORTH,WEST+3"
|
||||
|
||||
Click()
|
||||
togglebuildmode(master.cl.mob)
|
||||
|
||||
/obj/effect/bmode/buildholder
|
||||
/obj/bmode/buildholder
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/client/cl = null
|
||||
var/obj/effect/bmode/builddir/builddir = null
|
||||
var/obj/effect/bmode/buildhelp/buildhelp = null
|
||||
var/obj/effect/bmode/buildmode/buildmode = null
|
||||
var/obj/effect/bmode/buildquit/buildquit = null
|
||||
var/obj/bmode/builddir/builddir = null
|
||||
var/obj/bmode/buildhelp/buildhelp = null
|
||||
var/obj/bmode/buildmode/buildmode = null
|
||||
var/obj/bmode/buildquit/buildquit = null
|
||||
var/atom/movable/throw_atom = null
|
||||
|
||||
/obj/effect/bmode/buildmode
|
||||
/obj/bmode/buildmode
|
||||
icon_state = "buildmode1"
|
||||
screen_loc = "NORTH,WEST+2"
|
||||
var/varholder = "name"
|
||||
@@ -173,8 +173,8 @@
|
||||
|
||||
|
||||
/proc/build_click(var/mob/user, buildmode, location, control, params, var/obj/object)
|
||||
var/obj/effect/bmode/buildholder/holder = null
|
||||
for(var/obj/effect/bmode/buildholder/H)
|
||||
var/obj/bmode/buildholder/holder = null
|
||||
for(var/obj/bmode/buildholder/H)
|
||||
if(H.cl == user.client)
|
||||
holder = H
|
||||
break
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
/datum/organ
|
||||
var/name = "organ"
|
||||
var/owner = null
|
||||
|
||||
/datum/organ/external
|
||||
name = "external"
|
||||
var/icon_name = null
|
||||
var/body_part = null
|
||||
|
||||
var/damage_state = "00"
|
||||
var/brute_dam = 0
|
||||
var/burn_dam = 0
|
||||
var/bandaged = 0
|
||||
var/max_damage = 0
|
||||
var/wound_size = 0
|
||||
var/max_size = 0
|
||||
|
||||
/datum/organ/external/chest
|
||||
name = "chest"
|
||||
icon_name = "chest"
|
||||
max_damage = 150
|
||||
body_part = UPPER_TORSO
|
||||
|
||||
/datum/organ/external/groin
|
||||
name = "groin"
|
||||
icon_name = "groin"
|
||||
max_damage = 115
|
||||
body_part = LOWER_TORSO
|
||||
|
||||
/datum/organ/external/head
|
||||
name = "head"
|
||||
icon_name = "head"
|
||||
max_damage = 125
|
||||
body_part = HEAD
|
||||
|
||||
/datum/organ/external/l_arm
|
||||
name = "l arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_LEFT
|
||||
|
||||
/datum/organ/external/l_foot
|
||||
name = "l foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 40
|
||||
body_part = FOOT_LEFT
|
||||
|
||||
/datum/organ/external/l_hand
|
||||
name = "l hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 40
|
||||
body_part = HAND_LEFT
|
||||
|
||||
/datum/organ/external/l_leg
|
||||
name = "l leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_LEFT
|
||||
|
||||
/datum/organ/external/r_arm
|
||||
name = "r arm"
|
||||
icon_name = "r_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/datum/organ/external/r_foot
|
||||
name = "r foot"
|
||||
icon_name = "r_foot"
|
||||
max_damage = 40
|
||||
body_part = FOOT_RIGHT
|
||||
|
||||
/datum/organ/external/r_hand
|
||||
name = "r hand"
|
||||
icon_name = "r_hand"
|
||||
max_damage = 40
|
||||
body_part = HAND_RIGHT
|
||||
|
||||
/datum/organ/external/r_leg
|
||||
name = "r leg"
|
||||
icon_name = "r_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_RIGHT
|
||||
|
||||
/datum/organ/internal
|
||||
name = "internal"
|
||||
|
||||
/datum/organ/internal/blood_vessels
|
||||
name = "blood vessels"
|
||||
var/heart = null
|
||||
var/lungs = null
|
||||
var/kidneys = null
|
||||
|
||||
/datum/organ/internal/brain
|
||||
name = "brain"
|
||||
var/head = null
|
||||
|
||||
/datum/organ/internal/excretory
|
||||
name = "excretory"
|
||||
var/excretory = 7.0
|
||||
var/blood_vessels = null
|
||||
|
||||
/datum/organ/internal/heart
|
||||
name = "heart"
|
||||
|
||||
/datum/organ/internal/immune_system
|
||||
name = "immune system"
|
||||
var/blood_vessels = null
|
||||
var/isys = null
|
||||
|
||||
/datum/organ/internal/intestines
|
||||
name = "intestines"
|
||||
var/intestines = 3.0
|
||||
var/blood_vessels = null
|
||||
|
||||
/datum/organ/internal/liver
|
||||
name = "liver"
|
||||
var/intestines = null
|
||||
var/blood_vessels = null
|
||||
|
||||
/datum/organ/internal/lungs
|
||||
name = "lungs"
|
||||
var/lungs = 3.0
|
||||
var/throat = null
|
||||
var/blood_vessels = null
|
||||
|
||||
/datum/organ/internal/stomach
|
||||
name = "stomach"
|
||||
var/intestines = null
|
||||
|
||||
/datum/organ/internal/throat
|
||||
name = "throat"
|
||||
var/lungs = null
|
||||
var/stomach = null
|
||||
@@ -247,6 +247,9 @@ proc/process_ghost_teleport_locs()
|
||||
/area/start // will be unused once kurper gets his login interface patch done
|
||||
name = "start area"
|
||||
icon_state = "start"
|
||||
requires_power = 0
|
||||
luminosity = 1
|
||||
sd_lighting = 0
|
||||
|
||||
// === end remove
|
||||
|
||||
|
||||
@@ -81,16 +81,7 @@ obj
|
||||
return
|
||||
|
||||
/atom/proc/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.effects["emp"])
|
||||
var/emppulse = Proj.effects["emp"]
|
||||
if(prob(Proj.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
|
||||
// if(istype(Proj ,/obj/item/projectile/beam/pulse))
|
||||
// src.ex_act(2)
|
||||
return
|
||||
return 0
|
||||
|
||||
/atom/proc/in_contents_of(container)//can take class or object instance as argument
|
||||
if(ispath(container))
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
/mob/living/carbon/human
|
||||
name = "human"
|
||||
real_name = "human"
|
||||
voice_name = "human"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "m-none"
|
||||
|
||||
|
||||
var/r_hair = 0.0
|
||||
var/g_hair = 0.0
|
||||
var/b_hair = 0.0
|
||||
var/h_style = "Short Hair"
|
||||
var/r_facial = 0.0
|
||||
var/g_facial = 0.0
|
||||
var/b_facial = 0.0
|
||||
var/f_style = "Shaved"
|
||||
var/r_eyes = 0.0
|
||||
var/g_eyes = 0.0
|
||||
var/b_eyes = 0.0
|
||||
var/s_tone = 0.0
|
||||
var/age = 30.0
|
||||
var/b_type = "A+"
|
||||
|
||||
var/obj/item/clothing/suit/wear_suit = null
|
||||
var/obj/item/clothing/under/w_uniform = null
|
||||
// var/obj/item/device/radio/w_radio = null
|
||||
var/obj/item/clothing/shoes/shoes = null
|
||||
var/obj/item/weapon/belt = null
|
||||
var/obj/item/clothing/gloves/gloves = null
|
||||
var/obj/item/clothing/glasses/glasses = null
|
||||
var/obj/item/clothing/head/head = null
|
||||
var/obj/item/clothing/ears/ears = null
|
||||
var/obj/item/weapon/card/id/wear_id = null
|
||||
var/obj/item/weapon/r_store = null
|
||||
var/obj/item/weapon/l_store = null
|
||||
var/obj/item/weapon/s_store = null
|
||||
var/obj/item/weapon/h_store = null
|
||||
|
||||
var/icon/stand_icon = null
|
||||
var/icon/lying_icon = null
|
||||
|
||||
var/last_b_state = 1.0
|
||||
|
||||
var/image/face_standing = null
|
||||
var/image/face_lying = null
|
||||
|
||||
var/hair_icon_state = "hair_a"
|
||||
var/face_icon_state = "bald"
|
||||
|
||||
var/list/body_standing = list()
|
||||
var/list/body_lying = list()
|
||||
|
||||
var/mutantrace = null
|
||||
|
||||
var/list/organs = list( )
|
||||
|
||||
/mob/living/carbon/human/dummy
|
||||
real_name = "Test Dummy"
|
||||
nodamage = 1
|
||||
@@ -223,7 +223,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
|
||||
var/UI = 'screen1_old.dmi' // For changing the UI from preferences
|
||||
|
||||
var/obj/effect/organstructure/organStructure = null //for dem organs
|
||||
// var/obj/effect/organstructure/organStructure = null //for dem organs
|
||||
|
||||
|
||||
/mob/proc/Delete(atom/A in view())
|
||||
|
||||
@@ -582,33 +582,6 @@
|
||||
flags = FPRINT
|
||||
anchored = 1.0
|
||||
|
||||
/obj/screen
|
||||
name = "screen"
|
||||
icon = 'screen1.dmi'
|
||||
layer = 20.0
|
||||
unacidable = 1
|
||||
var/id = 0.0
|
||||
var/obj/master
|
||||
|
||||
/obj/screen/close
|
||||
name = "close"
|
||||
master = null
|
||||
|
||||
/obj/screen/grab
|
||||
name = "grab"
|
||||
master = null
|
||||
|
||||
/obj/screen/storage
|
||||
name = "storage"
|
||||
master = null
|
||||
|
||||
/obj/screen/zone_sel
|
||||
name = "Damage Zone"
|
||||
icon = 'zone_sel.dmi'
|
||||
icon_state = "blank"
|
||||
var/selecting = "chest"
|
||||
screen_loc = "EAST+1,NORTH"
|
||||
|
||||
/obj/effect/shut_controller
|
||||
name = "shut controller"
|
||||
var/moving = null
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
var/permeability_coefficient = 1 // for chemicals/diseases
|
||||
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
|
||||
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
|
||||
var/radiation_protection = 0.0 //percentage of radiation it will absorb
|
||||
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
|
||||
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
var/uses = 0
|
||||
var/wired = 0
|
||||
body_parts_covered = HANDS
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/white
|
||||
name = "White Gloves"
|
||||
@@ -55,7 +54,6 @@
|
||||
permeability_coefficient = 0.01
|
||||
protective_temperature = 310
|
||||
heat_transfer_coefficient = 0.90
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 20, rad = 20)
|
||||
color="white"
|
||||
|
||||
cmo
|
||||
@@ -70,7 +68,6 @@
|
||||
permeability_coefficient = 0.05
|
||||
protective_temperature = 1100
|
||||
heat_transfer_coefficient = 0.01
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 30, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
|
||||
desc = "These tactical gloves are somewhat fire and impact resistant."
|
||||
@@ -81,7 +78,6 @@
|
||||
permeability_coefficient = 0.05
|
||||
protective_temperature = 1100
|
||||
heat_transfer_coefficient = 0.01
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 30, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/space_ninja
|
||||
desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
|
||||
@@ -95,7 +91,6 @@
|
||||
var/candrain = 0
|
||||
var/mindrain = 200
|
||||
var/maxdrain = 400
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
/obj/item/clothing/gloves/stungloves/
|
||||
name = "Stungloves"
|
||||
@@ -105,7 +100,6 @@
|
||||
siemens_coefficient = 0.30
|
||||
elecgen = 1
|
||||
uses = 10
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 30, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/yellow
|
||||
desc = "These gloves are electrically insulated."
|
||||
@@ -116,7 +110,6 @@
|
||||
permeability_coefficient = 0.05
|
||||
protective_temperature = 1000
|
||||
heat_transfer_coefficient = 0.01
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 30, bomb = 0, bio = 0, rad = 0)
|
||||
color="yellow"
|
||||
|
||||
/obj/item/clothing/gloves/captain
|
||||
|
||||
@@ -5,27 +5,25 @@
|
||||
icon = 'hats.dmi'
|
||||
body_parts_covered = HEAD
|
||||
var/list/allowed = list(/obj/item/weapon/pen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/radiation
|
||||
name = "Radiation Hood"
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
|
||||
radiation_protection = 0.35
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 60, rad = 100)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
|
||||
/obj/item/clothing/head/bomb_hood
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
icon_state = "bombsuit"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
armor = list(melee = 20, bullet = 5, laser = 10, taser = 5, bomb = 100, bio = 0, rad = 0)
|
||||
armor = list(melee = 20, bullet = 5, laser = 10,energy = 5, bomb = 100, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/bomb_hood/security
|
||||
icon_state = "bombsuitsec"
|
||||
item_state = "bombsuitsec"
|
||||
armor = list(melee = 50, bullet = 5, laser = 20, taser = 5, bomb = 100, bio = 0, rad = 0)
|
||||
armor = list(melee = 50, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/bio_hood
|
||||
name = "bio hood"
|
||||
@@ -33,7 +31,7 @@
|
||||
desc = "Keeps the germs from flying on your face."
|
||||
permeability_coefficient = 0.01
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 100, rad = 20)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/bio_hood/general
|
||||
icon_state = "bio_general"
|
||||
@@ -43,7 +41,7 @@
|
||||
|
||||
/obj/item/clothing/head/bio_hood/security
|
||||
icon_state = "bio_security"
|
||||
armor = list(melee = 30, bullet = 5, laser = 10, taser = 5, bomb = 20, bio = 100, rad = 20)
|
||||
armor = list(melee = 30, bullet = 5, laser = 10,energy = 5, bomb = 20, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/bio_hood/janitor
|
||||
icon_state = "bio_janitor"
|
||||
@@ -79,7 +77,7 @@
|
||||
desc = "Someone who wears this will look very smart."
|
||||
icon_state = "detective"
|
||||
allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen)
|
||||
armor = list(melee = 50, bullet = 5, laser = 30, taser = 10, bomb = 20, bio = 0, rad = 0)
|
||||
armor = list(melee = 50, bullet = 5, laser = 30,energy = 10, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/powdered_wig
|
||||
name = "powdered wig"
|
||||
@@ -156,7 +154,7 @@
|
||||
icon_state = "helmet"
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES
|
||||
item_state = "helmet"
|
||||
armor = list(melee = 75, bullet = 10, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 75, bullet = 10, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
protective_temperature = 500
|
||||
heat_transfer_coefficient = 0.10
|
||||
@@ -188,7 +186,7 @@
|
||||
icon_state = "swat"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES
|
||||
item_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/thunderdome
|
||||
name = "Thunderdome helmet"
|
||||
@@ -196,7 +194,7 @@
|
||||
icon_state = "thunderdome"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES
|
||||
item_state = "thunderdome"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/hardhat
|
||||
name = "hard hat"
|
||||
@@ -207,7 +205,7 @@
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
|
||||
armor = list(melee = 30, bullet = 5, laser = 20, taser = 10, bomb = 20, bio = 10, rad = 20)
|
||||
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/helmet/hardhat/orange
|
||||
icon_state = "hardhat0_orange"
|
||||
@@ -241,7 +239,7 @@
|
||||
m_amt = 3000
|
||||
g_amt = 1000
|
||||
var/up = 0
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, taser = 5, bomb = 10, bio = 5, rad = 10)
|
||||
armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 5, rad = 10)
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "HoS Hat"
|
||||
@@ -249,14 +247,14 @@
|
||||
icon_state = "hoscap"
|
||||
desc = "A hat that shows the security grunts who's in charge!"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "Warden Hat"
|
||||
desc = "Stop right there, criminal scum!"
|
||||
icon_state = "policehelm"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
|
||||
armor = list(melee = 70, bullet = 10, laser = 40, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 70, bullet = 10, laser = 40,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/that
|
||||
name = "Sturdy Top hat"
|
||||
@@ -264,7 +262,7 @@
|
||||
icon_state = "tophat"
|
||||
item_state = "that"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/greenbandana
|
||||
name = "Green Bandana"
|
||||
@@ -272,7 +270,7 @@
|
||||
icon_state = "greenbandana"
|
||||
item_state = "greenbandana"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE
|
||||
armor = list(melee = 5, bullet = 5, laser = 5, taser = 5, bomb = 15, bio = 15, rad = 15)
|
||||
armor = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 15, bio = 15, rad = 15)
|
||||
|
||||
/obj/item/clothing/head/helmet/riot
|
||||
name = "Riot Helmet"
|
||||
@@ -280,14 +278,14 @@
|
||||
icon_state = "riot"
|
||||
item_state = "helmet"
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES
|
||||
armor = list(melee = 82, bullet = 15, laser = 5, taser = 5, bomb = 5, bio = 2, rad = 0)
|
||||
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/cap
|
||||
name = "Captain's cap"
|
||||
desc = "For irresponsible Captains."
|
||||
icon_state = "capcap"
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/chaplain_hood
|
||||
name = "Chaplain's hood"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
3 = Report location
|
||||
*/
|
||||
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
// Colors
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "white"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/color/yellow
|
||||
name = "Yellow Jumpsuit"
|
||||
@@ -129,7 +129,7 @@
|
||||
icon_state = "engine"
|
||||
item_state = "y_suit"
|
||||
color = "engine"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 10)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/forensic_technician
|
||||
desc = "It has a Forensics rank stripe on it."
|
||||
@@ -144,7 +144,7 @@
|
||||
icon_state = "darkred"
|
||||
item_state = "r_suit"
|
||||
color = "darkred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/security
|
||||
name = "Security Jumpsuit"
|
||||
@@ -152,7 +152,7 @@
|
||||
icon_state = "red"
|
||||
item_state = "r_suit"
|
||||
color = "red"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/vice
|
||||
name = "Vice officer Jumpsuit"
|
||||
@@ -160,7 +160,7 @@
|
||||
icon_state = "vice"
|
||||
item_state = "gy_suit"
|
||||
color = "vice"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. Has a genetics rank stripe on it."
|
||||
@@ -169,7 +169,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "geneticswhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/chemist
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. Has a chemist rank stripe on it."
|
||||
@@ -178,7 +178,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "geneticswhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel
|
||||
desc = "It has a Head of Personnel rank stripe on it."
|
||||
@@ -221,7 +221,7 @@
|
||||
icon_state = "hos"
|
||||
item_state = "r_suit"
|
||||
color = "hosred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/chief_engineer
|
||||
desc = "It has a Chief Engineer rank stripe on it."
|
||||
@@ -229,7 +229,7 @@
|
||||
icon_state = "chiefengineer"
|
||||
item_state = "g_suit"
|
||||
color = "chief"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 10)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/research_director
|
||||
desc = "It has a Research Director rank stripe on it."
|
||||
@@ -237,14 +237,14 @@
|
||||
icon_state = "director"
|
||||
item_state = "g_suit"
|
||||
color = "director"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/janitor
|
||||
desc = "Official clothing of the station's poopscooper. It has a janitor rank stripe on it"
|
||||
name = "Janitor's Jumpsuit"
|
||||
icon_state = "janitor"
|
||||
color = "janitor"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/scientist
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. Has a toxins rank stripe on it."
|
||||
@@ -253,7 +253,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "toxinswhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 10, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/medical
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. It has a medical rank stripe on it."
|
||||
@@ -262,7 +262,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "medical"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. Has a Chief Medical Officer rank stripe on it."
|
||||
@@ -271,7 +271,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "medical"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/hydroponics
|
||||
desc = "Made of a special fiber that gives special protection against biohazards. Has a Hydroponics rank stripe on it."
|
||||
@@ -280,7 +280,7 @@
|
||||
item_state = "g_suit"
|
||||
color = "hydroponics"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/cargo
|
||||
name = "Quartermaster's Jumpsuit"
|
||||
@@ -337,7 +337,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "genetics_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/chemist_new
|
||||
desc = "Made of a special fiber that gives special protection against biohazards."
|
||||
@@ -346,7 +346,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "chemist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/scientist_new
|
||||
desc = "Made of a special fiber that gives special protection against biohazards and small explosions."
|
||||
@@ -355,7 +355,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "scientist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 10, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/virologist_new
|
||||
desc = "Made of a special fiber that gives increased protection against biohazards."
|
||||
@@ -364,7 +364,7 @@
|
||||
item_state = "w_suit"
|
||||
color = "virologist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
|
||||
// OTHER NONRANKED STATION JOBS
|
||||
@@ -374,7 +374,7 @@
|
||||
icon_state = "detective"
|
||||
item_state = "det"
|
||||
color = "detective"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/scratch
|
||||
name = "White Suit"
|
||||
@@ -398,7 +398,7 @@
|
||||
item_state = "bl_suit"
|
||||
color = "syndicate"
|
||||
has_sensor = 0
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
name = "Tacticool Turtleneck"
|
||||
@@ -406,7 +406,7 @@
|
||||
icon_state = "tactifool"
|
||||
item_state = "bl_suit"
|
||||
color = "tactifool"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/combat
|
||||
name = "Combat Turtleneck"
|
||||
@@ -470,7 +470,6 @@
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
heat_transfer_coefficient = 0.02
|
||||
radiation_protection = 0.25
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
@@ -489,7 +488,7 @@
|
||||
item_state = "nursesuit"
|
||||
color = "nursesuit"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/acj
|
||||
name = "Administrative Cybernetic Jumpsuit"
|
||||
@@ -500,8 +499,7 @@
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
heat_transfer_coefficient = 0.01
|
||||
radiation_protection = 1
|
||||
protective_temperature = 100000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
armor = list(melee = 100, bullet = 100, laser = 100, taser = 100, bomb = 100, bio = 100, rad = 100)
|
||||
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "mask"
|
||||
icon = 'masks.dmi'
|
||||
body_parts_covered = HEAD
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
/obj/item/clothing/mask/breath
|
||||
@@ -12,7 +12,7 @@
|
||||
name = "Breath Mask"
|
||||
icon_state = "breath"
|
||||
item_state = "breath"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | MASKCOVERSMOUTH
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | MASKCOVERSMOUTH | HALFMASK
|
||||
w_class = 2
|
||||
protective_temperature = 420
|
||||
heat_transfer_coefficient = 0.90
|
||||
@@ -59,7 +59,7 @@
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|MASKCOVERSMOUTH
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.05
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 75, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
|
||||
|
||||
/obj/item/clothing/mask/gas
|
||||
name = "gas mask"
|
||||
@@ -79,7 +79,7 @@
|
||||
desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply."
|
||||
icon_state = "plaguedoctor"
|
||||
item_state = "gas_mask"
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 75, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
|
||||
|
||||
/obj/item/clothing/mask/gas/emergency
|
||||
name = "emergency gas mask"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
heat_transfer_coefficient = 0.10
|
||||
permeability_coefficient = 0.50
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/syndigaloshes
|
||||
@@ -92,14 +92,14 @@
|
||||
name = "SWAT shoes"
|
||||
desc = "When you want to turn up the heat."
|
||||
icon_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
|
||||
/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
|
||||
name = "combat boots"
|
||||
desc = "When you REALLY want to turn up the heat"
|
||||
icon_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
|
||||
/obj/item/clothing/shoes/space_ninja
|
||||
@@ -109,7 +109,7 @@
|
||||
protective_temperature = 700
|
||||
permeability_coefficient = 0.01
|
||||
flags = NOSLIP
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
/obj/item/clothing/shoes/white
|
||||
name = "White Shoes"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/fire_resist = T0C+100
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/list/allowed = list(/obj/item/weapon/tank/emergency_oxygen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit
|
||||
name = "bomb suit"
|
||||
@@ -19,14 +19,14 @@
|
||||
heat_transfer_coefficient = 0.30
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 2
|
||||
armor = list(melee = 20, bullet = 5, laser = 10, taser = 5, bomb = 100, bio = 0, rad = 0)
|
||||
armor = list(melee = 20, bullet = 5, laser = 10,energy = 5, bomb = 100, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit/security
|
||||
desc = "A suit designed for safety when handling explosives. Includes light armoring against non-explosive hazards as well."
|
||||
icon_state = "bombsuitsec"
|
||||
item_state = "bombsuitsec"
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
armor = list(melee = 50, bullet = 5, laser = 20, taser = 5, bomb = 100, bio = 0, rad = 0)
|
||||
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 100, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/bio_suit
|
||||
name = "bio suit"
|
||||
@@ -39,7 +39,7 @@
|
||||
heat_transfer_coefficient = 0.30
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 1.3
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 100, rad = 20)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/suit/bio_suit/general
|
||||
icon_state = "bio_general"
|
||||
@@ -50,7 +50,7 @@
|
||||
/obj/item/clothing/suit/bio_suit/security
|
||||
icon_state = "bio_security"
|
||||
desc = "A suit that protects against biological contamination. Includes basic armoring against non-bio hazards as well."
|
||||
armor = list(melee = 30, bullet = 0, laser = 10, taser = 5, bomb = 20, bio = 100, rad = 20)
|
||||
armor = list(melee = 30, bullet = 0, laser = 10,energy = 5, bomb = 20, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/suit/bio_suit/janitor
|
||||
icon_state = "bio_janitor"
|
||||
@@ -75,7 +75,7 @@
|
||||
item_state = "det_suit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
allowed = list(/obj/item/weapon/gun/projectile/detective,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/cigpacket,/obj/item/weapon/zippo,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
armor = list(melee = 50, bullet = 5, laser = 30, taser = 10, bomb = 20, bio = 0, rad = 0)
|
||||
armor = list(melee = 50, bullet = 5, laser = 30,energy = 10, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/det_suit/armor
|
||||
name = "armor"
|
||||
@@ -84,7 +84,7 @@
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
allowed = list(/obj/item/weapon/gun/projectile/detective,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/cigpacket,/obj/item/weapon/zippo,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
armor = list(melee = 75, bullet = 25, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 75, bullet = 25, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/labcoat
|
||||
name = "labcoat"
|
||||
@@ -96,7 +96,7 @@
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 50, rad = 5)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 5)
|
||||
|
||||
/obj/item/clothing/suit/labcoat/cmo
|
||||
name = "chief medical officer's labcoat"
|
||||
@@ -104,7 +104,7 @@
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen)
|
||||
icon_state = "labcoat_cmo_open"
|
||||
item_state = "labcoat_cmo"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 55, rad = 5)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 55, rad = 5)
|
||||
|
||||
/obj/item/clothing/suit/labcoat/mad
|
||||
name = "The Mad's labcoat"
|
||||
@@ -130,7 +130,7 @@
|
||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen)
|
||||
icon_state = "labcoat_vir_open"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 55, rad = 5)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 55, rad = 5)
|
||||
|
||||
/obj/item/clothing/suit/labcoat/science
|
||||
name = "Scientist Labcoat"
|
||||
@@ -197,7 +197,7 @@
|
||||
heat_transfer_coefficient = 0.01
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
body_parts_covered = FULL_BODY //It's magic, I ain't gotta explain shit. --NEO
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, taser = 20, bomb = 20, bio = 20, rad = 20)
|
||||
armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20)
|
||||
allowed = list(/obj/item/weapon/teleportation_scroll)
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/red
|
||||
@@ -212,7 +212,7 @@
|
||||
icon_state = "wizard-fake"
|
||||
item_state = "wizrobe"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS //It's not magic, shit is reasonable. --NEO
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/marisa
|
||||
name = "Witch Robe"
|
||||
@@ -246,7 +246,7 @@
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/hos
|
||||
name = "armored coat"
|
||||
@@ -255,22 +255,7 @@
|
||||
item_state = "hos"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
armor = list(melee = 65, bullet = 30, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/a_i_a_ptank
|
||||
desc = "A wearable bomb with a health analyzer attached"
|
||||
name = "Analyzer/Igniter/Armor/Plasmatank Assembly"
|
||||
icon_state = "bomb"
|
||||
item_state = "bombvest"
|
||||
var/obj/item/device/healthanalyzer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part4 = null
|
||||
var/obj/item/clothing/suit/armor/vest/part3 = null
|
||||
var/status = 0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONESIZEFITSALL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
canremove = 0
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 65, bullet = 30, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/captain
|
||||
name = "Captain's armor"
|
||||
@@ -281,13 +266,40 @@
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
heat_transfer_coefficient = 0.02
|
||||
radiation_protection = 0.25
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 65, bullet = 50, laser = 50, taser = 25, bomb = 50, bio = 20, rad = 20)
|
||||
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
|
||||
/obj/item/clothing/suit/armor/riot
|
||||
name = "Riot Suit"
|
||||
desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement."
|
||||
icon_state = "riot"
|
||||
item_state = "swat_suit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 0, laser = 5,energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/bulletproof
|
||||
name = "Bulletproof Vest"
|
||||
desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles."
|
||||
icon_state = "bulletproof"
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
armor = list(melee = 10, bullet = 80, laser = 5,energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/laserproof
|
||||
name = "Ablative Armor Vest"
|
||||
desc = "A vest that excels in protecting the wearer against energy projectiles."
|
||||
icon_state = "armor_reflec"
|
||||
item_state = "armor_reflec"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
armor = list(melee = 0, bullet = 0, laser = 60,energy = 40, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/centcomm
|
||||
name = "Cent. Com. armor"
|
||||
@@ -307,11 +319,9 @@
|
||||
gas_transfer_coefficient = 0.90
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 3
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/red
|
||||
name = "Thunderdome suit (red)"
|
||||
@@ -332,13 +342,12 @@
|
||||
item_state = "swat_suit"
|
||||
gas_transfer_coefficient = 0.01
|
||||
heat_transfer_coefficient = 0.02
|
||||
radiation_protection = 0.25
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/swat/officer //Combined effect of the bomb suit and the SWAT suit.
|
||||
name = "officer jacket"
|
||||
@@ -348,38 +357,20 @@
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
heat_transfer_coefficient = 0.02
|
||||
radiation_protection = 0.25
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 100, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 100, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/riot
|
||||
name = "Riot Suit"
|
||||
desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement."
|
||||
icon_state = "riot"
|
||||
item_state = "swat_suit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 5, laser = 5, taser = 0, bomb = 5, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/bulletproof
|
||||
name = "Bulletproof Vest"
|
||||
desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles."
|
||||
icon_state = "bulletproof"
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
armor = list(melee = 15, bullet = 70, laser = 20, taser = 10, bomb = 5, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/laserproof
|
||||
name = "Ablative Armor Vest"
|
||||
desc = "A vest that excels in protecting the wearer against energy projectiles."
|
||||
icon_state = "armor_reflec"
|
||||
item_state = "armor_reflec"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
armor = list(melee = 10, bullet = 5, laser = 65, taser = 25, bomb = 5, bio = 0, rad = 0)
|
||||
|
||||
// FIRE SUITS
|
||||
|
||||
@@ -410,12 +401,11 @@
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.50
|
||||
heat_transfer_coefficient = 0.30 //Not a fire suit
|
||||
radiation_protection = 0.75
|
||||
protective_temperature = 1000 // Not a fire suit
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1.3
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 60, rad = 100)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
|
||||
/obj/item/clothing/suit/fire/heavy
|
||||
name = "firesuit"
|
||||
@@ -477,7 +467,7 @@
|
||||
icon_state = "chickensuit"
|
||||
item_state = "chickensuit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HEAD
|
||||
armor = list(melee = 5, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 5, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/monkeysuit
|
||||
name = "Monkey Suit"
|
||||
@@ -485,7 +475,7 @@
|
||||
icon_state = "monkeysuit"
|
||||
item_state = "monkeysuit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
|
||||
armor = list(melee = 5, bullet = 0, laser = 0, taser = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 5, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/holidaypriest
|
||||
name = "Holiday Priest"
|
||||
|
||||
@@ -372,9 +372,9 @@
|
||||
|
||||
/datum/supply_packs/robotics
|
||||
name = "Robotics Assembly Crate"
|
||||
contains = list("/obj/item/device/prox_sensor",
|
||||
"/obj/item/device/prox_sensor",
|
||||
"/obj/item/device/prox_sensor",
|
||||
contains = list("/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/weapon/storage/toolbox/electrical",
|
||||
"/obj/item/device/flash",
|
||||
"/obj/item/device/flash",
|
||||
@@ -392,15 +392,15 @@
|
||||
contains = list("/obj/item/weapon/tank/plasma",
|
||||
"/obj/item/weapon/tank/plasma",
|
||||
"/obj/item/weapon/tank/plasma",
|
||||
"/obj/item/device/igniter",
|
||||
"/obj/item/device/igniter",
|
||||
"/obj/item/device/igniter",
|
||||
"/obj/item/device/prox_sensor",
|
||||
"/obj/item/device/prox_sensor",
|
||||
"/obj/item/device/prox_sensor",
|
||||
"/obj/item/device/timer",
|
||||
"/obj/item/device/timer",
|
||||
"/obj/item/device/timer")
|
||||
"/obj/item/device/assembly/igniter",
|
||||
"/obj/item/device/assembly/igniter",
|
||||
"/obj/item/device/assembly/igniter",
|
||||
"/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/device/assembly/prox_sensor",
|
||||
"/obj/item/device/assembly/timer",
|
||||
"/obj/item/device/assembly/timer",
|
||||
"/obj/item/device/assembly/timer")
|
||||
cost = 10
|
||||
containertype = "/obj/structure/crate/secure/plasma"
|
||||
containername = "Plasma assembly crate"
|
||||
@@ -487,8 +487,8 @@
|
||||
name = "Experimental energy gear crate"
|
||||
contains = list("/obj/item/clothing/suit/armor/laserproof",
|
||||
"/obj/item/clothing/suit/armor/laserproof",
|
||||
"/obj/item/weapon/gun/energy",
|
||||
"/obj/item/weapon/gun/energy")
|
||||
"/obj/item/weapon/gun/energy/gun",
|
||||
"/obj/item/weapon/gun/energy/gun")
|
||||
cost = 50
|
||||
containertype = "/obj/structure/crate/secure"
|
||||
containername = "Experimental energy gear crate"
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
|
||||
/obj/machinery/vending/assist
|
||||
product_amounts = "5;3;4;1;4"
|
||||
product_hidden = "/obj/item/device/flashlight;obj/item/device/timer"
|
||||
product_paths = "/obj/item/device/prox_sensor;/obj/item/device/igniter;/obj/item/device/radio/signaler;/obj/item/weapon/wirecutters;/obj/item/weapon/cartridge/signal"
|
||||
product_hidden = "/obj/item/device/flashlight;obj/item/device/assembly/timer"
|
||||
product_paths = "/obj/item/device/assembly/prox_sensor;/obj/item/device/assembly/igniter;/obj/item/device/assembly/signaler;/obj/item/weapon/wirecutters;/obj/item/weapon/cartridge/signal"
|
||||
product_hideamt = "5;2"
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
@@ -139,8 +139,7 @@
|
||||
icon_deny = "sec-deny"
|
||||
req_access_txt = "1"
|
||||
product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut"
|
||||
product_amounts = "8;2;5;12"
|
||||
//product_amounts = "8;5;4" Old totals
|
||||
product_amounts = "8;4;5;12"
|
||||
product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box"
|
||||
product_hideamt = "2;2"
|
||||
|
||||
|
||||
@@ -691,22 +691,6 @@
|
||||
item_state = "gift"
|
||||
w_class = 4.0
|
||||
|
||||
/obj/item/weapon/grab
|
||||
name = "grab"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "grabbed"
|
||||
var/obj/screen/grab/hud1 = null
|
||||
var/mob/affecting = null
|
||||
var/mob/assailant = null
|
||||
var/state = 1.0
|
||||
var/killing = 0.0
|
||||
var/allow_upgrade = 1.0
|
||||
var/last_suffocate = 1.0
|
||||
layer = 21
|
||||
abstract = 1.0
|
||||
item_state = "nothing"
|
||||
w_class = 5.0
|
||||
|
||||
/obj/item/weapon/hand_tele
|
||||
name = "hand tele"
|
||||
desc = "A portable item using blue-space technology."
|
||||
|
||||
@@ -29,8 +29,9 @@
|
||||
if(get_dist(source, user) <= 1)
|
||||
return 1
|
||||
else
|
||||
if (istype(user, /mob/living/carbon))
|
||||
if (user:mutations & PORTALS && get_dist(source, user) <= 7)
|
||||
if(istype(user, /mob/living/carbon))
|
||||
if(user:mutations & PORTALS && get_dist(source, user) <= 7)
|
||||
if(user:equipped()) return 0
|
||||
var/X = source:x
|
||||
var/Y = source:y
|
||||
var/Z = source:z
|
||||
|
||||
@@ -106,8 +106,8 @@
|
||||
return result
|
||||
|
||||
/proc/setblock(istring, blocknumber, replacement, blocksize)
|
||||
var/result
|
||||
result = getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
|
||||
if(!istring || !blocknumber || !replacement || !blocksize) return 0
|
||||
var/result = getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
|
||||
return result
|
||||
|
||||
/proc/add_zero2(t, u)
|
||||
|
||||
@@ -211,17 +211,10 @@
|
||||
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = Proj.mobdamage[BRUTE]
|
||||
health -= (d / max(src.brute_resist,1))
|
||||
if(2)
|
||||
var/d = Proj.mobdamage[BURN]
|
||||
health -= (d / max(src.fire_resist,1))
|
||||
//health -= Proj.damage
|
||||
..()
|
||||
if(!Proj) return
|
||||
src.health -= Proj.damage
|
||||
update()
|
||||
return 0
|
||||
|
||||
|
||||
attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
desc = "A hood worn by the followers of Nar-Sie."
|
||||
see_face = 0
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
|
||||
armor = list(melee = 30, bullet = 10, laser = 5, taser = 5, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
@@ -27,4 +27,4 @@
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
|
||||
armor = list(melee = 50, bullet = 30, laser = 50, taser = 20, bomb = 25, bio = 10, rad = 0)
|
||||
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
@@ -208,7 +208,7 @@ This could be a lot better but I'm too tired atm.*/
|
||||
return
|
||||
if (targloc == curloc)
|
||||
return
|
||||
var/obj/item/projectile/dart/A = new /obj/item/projectile/dart(U.loc)
|
||||
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc)
|
||||
A.current = curloc
|
||||
A.yo = targloc.y - curloc.y
|
||||
A.xo = targloc.x - curloc.x
|
||||
|
||||
@@ -1382,9 +1382,8 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
health -= Proj.damage
|
||||
..()
|
||||
healthcheck()
|
||||
return
|
||||
return 0
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
|
||||
@@ -222,8 +222,11 @@
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/card/id/syndicate(synd_mob), synd_mob.slot_wear_id)
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(synd_mob), synd_mob.slot_back)
|
||||
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/c45(synd_mob), synd_mob.slot_in_backpack)
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack) //Because it needed to be upgraded by someone - Micro
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/mini_uzi(synd_mob), synd_mob.slot_belt)
|
||||
var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
|
||||
E.imp_in = synd_mob
|
||||
E.implanted = 1
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ datum/objective/steal
|
||||
|
||||
var/global/possible_items_special[] = list(
|
||||
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
||||
"nuclear gun" = /obj/item/weapon/gun/energy/nuclear,
|
||||
"nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear,
|
||||
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
|
||||
"bag of holding" = /obj/item/weapon/storage/backpack/holding,
|
||||
"hyper-capacity cell" = /obj/item/weapon/cell/hyper,
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
if(rev_mind in revolutionaries)
|
||||
revolutionaries -= rev_mind
|
||||
rev_mind.special_role = null
|
||||
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT>"
|
||||
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel, and you cannot remember a thing!</B></FONT>"
|
||||
update_rev_icons_removed(rev_mind)
|
||||
for(var/mob/living/M in view(rev_mind.current))
|
||||
M << "[rev_mind.current] looks like they just remembered their real allegiance!"
|
||||
|
||||
@@ -141,8 +141,8 @@
|
||||
var/turf/T = get_turf(src.loc)
|
||||
if(T)
|
||||
for(var/mob/M in T)
|
||||
M.bullet_act(Proj, def_zone)
|
||||
..()
|
||||
Proj.on_hit(M,M.bullet_act(Proj, def_zone))
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -738,78 +738,6 @@ table tr:first-child th:first-child { border: none;}
|
||||
spawn(rand(0,15))
|
||||
update_icon()
|
||||
|
||||
/*/obj/machinery/alarm/Click()
|
||||
if(istype(usr, /mob/living/silicon/ai))
|
||||
return examine()
|
||||
return ..()*/
|
||||
|
||||
/*
|
||||
/obj/machinery/alarm/examine()
|
||||
set src in oview(1)
|
||||
if(usr.stat)
|
||||
return
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(!(istype(usr, /mob/living/carbon/human) || ticker))
|
||||
if (!istype(usr, /mob/living/silicon/ai))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return
|
||||
if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai))
|
||||
var/turf/T = src.loc
|
||||
if (!( istype(T, /turf) ))
|
||||
return
|
||||
|
||||
var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
|
||||
turf_total = max(turf_total, 1)
|
||||
usr.show_message("\blue <B>Results:</B>", 1)
|
||||
var/t = ""
|
||||
var/t1 = turf_total / CELLSTANDARD * 100
|
||||
if ((90 < t1 && t1 < 110))
|
||||
usr.show_message(text("\blue Air Pressure: []%", t1), 1)
|
||||
else
|
||||
usr.show_message(text("\blue Air Pressure:\red []%", t1), 1)
|
||||
t1 = T.n2 / turf_total * 100
|
||||
t1 = round(t1, 0.0010)
|
||||
if ((60 < t1 && t1 < 80))
|
||||
t += text("<font color=blue>Nitrogen: []</font> ", t1)
|
||||
else
|
||||
t += text("<font color=red>Nitrogen: []</font> ", t1)
|
||||
t1 = T.oxygen / turf_total * 100
|
||||
t1 = round(t1, 0.0010)
|
||||
if ((20 < t1 && t1 < 24))
|
||||
t += text("<font color=blue>Oxygen: []</font> ", t1)
|
||||
else
|
||||
t += text("<font color=red>Oxygen: []</font> ", t1)
|
||||
t1 = T.poison / turf_total * 100
|
||||
t1 = round(t1, 0.0010)
|
||||
if (t1 < 0.5)
|
||||
t += text("<font color=blue>Plasma: []</font> ", t1)
|
||||
else
|
||||
t += text("<font color=red>Plasma: []</font> ", t1)
|
||||
t1 = T.co2 / turf_total * 100
|
||||
t1 = round(t1, 0.0010)
|
||||
if (t1 < 1)
|
||||
t += text("<font color=blue>CO2: []</font> ", t1)
|
||||
else
|
||||
t += text("<font color=red>CO2: []</font> ", t1)
|
||||
t1 = T.sl_gas / turf_total * 100
|
||||
t1 = round(t1, 0.0010)
|
||||
if (t1 < 5)
|
||||
t += text("<font color=blue>NO2: []</font>", t1)
|
||||
else
|
||||
t += text("<font color=red>NO2: []</font>", t1)
|
||||
t1 = T.temp - T0C
|
||||
if (T.temp > 326.444 || T.temp < 282.591)
|
||||
t += text("<br><font color=red>Temperature: []</font>", t1)
|
||||
else
|
||||
t += text("<br><font color=blue>Temperature: []</font>", t1)
|
||||
usr.show_message(t, 1)
|
||||
return
|
||||
else
|
||||
usr << "\blue <B>You are too far away.</B>"
|
||||
*/
|
||||
|
||||
|
||||
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if(src.detecting)
|
||||
if(temperature > T0C+200)
|
||||
|
||||
@@ -249,13 +249,13 @@ var/global/list/autolathe_recipes = list( \
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(), \
|
||||
new /obj/item/ammo_magazine/c38(), \
|
||||
new /obj/item/device/taperecorder(), \
|
||||
new /obj/item/device/igniter(), \
|
||||
new /obj/item/device/assembly/igniter(), \
|
||||
new /obj/item/device/infra_sensor(), \
|
||||
new /obj/item/device/radio/signaler(), \
|
||||
new /obj/item/device/assembly/signaler(), \
|
||||
new /obj/item/device/radio/headset(), \
|
||||
new /obj/item/device/radio(), \
|
||||
new /obj/item/device/infra(), \
|
||||
new /obj/item/device/timer(), \
|
||||
new /obj/item/device/assembly/infra(), \
|
||||
new /obj/item/device/assembly/timer(), \
|
||||
)
|
||||
|
||||
var/global/list/autolathe_recipes_hidden = list( \
|
||||
|
||||
@@ -242,7 +242,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
|
||||
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
@@ -688,7 +688,7 @@ Auto Patrol: []"},
|
||||
Sa.build_step = 1
|
||||
Sa.overlays += image('aibots.dmi', "hs_hole")
|
||||
Sa.created_name = src.name
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
|
||||
var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec)
|
||||
B.charges = 0
|
||||
@@ -724,7 +724,7 @@ Auto Patrol: []"},
|
||||
if (src.emagged)
|
||||
A = new /obj/item/projectile/beam( loc )
|
||||
else
|
||||
A = new /obj/item/projectile/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
|
||||
if (!( istype(U, /turf) ))
|
||||
//A = null
|
||||
@@ -786,7 +786,7 @@ Auto Patrol: []"},
|
||||
|
||||
/obj/item/weapon/ed209_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (((istype(W, /obj/item/robot_parts/l_leg)) || (istype(W, /obj/item/robot_parts/r_leg))) && (src.build_step == 0 || src.build_step == 1))
|
||||
if(((istype(W, /obj/item/robot_parts/l_leg)) || (istype(W, /obj/item/robot_parts/r_leg))) && (src.build_step == 0 || src.build_step == 1))
|
||||
src.build_step++
|
||||
user << "You add the robot leg to [src]!"
|
||||
src.name = "legs/frame assembly"
|
||||
@@ -799,26 +799,26 @@ Auto Patrol: []"},
|
||||
|
||||
del(W)
|
||||
|
||||
else if (istype(W, /obj/item/clothing/suit/armor/vest) && (src.build_step == 2))
|
||||
else if(istype(W, /obj/item/clothing/suit/armor/vest) && (src.build_step == 2))
|
||||
src.build_step++
|
||||
user << "You add the armor to [src]!"
|
||||
src.name = "vest/legs/frame assembly"
|
||||
src.item_state = "ed209_shell"
|
||||
src.icon_state = "ed209_shell"
|
||||
del(W)
|
||||
else if ((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
|
||||
else if((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
|
||||
if (W:remove_fuel(0,user))
|
||||
src.build_step++
|
||||
src.name = "shielded frame assembly"
|
||||
user << "You welded the vest to [src]!"
|
||||
else if (istype(W, /obj/item/clothing/head/helmet) && (src.build_step == 4))
|
||||
else if(istype(W, /obj/item/clothing/head/helmet) && (src.build_step == 4))
|
||||
src.build_step++
|
||||
user << "You add the helmet to [src]!"
|
||||
src.name = "covered and shielded frame assembly"
|
||||
src.item_state = "ed209_hat"
|
||||
src.icon_state = "ed209_hat"
|
||||
del(W)
|
||||
else if (istype(W, /obj/item/device/prox_sensor) && (src.build_step == 5))
|
||||
else if(isprox(W) && (src.build_step == 5))
|
||||
src.build_step++
|
||||
user << "You add the prox sensor to [src]!"
|
||||
src.name = "prox/covered and armed the frame assembly"
|
||||
@@ -835,7 +835,7 @@ Auto Patrol: []"},
|
||||
src.build_step++
|
||||
user << "\blue You wire the ED-209 assembly!"
|
||||
src.name = "Wired ED-209 Assembly"
|
||||
else if (istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7))
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7))
|
||||
src.build_step++
|
||||
user << "You add the taser gun to [src]!"
|
||||
src.name = "Taser/Wired ED-209 Assembly"
|
||||
@@ -851,7 +851,7 @@ Auto Patrol: []"},
|
||||
src.build_step++
|
||||
src.name = "Armed ED-209 Assembly"
|
||||
user << "\blue Taser gun attached!"
|
||||
else if ((istype(W, /obj/item/weapon/cell)) && (src.build_step >= 9))
|
||||
else if((istype(W, /obj/item/weapon/cell)) && (src.build_step >= 9))
|
||||
src.build_step++
|
||||
user << "You complete the ED-209!"
|
||||
var/obj/machinery/bot/ed209/S = new /obj/machinery/bot/ed209
|
||||
@@ -860,7 +860,7 @@ Auto Patrol: []"},
|
||||
del(W)
|
||||
del(src)
|
||||
|
||||
else if (istype(W, /obj/item/weapon/pen))
|
||||
else if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
if (!t)
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
var/obj/item/weapon/storage/toolbox/mechanical/N = new /obj/item/weapon/storage/toolbox/mechanical(Tsec)
|
||||
N.contents = list()
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
@@ -386,7 +386,7 @@
|
||||
|
||||
/obj/item/weapon/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/prox_sensor))
|
||||
if(isprox(W))
|
||||
var/obj/item/weapon/toolbox_tiles_sensor/B = new /obj/item/weapon/toolbox_tiles_sensor
|
||||
B.loc = user
|
||||
if (user.r_hand == W)
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/bullet_act(var/obj/item/projectile/Proj)
|
||||
if (Proj.flag == "taser")
|
||||
if(Proj.flag == "taser")
|
||||
src.stunned = min(stunned+10,20)
|
||||
..()
|
||||
|
||||
@@ -463,7 +463,7 @@
|
||||
|
||||
new /obj/item/weapon/storage/firstaid(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
|
||||
new /obj/item/device/healthanalyzer(Tsec)
|
||||
|
||||
@@ -568,14 +568,14 @@
|
||||
|
||||
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if ((istype(W, /obj/item/device/healthanalyzer)) && (!src.build_step))
|
||||
if((istype(W, /obj/item/device/healthanalyzer)) && (!src.build_step))
|
||||
src.build_step++
|
||||
user << "You add the health sensor to [src]!"
|
||||
src.name = "First aid/robot arm/health analyzer assembly"
|
||||
src.overlays += image('aibots.dmi', "na_scanner")
|
||||
del(W)
|
||||
|
||||
else if ((istype(W, /obj/item/device/prox_sensor)) && (src.build_step == 1))
|
||||
else if((isprox(W)) && (src.build_step == 1))
|
||||
src.build_step++
|
||||
user << "You complete the Medibot! Beep boop."
|
||||
var/obj/machinery/bot/medbot/S = new /obj/machinery/bot/medbot
|
||||
@@ -585,7 +585,7 @@
|
||||
del(W)
|
||||
del(src)
|
||||
|
||||
else if (istype(W, /obj/item/weapon/pen))
|
||||
else if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
if (!t)
|
||||
|
||||
@@ -182,7 +182,6 @@
|
||||
|
||||
/obj/machinery/bot/mulebot/bullet_act()
|
||||
if(prob(50) && !isnull(load))
|
||||
load.bullet_act()
|
||||
unload(0)
|
||||
if(prob(25))
|
||||
src.visible_message("\red Something shorts out inside [src]!")
|
||||
@@ -794,13 +793,12 @@
|
||||
*/
|
||||
|
||||
var/damage = rand(5,15)
|
||||
|
||||
H.TakeDamage("head", 2*damage, 0)
|
||||
H.TakeDamage("chest",2*damage, 0)
|
||||
H.TakeDamage("l_leg",0.5*damage, 0)
|
||||
H.TakeDamage("r_leg",0.5*damage, 0)
|
||||
H.TakeDamage("l_arm",0.5*damage, 0)
|
||||
H.TakeDamage("r_arm",0.5*damage, 0)
|
||||
H.apply_damage(2*damage, BRUTE, "head")
|
||||
H.apply_damage(2*damage, BRUTE, "chest")
|
||||
H.apply_damage(0.5*damage, BRUTE, "l_leg")
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_leg")
|
||||
H.apply_damage(0.5*damage, BRUTE, "l_arm")
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||
B.blood_DNA = H.dna.unique_enzymes
|
||||
@@ -950,7 +948,7 @@
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/stack/rods(Tsec)
|
||||
new /obj/item/stack/rods(Tsec)
|
||||
new /obj/item/weapon/cable_coil/cut(Tsec)
|
||||
|
||||
@@ -669,7 +669,7 @@ Auto Patrol: []"},
|
||||
Sa.build_step = 1
|
||||
Sa.overlays += image('aibots.dmi', "hs_hole")
|
||||
Sa.created_name = src.name
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
|
||||
var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec)
|
||||
B.charges = 0
|
||||
@@ -697,16 +697,16 @@ Auto Patrol: []"},
|
||||
|
||||
//Secbot Construction
|
||||
|
||||
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/radio/signaler/S, mob/user as mob)
|
||||
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/assembly/signaler/S, mob/user as mob)
|
||||
..()
|
||||
if (!istype(S, /obj/item/device/radio/signaler))
|
||||
if (!issignaler(S))
|
||||
..()
|
||||
return
|
||||
|
||||
if (src.type != /obj/item/clothing/head/helmet) //Eh, but we don't want people making secbots out of space helmets.
|
||||
return
|
||||
|
||||
if (!S.b_stat)
|
||||
if (!S.secured)
|
||||
return
|
||||
else
|
||||
var/obj/item/weapon/secbot_assembly/A = new /obj/item/weapon/secbot_assembly
|
||||
@@ -731,21 +731,21 @@ Auto Patrol: []"},
|
||||
src.overlays += image('aibots.dmi', "hs_hole")
|
||||
user << "You weld a hole in [src]!"
|
||||
|
||||
else if ((istype(W, /obj/item/device/prox_sensor)) && (src.build_step == 1))
|
||||
else if(isprox(W) && (src.build_step == 1))
|
||||
src.build_step++
|
||||
user << "You add the prox sensor to [src]!"
|
||||
src.overlays += image('aibots.dmi', "hs_eye")
|
||||
src.name = "helmet/signaler/prox sensor assembly"
|
||||
del(W)
|
||||
|
||||
else if (((istype(W, /obj/item/robot_parts/l_arm)) || (istype(W, /obj/item/robot_parts/r_arm))) && (src.build_step == 2))
|
||||
else if(((istype(W, /obj/item/robot_parts/l_arm)) || (istype(W, /obj/item/robot_parts/r_arm))) && (src.build_step == 2))
|
||||
src.build_step++
|
||||
user << "You add the robot arm to [src]!"
|
||||
src.name = "helmet/signaler/prox sensor/robot arm assembly"
|
||||
src.overlays += image('aibots.dmi', "hs_arm")
|
||||
del(W)
|
||||
|
||||
else if ((istype(W, /obj/item/weapon/melee/baton)) && (src.build_step >= 3))
|
||||
else if((istype(W, /obj/item/weapon/melee/baton)) && (src.build_step >= 3))
|
||||
src.build_step++
|
||||
user << "You complete the Securitron! Beep boop."
|
||||
var/obj/machinery/bot/secbot/S = new /obj/machinery/bot/secbot
|
||||
@@ -754,7 +754,7 @@ Auto Patrol: []"},
|
||||
del(W)
|
||||
del(src)
|
||||
|
||||
else if (istype(W, /obj/item/weapon/pen))
|
||||
else if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
if (!t)
|
||||
|
||||
@@ -12,12 +12,8 @@
|
||||
var/best_dist = INFINITY //infinity
|
||||
var/best_cam = null
|
||||
for(var/obj/machinery/camera/C in A)
|
||||
if(usr:network != C.network)
|
||||
continue // different network (syndicate)
|
||||
if(C.z != usr.z)
|
||||
continue // different viewing plane
|
||||
if(!C.status)
|
||||
continue // ignore disabled cameras
|
||||
if(usr:network != C.network) continue
|
||||
if(!C.status) continue // ignore disabled cameras
|
||||
var/dist = get_dist(src, C)
|
||||
if(dist < best_dist)
|
||||
best_dist = dist
|
||||
|
||||
@@ -138,19 +138,6 @@ for reference:
|
||||
else
|
||||
return 0
|
||||
|
||||
/* bullet_act(flag, A as obj)
|
||||
switch(flag)
|
||||
if (PROJECTILE_BULLET)
|
||||
src.health -= 20
|
||||
if (PROJECTILE_WEAKBULLET) //Detective's revolver fires marshmallows
|
||||
src.health -= 2
|
||||
if (PROJECTILE_LASER)
|
||||
src.health -= 20
|
||||
if (PROJECTILE_PULSE)
|
||||
src.health -=50
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
These should not block bullets/N */
|
||||
|
||||
//Actual Deployable machinery stuff
|
||||
|
||||
@@ -274,21 +261,6 @@ These should not block bullets/N */
|
||||
else
|
||||
return 0
|
||||
|
||||
/* bullet_act(flag, A as obj)
|
||||
switch(flag)
|
||||
if (PROJECTILE_BULLET)
|
||||
src.health -= 20
|
||||
if (PROJECTILE_WEAKBULLET) //Detective's revolver fires marshmallows
|
||||
src.health -= 2
|
||||
if (PROJECTILE_LASER)
|
||||
src.health -= 20
|
||||
if (PROJECTILE_PULSE)
|
||||
src.health -=50
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
These should not block bullets/N */
|
||||
|
||||
|
||||
proc/explode()
|
||||
|
||||
for(var/mob/O in hearers(src, null))
|
||||
|
||||
@@ -687,14 +687,14 @@ About the new airlock wires panel:
|
||||
src.pulse(t1)
|
||||
else if(href_list["signaler"])
|
||||
var/wirenum = text2num(href_list["signaler"])
|
||||
if(!istype(usr.equipped(), /obj/item/device/radio/signaler))
|
||||
if(!istype(usr.equipped(), /obj/item/device/assembly/signaler))
|
||||
usr << "You need a signaller!"
|
||||
return
|
||||
if(src.isWireColorCut(wirenum))
|
||||
usr << "You can't attach a signaller to a cut wire."
|
||||
return
|
||||
var/obj/item/device/radio/signaler/R = usr.equipped()
|
||||
if(!R.b_stat)
|
||||
var/obj/item/device/assembly/signaler/R = usr.equipped()
|
||||
if(R.secured)
|
||||
usr << "This radio can't be attached!"
|
||||
return
|
||||
var/mob/M = usr
|
||||
@@ -707,7 +707,7 @@ About the new airlock wires panel:
|
||||
if(!(src.signalers[wirenum]))
|
||||
usr << "There's no signaller attached to that wire!"
|
||||
return
|
||||
var/obj/item/device/radio/signaler/R = src.signalers[wirenum]
|
||||
var/obj/item/device/assembly/signaler/R = src.signalers[wirenum]
|
||||
R.loc = usr.loc
|
||||
R.airlock_wire = null
|
||||
src.signalers[wirenum] = null
|
||||
@@ -865,7 +865,7 @@ About the new airlock wires panel:
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/device/multitool))
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/device/radio/signaler))
|
||||
else if (istype(C, /obj/item/device/assembly/signaler))
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
|
||||
var/obj/item/weapon/pai_cable/cable = C
|
||||
|
||||
@@ -165,7 +165,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
Gun.power_supply.charge=gun_charge
|
||||
Gun.update_icon()
|
||||
if(prob(50)) new /obj/item/stack/sheet/metal( loc, rand(1,4))
|
||||
if(prob(50)) new /obj/item/device/prox_sensor(locate(x,y,z))
|
||||
if(prob(50)) new /obj/item/device/assembly/prox_sensor(locate(x,y,z))
|
||||
else
|
||||
user << "You remove the turret but did not manage to salvage anything."
|
||||
del(src)
|
||||
@@ -466,7 +466,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
|
||||
var/obj/item/projectile/A
|
||||
if(!installation) // if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots
|
||||
A = new /obj/item/projectile/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
if(!emagged) use_power(200)
|
||||
else use_power(400)
|
||||
playsound(src.loc, 'Taser.ogg', 75, 1)
|
||||
@@ -481,18 +481,13 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
playsound(src.loc, E.fire_sound, 10, 1)
|
||||
|
||||
// All energy-based weapons are applicable
|
||||
if (istype(E, /obj/item/weapon/gun/energy/laser))
|
||||
if(istype(E, /obj/item/weapon/gun/energy/laser))
|
||||
A = new /obj/item/projectile/beam( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(500)
|
||||
else use_power(1000)
|
||||
else if (istype(E, /obj/item/weapon/gun/energy/shockgun))
|
||||
A = new /obj/item/projectile/beam/fireball( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(500)
|
||||
else use_power(1000)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/pulse_rifle))
|
||||
A = new /obj/item/projectile/beam/pulse( loc )
|
||||
A.original = target.loc
|
||||
@@ -501,20 +496,11 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
else use_power(1400)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/taser) || istype(E, /obj/item/weapon/gun/energy/stunrevolver))
|
||||
A = new /obj/item/projectile/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
icon_state = "target_prism"
|
||||
if(!emagged) use_power(200)
|
||||
else use_power(400)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/freeze))
|
||||
A = new /obj/item/projectile/freeze( loc )
|
||||
A.original = target.loc
|
||||
var/obj/item/projectile/freeze/F = A
|
||||
F.temperature = rand(0, 200)
|
||||
icon_state = "target_prism"
|
||||
if(!emagged) use_power(300)
|
||||
else use_power(600)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/lasercannon))
|
||||
A = new /obj/item/projectile/beam/heavylaser( loc )
|
||||
A.original = target.loc
|
||||
@@ -522,29 +508,22 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
if(!emagged) use_power(600)
|
||||
else use_power(1200)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/shockgun))
|
||||
A = new /obj/item/projectile/beam/fireball( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(500)
|
||||
else use_power(1000)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/decloner))
|
||||
A = new /obj/item/projectile/declone( loc )
|
||||
A = new /obj/item/projectile/energy/declone( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(600)
|
||||
else use_power(1200)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/crossbow))
|
||||
A = new /obj/item/projectile/bolt( loc )
|
||||
A = new /obj/item/projectile/energy/bolt( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(50)
|
||||
else use_power(100)
|
||||
|
||||
else if(istype(E, /obj/item/weapon/gun/energy/crossbow/largecrossbow))
|
||||
A = new /obj/item/projectile/largebolt( loc )
|
||||
A = new /obj/item/projectile/energy/bolt/large( loc )
|
||||
A.original = target.loc
|
||||
icon_state = "orange_target_prism"
|
||||
if(!emagged) use_power(125)
|
||||
@@ -553,7 +532,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
else // Energy gun shots
|
||||
|
||||
if(!emagged) // if it hasn't been emagged, it uses normal taser shots
|
||||
A = new /obj/item/projectile/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
icon_state = "target_prism"
|
||||
use_power(200)
|
||||
|
||||
@@ -666,7 +645,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
return
|
||||
|
||||
if(4)
|
||||
if(istype(W, /obj/item/device/prox_sensor))
|
||||
if(isprox(W))
|
||||
build_step = 5
|
||||
user << "\blue You add the prox sensor to the turret."
|
||||
del(W)
|
||||
@@ -753,7 +732,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
|
||||
if(5)
|
||||
user << "You remove the prox sensor from the turret frame."
|
||||
new/obj/item/device/prox_sensor(locate(x,y,z))
|
||||
new/obj/item/device/assembly/prox_sensor(locate(x,y,z))
|
||||
build_step = 4
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ obj/machinery/recharger
|
||||
if (src.charging || src.charging2)
|
||||
return
|
||||
if (istype(G, /obj/item/weapon/gun/energy))
|
||||
if (istype(G, /obj/item/weapon/gun/energy/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
|
||||
if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
|
||||
user << "Your gun's recharge port was removed to make room for a miniaturized reactor."
|
||||
return
|
||||
user.drop_item()
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
A.original = target.loc
|
||||
use_power(500)
|
||||
else
|
||||
A = new /obj/item/projectile/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
use_power(200)
|
||||
A.current = T
|
||||
A.yo = U.y - T.y
|
||||
|
||||
@@ -51,6 +51,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
runewords-=wordhide
|
||||
|
||||
/obj/effect/rune
|
||||
desc = ""
|
||||
anchored = 1
|
||||
icon = 'rune.dmi'
|
||||
icon_state = "1"
|
||||
@@ -101,10 +102,24 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
AI.client.images += blood
|
||||
|
||||
examine()
|
||||
set src in view(2)
|
||||
|
||||
if(!iscultist(usr))
|
||||
usr << "A strange collection of symbols drawn in blood."
|
||||
else
|
||||
if(desc && !usr.stat)
|
||||
usr << "It reads: <i>[desc]</i>."
|
||||
sleep(30)
|
||||
explosion(src.loc, 0, 2, 5, 5)
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
if(!desc)
|
||||
usr << "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>."
|
||||
else
|
||||
usr << "Explosive Runes inscription in blood. It reads: <i>[desc]</i>."
|
||||
return
|
||||
|
||||
|
||||
attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
|
||||
@@ -118,6 +133,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(!iscultist(user))
|
||||
user << "You can't mouth the arcane scratchings without fumbling over them."
|
||||
@@ -740,6 +756,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
R.word3=wordtech
|
||||
R.loc = user.loc
|
||||
R.check_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/paperscrap
|
||||
name = "scrap of paper"
|
||||
icon_state = "scrap"
|
||||
@@ -760,59 +778,3 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
|
||||
proc/view_scrap(var/viewer)
|
||||
viewer << browse(data)
|
||||
|
||||
/obj/item/weapon/paper/talisman
|
||||
icon_state = "papertalisman"
|
||||
var/imbue = null
|
||||
var/uses = 0
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
if(iscultist(user))
|
||||
switch(imbue)
|
||||
if("newtome")
|
||||
call(/obj/effect/rune/proc/tomesummon)()
|
||||
if("armor")
|
||||
call(/obj/effect/rune/proc/armor)()
|
||||
if("emp")
|
||||
call(/obj/effect/rune/proc/emp)(usr.loc,3)
|
||||
if("conceal")
|
||||
call(/obj/effect/rune/proc/obscure)(2)
|
||||
if("revealrunes")
|
||||
call(/obj/effect/rune/proc/revealrunes)(src)
|
||||
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||
call(/obj/effect/rune/proc/teleport)(imbue)
|
||||
if("communicate")
|
||||
call(/obj/effect/rune/proc/communicate)()
|
||||
if("deafen")
|
||||
call(/obj/effect/rune/proc/deafen)()
|
||||
if("blind")
|
||||
call(/obj/effect/rune/proc/blind)()
|
||||
if("runestun")
|
||||
user << "\red To use this talisman, attack your target directly."
|
||||
return
|
||||
if("supply")
|
||||
supply()
|
||||
user.take_organ_damage(5, 0)
|
||||
if(src && src.imbue!="supply" && src.imbue!="runestun")
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
user << "You see strange symbols on the paper. Are they supposed to mean something?"
|
||||
return
|
||||
|
||||
attack(mob/living/carbon/T as mob, mob/living/user as mob)
|
||||
if(iscultist(user))
|
||||
if(imbue == "runestun")
|
||||
user.take_organ_damage(5, 0)
|
||||
call(/obj/effect/rune/proc/runestun)(T)
|
||||
del(src)
|
||||
else
|
||||
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/paper/talisman/supply
|
||||
imbue = "supply"
|
||||
uses = 3
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/obj/item/weapon/paper/talisman/proc/supply(var/key)
|
||||
if (!src.uses)
|
||||
del(src)
|
||||
return
|
||||
|
||||
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
|
||||
dat += "Please choose the chant to be imbued into the fabric of reality.<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
|
||||
usr << browse(dat, "window=id_com;size=350x200")
|
||||
return
|
||||
|
||||
/obj/item/weapon/paper/talisman/Topic(href, href_list)
|
||||
if (!src)
|
||||
return
|
||||
|
||||
if (usr.stat || usr.restrained() || !in_range(src, usr))
|
||||
return
|
||||
|
||||
if (href_list["rune"])
|
||||
switch(href_list["rune"])
|
||||
if("newtome")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "newtome"
|
||||
if("teleport")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
|
||||
T.info = "[T.imbue]"
|
||||
if("emp")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "emp"
|
||||
if("conceal")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "conceal"
|
||||
if("communicate")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "communicate"
|
||||
if("runestun")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "runestun"
|
||||
src.uses--
|
||||
supply()
|
||||
return
|
||||
110
code/game/magic/cultist/talisman.dm
Normal file
110
code/game/magic/cultist/talisman.dm
Normal file
@@ -0,0 +1,110 @@
|
||||
/obj/item/weapon/paper/talisman
|
||||
icon_state = "papertalisman"
|
||||
var/imbue = null
|
||||
var/uses = 0
|
||||
|
||||
|
||||
examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
if(iscultist(user))
|
||||
switch(imbue)
|
||||
if("newtome")
|
||||
call(/obj/effect/rune/proc/tomesummon)()
|
||||
if("armor")
|
||||
call(/obj/effect/rune/proc/armor)()
|
||||
if("emp")
|
||||
call(/obj/effect/rune/proc/emp)(usr.loc,3)
|
||||
if("conceal")
|
||||
call(/obj/effect/rune/proc/obscure)(2)
|
||||
if("revealrunes")
|
||||
call(/obj/effect/rune/proc/revealrunes)(src)
|
||||
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||
call(/obj/effect/rune/proc/teleport)(imbue)
|
||||
if("communicate")
|
||||
call(/obj/effect/rune/proc/communicate)()
|
||||
if("deafen")
|
||||
call(/obj/effect/rune/proc/deafen)()
|
||||
if("blind")
|
||||
call(/obj/effect/rune/proc/blind)()
|
||||
if("runestun")
|
||||
user << "\red To use this talisman, attack your target directly."
|
||||
return
|
||||
if("supply")
|
||||
supply()
|
||||
user.take_organ_damage(5, 0)
|
||||
if(src && src.imbue!="supply" && src.imbue!="runestun")
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
user << "You see strange symbols on the paper. Are they supposed to mean something?"
|
||||
return
|
||||
|
||||
|
||||
attack(mob/living/carbon/T as mob, mob/living/user as mob)
|
||||
if(iscultist(user))
|
||||
if(imbue == "runestun")
|
||||
user.take_organ_damage(5, 0)
|
||||
call(/obj/effect/rune/proc/runestun)(T)
|
||||
del(src)
|
||||
else
|
||||
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
proc/supply(var/key)
|
||||
if (!src.uses)
|
||||
del(src)
|
||||
return
|
||||
|
||||
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
|
||||
dat += "Please choose the chant to be imbued into the fabric of reality.<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
|
||||
usr << browse(dat, "window=id_com;size=350x200")
|
||||
return
|
||||
|
||||
|
||||
talisman/Topic(href, href_list)
|
||||
if(!src) return
|
||||
if (usr.stat || usr.restrained() || !in_range(src, usr)) return
|
||||
|
||||
if (href_list["rune"])
|
||||
switch(href_list["rune"])
|
||||
if("newtome")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "newtome"
|
||||
if("teleport")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
|
||||
T.info = "[T.imbue]"
|
||||
if("emp")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "emp"
|
||||
if("conceal")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "conceal"
|
||||
if("communicate")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "communicate"
|
||||
if("runestun")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
T.imbue = "runestun"
|
||||
src.uses--
|
||||
supply()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/paper/talisman/supply
|
||||
imbue = "supply"
|
||||
uses = 3
|
||||
@@ -1,297 +0,0 @@
|
||||
// BLATANTLY ripped from the facehugger.dm alien code. -- TLE
|
||||
|
||||
#define viewrange 7 //min 2
|
||||
|
||||
// Returns the surrounding cardinal turfs with open links
|
||||
// Including through doors openable with the ID
|
||||
// Includes spacetiles
|
||||
/*
|
||||
|
||||
|
||||
/obj/creature
|
||||
name = "creature"
|
||||
desc = "A sanity-destroying otherthing."
|
||||
icon = 'otherthing.dmi'
|
||||
icon_state = "otherthing"
|
||||
layer = 5.0
|
||||
density = 1
|
||||
anchored = 0
|
||||
unacidable = 1 //Creature is not harmed by acid.
|
||||
|
||||
var/state = 0
|
||||
|
||||
var/list/path = new/list()
|
||||
|
||||
var/frustration = 0
|
||||
var/mob/living/carbon/target
|
||||
var/list/path_target = new/list()
|
||||
|
||||
var/turf/trg_idle
|
||||
var/list/path_idle = new/list()
|
||||
|
||||
var/alive = 1 //1 alive, 0 dead
|
||||
var/health = 25
|
||||
var/maxhealth = 25
|
||||
var/cycle_pause = 5
|
||||
|
||||
flags = 258.0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
health = maxhealth
|
||||
src.process()
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if(!alive)
|
||||
usr << text("\red <B>the thing isn't moving</B>")
|
||||
else if (src.health > 15)
|
||||
usr << text("\red <B>A sanity-destroying otherthing.</B>")
|
||||
else
|
||||
usr << text("\red <B>the thing looks hurt</B>")
|
||||
return
|
||||
|
||||
|
||||
attack_hand(user as mob)
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 2
|
||||
if("brute")
|
||||
src.health -= W.force * 1
|
||||
else
|
||||
if (src.health <= 0)
|
||||
src.death()
|
||||
else if (W.force)
|
||||
if(ishuman(user) || ismonkey(user))
|
||||
src.target = user
|
||||
src.state = 1
|
||||
..()
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
health -= round(Proj.damage / 2)
|
||||
healthcheck()
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.death()
|
||||
if(2.0)
|
||||
src.health -= 15
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
meteorhit()
|
||||
src.death()
|
||||
return
|
||||
|
||||
blob_act()
|
||||
if(prob(50))
|
||||
src.death()
|
||||
return
|
||||
|
||||
Bumped(AM as mob|obj)
|
||||
if(ismob(AM) && (ishuman(AM) || ismonkey(AM)) )
|
||||
src.target = AM
|
||||
set_attack()
|
||||
else if(ismob(AM))
|
||||
spawn(0)
|
||||
var/turf/T = get_turf(src)
|
||||
AM:loc = T
|
||||
|
||||
Bump(atom/A)
|
||||
if(ismob(A) && (ishuman(A) || ismonkey(A)))
|
||||
src.target = A
|
||||
set_attack()
|
||||
else if(ismob(A))
|
||||
src.loc = A:loc
|
||||
|
||||
temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 200)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
|
||||
|
||||
proc/set_attack()
|
||||
state = 1
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
trg_idle = null
|
||||
|
||||
proc/set_idle()
|
||||
state = 2
|
||||
if (path_target.len) path_target = new/list()
|
||||
target = null
|
||||
frustration = 0
|
||||
|
||||
proc/set_null()
|
||||
state = 0
|
||||
if (path_target.len) path_target = new/list()
|
||||
if (path_idle.len) path_idle = new/list()
|
||||
target = null
|
||||
trg_idle = null
|
||||
frustration = 0
|
||||
|
||||
proc/process()
|
||||
set background = 1
|
||||
var/quick_move = 0
|
||||
|
||||
if (!alive)
|
||||
return
|
||||
|
||||
if (!target)
|
||||
if (path_target.len) path_target = new/list()
|
||||
|
||||
var/last_health = INFINITY
|
||||
|
||||
for (var/mob/living/carbon/C in range(viewrange-2,src.loc))
|
||||
if (C.stat == 2 || !can_see(src,C,viewrange))
|
||||
continue
|
||||
if(C:stunned || C:paralysis || C:weakened)
|
||||
target = C
|
||||
break
|
||||
if(C:health < last_health)
|
||||
last_health = C:health
|
||||
target = C
|
||||
|
||||
if(target)
|
||||
set_attack()
|
||||
else if(state != 2)
|
||||
set_idle()
|
||||
idle()
|
||||
|
||||
else if(target)
|
||||
var/turf/distance = get_dist(src, target)
|
||||
set_attack()
|
||||
|
||||
if(can_see(src,target,viewrange))
|
||||
if(distance <= 1)
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[src.target] has been attacked by [src]!</B>", 1, "\red You hear the sounds of combat", 2)
|
||||
target:bruteloss += rand(1,10)
|
||||
sleep(5)
|
||||
//target:paralysis = max(target:paralysis, 10)
|
||||
|
||||
else
|
||||
step_towards(src,get_step_towards2(src , target))
|
||||
set_null()
|
||||
spawn(cycle_pause) src.process()
|
||||
return
|
||||
|
||||
else
|
||||
if( !path_target.len )
|
||||
|
||||
path_attack(target)
|
||||
if(!path_target.len)
|
||||
set_null()
|
||||
spawn(cycle_pause) src.process()
|
||||
return
|
||||
else
|
||||
var/turf/next = path_target[1]
|
||||
|
||||
if(next in range(1,src))
|
||||
path_attack(target)
|
||||
|
||||
if(!path_target.len)
|
||||
src.frustration += 5
|
||||
else
|
||||
next = path_target[1]
|
||||
path_target -= next
|
||||
step_towards(src,next)
|
||||
quick_move = 1
|
||||
|
||||
if (get_dist(src, src.target) >= distance) src.frustration++
|
||||
else src.frustration--
|
||||
if(frustration >= 35) set_null()
|
||||
|
||||
if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
src.process()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
src.process()
|
||||
|
||||
proc/idle()
|
||||
set background = 1
|
||||
var/quick_move = 0
|
||||
|
||||
if(state != 2 || !alive || target) return
|
||||
|
||||
if(!path_idle.len)
|
||||
path_idle(trg_idle)
|
||||
if(!path_idle.len)
|
||||
trg_idle = null
|
||||
set_idle()
|
||||
spawn(cycle_pause) src.idle()
|
||||
return
|
||||
else
|
||||
step(src,pick(cardinal))
|
||||
|
||||
else
|
||||
|
||||
if(can_see(src,trg_idle,viewrange))
|
||||
switch(get_dist(src, trg_idle))
|
||||
if(1)
|
||||
if(istype(trg_idle,/obj/effect/alien/weeds))
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(2 to INFINITY)
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
/*
|
||||
if(viewrange+1 to INFINITY)
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
quick_move = 1
|
||||
*/
|
||||
else
|
||||
var/turf/next = path_idle[1]
|
||||
if(!next in range(1,src))
|
||||
path_idle(trg_idle)
|
||||
|
||||
if(!path_idle.len)
|
||||
spawn(cycle_pause) src.idle()
|
||||
return
|
||||
else
|
||||
next = path_idle[1]
|
||||
path_idle -= next
|
||||
step_towards(src,next)
|
||||
quick_move = 1
|
||||
|
||||
if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
idle()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
idle()
|
||||
|
||||
proc/path_idle(var/atom/trg)
|
||||
path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_idle = reverselist(path_idle)
|
||||
|
||||
proc/path_attack(var/atom/trg)
|
||||
target = trg
|
||||
path_target = AStar(src.loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_target = reverselist(path_target)
|
||||
|
||||
|
||||
proc/death()
|
||||
if(!alive) return
|
||||
src.alive = 0
|
||||
density = 0
|
||||
icon_state = "dead"
|
||||
set_null()
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\red <B>[src] falls over dead!</B>", 1)
|
||||
|
||||
proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
src.death()
|
||||
|
||||
*/
|
||||
@@ -28,7 +28,7 @@ datum/controller/game_controller
|
||||
|
||||
setupgenetics()
|
||||
|
||||
SetupJobs("config/jobs.txt")
|
||||
// SetupJobs("config/jobs.txt")
|
||||
|
||||
//setupcorpses() Not used any more.
|
||||
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
return
|
||||
|
||||
playsound(chassis, 'Laser.ogg', 50, 1)
|
||||
var/obj/item/projectile/electrode/A = new /obj/item/projectile/electrode(curloc)
|
||||
var/obj/item/projectile/energy/electrode/A = new /obj/item/projectile/energy/electrode(curloc)
|
||||
A.original = targloc
|
||||
A.current = curloc
|
||||
A.yo = targloc.y - curloc.y
|
||||
@@ -289,7 +289,7 @@
|
||||
continue
|
||||
|
||||
playsound(chassis, 'Gunshot.ogg', 50, 1)
|
||||
var/obj/item/projectile/weakbullet/A = new /obj/item/projectile/weakbullet(curloc)
|
||||
var/obj/item/projectile/bullet/weakbullet/A = new /obj/item/projectile/bullet/weakbullet(curloc)
|
||||
src.projectiles--
|
||||
A.original = targloc
|
||||
A.current = curloc
|
||||
|
||||
@@ -280,6 +280,7 @@
|
||||
for(var/T in possible_int_damage)
|
||||
if(internal_damage & T)
|
||||
possible_int_damage -= T
|
||||
if(possible_int_damage)
|
||||
var/int_dam_flag = pick(possible_int_damage)
|
||||
if(int_dam_flag)
|
||||
src.internal_damage |= int_dam_flag
|
||||
|
||||
@@ -138,19 +138,17 @@
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/radio/signaler/S = new(V)
|
||||
var/obj/item/device/assembly/signaler/S = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = S
|
||||
|
||||
S.holder = V
|
||||
S.Secure()
|
||||
S.toggle_secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
S.b_stat = 0
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
@@ -163,14 +161,14 @@
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/prox_sensor/P = new(V)
|
||||
var/obj/item/device/assembly/prox_sensor/P = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = P
|
||||
|
||||
P.holder = V
|
||||
P.Secure()
|
||||
P.toggle_secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
@@ -187,14 +185,14 @@
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/timer/T = new(V)
|
||||
var/obj/item/device/assembly/timer/T = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = T
|
||||
|
||||
T.holder = V
|
||||
T.Secure()
|
||||
T.toggle_secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
T.time = 30
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
new /obj/item/ammo_magazine/c45( src )
|
||||
new /obj/item/weapon/storage/handcuff_kit( src )
|
||||
new /obj/item/weapon/storage/flashbang_kit( src )
|
||||
new /obj/item/weapon/gun/energy( src )
|
||||
new /obj/item/weapon/gun/energy( src )
|
||||
new /obj/item/weapon/gun/energy( src )
|
||||
new /obj/item/weapon/gun/energy/gun( src )
|
||||
new /obj/item/weapon/gun/energy/gun( src )
|
||||
new /obj/item/weapon/gun/energy/gun( src )
|
||||
new /obj/item/weapon/pinpointer( src )
|
||||
new /obj/item/weapon/pinpointer( src )
|
||||
new /obj/item/weapon/pinpointer( src )
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/device/radio/signaler(src)
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
/obj/structure/secure_closet/personal/New()
|
||||
..()
|
||||
spawn(2)
|
||||
new /obj/item/device/radio/signaler( src )
|
||||
new /obj/item/weapon/pen( src )
|
||||
new /obj/item/weapon/storage/backpack( src )
|
||||
new /obj/item/device/radio/headset( src )
|
||||
return
|
||||
@@ -24,25 +22,19 @@
|
||||
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
|
||||
user.drop_item()
|
||||
if (W) W.loc = src.loc
|
||||
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(istype(W, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = W
|
||||
W = pda.id
|
||||
else if(istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
var/obj/item/weapon/card/id/I = W
|
||||
if (src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered)))
|
||||
if(!I || !I.registered) return
|
||||
if(src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered)))
|
||||
//they can open all lockers, or nobody owns this, or they own this locker
|
||||
src.locked = !( src.locked )
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
if (!src.registered)
|
||||
if(src.locked) src.icon_state = src.icon_locked
|
||||
else src.icon_state = src.icon_closed
|
||||
|
||||
if(!src.registered)
|
||||
src.registered = I.registered
|
||||
src.desc = "Owned by [I.registered]."
|
||||
else
|
||||
@@ -60,9 +52,6 @@
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
else
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
new /obj/item/clothing/shoes/brown( src )
|
||||
new /obj/item/device/radio/headset/heads/captain( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
|
||||
new /obj/item/weapon/gun/energy( src )
|
||||
new /obj/item/weapon/gun/energy/gun( src )
|
||||
return
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/storage/id_kit( src )
|
||||
new /obj/item/weapon/gun/energy(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
return
|
||||
@@ -55,10 +55,11 @@
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/weapon/shield/riot(src)
|
||||
new /obj/item/weapon/gun/energy(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/lockbox/loyalty()
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -103,10 +103,12 @@ MASS SPECTROMETER
|
||||
|
||||
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
|
||||
if (!istype(M))
|
||||
if (!ishuman(M))
|
||||
user << "\red [M] is not humas and cannot have the fingerprints."
|
||||
return 0
|
||||
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
|
||||
user << "\blue No fingerprints found on [M]"
|
||||
return 0
|
||||
else
|
||||
if ((src.amount < 1 && src.printing))
|
||||
user << text("\blue Fingerprints scanned on [M]. Need more cards to print.")
|
||||
|
||||
@@ -335,8 +335,7 @@ steam.start() -- spawns the effect
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover, /obj/item/projectile/beam))
|
||||
var/obj/item/projectile/beam/B = mover
|
||||
B.damage = 10//testing, will just hardcode for now
|
||||
B.mobdamage = new/list(BRUTE = 0 , BURN = 10, TOX = 0, OXY = 0, CLONE = 0)
|
||||
B.damage = (B.damage/2)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
|
||||
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 9
|
||||
var/fuel = 0
|
||||
|
||||
var/list/togglearmor = list(melee = 90, bullet = 70, laser = 60, taser = 40, bomb = 75, bio = 75, rad = 75)
|
||||
var/list/togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
|
||||
var/active = 0
|
||||
|
||||
var/helmrequired = 1
|
||||
@@ -199,7 +199,7 @@
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
see_face = 0.0
|
||||
item_state = "swat"
|
||||
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
|
||||
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
|
||||
var/obj/item/clothing/suit/powered/parent
|
||||
|
||||
proc/atmotoggle()
|
||||
@@ -237,7 +237,7 @@
|
||||
desc = "Not for rookies."
|
||||
flags = FPRINT | TABLEPASS
|
||||
item_state = "swat"
|
||||
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
|
||||
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
|
||||
|
||||
/obj/item/clothing/shoes/powered
|
||||
name = "Powered armor"
|
||||
@@ -245,7 +245,7 @@
|
||||
desc = "Not for rookies."
|
||||
flags = FPRINT | TABLEPASS
|
||||
item_state = "swat"
|
||||
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
|
||||
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
|
||||
|
||||
|
||||
obj/item/clothing/suit/powered/spawnable/badmin
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
/obj/item/powerarmor/reactive
|
||||
name = "Adminbus power armor reactive plating"
|
||||
desc = "Made with the rare Badminium molecule."
|
||||
var/list/togglearmor = list(melee = 250, bullet = 100, laser = 100, taser = 100, bomb = 100, bio = 100, rad = 100)
|
||||
var/list/togglearmor = list(melee = 250, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
|
||||
//Good lord an active energy axe does 150 damage a swing? Anyway, barring var editing, this armor loadout should be impervious to anything. Enjoy, badmins~ --NEO
|
||||
|
||||
toggle(sudden = 0)
|
||||
@@ -116,7 +116,7 @@
|
||||
centcomm
|
||||
name = "CentComm power armor reactive plating"
|
||||
desc = "Pretty effective against everything, not perfect though."
|
||||
togglearmor = list(melee = 90, bullet = 70, laser = 60, taser = 40, bomb = 75, bio = 75, rad = 75)
|
||||
togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
|
||||
slowdown = 2
|
||||
|
||||
|
||||
@@ -149,24 +149,20 @@
|
||||
parent.gas_transfer_coefficient = 1
|
||||
parent.permeability_coefficient = 1
|
||||
parent.heat_transfer_coefficient = 1
|
||||
parent.radiation_protection = 0
|
||||
parent.flags &= ~SUITSPACE
|
||||
if(parent.helmrequired)
|
||||
parent.helm.gas_transfer_coefficient = 1
|
||||
parent.helm.permeability_coefficient = 1
|
||||
parent.helm.heat_transfer_coefficient = 1
|
||||
parent.helm.radiation_protection = 0
|
||||
parent.helm.flags &= ~HEADSPACE
|
||||
if(parent.glovesrequired)
|
||||
parent.gloves.gas_transfer_coefficient = 1
|
||||
parent.gloves.permeability_coefficient = 1
|
||||
parent.gloves.heat_transfer_coefficient = 1
|
||||
parent.gloves.radiation_protection = 0
|
||||
if(parent.shoesrequired)
|
||||
parent.shoes.gas_transfer_coefficient = 1
|
||||
parent.shoes.permeability_coefficient = 1
|
||||
parent.shoes.heat_transfer_coefficient = 1
|
||||
parent.shoes.radiation_protection = 0
|
||||
sealed = 0
|
||||
|
||||
if(0)
|
||||
@@ -174,24 +170,20 @@
|
||||
parent.gas_transfer_coefficient = 0.01
|
||||
parent.permeability_coefficient = 0.02
|
||||
parent.heat_transfer_coefficient = 0.02
|
||||
parent.radiation_protection = 0.75
|
||||
parent.flags |= SUITSPACE
|
||||
if(parent.helmrequired)
|
||||
parent.helm.gas_transfer_coefficient = 0.01
|
||||
parent.helm.permeability_coefficient = 0.02
|
||||
parent.helm.heat_transfer_coefficient = 0.02
|
||||
parent.helm.radiation_protection = 0.75
|
||||
parent.helm.flags |= HEADSPACE
|
||||
if(parent.glovesrequired)
|
||||
parent.gloves.gas_transfer_coefficient = 0.01
|
||||
parent.gloves.permeability_coefficient = 0.02
|
||||
parent.gloves.heat_transfer_coefficient = 0.02
|
||||
parent.gloves.radiation_protection = 0.75
|
||||
if(parent.shoesrequired)
|
||||
parent.shoes.gas_transfer_coefficient = 0.01
|
||||
parent.shoes.permeability_coefficient = 0.02
|
||||
parent.shoes.heat_transfer_coefficient = 0.02
|
||||
parent.shoes.radiation_protection = 0.75
|
||||
sealed = 1
|
||||
|
||||
adminbus
|
||||
@@ -221,7 +213,6 @@
|
||||
parent.helm.gas_transfer_coefficient = 0.01
|
||||
parent.helm.permeability_coefficient = 0.02
|
||||
parent.helm.heat_transfer_coefficient = 0.02
|
||||
parent.helm.radiation_protection = 0.75
|
||||
parent.helm.flags |= HEADSPACE
|
||||
user << "\blue Helmet atmospheric seals engaged."
|
||||
if(manual)
|
||||
@@ -234,7 +225,6 @@
|
||||
parent.helm.gas_transfer_coefficient = 1
|
||||
parent.helm.permeability_coefficient = 1
|
||||
parent.helm.heat_transfer_coefficient = 1
|
||||
parent.helm.radiation_protection = 0
|
||||
parent.helm.flags &= ~HEADSPACE
|
||||
if(manual)
|
||||
for (var/armorvar in helm.armor)
|
||||
|
||||
@@ -307,146 +307,8 @@
|
||||
|
||||
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (ishuman(user) || isrobot(user) || ismonkey(user) || isalien(user))
|
||||
if (!( def_zone ))
|
||||
var/mob/user2 = user
|
||||
var/t = user2:zone_sel.selecting
|
||||
if ((t in list( "eyes", "mouth" )))
|
||||
t = "head"
|
||||
def_zone = ran_zone(t)
|
||||
var/datum/organ/external/affecting
|
||||
if (H.organs[text("[]", def_zone)])
|
||||
affecting = H.organs[text("[]", def_zone)]
|
||||
var/hit_area = parse_zone(def_zone)
|
||||
|
||||
var/list/armor = H.getarmor(affecting, "melee")
|
||||
//Grabbing the set of clothing that offers the best protective value against melee attacks to that area. --NEO
|
||||
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has been attacked in the [] with [][] </B>", M, hit_area, src, (user ? text(" by [].", user) : ".")), 1)
|
||||
if (istype(affecting, /datum/organ/external))
|
||||
var/b_dam = (src.damtype == "brute" ? src.force : 0)
|
||||
var/f_dam = (src.damtype == "fire" ? src.force : 0)
|
||||
if (M.mutations & COLD_RESISTANCE)
|
||||
f_dam = 0
|
||||
if (def_zone == "head")
|
||||
if (b_dam && prob(armor["armor"] - src.force))
|
||||
if (prob(20))
|
||||
affecting.take_damage(power, 0)
|
||||
else
|
||||
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the head.")
|
||||
return
|
||||
if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam)))
|
||||
var/time = rand(10, 120)
|
||||
if (prob(90))
|
||||
if (H.paralysis < time)
|
||||
H.paralysis = time
|
||||
else
|
||||
if (H.weakened < time)
|
||||
H.weakened = time
|
||||
if(H.stat != 2) H.stat = 1
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has been knocked unconscious!</B>", H), 1, "\red You hear someone fall.", 2)
|
||||
if (prob(50))
|
||||
if (/*ticker.mode.name == "revolution" && */ M != user)
|
||||
ticker.mode.remove_revolutionary(H.mind)
|
||||
if (b_dam && prob(25 + (b_dam * 2)))
|
||||
src.add_blood(H)
|
||||
if (prob(33))
|
||||
var/turf/location = H.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood(H)
|
||||
if (H.wear_mask)
|
||||
H.wear_mask.add_blood(H)
|
||||
if (H.head)
|
||||
H.head.add_blood(H)
|
||||
if (H.glasses && prob(33))
|
||||
H.glasses.add_blood(H)
|
||||
if (istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
if (user2.gloves)
|
||||
user2.gloves.add_blood(H)
|
||||
else
|
||||
user2.add_blood(H)
|
||||
if (prob(15))
|
||||
if (user2.wear_suit)
|
||||
user2.wear_suit.add_blood(H)
|
||||
else if (user2.w_uniform)
|
||||
user2.w_uniform.add_blood(H)
|
||||
affecting.take_damage(b_dam, f_dam)
|
||||
else if (def_zone == "chest" || def_zone == "groin")
|
||||
if (b_dam && prob(armor["armor"] - src.force))
|
||||
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the [affecting.name].")
|
||||
return
|
||||
if (b_dam && ((istype(H.r_hand, /obj/item/weapon/shield/riot))) && prob(90 - src.force))
|
||||
H.show_message("\red You have been protected from a hit to the [affecting.name].")
|
||||
return
|
||||
if (b_dam && ((istype(H.l_hand, /obj/item/weapon/shield/riot))) && prob(90 - src.force))
|
||||
H.show_message("\red You have been protected from a hit to the [affecting.name].")
|
||||
return
|
||||
if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam)))
|
||||
if (prob(50))
|
||||
if (H.weakened < 5)
|
||||
H.weakened = 5
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message(text("\red <B>[] has been knocked down!</B>", H), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (H.stunned < 2)
|
||||
H.stunned = 2
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message(text("\red <B>[] has been stunned!</B>", H), 1)
|
||||
if(H.stat != 2) H.stat = 1
|
||||
if (b_dam && prob(25 + (b_dam * 2)))
|
||||
src.add_blood(H)
|
||||
if (prob(33))
|
||||
var/turf/location = H.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood(H)
|
||||
if (H.wear_suit)
|
||||
H.wear_suit.add_blood(H)
|
||||
if (H.w_uniform)
|
||||
H.w_uniform.add_blood(H)
|
||||
if (istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
if (user2.gloves)
|
||||
user2.gloves.add_blood(H)
|
||||
else
|
||||
user2.add_blood(H)
|
||||
if (prob(15))
|
||||
if (user2.wear_suit)
|
||||
user2.wear_suit.add_blood(H)
|
||||
else if (user2.w_uniform)
|
||||
user2.w_uniform.add_blood(H)
|
||||
affecting.take_damage(b_dam, f_dam)
|
||||
else
|
||||
if (b_dam && prob(armor["armor"] - src.force))
|
||||
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the [affecting.name].")
|
||||
return
|
||||
if (b_dam && prob(25 + (b_dam * 2)))
|
||||
src.add_blood(H)
|
||||
if (prob(33))
|
||||
var/turf/location = H.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood(H)
|
||||
if (H.wear_suit)
|
||||
H.wear_suit.add_blood(H)
|
||||
if (H.w_uniform)
|
||||
H.w_uniform.add_blood(H)
|
||||
if (istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
if (user2.gloves)
|
||||
user2.gloves.add_blood(H)
|
||||
else
|
||||
user2.add_blood(H)
|
||||
if (prob(15))
|
||||
if (user2.wear_suit)
|
||||
user2.wear_suit.add_blood(H)
|
||||
else if (user2.w_uniform)
|
||||
user2.w_uniform.add_blood(H)
|
||||
affecting.take_damage(b_dam, f_dam)
|
||||
H.UpdateDamageIcon() ///Only reference I can find on the attack() proc actually changing mob icon -Agouri
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
M:attacked_by(src, user, def_zone)
|
||||
else
|
||||
switch(src.damtype)
|
||||
if("brute")
|
||||
|
||||
@@ -45,11 +45,11 @@ BIKE HORN
|
||||
|
||||
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob)
|
||||
if(istype(target,/obj/effect/decal/cleanable))
|
||||
del(target)
|
||||
user << "\blue You scrub the [target.name] out."
|
||||
del(target)
|
||||
else
|
||||
target.clean_blood()
|
||||
user << "\blue You clean the [target.name]."
|
||||
target.clean_blood()
|
||||
return
|
||||
|
||||
/obj/item/weapon/bikehorn/attack_self(mob/user as mob)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
..()
|
||||
weldtool = new/obj/item/weapon/weldingtool(src)
|
||||
weldtool.status = 0
|
||||
igniter = new/obj/item/device/igniter(src)
|
||||
igniter = new/obj/item/device/assembly/igniter(src)
|
||||
igniter.secured = 0
|
||||
src.status = 1
|
||||
update_icon()
|
||||
@@ -31,7 +31,7 @@
|
||||
operating = 0//cooldown
|
||||
turf/previousturf = null
|
||||
obj/item/weapon/weldingtool/weldtool = null
|
||||
obj/item/device/igniter/igniter = null
|
||||
obj/item/device/assembly/igniter/igniter = null
|
||||
obj/item/weapon/tank/plasma/ptank = null
|
||||
|
||||
|
||||
@@ -103,8 +103,8 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/igniter))
|
||||
var/obj/item/device/igniter/I = W
|
||||
if(isigniter(W))
|
||||
var/obj/item/device/assembly/igniter/I = W
|
||||
if(I.secured) return 0
|
||||
user.remove_from_mob(I)
|
||||
I.loc = src
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -110,7 +110,7 @@ Implant Specifics:<BR>"}
|
||||
|
||||
activate(var/cause)
|
||||
if((!cause) || (!src.imp_in)) return 0
|
||||
explosion(src, -1, 0, 1, 3, 0)//This might be a bit much, dono will have to see.
|
||||
explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see.
|
||||
if(src.imp_in)
|
||||
src.imp_in.gib()
|
||||
|
||||
|
||||
@@ -191,7 +191,7 @@ STUN BATON
|
||||
user.weakened = max(3 * force, user.weakened)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.TakeDamage("head", 2 * force, 0)
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
return
|
||||
|
||||
@@ -167,7 +167,14 @@ CRAYONS
|
||||
layer = 2.1
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
|
||||
examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
|
||||
|
||||
@@ -35,19 +35,20 @@
|
||||
|
||||
update_icon()
|
||||
//TODO: Have this take an assemblyholder
|
||||
else if(item.IsAssembly())
|
||||
if(item:secured)
|
||||
else if(isassembly(item))
|
||||
var/obj/item/device/assembly/A = item
|
||||
if(A.secured)
|
||||
user << "\red The device is secured!"
|
||||
return
|
||||
if(attached_device)
|
||||
user << "\red There is already an device attached to the valve, remove it first!"
|
||||
return
|
||||
user.remove_from_mob(item)
|
||||
attached_device = item
|
||||
item.loc = src
|
||||
attached_device = A
|
||||
A.loc = src
|
||||
user << "\blue You attach the [item] to the valve controls and secure it!"
|
||||
item:holder = src
|
||||
item:Secure()
|
||||
A.holder = src
|
||||
A.toggle_secure()
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
if(istype(Proj ,/obj/item/projectile/beam/pulse))
|
||||
src.ex_act(2)
|
||||
..()
|
||||
return
|
||||
return 0
|
||||
|
||||
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
|
||||
if (!mover || !isturf(mover.loc))
|
||||
|
||||
@@ -638,7 +638,7 @@
|
||||
|
||||
if(!holder) return
|
||||
STFU_ghosts = !STFU_ghosts
|
||||
usr << "You will now [STFU_ghosts ? "hear" : "not hear"] ghsots"
|
||||
usr << "You will now [STFU_ghosts ? "hear" : "not hear"] ghosts"
|
||||
|
||||
/client/proc/toggle_hear_radio()
|
||||
set name = "Toggle Hear Radio"
|
||||
|
||||
@@ -1,97 +1,167 @@
|
||||
/*
|
||||
Desc: Sorta a hack/workaround to get interfaceish things into this engine.
|
||||
To use an interface just override the proc in your object and set it to return true.
|
||||
If an object returns true for one of these it should have ALL of the commented out procs and vars defined in its class.
|
||||
There may be some example code in procs below the defines to help explain things, but you don't have to use it.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Name: IsAssembly
|
||||
Desc: If true is an assembly that can work with the holder
|
||||
*/
|
||||
/obj/proc/IsAssembly()
|
||||
/proc/isassembly(O)
|
||||
if(istype(O, /obj/item/device/assembly))
|
||||
return 1
|
||||
return 0
|
||||
/*
|
||||
|
||||
/proc/isigniter(O)
|
||||
if(istype(O, /obj/item/device/assembly/igniter))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isinfared(O)
|
||||
if(istype(O, /obj/item/device/assembly/infra))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isprox(O)
|
||||
if(istype(O, /obj/item/device/assembly/prox_sensor))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/issignaler(O)
|
||||
if(istype(O, /obj/item/device/assembly/signaler))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/istimer(O)
|
||||
if(istype(O, /obj/item/device/assembly/timer))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/device/assembly
|
||||
name = "assembly"
|
||||
desc = "A small electronic device that should never exist."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = ""
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
g_amt = 0
|
||||
w_amt = 0
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
var
|
||||
secured = 1
|
||||
small_icon_state_left = null
|
||||
small_icon_state_right = null
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
obj/item/device/assembly_holder/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
wires = WIRE_RECEIVE | WIRE_PULSE
|
||||
|
||||
var/const
|
||||
WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate()
|
||||
WIRE_PULSE = 2 //Allows Pulse(0) to act on the holder
|
||||
WIRE_PULSE_SPECIAL = 4 //Allows Pulse(0) to act on the holders special assembly
|
||||
WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
|
||||
WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
Holder_Movement()//Called when the holder is moved
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
activate() //What the device does when turned on
|
||||
pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
|
||||
pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
|
||||
toggle_secure() //Code that has to happen when the assembly is un\secured goes here
|
||||
attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
|
||||
process_cooldown() //Called via spawn(10) to have it count down the cooldown var
|
||||
holder_movement() //Called when the holder is moved
|
||||
interact(mob/user as mob) //Called when attack_self is called
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))//Make sure to add something using cooldown or such to prevent spam
|
||||
return 0
|
||||
pulsed(var/radio = 0)
|
||||
if(holder && (wires & WIRE_RECEIVE))
|
||||
activate()
|
||||
if(radio && (wires & WIRE_RADIO_RECEIVE))
|
||||
activate()
|
||||
return 1
|
||||
|
||||
|
||||
pulse(var/radio = 0)
|
||||
if(holder && (wires & WIRE_PULSE))
|
||||
holder.process_activation(src, 1, 0)
|
||||
if(holder && (wires & WIRE_PULSE_SPECIAL))
|
||||
holder.process_activation(src, 0, 1)
|
||||
// if(radio && (wires & WIRE_RADIO_PULSE))
|
||||
//Not sure what goes here quite yet send signal?
|
||||
return 1
|
||||
|
||||
|
||||
activate()
|
||||
if(!secured || (cooldown > 0)) return 0
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
toggle_secure()
|
||||
secured = !secured
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
if(holder.attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
if(isassembly(W))
|
||||
var/obj/item/device/assembly/A = W
|
||||
if((!A.secured) && (!secured))
|
||||
attach_assembly(A,user)
|
||||
return
|
||||
if(isscrewdriver(W))
|
||||
if(toggle_secure())
|
||||
user.show_message("\blue The [name] is ready!")
|
||||
else
|
||||
user.show_message("\blue The [name] can now be attached!")
|
||||
return
|
||||
..()
|
||||
return
|
||||
*/
|
||||
|
||||
|
||||
process()
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if((in_range(src, usr) || loc == usr))
|
||||
if(secured)
|
||||
usr.show_message("The [name] is ready!")
|
||||
else
|
||||
usr.show_message("The [name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!user) return 0
|
||||
user.machine = src
|
||||
interact(user)
|
||||
return 1
|
||||
|
||||
|
||||
interact(mob/user as mob)
|
||||
return //HTML MENU FOR WIRES GOES HERE
|
||||
|
||||
/*
|
||||
Name: IsAssemblyHolder
|
||||
|
||||
@@ -6,22 +6,21 @@
|
||||
item_state = "assembly"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
m_amt = 100
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
var
|
||||
secured = 0
|
||||
obj/item/device/assembly_left = null
|
||||
obj/item/device/assembly_right = null
|
||||
obj/assembly_special = null
|
||||
obj/item/device/assembly/a_left = null
|
||||
obj/item/device/assembly/a_right = null
|
||||
obj/special_assembly = null
|
||||
|
||||
proc
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
attach_special(var/obj/O, var/mob/user)
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
process_activation(var/obj/item/device/D)
|
||||
|
||||
|
||||
IsAssemblyHolder()
|
||||
@@ -30,7 +29,7 @@
|
||||
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
if((!D)||(!D2)) return 0
|
||||
if((!D.IsAssembly())||(!D2.IsAssembly())) return 0
|
||||
if((!isassembly(D))||(!isassembly(D2))) return 0
|
||||
if((D:secured)||(D2:secured)) return 0
|
||||
if(user)
|
||||
user.remove_from_mob(D)
|
||||
@@ -39,8 +38,8 @@
|
||||
D2:holder = src
|
||||
D.loc = src
|
||||
D2.loc = src
|
||||
assembly_left = D
|
||||
assembly_right = D2
|
||||
a_left = D
|
||||
a_right = D2
|
||||
src.name = "[D.name] [D2.name] assembly"
|
||||
update_icon()
|
||||
return 1
|
||||
@@ -51,28 +50,28 @@
|
||||
if(!O.IsSpecialAssembly()) return 0
|
||||
/*
|
||||
if(O:Attach_Holder())
|
||||
assembly_special = O
|
||||
special_assembly = O
|
||||
update_icon()
|
||||
src.name = "[assembly_left.name] [assembly_right.name] [assembly_special.name] assembly"
|
||||
src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
|
||||
*/
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
if(assembly_left)
|
||||
src.overlays += assembly_left:small_icon_state_left
|
||||
for(var/O in assembly_left:small_icon_state_overlays)
|
||||
if(a_left)
|
||||
src.overlays += a_left:small_icon_state_left
|
||||
for(var/O in a_left:small_icon_state_overlays)
|
||||
src.overlays += text("[]_l", O)
|
||||
if(assembly_right)
|
||||
src.overlays += assembly_right:small_icon_state_right
|
||||
for(var/O in assembly_right:small_icon_state_overlays)
|
||||
if(a_right)
|
||||
src.overlays += a_right:small_icon_state_right
|
||||
for(var/O in a_right:small_icon_state_overlays)
|
||||
src.overlays += text("[]_r", O)
|
||||
/* if(assembly_special)
|
||||
assembly_special.update_icon()
|
||||
if(assembly_special:small_icon_state)
|
||||
src.overlays += assembly_special:small_icon_state
|
||||
for(var/O in assembly_special:small_icon_state_overlays)
|
||||
/* if(special_assembly)
|
||||
special_assembly.update_icon()
|
||||
if(special_assembly:small_icon_state)
|
||||
src.overlays += special_assembly:small_icon_state
|
||||
for(var/O in special_assembly:small_icon_state_overlays)
|
||||
src.overlays += O
|
||||
*/
|
||||
|
||||
@@ -88,52 +87,47 @@
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if(assembly_left)
|
||||
assembly_left.HasProximity(AM)
|
||||
if(assembly_right)
|
||||
assembly_right.HasProximity(AM)
|
||||
if(assembly_special)
|
||||
assembly_special.HasProximity(AM)
|
||||
if(a_left)
|
||||
a_left.HasProximity(AM)
|
||||
if(a_right)
|
||||
a_right.HasProximity(AM)
|
||||
if(special_assembly)
|
||||
special_assembly.HasProximity(AM)
|
||||
return
|
||||
|
||||
|
||||
Move()
|
||||
..()
|
||||
if(assembly_left)
|
||||
assembly_left:Holder_Movement()
|
||||
if(assembly_right)
|
||||
assembly_right:Holder_Movement()
|
||||
if(assembly_special)
|
||||
assembly_special:Holder_Movement()
|
||||
if(a_left && a_right)
|
||||
a_left.holder_movement()
|
||||
a_right.holder_movement()
|
||||
// if(special_assembly)
|
||||
// special_assembly:holder_movement()
|
||||
return
|
||||
|
||||
|
||||
attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
|
||||
if(assembly_left)
|
||||
assembly_left:Holder_Movement()
|
||||
if(assembly_right)
|
||||
assembly_right:Holder_Movement()
|
||||
if(assembly_special)
|
||||
assembly_special:Holder_Movement()
|
||||
if(a_left && a_right)
|
||||
a_left.holder_movement()
|
||||
a_right.holder_movement()
|
||||
// if(special_assembly)
|
||||
// special_assembly:Holder_Movement()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
if(!assembly_left || !assembly_right)
|
||||
if(!a_left || !a_right)
|
||||
user.show_message("\red BUG:Assembly part missing, please report this!")
|
||||
return
|
||||
if(src.secured)
|
||||
src.secured = 0
|
||||
assembly_left:Unsecure()
|
||||
assembly_right:Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be taken apart!")
|
||||
else
|
||||
src.secured = 1
|
||||
assembly_left:Secure()
|
||||
assembly_right:Secure()
|
||||
a_left.toggle_secure()
|
||||
a_right.toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
else
|
||||
user.show_message("\blue The [src.name] can now be taken apart!")
|
||||
update_icon()
|
||||
return
|
||||
else if(W.IsSpecialAssembly())
|
||||
@@ -146,44 +140,41 @@
|
||||
attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(src.secured)
|
||||
if(!assembly_left || !assembly_right)
|
||||
if(!a_left || !a_right)
|
||||
user.show_message("\red Assembly part missing!")
|
||||
return
|
||||
if(istype(assembly_left,assembly_right.type))//If they are the same type it causes issues due to window code
|
||||
if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
|
||||
switch(alert("Which side would you like to use?",,"Left","Right"))
|
||||
if("Left")
|
||||
assembly_left.attack_self(user)
|
||||
if("Right")
|
||||
assembly_right.attack_self(user)
|
||||
if("Left") a_left.attack_self(user)
|
||||
if("Right") a_right.attack_self(user)
|
||||
return
|
||||
else
|
||||
assembly_left.attack_self(user)
|
||||
assembly_right.attack_self(user)
|
||||
a_left.attack_self(user)
|
||||
a_right.attack_self(user)
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return 0
|
||||
if(assembly_left)
|
||||
assembly_left:holder = null
|
||||
assembly_left.loc = T
|
||||
if(assembly_right)
|
||||
assembly_right:holder = null
|
||||
assembly_right.loc = T
|
||||
if(a_left)
|
||||
a_left:holder = null
|
||||
a_left.loc = T
|
||||
if(a_right)
|
||||
a_right:holder = null
|
||||
a_right.loc = T
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
Process_Activation(var/obj/D, var/normal = 1, var/special = 1)
|
||||
process_activation(var/obj/D, var/normal = 1, var/special = 1)
|
||||
if(!D) return 0
|
||||
if((normal) && (assembly_right) && (assembly_left))
|
||||
if(assembly_right != D)
|
||||
assembly_right:Activate()
|
||||
if(assembly_left != D)
|
||||
assembly_left:Activate()
|
||||
if((special) && (assembly_special))
|
||||
if(!assembly_special == D)
|
||||
assembly_left:Activate()
|
||||
assembly_right:Activate()
|
||||
if((normal) && (a_right) && (a_left))
|
||||
if(a_right != D)
|
||||
a_right.pulsed(0)
|
||||
if(a_left != D)
|
||||
a_left.pulsed(0)
|
||||
// if(special && special_assembly)
|
||||
// if(!special_assembly == D)
|
||||
// special_assembly.dothings()
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -1,111 +1,27 @@
|
||||
/obj/item/device/igniter
|
||||
/obj/item/device/assembly/igniter
|
||||
name = "igniter"
|
||||
desc = "A small electronic device able to ignite combustable substances. Does not function well as a lighter."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "igniter"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
m_amt = 100
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
var
|
||||
secured = 1
|
||||
small_icon_state_left = "igniter_left"
|
||||
small_icon_state_right = "igniter_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()
|
||||
Unsecure()
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
Process_cooldown()
|
||||
Holder_Movement()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
var/turf/location = get_turf(loc)
|
||||
if(location) location.hotspot_expose(1000,1000)
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
src.cooldown--
|
||||
if(src.cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
src.Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
var/turf/location = get_turf(src.loc)
|
||||
if(location)
|
||||
location.hotspot_expose(1000,1000)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
spawn( 5 )
|
||||
Activate()
|
||||
activate()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
@@ -1,96 +1,42 @@
|
||||
/obj/item/device/infra
|
||||
/obj/item/device/assembly/infra
|
||||
name = "Infrared Beam"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "infrared_old"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
m_amt = 1000
|
||||
g_amt = 500
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=2"
|
||||
var
|
||||
|
||||
secured = 0
|
||||
small_icon_state_left = "infrared_left"
|
||||
small_icon_state_right = "infrared_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
|
||||
var
|
||||
scanning = 0
|
||||
visible = 0
|
||||
obj/effect/beam/i_beam/first = null
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
Holder_Movement()//Called when the holder is moved
|
||||
beam_trigger()
|
||||
trigger_beam()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
src.scanning = !src.scanning
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
Secure()
|
||||
toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
processing_objects.Add(src)//removal is taken care of it process()
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
scanning = 0
|
||||
if(src.first) del(src.first)
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
|
||||
update_icon()
|
||||
@@ -105,12 +51,13 @@
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
process()//Old code
|
||||
if(!scanning)
|
||||
if(!src.first)
|
||||
if(src.first)
|
||||
del(src.first)
|
||||
return
|
||||
|
||||
if ((!( src.first ) && (src.secured && (istype(src.loc, /turf) || (src.holder && istype(src.holder.loc, /turf))))))
|
||||
if((!( src.first ) && (src.secured && (istype(src.loc, /turf) || (src.holder && istype(src.holder.loc, /turf))))))
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam( (src.holder ? src.holder.loc : src.loc) )
|
||||
I.master = src
|
||||
I.density = 1
|
||||
@@ -127,9 +74,6 @@
|
||||
//world << "infra: processing beam \ref[I]"
|
||||
I.process()
|
||||
return
|
||||
|
||||
if(!secured)
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -147,27 +91,25 @@
|
||||
return
|
||||
|
||||
|
||||
Holder_Movement()
|
||||
holder_movement()
|
||||
if(!holder) return 0
|
||||
src.dir = holder.dir
|
||||
// src.dir = holder.dir
|
||||
del(src.first)
|
||||
return 1
|
||||
|
||||
|
||||
beam_trigger()
|
||||
trigger_beam()
|
||||
if((!secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
pulse(0)
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
interact(mob/user as mob)//TODO: change this this to the wire control panel
|
||||
if(!secured) return
|
||||
user.machine = src
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (src.scanning ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
|
||||
@@ -180,7 +122,11 @@
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
if(get_dist(src, usr) > 1)
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
|
||||
if (href_list["state"])
|
||||
src.scanning = !(src.scanning)
|
||||
update_icon()
|
||||
@@ -188,7 +134,7 @@
|
||||
if (href_list["visible"])
|
||||
src.visible = !(src.visible)
|
||||
spawn( 0 )
|
||||
if (src.first)
|
||||
if(src.first)
|
||||
src.first.vis_spread(src.visible)
|
||||
|
||||
if (href_list["close"])
|
||||
@@ -198,14 +144,10 @@
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
|
||||
else
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
verb/rotate()//This really could be better but I dont want to redo it right now
|
||||
verb/rotate()//This could likely be better
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -214,22 +156,6 @@
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************IBeam*********************************/
|
||||
|
||||
@@ -238,29 +164,27 @@
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "ibeam"
|
||||
var/obj/effect/beam/i_beam/next = null
|
||||
var/obj/item/device/infra/master = null
|
||||
var/obj/item/device/assembly/infra/master = null
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
// var/master = null
|
||||
anchored = 1.0
|
||||
flags = TABLEPASS
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
//world << "beam \ref[src]: hit"
|
||||
if (src.master)
|
||||
if(src.master)
|
||||
//world << "beam hit \ref[src]: calling master \ref[master].hit"
|
||||
src.master.beam_trigger()
|
||||
//SN src = null
|
||||
src.master.trigger_beam()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/proc/vis_spread(v)
|
||||
//world << "i_beam \ref[src] : vis_spread"
|
||||
src.visible = v
|
||||
spawn( 0 )
|
||||
if (src.next)
|
||||
spawn(0)
|
||||
if(src.next)
|
||||
//world << "i_beam \ref[src] : is next [next.type] \ref[next], calling spread"
|
||||
src.next.vis_spread(v)
|
||||
return
|
||||
@@ -269,17 +193,17 @@
|
||||
/obj/effect/beam/i_beam/process()
|
||||
//world << "i_beam \ref[src] : process"
|
||||
|
||||
if ((src.loc.density || !( src.master )))
|
||||
if((src.loc.density || !( src.master )))
|
||||
//SN src = null
|
||||
// world << "beam hit loc [loc] or no master [master], deleting"
|
||||
del(src)
|
||||
return
|
||||
//world << "proccess: [src.left] left"
|
||||
|
||||
if (src.left > 0)
|
||||
if(src.left > 0)
|
||||
src.left--
|
||||
if (src.left < 1)
|
||||
if (!( src.visible ))
|
||||
if(src.left < 1)
|
||||
if(!( src.visible ))
|
||||
src.invisibility = 101
|
||||
else
|
||||
src.invisibility = 0
|
||||
@@ -295,7 +219,7 @@
|
||||
//world << "created new beam \ref[I] at [I.x] [I.y] [I.z]"
|
||||
step(I, I.dir)
|
||||
|
||||
if (I)
|
||||
if(I)
|
||||
//world << "step worked, now at [I.x] [I.y] [I.z]"
|
||||
if (!( src.next ))
|
||||
//world << "no src.next"
|
||||
@@ -312,13 +236,11 @@
|
||||
return
|
||||
else
|
||||
//world << "is a next: \ref[next], deleting beam \ref[I]"
|
||||
//I = null
|
||||
del(I)
|
||||
else
|
||||
//src.next = null
|
||||
//world << "step failed, deleting \ref[src.next]"
|
||||
del(src.next)
|
||||
spawn( 10 )
|
||||
spawn(10)
|
||||
src.process()
|
||||
return
|
||||
return
|
||||
@@ -332,7 +254,7 @@
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/effect/beam))
|
||||
if(istype(AM, /obj/effect/beam))
|
||||
return
|
||||
spawn( 0 )
|
||||
src.hit()
|
||||
|
||||
@@ -1,140 +1,75 @@
|
||||
/obj/item/device/prox_sensor
|
||||
/obj/item/device/assembly/prox_sensor
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "prox"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 300
|
||||
m_amt = 800
|
||||
g_amt = 200
|
||||
w_amt = 50
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
var
|
||||
secured = 0
|
||||
small_icon_state_left = "prox_left"
|
||||
small_icon_state_right = "prox_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
|
||||
var
|
||||
scanning = 0
|
||||
cooldown = 0//To prevent spam
|
||||
timing = 0
|
||||
time = 0
|
||||
time = 10
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
Holder_Movement()
|
||||
toggle_scan()
|
||||
sense()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
src.cooldown--
|
||||
if(src.cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
src.Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
src.timing = !src.timing
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
timing = !timing
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured) return 0
|
||||
secured = 1
|
||||
processing_objects.Add(src)//removal is taken care of it process()
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured) return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
scanning = 0
|
||||
timing = 0
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/effect/beam))
|
||||
return
|
||||
if (AM.move_speed < 12)
|
||||
src.sense()
|
||||
if (istype(AM, /obj/effect/beam)) return
|
||||
if (AM.move_speed < 12) sense()
|
||||
return
|
||||
|
||||
|
||||
sense()
|
||||
if((!secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
pulse(0)
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
if((src.timing) && (src.time >= 0))
|
||||
src.time--
|
||||
if(src.time <= 0)
|
||||
src.timing = 0
|
||||
src.time = 0
|
||||
if(timing && (time >= 0))
|
||||
time--
|
||||
if(time <= 0)
|
||||
timing = 0
|
||||
toggle_scan()
|
||||
|
||||
if(!secured)
|
||||
if(scanning)
|
||||
scanning = 0
|
||||
src.timing = 0
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
time = 10
|
||||
return
|
||||
|
||||
|
||||
dropped()
|
||||
spawn(0)
|
||||
src.sense()
|
||||
sense()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -143,17 +78,18 @@
|
||||
if(!secured) return 0
|
||||
scanning = !scanning
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
src.small_icon_state_overlays = list()
|
||||
overlays = null
|
||||
small_icon_state_overlays = list()
|
||||
if(timing)
|
||||
src.overlays += text("prox_timing")
|
||||
src.small_icon_state_overlays += text("prox_timing")
|
||||
overlays += text("prox_timing")
|
||||
small_icon_state_overlays += text("prox_timing")
|
||||
if(scanning)
|
||||
src.overlays += text("prox_scanning")
|
||||
src.small_icon_state_overlays += text("prox_scanning")
|
||||
overlays += text("prox_scanning")
|
||||
small_icon_state_overlays += text("prox_scanning")
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
@@ -161,28 +97,17 @@
|
||||
|
||||
Move()
|
||||
..()
|
||||
src.sense()
|
||||
sense()
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
interact(mob/user as mob)//TODO: Change this to the wires thingy
|
||||
if(!secured)
|
||||
user.show_message("\red The [src.name] is unsecured!")
|
||||
user.show_message("\red The [name] is unsecured!")
|
||||
return 0
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.time - second) / 60
|
||||
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (src.timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
|
||||
var/second = time % 60
|
||||
var/minute = (time - second) / 60
|
||||
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
|
||||
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
@@ -193,26 +118,29 @@
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
if (href_list["scanning"])
|
||||
if(get_dist(src, usr) > 1)
|
||||
usr << browse(null, "window=prox")
|
||||
onclose(usr, "prox")
|
||||
return
|
||||
|
||||
if(href_list["scanning"])
|
||||
toggle_scan()
|
||||
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
update_icon()
|
||||
|
||||
if (href_list["tp"])
|
||||
if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
attack_self(usr)
|
||||
|
||||
|
||||
else
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
@@ -1,2 +1,107 @@
|
||||
//Signalers are now an assembly item, not sure if I should put it in here.
|
||||
//Currently in game/objects/radio/signaler.dm
|
||||
/obj/item/device/assembly/signaler
|
||||
name = "Remote Signaling Device"
|
||||
desc = "Used to remotely activate devices."
|
||||
icon_state = "signaller"
|
||||
item_state = "signaler"
|
||||
m_amt = 1000
|
||||
g_amt = 200
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=1"
|
||||
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
|
||||
|
||||
secured = 1
|
||||
small_icon_state_left = "signaller_left"
|
||||
small_icon_state_right = "signaller_right"
|
||||
|
||||
var
|
||||
code = 30
|
||||
frequency = 100
|
||||
delay = 0
|
||||
airlock_wire = null
|
||||
|
||||
proc
|
||||
send_signal()
|
||||
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
signal()
|
||||
pulse(0)
|
||||
if(istype(src.loc, /obj/machinery/door/airlock) && src.airlock_wire && src.wires)
|
||||
var/obj/machinery/door/airlock/A = src.loc
|
||||
A.pulse(src.airlock_wire)
|
||||
// pulse(1)//?
|
||||
return 1
|
||||
|
||||
|
||||
interact(mob/user as mob, flag1)
|
||||
|
||||
var/t1 = "-------"
|
||||
// if ((src.b_stat && !( flag1 )))
|
||||
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
|
||||
// else
|
||||
// t1 = "-------" Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
|
||||
var/dat = {"
|
||||
<TT>
|
||||
|
||||
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
|
||||
<B>Frequency/Code</B> for signaler:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];freq=-2'>-</A>
|
||||
[src.frequency]
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
|
||||
Code:
|
||||
<A href='byond://?src=\ref[src];code=-5'>-</A>
|
||||
<A href='byond://?src=\ref[src];code=-1'>-</A>
|
||||
[src.code]
|
||||
<A href='byond://?src=\ref[src];code=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
|
||||
[t1]
|
||||
</TT>"}
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
//..()
|
||||
if(usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src) || (usr.contents.Find(src.holder) || (in_range(src, usr) && istype(src.loc, /turf)))))
|
||||
usr.machine = src
|
||||
if (href_list["freq"])
|
||||
src.frequency += text2num(href_list["freq"])
|
||||
src.frequency = round(src.frequency)
|
||||
src.frequency = min(100, src.frequency)
|
||||
src.frequency = max(1, src.frequency)
|
||||
return
|
||||
|
||||
if(href_list["code"])
|
||||
src.code += text2num(href_list["code"])
|
||||
src.code = round(src.code)
|
||||
src.code = min(100, src.code)
|
||||
src.code = max(1, src.code)
|
||||
|
||||
if(href_list["send"])
|
||||
spawn( 0 )
|
||||
send_signal()
|
||||
return
|
||||
|
||||
// if(href_list["listen"])
|
||||
// src.listening = text2num(href_list["listen"])
|
||||
else
|
||||
usr << browse(null, "window=radio")
|
||||
return
|
||||
return
|
||||
|
||||
proc/signal()//will have to do for now
|
||||
for(var/obj/item/device/assembly/signaler/S in world)
|
||||
if(!S) continue
|
||||
if(S == src) continue
|
||||
if((S.frequency == src.frequency) && (S.code == src.code))
|
||||
S.pulsed(1)
|
||||
return 1
|
||||
return 0
|
||||
@@ -1,154 +1,81 @@
|
||||
/obj/item/device/timer
|
||||
/obj/item/device/assembly/timer
|
||||
name = "timer"
|
||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "timer"
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
var
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
secured = 0
|
||||
small_icon_state_left = "timer_left"
|
||||
small_icon_state_right = "timer_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
|
||||
var
|
||||
timing = 0
|
||||
time = 0
|
||||
time = 10
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
Holder_Movement()
|
||||
timer_end()
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
src.timing = !src.timing
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
timing = !timing
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
return 0
|
||||
processing_objects.Add(src)//removal is taken care of it process()
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
timing = 0
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
|
||||
timer_end()
|
||||
if((!secured)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
pulse(0)
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
if((src.timing) && (src.time >= 0))
|
||||
src.time--
|
||||
if(src.time <= 0)
|
||||
src.timing = 0
|
||||
src.time = 0
|
||||
if(timing && (time >= 0))
|
||||
time--
|
||||
if(time <= 0)
|
||||
timing = 0
|
||||
timer_end()
|
||||
update_icon()
|
||||
|
||||
if(!secured)
|
||||
src.timing = 0
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
time = 10
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
src.small_icon_state_overlays = list()
|
||||
overlays = null
|
||||
small_icon_state_overlays = list()
|
||||
if(timing)
|
||||
src.overlays += text("timer_timing")
|
||||
src.small_icon_state_overlays += text("timer_timing")
|
||||
overlays += text("timer_timing")
|
||||
small_icon_state_overlays += text("timer_timing")
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
interact(mob/user as mob)//TODO: Have this use the wires
|
||||
if(!secured)
|
||||
user.show_message("\red The [src.name] is unsecured!")
|
||||
user.show_message("\red The [name] is unsecured!")
|
||||
return 0
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.time - second) / 60
|
||||
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (src.timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
|
||||
var/second = time % 60
|
||||
var/minute = (time - second) / 60
|
||||
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=timer")
|
||||
@@ -158,24 +85,25 @@
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
if(get_dist(src, usr) > 1)
|
||||
usr << browse(null, "window=timer")
|
||||
onclose(usr, "timer")
|
||||
return
|
||||
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
update_icon()
|
||||
|
||||
if (href_list["tp"])
|
||||
if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=timer")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
attack_self(usr)
|
||||
|
||||
else
|
||||
usr << browse(null, "window=timer")
|
||||
return
|
||||
@@ -20,8 +20,7 @@ datum
|
||||
|
||||
proc
|
||||
reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some
|
||||
if(!istype(M, /mob/living))
|
||||
return //Noticed runtime errors from pacid trying to damage ghosts, this should fix. --NEO
|
||||
if(!istype(M, /mob/living)) return 0
|
||||
var/datum/reagent/self = src
|
||||
src = null //of the reagent to the mob on TOUCHING it.
|
||||
|
||||
@@ -56,7 +55,7 @@ datum
|
||||
if(prob(chance) && !block)
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent(self.id,self.volume/2)
|
||||
return
|
||||
return 1
|
||||
|
||||
reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
|
||||
src = null //if it can hold reagents. nope!
|
||||
@@ -799,8 +798,9 @@ datum
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
|
||||
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
|
||||
if(!..()) return
|
||||
src = null
|
||||
if ( (method==TOUCH && prob(33)) || method==INGEST)
|
||||
if((method==TOUCH && prob(33)) || method==INGEST)
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
src.state = 2
|
||||
var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc )
|
||||
A.amount = 1
|
||||
if(istype(W, /obj/item/device/radio/signaler))
|
||||
if(issignaler(W))
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
user << "\blue You attach the wireless signaller unit to the circutry."
|
||||
user.drop_item()
|
||||
@@ -131,8 +131,8 @@
|
||||
playsound(src.loc, 'Crowbar.ogg', 50, 1)
|
||||
user << "\blue You remove the remote signalling device."
|
||||
src.state = 3
|
||||
new /obj/item/device/radio/signaler( src.loc, 1 )
|
||||
if(istype(W, /obj/item/device/prox_sensor) && motion == 0)
|
||||
new /obj/item/device/assembly/signaler( src.loc, 1 )
|
||||
if(isprox(W) && motion == 0)
|
||||
// if(W:amount >= 1)
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
// W:use(1)
|
||||
@@ -141,7 +141,7 @@
|
||||
if(istype(W, /obj/item/weapon/crowbar) && motion)
|
||||
playsound(src.loc, 'Crowbar.ogg', 50, 1)
|
||||
user << "\blue You remove the proximity sensor."
|
||||
new /obj/item/device/prox_sensor( src.loc, 1 )
|
||||
new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
|
||||
motion = 0
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
if(W:amount >= 1)
|
||||
@@ -1601,7 +1601,7 @@
|
||||
flags = FPRINT | OPENCONTAINER
|
||||
|
||||
attackby(var/obj/D, mob/user as mob)
|
||||
if(istype(D, /obj/item/device/prox_sensor))
|
||||
if(isprox(D))
|
||||
var/obj/item/weapon/bucket_sensor/B = new /obj/item/weapon/bucket_sensor
|
||||
B.loc = user
|
||||
if (user.r_hand == D)
|
||||
|
||||
@@ -12,7 +12,7 @@ Space suit parts
|
||||
see_face = 0.0
|
||||
item_state = "space"
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 0, bullet = 0, laser = 2, taser = 2, bomb = 0, bio = 25, rad = 25)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
|
||||
|
||||
|
||||
@@ -25,11 +25,10 @@ Space suit parts
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
heat_transfer_coefficient = 0.02
|
||||
radiation_protection = 0.25
|
||||
protective_temperature = 1000
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 3
|
||||
armor = list(melee = 20, bullet = 5, laser = 10, taser = 3, bomb = 15, bio = 30, rad = 40)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES
|
||||
see_face = 0.0
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 60, bullet = 50, laser = 50, taser = 25, bomb = 50, bio = 20, rad = 20)
|
||||
armor = list(melee = 60, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 20, rad = 20)
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
desc = "That's not red paint. That's real blood."
|
||||
icon_state = "deathsquad"
|
||||
item_state = "deathsquad"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35, taser = 20, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
name = "officer's beret"
|
||||
desc = "An armored beret commonly used by special operations officers."
|
||||
icon_state = "beret_badge"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35, taser = 20, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
desc = "Yarr."
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/pirate
|
||||
@@ -59,4 +59,4 @@
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
name = "ninja hood"
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_mask"
|
||||
radiation_protection = 0.25
|
||||
see_face = 1
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja
|
||||
@@ -15,10 +14,9 @@
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/cell)
|
||||
radiation_protection = 0.75
|
||||
protective_temperature = 5000
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
var
|
||||
//Important parts of the suit.
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
|
||||
icon_state = "rig-engineering"
|
||||
item_state = "rig_helm"
|
||||
radiation_protection = 0.25
|
||||
armor = list(melee = 40, bullet = 5, laser = 20, taser = 5, bomb = 35, bio = 50, rad = 50)
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 50, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/mining
|
||||
@@ -12,24 +11,23 @@
|
||||
icon_state = "rig-mining"
|
||||
item_state = "rig_helm"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has extra protection against common mining hazards."
|
||||
armor = list(melee = 45, bullet = 10, laser = 20, taser = 5, bomb = 35, bio = 50, rad = 25) //Slightly more robust since it doesn't have extra radiation shielding.
|
||||
armor = list(melee = 45, bullet = 10, laser = 20,energy = 5, bomb = 35, bio = 50, rad = 25) //Slightly more robust since it doesn't have extra radiation shielding.
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/elite
|
||||
name = "Elite RIG helmet"
|
||||
icon_state = "whiterig"
|
||||
item_state = "whiterig"
|
||||
desc = "A special armored helmet designed for work in space battlefield conditions."
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 40, bio = 50, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 40, bio = 50, rad = 30)
|
||||
|
||||
/obj/item/clothing/suit/space/rig
|
||||
name = "engineer RIG suit"
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
|
||||
icon_state = "rig-engineering"
|
||||
item_state = "rig_suit"
|
||||
radiation_protection = 0.50
|
||||
protective_temperature = 5000 //For not dieing near a fire, but still not being great in a full inferno
|
||||
slowdown = 2
|
||||
armor = list(melee = 40, bullet = 5, laser = 20, taser = 5, bomb = 35, bio = 50, rad = 50)
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 50, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/satchel,/obj/item/device/t_scanner)
|
||||
|
||||
/obj/item/clothing/suit/space/rig/mining
|
||||
@@ -37,7 +35,7 @@
|
||||
item_state = "rig_suit"
|
||||
name = "mining RIG suit"
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has extra protection against common mining hazards."
|
||||
armor = list(melee = 45, bullet = 10, laser = 20, taser = 5, bomb = 35, bio = 50, rad = 25) //Slightly more robust since it doesn't have extra radiation shielding.
|
||||
armor = list(melee = 45, bullet = 10, laser = 20,energy = 5, bomb = 35, bio = 50, rad = 25) //Slightly more robust since it doesn't have extra radiation shielding.
|
||||
|
||||
/obj/item/clothing/suit/space/rig/elite
|
||||
icon_state = "whiterig"
|
||||
@@ -45,5 +43,5 @@
|
||||
name = "Elite RIG suit"
|
||||
desc = "A special suit that protects against hazardous, low pressure battlefield enviroments. Designed to hold larger oxygen tanks and advanced Nanotrasen tools."
|
||||
protective_temperature = 10000
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 40, bio = 50, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 40, bio = 50, rad = 30)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/satchel,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "syndicate"
|
||||
item_state = "syndicate"
|
||||
desc = "Has a tag: Totally not property of an enemy corporation, honest."
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate
|
||||
@@ -15,7 +15,7 @@
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, taser = 15, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
desc = "Professionals Have Standards, Be Polite, Be Efficient, Have a plan to kill everyone you meet."
|
||||
icon_state = "syndicate-helm-black"
|
||||
item_state = "syndicate-helm-black"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35, taser = 20, bomb = 30, bio = 30, rad = 30)
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/elite
|
||||
@@ -174,7 +174,7 @@
|
||||
icon_state = "syndicate-black"
|
||||
item_state = "syndicate-black"
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/projectile/hivebotbullet
|
||||
damage = 5
|
||||
mobdamage = list(BRUTE = 5, BURN = 0, TOX = 0, OXY = 0, CLONE = 0)
|
||||
damage_type = BRUTE
|
||||
|
||||
/obj/effect/critter/hivebot
|
||||
name = "Hivebot"
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
/datum/recipe/telebacon
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
/obj/item/device/radio/signaler
|
||||
/obj/item/device/assembly/signaler
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/telebacon
|
||||
|
||||
/datum/recipe/syntitelebacon
|
||||
items = list(
|
||||
/obj/item/weapon/syntiflesh,
|
||||
/obj/item/device/radio/signaler
|
||||
/obj/item/device/assembly/signaler
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/telebacon
|
||||
|
||||
|
||||
@@ -68,16 +68,6 @@
|
||||
return ..(gibbed)
|
||||
|
||||
|
||||
/mob/living/blob/bullet_act(var/obj/item/projectile/Proj, var/datum/organ/external/def_zone)
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
switch(i)
|
||||
if(1)
|
||||
bruteloss += Proj.mobdamage[BRUTE]
|
||||
if(2)
|
||||
fireloss += Proj.mobdamage[BURN]
|
||||
return
|
||||
|
||||
|
||||
/mob/living/blob/blob_act()
|
||||
src << "The blob attempts to reabsorb you."
|
||||
toxloss += 20
|
||||
|
||||
@@ -167,7 +167,9 @@
|
||||
set category = "Alien"
|
||||
|
||||
if(powerc(50))
|
||||
if(!isalien(target))
|
||||
if(isalien(target))
|
||||
src << "\green Your allies are not a valid target."
|
||||
return
|
||||
toxloss -= 50
|
||||
src << "\green You spit neurotoxin at [target]."
|
||||
for(var/mob/O in oviewers())
|
||||
@@ -189,13 +191,10 @@
|
||||
if(!istype(U, /turf))
|
||||
return
|
||||
|
||||
var/obj/item/projectile/dart/A = new /obj/item/projectile/dart(usr.loc)
|
||||
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc)
|
||||
|
||||
A.current = U
|
||||
A.yo = U.y - T.y
|
||||
A.xo = U.x - T.x
|
||||
//
|
||||
A.process()
|
||||
else
|
||||
src << "\green Your allies are not a valid target."
|
||||
return
|
||||
@@ -21,13 +21,6 @@
|
||||
src.hand = 1
|
||||
drop_item()
|
||||
src.hand = h
|
||||
if (istype(src.wear_suit, /obj/item/clothing/suit/armor/a_i_a_ptank))
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/A = src.wear_suit
|
||||
bombers += "[src.key] has detonated a suicide bomb. Temp = [A.part4.air_contents.temperature-T0C]."
|
||||
// world << "Detected that [src.key] is wearing a bomb" debug stuff
|
||||
if(A.status && prob(90))
|
||||
// world << "Bomb has ignited?"
|
||||
A.part4.ignite()
|
||||
|
||||
if (src.key)
|
||||
spawn(10)
|
||||
|
||||
@@ -74,110 +74,7 @@
|
||||
if (client.statpanel == "Status")
|
||||
stat(null, "Plasma Stored: [toxloss]")
|
||||
|
||||
/mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/shielded = 0
|
||||
|
||||
if(prob(80))
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
if(M.Victim == src)
|
||||
M.bullet_act(Proj)
|
||||
return
|
||||
|
||||
|
||||
for(var/obj/item/weapon/cloaking_device/S in src)
|
||||
if (S.active)
|
||||
shielded = 1
|
||||
S.active = 0
|
||||
S.icon_state = "shield0"
|
||||
if ((shielded && Proj.flag != "bullet"))
|
||||
if (Proj.flag)
|
||||
src << "\blue Your shield was disturbed by a laser!"
|
||||
if(paralysis <= 12) paralysis = 12
|
||||
updatehealth()
|
||||
if (locate(/obj/item/weapon/grab, src))
|
||||
var/mob/safe = null
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon.grab/G = r_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (safe)
|
||||
return safe.bullet_act(Proj)
|
||||
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = Proj.mobdamage[BRUTE]
|
||||
if(!Proj.nodamage) bruteloss += d
|
||||
updatehealth()
|
||||
if(2)
|
||||
var/d = Proj.mobdamage[BURN]
|
||||
if(!Proj.nodamage) fireloss += d
|
||||
updatehealth()
|
||||
if(3)
|
||||
var/d = Proj.mobdamage[TOX]
|
||||
if(!Proj.nodamage) toxloss += d
|
||||
updatehealth()
|
||||
if(4)
|
||||
var/d = Proj.mobdamage[OXY]
|
||||
if(!Proj.nodamage) oxyloss += d
|
||||
updatehealth()
|
||||
if(5)
|
||||
var/d = Proj.mobdamage[CLONE]
|
||||
if(!Proj.nodamage) cloneloss += d
|
||||
updatehealth()
|
||||
|
||||
if(Proj.effects["stun"] && prob(Proj.effectprob["stun"]))
|
||||
if(Proj.effectmod["stun"] == SET)
|
||||
stunned = Proj.effects["stun"]
|
||||
else
|
||||
stunned += Proj.effects["stun"]
|
||||
|
||||
|
||||
if(Proj.effects["weak"] && prob(Proj.effectprob["weak"]))
|
||||
if(Proj.effectmod["weak"] == SET)
|
||||
weakened = Proj.effects["weak"]
|
||||
else
|
||||
weakened += Proj.effects["weak"]
|
||||
|
||||
if(Proj.effects["paralysis"] && prob(Proj.effectprob["paralysis"]))
|
||||
if(Proj.effectmod["paralysis"] == SET)
|
||||
paralysis = Proj.effects["paralysis"]
|
||||
else
|
||||
paralysis += Proj.effects["paralysis"]
|
||||
|
||||
if(Proj.effects["stutter"] && prob(Proj.effectprob["stutter"]))
|
||||
if(Proj.effectmod["stutter"] == SET)
|
||||
stuttering = Proj.effects["stutter"]
|
||||
else
|
||||
stuttering += Proj.effects["stutter"]
|
||||
|
||||
if(Proj.effects["drowsyness"] && prob(Proj.effectprob["drowsyness"]))
|
||||
if(Proj.effectmod["drowsyness"] == SET)
|
||||
drowsyness = Proj.effects["drowsyness"]
|
||||
else
|
||||
drowsyness += Proj.effects["drowsyness"]
|
||||
|
||||
// Aliums not effected by radiation damage
|
||||
|
||||
if(Proj.effects["eyeblur"] && prob(Proj.effectprob["eyeblur"]))
|
||||
if(Proj.effectmod["eyeblur"] == SET)
|
||||
eye_blurry = Proj.effects["eyeblur"]
|
||||
else
|
||||
eye_blurry += Proj.effects["eyeblur"]
|
||||
|
||||
if(Proj.effects["emp"])
|
||||
var/emppulse = Proj.effects["emp"]
|
||||
if(prob(Proj.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
|
||||
return
|
||||
///mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj) taken care of in living
|
||||
|
||||
/mob/living/carbon/alien/humanoid/emp_act(severity)
|
||||
if(wear_suit) wear_suit.emp_act(severity)
|
||||
|
||||
@@ -66,101 +66,8 @@
|
||||
stat(null, "Plasma Stored: [toxloss]")
|
||||
|
||||
|
||||
//This is okay I guess unless we add alien shields or something. Should be cleaned up a bit.
|
||||
/mob/living/carbon/alien/larva/bullet_act(var/obj/item/projectile/Proj)
|
||||
///mob/living/carbon/alien/larva/bullet_act(var/obj/item/projectile/Proj) taken care of in living
|
||||
|
||||
if(prob(80))
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
if(M.Victim == src)
|
||||
M.bullet_act(Proj)
|
||||
return
|
||||
|
||||
|
||||
if (locate(/obj/item/weapon/grab, src))
|
||||
var/mob/safe = null
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon.grab/G = r_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (safe)
|
||||
return safe.bullet_act(Proj)
|
||||
|
||||
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = Proj.mobdamage[BRUTE]
|
||||
if(!Proj.nodamage) bruteloss += d
|
||||
updatehealth()
|
||||
if(2)
|
||||
var/d = Proj.mobdamage[BURN]
|
||||
if(!Proj.nodamage) fireloss += d
|
||||
updatehealth()
|
||||
if(3)
|
||||
var/d = Proj.mobdamage[TOX]
|
||||
if(!Proj.nodamage) toxloss += d
|
||||
updatehealth()
|
||||
if(4)
|
||||
var/d = Proj.mobdamage[OXY]
|
||||
if(!Proj.nodamage) oxyloss += d
|
||||
updatehealth()
|
||||
if(5)
|
||||
var/d = Proj.mobdamage[CLONE]
|
||||
if(!Proj.nodamage) cloneloss += d
|
||||
updatehealth()
|
||||
|
||||
if(Proj.effects["stun"] && prob(Proj.effectprob["stun"]))
|
||||
if(Proj.effectmod["stun"] == SET)
|
||||
stunned = Proj.effects["stun"]
|
||||
else
|
||||
stunned += Proj.effects["stun"]
|
||||
|
||||
|
||||
if(Proj.effects["weak"] && prob(Proj.effectprob["weak"]))
|
||||
if(Proj.effectmod["weak"] == SET)
|
||||
weakened = Proj.effects["weak"]
|
||||
else
|
||||
weakened += Proj.effects["weak"]
|
||||
|
||||
if(Proj.effects["paralysis"] && prob(Proj.effectprob["paralysis"]))
|
||||
if(Proj.effectmod["paralysis"] == SET)
|
||||
paralysis = Proj.effects["paralysis"]
|
||||
else
|
||||
paralysis += Proj.effects["paralysis"]
|
||||
|
||||
if(Proj.effects["stutter"] && prob(Proj.effectprob["stutter"]))
|
||||
if(Proj.effectmod["stutter"] == SET)
|
||||
stuttering = Proj.effects["stutter"]
|
||||
else
|
||||
stuttering += Proj.effects["stutter"]
|
||||
|
||||
if(Proj.effects["drowsyness"] && prob(Proj.effectprob["drowsyness"]))
|
||||
if(Proj.effectmod["drowsyness"] == SET)
|
||||
drowsyness = Proj.effects["drowsyness"]
|
||||
else
|
||||
drowsyness += Proj.effects["drowsyness"]
|
||||
|
||||
// Aliums not effected by radiation damage
|
||||
|
||||
if(Proj.effects["eyeblur"] && prob(Proj.effectprob["eyeblur"]))
|
||||
if(Proj.effectmod["eyeblur"] == SET)
|
||||
eye_blurry = Proj.effects["eyeblur"]
|
||||
else
|
||||
eye_blurry += Proj.effects["eyeblur"]
|
||||
|
||||
if(Proj.effects["emp"])
|
||||
var/emppulse = Proj.effects["emp"]
|
||||
if(prob(Proj.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/larva/emp_act(severity)
|
||||
..()
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
back = jetpack
|
||||
return
|
||||
|
||||
bullet_act(flags)
|
||||
take_overall_damage(15,0)
|
||||
return
|
||||
// bullet_act(flags)
|
||||
// take_overall_damage(15,0)
|
||||
// return
|
||||
|
||||
movement_delay()
|
||||
return -5
|
||||
|
||||
@@ -1,46 +1,89 @@
|
||||
/mob/living/carbon/human
|
||||
name = "human"
|
||||
real_name = "human"
|
||||
voice_name = "human"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "m-none"
|
||||
|
||||
|
||||
var/r_hair = 0.0
|
||||
var/g_hair = 0.0
|
||||
var/b_hair = 0.0
|
||||
var/h_style = "Short Hair"
|
||||
var/r_facial = 0.0
|
||||
var/g_facial = 0.0
|
||||
var/b_facial = 0.0
|
||||
var/f_style = "Shaved"
|
||||
var/r_eyes = 0.0
|
||||
var/g_eyes = 0.0
|
||||
var/b_eyes = 0.0
|
||||
var/s_tone = 0.0
|
||||
var/age = 30.0
|
||||
var/b_type = "A+"
|
||||
|
||||
var/obj/item/clothing/suit/wear_suit = null
|
||||
var/obj/item/clothing/under/w_uniform = null
|
||||
var/obj/item/clothing/shoes/shoes = null
|
||||
var/obj/item/weapon/belt = null
|
||||
var/obj/item/clothing/gloves/gloves = null
|
||||
var/obj/item/clothing/glasses/glasses = null
|
||||
var/obj/item/clothing/head/head = null
|
||||
var/obj/item/clothing/ears/ears = null
|
||||
var/obj/item/weapon/card/id/wear_id = null
|
||||
var/obj/item/weapon/r_store = null
|
||||
var/obj/item/weapon/l_store = null
|
||||
var/obj/item/weapon/s_store = null
|
||||
var/obj/item/weapon/h_store = null
|
||||
|
||||
var/icon/stand_icon = null
|
||||
var/icon/lying_icon = null
|
||||
|
||||
var/last_b_state = 1.0
|
||||
|
||||
var/image/face_standing = null
|
||||
var/image/face_lying = null
|
||||
|
||||
var/hair_icon_state = "hair_a"
|
||||
var/face_icon_state = "bald"
|
||||
|
||||
var/list/body_standing = list()
|
||||
var/list/body_lying = list()
|
||||
|
||||
var/mutantrace = null
|
||||
|
||||
var/list/organs = list()
|
||||
|
||||
/mob/living/carbon/human/dummy
|
||||
real_name = "Test Dummy"
|
||||
nodamage = 1
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
if (!dna)
|
||||
dna = new /datum/dna( null )
|
||||
if(!dna) dna = new /datum/dna(null)
|
||||
|
||||
var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
|
||||
var/datum/organ/external/chest/chest = new /datum/organ/external/chest(src)
|
||||
var/datum/organ/external/head/head = new /datum/organ/external/head(src)
|
||||
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm(src)
|
||||
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm(src)
|
||||
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg(src)
|
||||
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg(src)
|
||||
chest.owner = src
|
||||
var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
|
||||
groin.owner = src
|
||||
var/datum/organ/external/head/head = new /datum/organ/external/head( src )
|
||||
head.owner = src
|
||||
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
|
||||
l_arm.owner = src
|
||||
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
|
||||
r_arm.owner = src
|
||||
var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
|
||||
l_hand.owner = src
|
||||
var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
|
||||
r_hand.owner = src
|
||||
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
|
||||
l_leg.owner = src
|
||||
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
|
||||
l_arm.owner = src
|
||||
r_leg.owner = src
|
||||
var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
|
||||
l_foot.owner = src
|
||||
var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
|
||||
r_foot.owner = src
|
||||
|
||||
organs["chest"] = chest
|
||||
organs["groin"] = groin
|
||||
organs["head"] = head
|
||||
organs["l_arm"] = l_arm
|
||||
organs["r_arm"] = r_arm
|
||||
organs["l_hand"] = l_hand
|
||||
organs["r_hand"] = r_hand
|
||||
organs["l_leg"] = l_leg
|
||||
organs["r_leg"] = r_leg
|
||||
organs["l_foot"] = l_foot
|
||||
organs["r_foot"] = r_foot
|
||||
l_leg.owner = src
|
||||
organs += chest
|
||||
organs += head
|
||||
organs += r_arm
|
||||
organs += l_arm
|
||||
organs += r_leg
|
||||
organs += l_leg
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
@@ -62,14 +105,7 @@
|
||||
|
||||
..()
|
||||
|
||||
organStructure = new /obj/effect/organstructure/human(src)
|
||||
|
||||
/mob/living/carbon/human/cyborg
|
||||
New()
|
||||
..()
|
||||
if(organStructure) //hacky, but it's not supposed to be in for a long time anyway
|
||||
del(organStructure)
|
||||
organStructure = new /obj/effect/organstructure/cyber(src)
|
||||
// organStructure = new /obj/effect/organstructure/human(src)
|
||||
|
||||
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
|
||||
if ((!( yes ) || now_pushing))
|
||||
@@ -176,8 +212,8 @@
|
||||
/mob/living/carbon/human/ex_act(severity)
|
||||
flick("flash", flash)
|
||||
|
||||
// /obj/item/clothing/suit/bomb_suit( src )
|
||||
// /obj/item/clothing/head/bomb_hood( src )
|
||||
// /obj/item/clothing/suit/bomb_suit(src)
|
||||
// /obj/item/clothing/head/bomb_hood(src)
|
||||
|
||||
if (stat == 2 && client)
|
||||
gib(1)
|
||||
@@ -242,18 +278,18 @@
|
||||
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
|
||||
if("r_arm")
|
||||
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
|
||||
if("l_hand")
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
|
||||
/* if("l_hand")
|
||||
/ temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
|
||||
if("r_hand")
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)*/
|
||||
if("l_leg")
|
||||
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
|
||||
if("r_leg")
|
||||
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
|
||||
if("l_foot")
|
||||
/* if("l_foot")
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
|
||||
if("r_foot")
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
|
||||
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)*/
|
||||
|
||||
UpdateDamageIcon()
|
||||
|
||||
@@ -267,13 +303,13 @@
|
||||
|
||||
show_message("\red The blob attacks you!")
|
||||
|
||||
var/list/zones = list("head","chest","chest", "groin", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot")
|
||||
var/list/zones = list("head","chest","chest", "groin", "l_arm", "r_arm", "l_leg", "r_leg")
|
||||
|
||||
var/zone = pick(zones)
|
||||
|
||||
var/datum/organ/external/temp = organs["[zone]"]
|
||||
|
||||
switch(zone)
|
||||
switch(zone)//This really needs an update badly
|
||||
if ("head")
|
||||
if ((((head && head.body_parts_covered & HEAD) || (wear_mask && wear_mask.body_parts_covered & HEAD)) && prob(99)))
|
||||
if (prob(20))
|
||||
@@ -958,7 +994,7 @@
|
||||
if (wear_suit)
|
||||
if (wear_suit.blood_DNA)
|
||||
var/icon/stain_icon = null
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/wcoat || /obj/item/clothing/suit/armor/a_i_a_ptank))
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/wcoat))
|
||||
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/det_suit || /obj/item/clothing/suit/labcoat))
|
||||
stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]")
|
||||
@@ -1101,11 +1137,7 @@
|
||||
*/
|
||||
last_b_state = stat
|
||||
|
||||
/mob/living/carbon/human/hand_p(mob/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/hand_p(mob/M as mob)//update needed
|
||||
if (M.a_intent == "hurt")
|
||||
if (istype(M.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
@@ -1130,11 +1162,6 @@
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return
|
||||
/*else if (istype(wear_suit, /obj/item/clothing/suit/swat_suit))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return*/
|
||||
else
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
@@ -1155,224 +1182,12 @@
|
||||
src = null
|
||||
src = H.monkeyize()
|
||||
contract_disease(D,1,0)
|
||||
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/attack_paw(mob/M as mob)
|
||||
..()
|
||||
if (M.a_intent == "help")
|
||||
help_shake_act(M)
|
||||
else
|
||||
if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
if (health > 0)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/space/santa))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/bio_suit))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/armor))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return
|
||||
/*else if (istype(wear_suit, /obj/item/clothing/suit/swat_suit))
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
|
||||
return*/
|
||||
else
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
|
||||
var/damage = rand(1, 3)
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
|
||||
if (istype(organs[text("[]", dam_zone)], /datum/organ/external))
|
||||
var/datum/organ/external/temp = organs[text("[]", dam_zone)]
|
||||
if (temp.take_damage(damage, 0))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
updatehealth()
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(istype(D, /datum/disease/jungle_fever))
|
||||
var/mob/living/carbon/human/H = src
|
||||
src = null
|
||||
src = H.monkeyize()
|
||||
contract_disease(D,1,0)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
|
||||
if (istype(loc, /turf) && istype(loc.loc, /area/start))
|
||||
M << "No attacking people at spawn, you jackass."
|
||||
return
|
||||
|
||||
switch(M.a_intent)
|
||||
|
||||
if ("help")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
|
||||
if ("grab")
|
||||
//This will be changed to skin, where we can skin a dead human corpse//Actually, that sounds kind of impractical./N
|
||||
if (M == src)
|
||||
return
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
|
||||
G.assailant = M
|
||||
if (M.hand)
|
||||
M.l_hand = G
|
||||
else
|
||||
M.r_hand = G
|
||||
G.layer = 20
|
||||
G.affecting = src
|
||||
grabbed_by += G
|
||||
G.synch()
|
||||
|
||||
LAssailant = M
|
||||
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
||||
|
||||
if ("hurt")
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/damage = rand(15, 30) // How much damage aliens do to humans? Increasing -- TLE
|
||||
// I've decreased the chance of humans being protected by uniforms. Now aliens can actually damage them.
|
||||
var/datum/organ/external/affecting = organs["chest"]
|
||||
var/t = M.zone_sel.selecting
|
||||
if ((t in list( "eyes", "mouth" )))
|
||||
t = "head"
|
||||
var/def_zone = ran_zone(t)
|
||||
if (organs[def_zone])
|
||||
affecting = organs[def_zone]
|
||||
if ((istype(affecting, /datum/organ/external) && prob(95)))
|
||||
playsound(loc, 'slice.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
|
||||
if (def_zone == "head")
|
||||
if ((((head && head.body_parts_covered & HEAD) || (wear_mask && wear_mask.body_parts_covered & HEAD)) && prob(5)))
|
||||
if (prob(20))
|
||||
affecting.take_damage(damage, 0)
|
||||
else
|
||||
show_message("\red You have been protected from a hit to the head.")
|
||||
return
|
||||
if (damage >= 25)
|
||||
if (weakened < 10)
|
||||
weakened = rand(10, 15)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has wounded []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
if (def_zone == "chest")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & UPPER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(10)))
|
||||
show_message("\blue You have been protected from a hit to the chest.")
|
||||
return
|
||||
if (damage >= 25)
|
||||
if (prob(50))
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
playsound(loc, 'slashmiss.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has stunned []!</B>", M, src), 1)
|
||||
if(stat != 2) stat = 1
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
if (def_zone == "groin")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & LOWER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(1)))
|
||||
show_message("\blue You have been protected from a hit to the lower chest.")
|
||||
return
|
||||
if (damage >= 25)
|
||||
if (prob(50))
|
||||
if (weakened < 3)
|
||||
weakened = 3
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (stunned < 3)
|
||||
stunned = 3
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has stunned []!</B>", M, src), 1)
|
||||
if(stat != 2) stat = 1
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
affecting.take_damage(damage)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
else
|
||||
playsound(loc, 'slashmiss.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[M] has lunged at [src] but missed!</B>"), 1)
|
||||
if ("disarm")
|
||||
var/damage = 5
|
||||
var/datum/organ/external/affecting = organs["chest"]
|
||||
var/t = M.zone_sel.selecting
|
||||
if ((t in list( "eyes", "mouth" )))
|
||||
t = "head"
|
||||
var/def_zone = ran_zone(t)
|
||||
if (organs[def_zone])
|
||||
affecting = organs[def_zone]
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 90)
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
if (weakened < 15)
|
||||
weakened = rand(10, 15)
|
||||
affecting.take_damage(damage)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
|
||||
else
|
||||
if (randn <= 99)
|
||||
playsound(loc, 'slash.ogg', 25, 1, -1)
|
||||
drop_item()
|
||||
affecting.take_damage(damage)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] disarmed []!</B>", M, src), 1)
|
||||
else
|
||||
playsound(loc, 'slashmiss.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tried to disarm []!</B>", M, src), 1)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
|
||||
if(M.Victim) return // can't attack while eating!
|
||||
|
||||
if (health > -100)
|
||||
@@ -1389,23 +1204,12 @@
|
||||
damage = rand(5, 25)
|
||||
|
||||
|
||||
var/dam_zone = pick("head", "chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
|
||||
var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin")
|
||||
|
||||
|
||||
if (dam_zone == "chest")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & UPPER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(10)))
|
||||
if(prob(20))
|
||||
show_message("\blue You have been protected from a hit to the chest.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
if (istype(organs[text("[]", dam_zone)], /datum/organ/external))
|
||||
var/datum/organ/external/temp = organs[text("[]", dam_zone)]
|
||||
if (temp.take_damage(damage, 0))
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
apply_damage(damage, CLONE, affecting, armor_block)
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
|
||||
|
||||
if(M.powerlevel > 0)
|
||||
@@ -1448,186 +1252,6 @@
|
||||
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
|
||||
if (istype(loc, /turf) && istype(loc.loc, /area/start))
|
||||
M << "No attacking people at spawn, you jackass."
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
if ((M.gloves && M.gloves.elecgen == 1 && M.a_intent == "hurt") /*&& (!istype(src:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
if(M.gloves.uses > 0)
|
||||
M.gloves.uses--
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
if (stuttering < 5)
|
||||
stuttering = 5
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if (O.client)
|
||||
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall", 2)
|
||||
else
|
||||
M.gloves.elecgen = 0
|
||||
M << "\red Not enough charge! "
|
||||
return
|
||||
|
||||
if (M.a_intent == "help")
|
||||
if (health > 0)
|
||||
help_shake_act(M)
|
||||
else
|
||||
if (M.health >= -75.0)
|
||||
if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((head && head.flags & 4) || (wear_mask && !( wear_mask.flags & 32 ))))))
|
||||
M << "\blue <B>Remove that mask!</B>"
|
||||
return
|
||||
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
|
||||
O.source = M
|
||||
O.target = src
|
||||
O.s_loc = M.loc
|
||||
O.t_loc = loc
|
||||
O.place = "CPR"
|
||||
requests += O
|
||||
spawn( 0 )
|
||||
O.process()
|
||||
return
|
||||
else
|
||||
if (M.a_intent == "grab")
|
||||
if (M == src)
|
||||
return
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
|
||||
G.assailant = M
|
||||
if (M.hand)
|
||||
M.l_hand = G
|
||||
else
|
||||
M.r_hand = G
|
||||
G.layer = 20
|
||||
G.affecting = src
|
||||
grabbed_by += G
|
||||
G.synch()
|
||||
|
||||
LAssailant = M
|
||||
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
||||
else
|
||||
if (M.a_intent == "hurt" && !(M.gloves && M.gloves.elecgen == 1))
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/damage = 0
|
||||
if(organStructure && organStructure.arms)
|
||||
damage = rand(organStructure.arms.minDamage,organStructure.arms.maxDamage)
|
||||
else
|
||||
damage = rand(1, 9) //oh boy
|
||||
var/datum/organ/external/affecting = organs["chest"]
|
||||
var/t = M.zone_sel.selecting
|
||||
if ((t in list( "eyes", "mouth" )))
|
||||
t = "head"
|
||||
var/def_zone = ran_zone(t)
|
||||
if (organs[text("[]", def_zone)])
|
||||
affecting = organs[text("[]", def_zone)]
|
||||
if ((istype(affecting, /datum/organ/external) && prob(90)))
|
||||
if (M.mutations & HULK)
|
||||
damage += 5
|
||||
spawn(0)
|
||||
paralysis += 1
|
||||
step_away(src,M,15)
|
||||
sleep(3)
|
||||
step_away(src,M,15)
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has punched []!</B>", M, src), 1)
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
|
||||
|
||||
if (def_zone == "head")
|
||||
if ((((head && head.body_parts_covered & HEAD) || (wear_mask && wear_mask.body_parts_covered & HEAD)) && prob(99)))
|
||||
if (prob(20))
|
||||
affecting.take_damage(damage, 0)
|
||||
else
|
||||
show_message("\red You have been protected from a hit to the head.")
|
||||
return
|
||||
if (damage > 4.9)
|
||||
if (weakened < 10)
|
||||
weakened = rand(10, 15)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
if (def_zone == "chest")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & UPPER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(85)))
|
||||
show_message("\red You have been protected from a hit to the chest.")
|
||||
return
|
||||
if (damage > 4.9)
|
||||
if (prob(50))
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has knocked down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has stunned []!</B>", M, src), 1)
|
||||
if(stat != 2) stat = 1
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
if (def_zone == "groin")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & LOWER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(75)))
|
||||
show_message("\red You have been protected from a hit to the lower chest.")
|
||||
return
|
||||
if (damage > 4.9)
|
||||
if (prob(50))
|
||||
if (weakened < 3)
|
||||
weakened = 3
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has knocked down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (stunned < 3)
|
||||
stunned = 3
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has stunned []!</B>", M, src), 1)
|
||||
if(stat != 2) stat = 1
|
||||
affecting.take_damage(damage)
|
||||
else
|
||||
affecting.take_damage(damage)
|
||||
|
||||
UpdateDamageIcon()
|
||||
|
||||
updatehealth()
|
||||
else
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has attempted to punch []!</B>", M, src), 1)
|
||||
return
|
||||
else
|
||||
if (!( lying ) && !(M.gloves && M.gloves.elecgen == 1))
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 25)
|
||||
weakened = 2
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has pushed down []!</B>", M, src), 1)
|
||||
else
|
||||
if (randn <= 60)
|
||||
drop_item()
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has disarmed []!</B>", M, src), 1)
|
||||
else
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[] has attempted to disarm []!</B>", M, src), 1)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/restrained()
|
||||
if (handcuffed)
|
||||
@@ -1877,9 +1501,7 @@
|
||||
if("belt")
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s belt!</B>", source, target.belt, target)
|
||||
if("suit")
|
||||
if(istype(target.wear_suit, /obj/item/clothing/suit/armor/a_i_a_ptank))//Exception for suicide vests.
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
else if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
|
||||
if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
@@ -2153,8 +1775,9 @@ It can still be worn/put on as normal.
|
||||
W.layer = initial(W.layer)
|
||||
W.add_fingerprint(source)
|
||||
else
|
||||
if (istype(item, /obj/item))
|
||||
if(istype(item, /obj/item))
|
||||
source.drop_item()
|
||||
if(item)
|
||||
loc = target
|
||||
item.layer = 20
|
||||
target.l_hand = item
|
||||
@@ -2232,15 +1855,7 @@ It can still be worn/put on as normal.
|
||||
target.w_uniform = item
|
||||
item.loc = target
|
||||
if("suit")
|
||||
if (target.wear_suit)
|
||||
if(istype(target.wear_suit, /obj/item/clothing/suit/armor/a_i_a_ptank))//triggers suicide vest if someone else tries to take it off/N
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/A = target.wear_suit//mostly a copy from death.dm code.
|
||||
bombers += "[target.key] has detonated a suicide bomb. Temp = [A.part4.air_contents.temperature-T0C]."
|
||||
if(A.status && prob(90))
|
||||
A.part4.ignite()
|
||||
return
|
||||
if(istype(target.wear_suit, /obj/item/clothing)&& !target.wear_suit:canremove)
|
||||
if(!istype(target.wear_suit, /obj/item/clothing/suit/armor/a_i_a_ptank)) return//Can remove the suicide vest if it didn't trigger.
|
||||
if(target.wear_suit)
|
||||
var/obj/item/W = target.wear_suit
|
||||
target.u_equip(W)
|
||||
if (target.client)
|
||||
@@ -2419,75 +2034,6 @@ It can still be worn/put on as normal.
|
||||
del(src)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/TakeDamage(zone, brute, burn)
|
||||
var/datum/organ/external/E = organs[text("[]", zone)]
|
||||
if (istype(E, /datum/organ/external))
|
||||
if (E.take_damage(brute, burn))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
|
||||
|
||||
var/datum/organ/external/E = organs[text("[]", zone)]
|
||||
if (istype(E, /datum/organ/external))
|
||||
if (E.heal_damage(brute, burn))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/UpdateDamage()
|
||||
|
||||
bruteloss = 0
|
||||
fireloss = 0
|
||||
var/datum/organ/external/O
|
||||
for(var/t in organs)
|
||||
O = organs[t]
|
||||
if (istype(O, /datum/organ/external))
|
||||
bruteloss += O.brute_dam
|
||||
fireloss += O.burn_dam
|
||||
return
|
||||
|
||||
// new damage icon system
|
||||
// now constructs damage icon for each organ from mask * damage field
|
||||
|
||||
/mob/living/carbon/human/proc/UpdateDamageIcon()
|
||||
del(body_standing)
|
||||
body_standing = list()
|
||||
del(body_lying)
|
||||
body_lying = list()
|
||||
bruteloss = 0
|
||||
fireloss = 0
|
||||
var/datum/organ/external/O
|
||||
for(var/t in organs)
|
||||
O = organs[t]
|
||||
if (istype(O, /datum/organ/external))
|
||||
bruteloss += O.brute_dam
|
||||
fireloss += O.burn_dam
|
||||
|
||||
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
|
||||
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
|
||||
|
||||
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
|
||||
|
||||
body_standing += DI
|
||||
|
||||
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
|
||||
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
|
||||
|
||||
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
|
||||
|
||||
body_lying += DI
|
||||
|
||||
//body_standing += new /icon( 'dam_zones.dmi', text("[]", O.d_i_state) )
|
||||
//body_lying += new /icon( 'dam_zones.dmi', text("[]2", O.d_i_state) )
|
||||
|
||||
/mob/living/carbon/human/show_inv(mob/user as mob)
|
||||
|
||||
user.machine = src
|
||||
@@ -2593,16 +2139,14 @@ It can still be worn/put on as normal.
|
||||
|
||||
/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn)
|
||||
var/list/datum/organ/external/parts = list()
|
||||
for(var/organ_name in organs)
|
||||
var/datum/organ/external/organ = organs[organ_name]
|
||||
for(var/datum/organ/external/organ in organs)
|
||||
if((brute && organ.brute_dam) || (burn && organ.burn_dam))
|
||||
parts += organ
|
||||
return parts
|
||||
|
||||
/mob/living/carbon/human/proc/get_damageable_organs()
|
||||
var/list/datum/organ/external/parts = list()
|
||||
for(var/organ_name in organs)
|
||||
var/datum/organ/external/organ = organs[organ_name]
|
||||
for(var/datum/organ/external/organ in organs)
|
||||
if(organ.brute_dam + organ.burn_dam < organ.max_damage)
|
||||
parts += organ
|
||||
return parts
|
||||
@@ -2710,3 +2254,17 @@ It can still be worn/put on as normal.
|
||||
/mob/living/carbon/human/IsAdvancedToolUser()
|
||||
return 1//Humans can use guns and such
|
||||
|
||||
|
||||
/mob/living/carbon/human/updatehealth()
|
||||
if(src.nodamage)
|
||||
src.health = 100
|
||||
src.stat = 0
|
||||
return
|
||||
bruteloss = 0
|
||||
fireloss = 0
|
||||
for(var/datum/organ/external/O in organs)
|
||||
src.bruteloss += O.brute_dam
|
||||
src.fireloss += O.burn_dam
|
||||
src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss - src.cloneloss
|
||||
|
||||
|
||||
|
||||
74
code/modules/mob/living/carbon/human/human_attackalien.dm
Normal file
74
code/modules/mob/living/carbon/human/human_attackalien.dm
Normal file
@@ -0,0 +1,74 @@
|
||||
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if(check_shields(0, M.name))
|
||||
visible_message("\red <B>[M] attempted to touch [src]!</B>")
|
||||
return 0
|
||||
|
||||
switch(M.a_intent)
|
||||
if ("help")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
|
||||
if ("grab")
|
||||
if(M == src) return
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
|
||||
G.assailant = M
|
||||
if (M.hand)
|
||||
M.l_hand = G
|
||||
else
|
||||
M.r_hand = G
|
||||
G.layer = 20
|
||||
G.affecting = src
|
||||
grabbed_by += G
|
||||
G.synch()
|
||||
LAssailant = M
|
||||
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
||||
|
||||
if("hurt")
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/damage = rand(15, 30)
|
||||
if(!damage)
|
||||
playsound(loc, 'slashmiss.ogg', 50, 1, -1)
|
||||
visible_message("\red <B>[M] has lunged at [src]!</B>")
|
||||
return 0
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
|
||||
playsound(loc, 'slice.ogg', 25, 1, -1)
|
||||
visible_message("\red <B>[M] has slashed at [src]!</B>")
|
||||
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
if (damage >= 25)
|
||||
visible_message("\red <B>[M] has wounded [src]!</B>")
|
||||
apply_effect(4, WEAKEN, armor_block)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
|
||||
if("disarm")
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 90)
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
if (weakened < 15)
|
||||
weakened = rand(10, 15)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
|
||||
else
|
||||
if (randn <= 99)
|
||||
playsound(loc, 'slash.ogg', 25, 1, -1)
|
||||
drop_item()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] disarmed []!</B>", M, src), 1)
|
||||
else
|
||||
playsound(loc, 'slashmiss.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tried to disarm []!</B>", M, src), 1)
|
||||
return
|
||||
120
code/modules/mob/living/carbon/human/human_attackhand.dm
Normal file
120
code/modules/mob/living/carbon/human/human_attackhand.dm
Normal file
@@ -0,0 +1,120 @@
|
||||
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M as mob)
|
||||
if (istype(loc, /turf) && istype(loc.loc, /area/start))
|
||||
M << "No attacking people at spawn, you jackass."
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
if(check_shields(0, M.name))
|
||||
visible_message("\red <B>[M] attempted to touch [src]!</B>")
|
||||
return 0
|
||||
|
||||
if((M.gloves && M.gloves.elecgen == 1))
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Stungloved [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stungloved by [M.name] ([M.ckey])</font>")
|
||||
|
||||
if(M.gloves.uses <= 0)
|
||||
M.gloves.elecgen = 0
|
||||
visible_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>")
|
||||
M << "\red Not enough charge! "
|
||||
return
|
||||
M.gloves.uses--
|
||||
var/armorblock = run_armor_check(M.zone_sel.selecting, "energy")
|
||||
apply_effects(5,5,0,0,5,0,0,armorblock)
|
||||
visible_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>")
|
||||
return 1
|
||||
|
||||
switch(M.a_intent)
|
||||
if("help")
|
||||
if(health > 0)
|
||||
help_shake_act(M)
|
||||
return 1
|
||||
if(M.health < -75) return 0
|
||||
|
||||
if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
M << "\blue <B>Remove your mask!</B>"
|
||||
return 0
|
||||
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
M << "\blue <B>Remove his mask!</B>"
|
||||
return 0
|
||||
|
||||
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human()
|
||||
O.source = M
|
||||
O.target = src
|
||||
O.s_loc = M.loc
|
||||
O.t_loc = loc
|
||||
O.place = "CPR"
|
||||
requests += O
|
||||
spawn(0)
|
||||
O.process()
|
||||
return 1
|
||||
|
||||
if("grab")
|
||||
if(M == src) return 0
|
||||
if(w_uniform) w_uniform.add_fingerprint(M)
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M)
|
||||
G.assailant = M
|
||||
if (M.hand)
|
||||
M.l_hand = G
|
||||
else
|
||||
M.r_hand = G
|
||||
G.layer = 20
|
||||
G.affecting = src
|
||||
grabbed_by += G
|
||||
G.synch()
|
||||
LAssailant = M
|
||||
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("\red [M] has grabbed [src] passively!")
|
||||
return 1
|
||||
|
||||
if("hurt")
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
|
||||
|
||||
var/damage = rand(0, 9)
|
||||
if(!damage)
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
visible_message("\red <B>[M] has attempted to punch [src]!</B>")
|
||||
return 0
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
|
||||
if(M.mutations & HULK) damage += 5
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
|
||||
visible_message("\red <B>[M] has punched [src]!</B>")
|
||||
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
if(damage >= 9)
|
||||
visible_message("\red <B>[M] has weakened [src]!</B>")
|
||||
apply_effect(4, WEAKEN, armor_block)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
|
||||
|
||||
if("disarm")
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>")
|
||||
|
||||
if(w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/datum/organ/external/affecting = organs[ran_zone(M.zone_sel.selecting)]
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 25)
|
||||
apply_effect(2, WEAKEN, run_armor_check(affecting, "melee"))
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("\red <B>[M] has pushed [src]!</B>")
|
||||
return
|
||||
|
||||
if(randn <= 60)
|
||||
drop_item()
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("\red <B>[M] has disarmed [src]!</B>")
|
||||
return
|
||||
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
visible_message("\red <B>[M] attempted to disarm [src]!</B>")
|
||||
return
|
||||
|
||||
|
||||
25
code/modules/mob/living/carbon/human/human_attackpaw.dm
Normal file
25
code/modules/mob/living/carbon/human/human_attackpaw.dm
Normal file
@@ -0,0 +1,25 @@
|
||||
/mob/living/carbon/human/attack_paw(mob/M as mob)
|
||||
..()
|
||||
if (M.a_intent == "help")
|
||||
help_shake_act(M)
|
||||
else
|
||||
if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
UpdateDamageIcon()
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(istype(D, /datum/disease/jungle_fever))
|
||||
var/mob/living/carbon/human/H = src
|
||||
src = null
|
||||
src = H.monkeyize()
|
||||
contract_disease(D,1,0)
|
||||
return
|
||||
80
code/modules/mob/living/carbon/human/human_damage.dm
Normal file
80
code/modules/mob/living/carbon/human/human_damage.dm
Normal file
@@ -0,0 +1,80 @@
|
||||
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
|
||||
var/datum/organ/external/E = get_organ(zone)
|
||||
if(istype(E, /datum/organ/external))
|
||||
if (E.heal_damage(brute, burn))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/UpdateDamage()
|
||||
bruteloss = 0
|
||||
fireloss = 0
|
||||
for(var/datum/organ/external/O in organs)
|
||||
if(istype(O, /datum/organ/external))
|
||||
bruteloss += O.brute_dam
|
||||
fireloss += O.burn_dam
|
||||
return
|
||||
|
||||
// new damage icon system
|
||||
// now constructs damage icon for each organ from mask * damage field
|
||||
|
||||
/mob/living/carbon/human/UpdateDamageIcon()
|
||||
del(body_standing)
|
||||
body_standing = list()
|
||||
del(body_lying)
|
||||
body_lying = list()
|
||||
UpdateDamage()
|
||||
for(var/datum/organ/external/O in organs)
|
||||
if(istype(O, /datum/organ/external))
|
||||
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
|
||||
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
|
||||
|
||||
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
|
||||
|
||||
body_standing += DI
|
||||
|
||||
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
|
||||
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
|
||||
|
||||
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
|
||||
|
||||
body_lying += DI
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_organ(var/zone)
|
||||
if(!zone) zone = "chest"
|
||||
for(var/datum/organ/external/O in organs)
|
||||
if(O.name == zone)
|
||||
return O
|
||||
return null
|
||||
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0)
|
||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||
..(damage, damagetype, def_zone, blocked)
|
||||
return 1
|
||||
|
||||
if(blocked >= 2) return 0
|
||||
|
||||
var/datum/organ/external/organ = null
|
||||
if(isorgan(def_zone))
|
||||
organ = def_zone
|
||||
else
|
||||
if(!def_zone) def_zone = ran_zone(def_zone)
|
||||
organ = get_organ(check_zone(def_zone))
|
||||
if(!organ) return 0
|
||||
if(blocked)
|
||||
damage = (damage/(blocked+1))
|
||||
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
organ.take_damage(damage, 0)
|
||||
if(BURN)
|
||||
organ.take_damage(0, damage)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
return 1
|
||||
@@ -8,301 +8,114 @@ emp_act
|
||||
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human/bullet_act(A as obj, var/datum/organ/external/def_zone)
|
||||
//Preparing the var for grabbing the armor information, can't grab the values yet because we don't know what kind of bullet was used. --NEO
|
||||
|
||||
var/obj/item/projectile/P = A//I really don't like how metroids are scattered throughout the code
|
||||
if(prob(80))
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
if(M.Victim == src)
|
||||
M.bullet_act(A) // the bullet hits them, not src!
|
||||
return
|
||||
|
||||
var/list/hand_held_shields = list("/obj/item/weapon/shield/riot","/obj/item/weapon/melee/energy/sword")
|
||||
if(l_hand)
|
||||
if(is_type_in_list(l_hand, hand_held_shields))//Current base is the prob(50-d/3) Should likely give the things their own block prob
|
||||
if(prob(50 - round(P.damage / 3)))
|
||||
show_message("\red You block the [P.name] with your [l_hand.name]!", 4)
|
||||
if(r_hand)
|
||||
if(is_type_in_list(r_hand, hand_held_shields))
|
||||
if(prob(50 - round(P.damage / 3)))
|
||||
show_message("\red You block the [P.name] with your [l_hand.name]!", 4)
|
||||
|
||||
var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src)
|
||||
if(C)
|
||||
if(C.active)
|
||||
C.attack_self(src)//Should shut it off
|
||||
src << "\blue Your [C.name] was disrupted!"
|
||||
stunned = max(stunned, rand(2,4))//Why in the hell did this use to be 120 para
|
||||
|
||||
var/datum/organ/external/affecting
|
||||
if(!def_zone)
|
||||
var/organ = organs[ran_zone("chest")]
|
||||
if (istype(organ, /datum/organ/external))
|
||||
affecting = organ
|
||||
else
|
||||
affecting = organs["[def_zone]"]
|
||||
|
||||
if(!affecting)
|
||||
return
|
||||
if(locate(/obj/item/weapon/grab, src))
|
||||
var/mob/safe = null
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if ((G.state == 3 && get_dir(src, A) == dir))
|
||||
safe = G.affecting
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon.grab/G = r_hand
|
||||
if ((G.state == 3 && get_dir(src, A) == dir))
|
||||
safe = G.affecting
|
||||
if (safe && A)
|
||||
return safe.bullet_act(A)
|
||||
|
||||
var/absorb = 0
|
||||
var/soften = 0
|
||||
|
||||
for(var/i = 1, i<= P.mobdamage.len, i++)
|
||||
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = P.mobdamage[BRUTE]
|
||||
if(d)
|
||||
var/list/armor = getarmor(affecting, P.flag)
|
||||
if (prob(armor["armor"]))
|
||||
absorb = 1
|
||||
else
|
||||
if(prob(armor["armor"])/2)
|
||||
soften = 1
|
||||
d = d / 2
|
||||
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
if(check_shields(P.damage, "the [P.name]"))
|
||||
P.on_hit(src, 2)
|
||||
return 2
|
||||
return (..())
|
||||
|
||||
|
||||
if(!P.nodamage) affecting.take_damage(d, 0)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
if(2)
|
||||
var/d = P.mobdamage[BURN]
|
||||
if(d)
|
||||
var/list/armor = getarmor(affecting, P.flag)
|
||||
if (prob(armor["armor"]))
|
||||
absorb = 1
|
||||
else
|
||||
if(prob(armor["armor"])/2)
|
||||
soften = 1
|
||||
d = d / 2
|
||||
|
||||
|
||||
if(!P.nodamage) affecting.take_damage(0, d)
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
if(3)
|
||||
var/d = P.mobdamage[TOX]
|
||||
if(d)
|
||||
var/list/armor = getarmor(affecting, P.flag)
|
||||
if (prob(armor["armor"]))
|
||||
absorb = 1
|
||||
else
|
||||
if(prob(armor["armor"])/2)
|
||||
soften = 1
|
||||
d = d / 2
|
||||
|
||||
|
||||
if(!P.nodamage) toxloss += d
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
if(4)
|
||||
var/d = P.mobdamage[OXY]
|
||||
if(d)
|
||||
var/list/armor = getarmor(affecting, P.flag)
|
||||
if (prob(armor["armor"]))
|
||||
absorb = 1
|
||||
else
|
||||
if(prob(armor["armor"])/2)
|
||||
soften = 1
|
||||
d = d / 2
|
||||
|
||||
|
||||
if(!P.nodamage) oxyloss += d
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
if(5)
|
||||
var/d = P.mobdamage[CLONE]
|
||||
if(d)
|
||||
var/list/armor = getarmor(affecting, P.flag)
|
||||
if (prob(armor["armor"]))
|
||||
absorb = 1
|
||||
else
|
||||
if(prob(armor["armor"])/2)
|
||||
soften = 1
|
||||
d = d / 2
|
||||
|
||||
|
||||
if(!nodamage) cloneloss += d
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////// All the unique projectile stuff goes here ///////////////////
|
||||
|
||||
if(absorb)
|
||||
show_message("\red Your armor absorbs the blow!", 4)
|
||||
return // a projectile can be deflected/absorbed given the right amount of protection
|
||||
if(soften)
|
||||
show_message("\red Your armor only softens the blow!", 4)
|
||||
|
||||
var/nostutter = 0
|
||||
|
||||
if(P.effects["stun"] && prob(P.effectprob["stun"]))
|
||||
var/list/armor = getarmor(affecting, "taser")
|
||||
if (!prob(armor["armor"]))
|
||||
if(P.effectmod["stun"] == SET)
|
||||
stunned = P.effects["stun"]
|
||||
else
|
||||
stunned += P.effects["stun"]
|
||||
else
|
||||
nostutter = 1
|
||||
|
||||
|
||||
if(P.effects["weak"] && prob(P.effectprob["weak"]))
|
||||
if(P.effectmod["weak"] == SET)
|
||||
weakened = P.effects["weak"]
|
||||
else
|
||||
weakened += P.effects["weak"]
|
||||
|
||||
if(P.effects["paralysis"] && prob(P.effectprob["paralysis"]))
|
||||
if(P.effectmod["paralysis"] == SET)
|
||||
paralysis = P.effects["paralysis"]
|
||||
else
|
||||
paralysis += P.effects["paralysis"]
|
||||
|
||||
if(P.effects["stutter"] && prob(P.effectprob["stutter"]) && !nostutter)
|
||||
if(P.effectmod["stutter"] == SET)
|
||||
stuttering = P.effects["stutter"]
|
||||
else
|
||||
stuttering += P.effects["stutter"]
|
||||
|
||||
if(P.effects["drowsyness"] && prob(P.effectprob["drowsyness"]))
|
||||
if(P.effectmod["drowsyness"] == SET)
|
||||
drowsyness = P.effects["drowsyness"]
|
||||
else
|
||||
drowsyness += P.effects["drowsyness"]
|
||||
|
||||
if(P.effects["radiation"] && prob(P.effectprob["radiation"]))
|
||||
var/list/armor = getarmor(affecting, "rad")
|
||||
if (!prob(armor["armor"]))
|
||||
if(P.effectmod["radiation"] == SET)
|
||||
radiation = P.effects["radiation"]
|
||||
else
|
||||
radiation += P.effects["radiation"]
|
||||
|
||||
if(P.effects["eyeblur"] && prob(P.effectprob["eyeblur"]))
|
||||
if(P.effectmod["eyeblur"] == SET)
|
||||
eye_blurry = P.effects["eyeblur"]
|
||||
else
|
||||
eye_blurry += P.effects["eyeblur"]
|
||||
|
||||
if(P.effects["emp"])
|
||||
var/emppulse = P.effects["emp"]
|
||||
if(prob(P.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/getarmor(var/datum/organ/external/def_zone, var/type)
|
||||
/mob/living/carbon/human/getarmor(var/def_zone, var/type)
|
||||
var/armorval = 0
|
||||
var/organnum = 0
|
||||
|
||||
|
||||
if(istype(def_zone))
|
||||
if(def_zone)
|
||||
if(isorgan(def_zone))
|
||||
return checkarmor(def_zone, type)
|
||||
//If a specific bodypart is targetted, check how that bodypart is protected and return the value. --NEO
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(def_zone))
|
||||
return checkarmor(affecting, type)
|
||||
//If a specific bodypart is targetted, check how that bodypart is protected and return the value.
|
||||
|
||||
else
|
||||
//If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values
|
||||
for(var/organ_name in organs)
|
||||
var/datum/organ/external/organ = organs[organ_name]
|
||||
if (istype(organ))
|
||||
var/list/organarmor = checkarmor(organ, type)
|
||||
armorval += organarmor["armor"]
|
||||
for(var/datum/organ/external/organ in organs)
|
||||
if(istype(organ))
|
||||
armorval += checkarmor(organ, type)
|
||||
organnum++
|
||||
//world << "Debug text: full body armor check in progress, [organ.name] is best protected against [type] damage by [organarmor["clothes"]], with a value of [organarmor["armor"]]"
|
||||
//world << "Debug text: full body armor check complete, average of [armorval/organnum] protection against [type] damage."
|
||||
return armorval/organnum
|
||||
return armorval/max(organnum, 1)
|
||||
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/proc/checkarmor(var/datum/organ/external/def_zone, var/type)
|
||||
if (!type)
|
||||
return
|
||||
var/obj/item/clothing/best
|
||||
var/armorval = 0
|
||||
|
||||
//I don't really like the way this is coded, but I can't think of a better way to check what they're actually wearing as opposed to something they're holding. --NEO
|
||||
|
||||
if(head && istype(head,/obj/item/clothing))
|
||||
if(def_zone.body_part & head.body_parts_covered)
|
||||
if(head.armor[type] > armorval)
|
||||
armorval = head.armor[type]
|
||||
best = head
|
||||
|
||||
if(wear_mask && istype(wear_mask,/obj/item/clothing))
|
||||
if(def_zone.body_part & wear_mask.body_parts_covered)
|
||||
if(wear_mask.armor[type] > armorval)
|
||||
armorval = wear_mask.armor[type]
|
||||
best = wear_mask
|
||||
|
||||
if(wear_suit && istype(wear_suit,/obj/item/clothing))
|
||||
if(def_zone.body_part & wear_suit.body_parts_covered)
|
||||
if(wear_suit.armor[type] > armorval)
|
||||
armorval = wear_suit.armor[type]
|
||||
best = wear_suit
|
||||
|
||||
if(w_uniform && istype(w_uniform,/obj/item/clothing))
|
||||
if(def_zone.body_part & w_uniform.body_parts_covered)
|
||||
if(w_uniform.armor[type] > armorval)
|
||||
armorval = w_uniform.armor[type]
|
||||
best = w_uniform
|
||||
|
||||
if(shoes && istype(shoes,/obj/item/clothing))
|
||||
if(def_zone.body_part & shoes.body_parts_covered)
|
||||
if(shoes.armor[type] > armorval)
|
||||
armorval = shoes.armor[type]
|
||||
best = shoes
|
||||
|
||||
if(gloves && istype(gloves,/obj/item/clothing))
|
||||
if(def_zone.body_part & gloves.body_parts_covered)
|
||||
if(gloves.armor[type] > armorval)
|
||||
armorval = gloves.armor[type]
|
||||
best = gloves
|
||||
|
||||
var/list/result = list(clothes = best, armor = armorval)
|
||||
return result
|
||||
if(!type) return 0
|
||||
var/protection = 0
|
||||
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
|
||||
for(var/bp in body_parts)
|
||||
if(!bp) continue
|
||||
if(bp && istype(bp ,/obj/item/clothing))
|
||||
var/obj/item/clothing/C = bp
|
||||
if(C.body_parts_covered & def_zone.body_part)
|
||||
protection += C.armor[type]
|
||||
return protection
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
|
||||
var/list/hand_held_shields = list("/obj/item/weapon/shield/riot","/obj/item/weapon/melee/energy/sword")
|
||||
if(l_hand && is_type_in_list(l_hand, hand_held_shields))//Current base is the prob(50-d/3)
|
||||
if(prob(50 - round(damage / 3)))
|
||||
show_message("\red You block [attack_text] with your [l_hand.name]!", 4)
|
||||
return 1
|
||||
if(r_hand && is_type_in_list(r_hand, hand_held_shields))
|
||||
if(prob(50 - round(damage / 3)))
|
||||
show_message("\red You block [attack_text] with your [l_hand.name]!", 4)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/emp_act(severity)
|
||||
/*if(wear_suit) wear_suit.emp_act(severity)
|
||||
if(w_uniform) w_uniform.emp_act(severity)
|
||||
if(shoes) shoes.emp_act(severity)
|
||||
if(belt) belt.emp_act(severity)
|
||||
if(gloves) gloves.emp_act(severity)
|
||||
if(glasses) glasses.emp_act(severity)
|
||||
if(head) head.emp_act(severity)
|
||||
if(ears) ears.emp_act(severity)
|
||||
if(wear_id) wear_id.emp_act(severity)
|
||||
if(r_store) r_store.emp_act(severity)
|
||||
if(l_store) l_store.emp_act(severity)
|
||||
if(s_store) s_store.emp_act(severity)
|
||||
if(h_store) h_store.emp_act(severity)
|
||||
..()*/
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
if(!I || !user) return 0
|
||||
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
|
||||
var/hit_area = parse_zone(affecting.name)
|
||||
|
||||
visible_message("\red <B>[src] has been attacked in the [hit_area] with [I.name] by [user]!</B>")
|
||||
|
||||
if(check_shields(I.force, "the [I.name]"))
|
||||
world << "SHIELDS"
|
||||
return 0
|
||||
var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].")
|
||||
if(armor >= 2) return 0
|
||||
apply_damage(I.force, I.damtype, affecting, armor)
|
||||
|
||||
var/bloody = 0
|
||||
if((I.damtype == BRUTE) && prob(25 + (I.force * 2)))
|
||||
src.add_blood(src)
|
||||
if(prob(33))
|
||||
bloody = 1
|
||||
var/turf/location = loc
|
||||
if(istype(location, /turf/simulated))
|
||||
location.add_blood(src)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.gloves) H.gloves.add_blood(src)
|
||||
else H.add_blood(src)
|
||||
if(H.wear_suit) H.wear_suit.add_blood(src)
|
||||
else if(H.w_uniform) H.w_uniform.add_blood(src)
|
||||
|
||||
switch(hit_area)
|
||||
if("head")//Harder to score a stun but if you do it lasts a bit longer
|
||||
if(prob(I.force))
|
||||
apply_effect(20, PARALYZE, armor)
|
||||
visible_message("\red <B>[src] has been knocked unconscious!</B>")
|
||||
if(src != user)
|
||||
ticker.mode.remove_revolutionary(mind)
|
||||
|
||||
if(bloody)//Apply blood
|
||||
if(wear_mask) wear_mask.add_blood(src)
|
||||
if(head) head.add_blood(src)
|
||||
if(glasses && prob(33)) glasses.add_blood(src)
|
||||
|
||||
if("chest")//Easier to score a stun but lasts less time
|
||||
if(prob((I.force + 10)))
|
||||
apply_effect(5, WEAKEN, armor)
|
||||
visible_message("\red <B>[src] has been knocked down!</B>")
|
||||
|
||||
if(bloody)
|
||||
if(src.wear_suit) src.wear_suit.add_blood(src)
|
||||
if(src.w_uniform) src.w_uniform.add_blood(src)
|
||||
src.UpdateDamageIcon()
|
||||
@@ -6,7 +6,7 @@
|
||||
//Do we have a working jetpack
|
||||
if(istype(back, /obj/item/weapon/tank/jetpack))
|
||||
var/obj/item/weapon/tank/jetpack/J = back
|
||||
if(J.allow_thrust(0.01, src))
|
||||
if(J.allow_thrust(0.005, src))
|
||||
inertia_dir = 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -576,23 +576,15 @@
|
||||
|
||||
switch(body_part)
|
||||
if(HEAD)
|
||||
TakeDamage("head", 0, 2.5*discomfort)
|
||||
apply_damage(2.5*discomfort, BURN, "head")
|
||||
if(UPPER_TORSO)
|
||||
TakeDamage("chest", 0, 2.5*discomfort)
|
||||
if(LOWER_TORSO)
|
||||
TakeDamage("groin", 0, 2.0*discomfort)
|
||||
apply_damage(2.5*discomfort, BURN, "chest")
|
||||
if(LEGS)
|
||||
TakeDamage("l_leg", 0, 0.6*discomfort)
|
||||
TakeDamage("r_leg", 0, 0.6*discomfort)
|
||||
apply_damage(0.6*discomfort, BURN, "l_leg")
|
||||
apply_damage(0.6*discomfort, BURN, "r_leg")
|
||||
if(ARMS)
|
||||
TakeDamage("l_arm", 0, 0.4*discomfort)
|
||||
TakeDamage("r_arm", 0, 0.4*discomfort)
|
||||
if(FEET)
|
||||
TakeDamage("l_foot", 0, 0.25*discomfort)
|
||||
TakeDamage("r_foot", 0, 0.25*discomfort)
|
||||
if(HANDS)
|
||||
TakeDamage("l_hand", 0, 0.25*discomfort)
|
||||
TakeDamage("r_hand", 0, 0.25*discomfort)
|
||||
apply_damage(0.4*discomfort, BURN, "l_arm")
|
||||
apply_damage(0.4*discomfort, BURN, "r_arm")
|
||||
|
||||
handle_chemicals_in_body()
|
||||
if(reagents) reagents.metabolize(src)
|
||||
@@ -659,7 +651,7 @@
|
||||
|
||||
handle_regular_status_updates()
|
||||
|
||||
health = 100 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss)
|
||||
// health = 100 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss)
|
||||
|
||||
if(oxyloss > 50) paralysis = max(paralysis, 3)
|
||||
|
||||
@@ -669,7 +661,7 @@
|
||||
sleeping--
|
||||
|
||||
if(resting)
|
||||
weakened = max(weakened, 5)
|
||||
weakened = max(weakened, 3)
|
||||
|
||||
if(health < -100 || brain_op_stage == 4.0)
|
||||
death()
|
||||
|
||||
@@ -140,62 +140,9 @@
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj)
|
||||
if (locate(/obj/item/weapon/grab, src))
|
||||
var/mob/safe = null
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon.grab/G = r_hand
|
||||
if ((G.state == 3 && get_dir(src, Proj) == dir))
|
||||
safe = G.affecting
|
||||
if (safe)
|
||||
return safe.bullet_act(Proj)
|
||||
|
||||
attacked += 10
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = Proj.mobdamage[BRUTE]
|
||||
if(!Proj.nodamage) bruteloss += d
|
||||
updatehealth()
|
||||
if(2)
|
||||
var/d = Proj.mobdamage[BURN]
|
||||
if(!Proj.nodamage) fireloss += d
|
||||
updatehealth()
|
||||
if(3)
|
||||
var/d = Proj.mobdamage[TOX]
|
||||
if(!Proj.nodamage) toxloss += d
|
||||
updatehealth()
|
||||
if(4)
|
||||
var/d = Proj.mobdamage[OXY]
|
||||
if(!Proj.nodamage) oxyloss += d
|
||||
updatehealth()
|
||||
if(5)
|
||||
var/d = Proj.mobdamage[CLONE]
|
||||
if(!Proj.nodamage) cloneloss += d
|
||||
updatehealth()
|
||||
|
||||
|
||||
if(Proj.flag == "taser" && prob(35))
|
||||
// Metroids have a small chance of "absorbing" taser shots. Deal /w it
|
||||
powerlevel++
|
||||
src << "<i>I have absorbed the electrode projectile...</i>"
|
||||
|
||||
// K
|
||||
// ~~~~ N
|
||||
// Metroids aren't effected by extra status effect. DO NOT NERF THIS PLZ THNX - LOVE, DOOHL 3===========D ~~~~ HONK
|
||||
// ~~~~ H
|
||||
//EMP is special and yes they are because emp
|
||||
if(Proj.effects["emp"])
|
||||
var/emppulse = Proj.effects["emp"]
|
||||
if(prob(Proj.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
..(Proj)
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/emp_act(severity)
|
||||
|
||||
@@ -106,89 +106,7 @@
|
||||
health = 100 - oxyloss - toxloss - fireloss - bruteloss
|
||||
return
|
||||
|
||||
/mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
if(prob(80))
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
if(M.Victim == src)
|
||||
M.bullet_act(Proj)
|
||||
return
|
||||
|
||||
for(var/i = 1, i<= Proj.mobdamage.len, i++)
|
||||
|
||||
switch(i)
|
||||
if(1)
|
||||
var/d = Proj.mobdamage[BRUTE]
|
||||
if(!Proj.nodamage) src.take_organ_damage(d)
|
||||
updatehealth()
|
||||
if(2)
|
||||
var/d = Proj.mobdamage[BURN]
|
||||
if(!Proj.nodamage) src.take_organ_damage(0, d)
|
||||
updatehealth()
|
||||
if(3)
|
||||
var/d = Proj.mobdamage[TOX]
|
||||
if(!Proj.nodamage) toxloss += d
|
||||
updatehealth()
|
||||
if(4)
|
||||
var/d = Proj.mobdamage[OXY]
|
||||
if(!Proj.nodamage) oxyloss += d
|
||||
updatehealth()
|
||||
if(5)
|
||||
var/d = Proj.mobdamage[CLONE]
|
||||
if(!Proj.nodamage) cloneloss += d
|
||||
updatehealth()
|
||||
|
||||
if(Proj.effects["stun"] && prob(Proj.effectprob["stun"]))
|
||||
if(Proj.effectmod["stun"] == SET)
|
||||
stunned = Proj.effects["stun"]
|
||||
else
|
||||
stunned += Proj.effects["stun"]
|
||||
|
||||
|
||||
if(Proj.effects["weak"] && prob(Proj.effectprob["weak"]))
|
||||
if(Proj.effectmod["weak"] == SET)
|
||||
weakened = Proj.effects["weak"]
|
||||
else
|
||||
weakened += Proj.effects["weak"]
|
||||
|
||||
if(Proj.effects["paralysis"] && prob(Proj.effectprob["paralysis"]))
|
||||
if(Proj.effectmod["paralysis"] == SET)
|
||||
paralysis = Proj.effects["paralysis"]
|
||||
else
|
||||
paralysis += Proj.effects["paralysis"]
|
||||
|
||||
if(Proj.effects["stutter"] && prob(Proj.effectprob["stutter"]))
|
||||
if(Proj.effectmod["stutter"] == SET)
|
||||
stuttering = Proj.effects["stutter"]
|
||||
else
|
||||
stuttering += Proj.effects["stutter"]
|
||||
|
||||
if(Proj.effects["drowsyness"] && prob(Proj.effectprob["drowsyness"]))
|
||||
if(Proj.effectmod["drowsyness"] == SET)
|
||||
drowsyness = Proj.effects["drowsyness"]
|
||||
else
|
||||
drowsyness += Proj.effects["drowsyness"]
|
||||
|
||||
if(Proj.effects["radiation"] && prob(Proj.effectprob["radiation"]))
|
||||
if(Proj.effectmod["radiation"] == SET)
|
||||
radiation = Proj.effects["radiation"]
|
||||
else
|
||||
radiation += Proj.effects["radiation"]
|
||||
|
||||
if(Proj.effects["eyeblur"] && prob(Proj.effectprob["eyeblur"]))
|
||||
if(Proj.effectmod["eyeblur"] == SET)
|
||||
eye_blurry = Proj.effects["eyeblur"]
|
||||
else
|
||||
eye_blurry += Proj.effects["eyeblur"]
|
||||
|
||||
if(Proj.effects["emp"])
|
||||
var/emppulse = Proj.effects["emp"]
|
||||
if(prob(Proj.effectprob["emp"]))
|
||||
empulse(src, emppulse, emppulse)
|
||||
else
|
||||
empulse(src, 0, emppulse)
|
||||
|
||||
return
|
||||
//mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)taken care of in living
|
||||
|
||||
/mob/living/carbon/monkey/hand_p(mob/M as mob)
|
||||
if ((M.a_intent == "hurt" && !( istype(wear_mask, /obj/item/clothing/mask/muzzle) )))
|
||||
|
||||
72
code/modules/mob/living/damage_procs.dm
Normal file
72
code/modules/mob/living/damage_procs.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
/*
|
||||
apply_damage(a,b,c)
|
||||
args
|
||||
a:damage - How much damage to take
|
||||
b:damage_type - What type of damage to take, brute, burn
|
||||
c:def_zone - Where to take the damage if its brute or burn
|
||||
Returns
|
||||
standard 0 if fail
|
||||
*/
|
||||
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0)
|
||||
if(!damage || (blocked >= 2)) return 0
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
bruteloss += (damage/(blocked+1))
|
||||
if(BURN)
|
||||
if(mutations & COLD_RESISTANCE) damage = 0
|
||||
fireloss += (damage/(blocked+1))
|
||||
if(TOX)
|
||||
toxloss += (damage/(blocked+1))
|
||||
if(OXY)
|
||||
oxyloss += (damage/(blocked+1))
|
||||
if(CLONE)
|
||||
cloneloss += (damage/(blocked+1))
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/def_zone = null, var/blocked = 0)
|
||||
if(blocked >= 2) return 0
|
||||
if(brute) apply_damage(brute, BRUTE, def_zone, blocked)
|
||||
if(burn) apply_damage(burn, BURN, def_zone, blocked)
|
||||
if(tox) apply_damage(tox, TOX, def_zone, blocked)
|
||||
if(oxy) apply_damage(oxy, OXY, def_zone, blocked)
|
||||
if(clone) apply_damage(clone, CLONE, def_zone, blocked)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
|
||||
if(!effect || (blocked >= 2)) return 0
|
||||
switch(effecttype)
|
||||
if(STUN)
|
||||
stunned = max(stunned,(effect/(blocked+1)))
|
||||
if(WEAKEN)
|
||||
weakened = max(weakened,(effect/(blocked+1)))
|
||||
if(PARALYZE)
|
||||
paralysis = max(paralysis,(effect/(blocked+1)))
|
||||
if(IRRADIATE)
|
||||
radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
|
||||
if(STUTTER)
|
||||
stuttering = max(stuttering,(effect/(blocked+1)))
|
||||
if(EYE_BLUR)
|
||||
eye_blurry = max(eye_blurry,(effect/(blocked+1)))
|
||||
if(DROWSY)
|
||||
drowsyness = max(drowsyness,(effect/(blocked+1)))
|
||||
UpdateDamageIcon()
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/blocked = 0)
|
||||
if(blocked >= 2) return 0
|
||||
if(stun) apply_effect(stun, STUN, blocked)
|
||||
if(weaken) apply_effect(weaken, WEAKEN, blocked)
|
||||
if(paralyze) apply_effect(paralyze, PARALYZE, blocked)
|
||||
if(irradiate) apply_effect(irradiate, IRRADIATE, blocked)
|
||||
if(stutter) apply_effect(stutter, STUTTER, blocked)
|
||||
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
|
||||
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
|
||||
return 1
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user