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:
mport2004@gmail.com
2011-10-08 10:38:01 +00:00
parent ad80137505
commit 62e28c2abf
148 changed files with 6638 additions and 8653 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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())

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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"

View File

@@ -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)

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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."

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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,

View File

@@ -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!"

View File

@@ -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

View File

@@ -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)

View File

@@ -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( \

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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()
*/

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 )

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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.")

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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

View File

@@ -1 +0,0 @@

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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.")

View File

@@ -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))

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)
..()

View File

@@ -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

View File

@@ -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

View 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

View 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

View 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

View 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

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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) )))

View 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