mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync
# Conflicts: # code/modules/client/preference_setup/general/03_body.dm # code/modules/mob/new_player/sprite_accessories.dm # html/changelogs/.all_changelog.yml # icons/mob/human_races/markings.dmi # vorestation.dme
This commit is contained in:
@@ -228,13 +228,16 @@ mob/living/carbon/human/airflow_hit(atom/A)
|
|||||||
var/b_loss = airflow_speed * vsc.airflow_damage
|
var/b_loss = airflow_speed * vsc.airflow_damage
|
||||||
|
|
||||||
var/blocked = run_armor_check(BP_HEAD,"melee")
|
var/blocked = run_armor_check(BP_HEAD,"melee")
|
||||||
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, 0, "Airflow")
|
var/soaked = get_armor_soak(BP_HEAD,"melee")
|
||||||
|
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, soaked, 0, "Airflow")
|
||||||
|
|
||||||
blocked = run_armor_check(BP_TORSO,"melee")
|
blocked = run_armor_check(BP_TORSO,"melee")
|
||||||
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, 0, "Airflow")
|
soaked = get_armor_soak(BP_TORSO,"melee")
|
||||||
|
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, soaked, 0, "Airflow")
|
||||||
|
|
||||||
blocked = run_armor_check(BP_GROIN,"melee")
|
blocked = run_armor_check(BP_GROIN,"melee")
|
||||||
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, 0, "Airflow")
|
soaked = get_armor_soak(BP_GROIN,"melee")
|
||||||
|
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, soaked, 0, "Airflow")
|
||||||
|
|
||||||
if(airflow_speed > 10)
|
if(airflow_speed > 10)
|
||||||
Paralyse(round(airflow_speed * vsc.airflow_stun))
|
Paralyse(round(airflow_speed * vsc.airflow_stun))
|
||||||
|
|||||||
@@ -341,6 +341,7 @@
|
|||||||
var/mob/living/carbon/C = usr
|
var/mob/living/carbon/C = usr
|
||||||
C.swap_hand()
|
C.swap_hand()
|
||||||
else
|
else
|
||||||
var/turf/T = screen_loc2turf("screen-loc", get_turf(usr))
|
var/turf/T = screen_loc2turf(screen_loc, get_turf(usr))
|
||||||
|
if(T)
|
||||||
T.Click(location, control, params)
|
T.Click(location, control, params)
|
||||||
. = 1
|
. = 1
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ var/const/ERT_FREQ = 1345
|
|||||||
var/const/AI_FREQ = 1343
|
var/const/AI_FREQ = 1343
|
||||||
var/const/DTH_FREQ = 1341
|
var/const/DTH_FREQ = 1341
|
||||||
var/const/SYND_FREQ = 1213
|
var/const/SYND_FREQ = 1213
|
||||||
|
var/const/RAID_FREQ = 1277
|
||||||
var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
|
var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
|
||||||
|
|
||||||
// department channels
|
// department channels
|
||||||
@@ -133,6 +134,7 @@ var/list/radiochannels = list(
|
|||||||
"Response Team" = ERT_FREQ,
|
"Response Team" = ERT_FREQ,
|
||||||
"Special Ops" = DTH_FREQ,
|
"Special Ops" = DTH_FREQ,
|
||||||
"Mercenary" = SYND_FREQ,
|
"Mercenary" = SYND_FREQ,
|
||||||
|
"Raider" = RAID_FREQ,
|
||||||
"Supply" = SUP_FREQ,
|
"Supply" = SUP_FREQ,
|
||||||
"Service" = SRV_FREQ,
|
"Service" = SRV_FREQ,
|
||||||
"AI Private" = AI_FREQ,
|
"AI Private" = AI_FREQ,
|
||||||
@@ -145,7 +147,7 @@ var/list/radiochannels = list(
|
|||||||
var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ)
|
var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ)
|
||||||
|
|
||||||
// Antag channels, i.e. Syndicate
|
// Antag channels, i.e. Syndicate
|
||||||
var/list/ANTAG_FREQS = list(SYND_FREQ)
|
var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ)
|
||||||
|
|
||||||
//Department channels, arranged lexically
|
//Department channels, arranged lexically
|
||||||
var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ)
|
var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ)
|
||||||
|
|||||||
@@ -74,6 +74,10 @@
|
|||||||
name = "request console electronics"
|
name = "request console electronics"
|
||||||
path =/obj/item/weapon/circuitboard/request
|
path =/obj/item/weapon/circuitboard/request
|
||||||
|
|
||||||
|
/datum/category_item/autolathe/engineering/pipelayer
|
||||||
|
name = "pipe layer electronics"
|
||||||
|
path =/obj/item/weapon/circuitboard/pipelayer
|
||||||
|
|
||||||
/datum/category_item/autolathe/engineering/motor
|
/datum/category_item/autolathe/engineering/motor
|
||||||
name = "motor"
|
name = "motor"
|
||||||
path =/obj/item/weapon/stock_parts/motor
|
path =/obj/item/weapon/stock_parts/motor
|
||||||
|
|||||||
@@ -14,6 +14,11 @@
|
|||||||
name = "welding tool"
|
name = "welding tool"
|
||||||
path =/obj/item/weapon/weldingtool
|
path =/obj/item/weapon/weldingtool
|
||||||
|
|
||||||
|
/datum/category_item/autolathe/tools/electric_welder
|
||||||
|
name = "electric welding tool"
|
||||||
|
path =/obj/item/weapon/weldingtool/electric/unloaded
|
||||||
|
hidden = 1
|
||||||
|
|
||||||
/datum/category_item/autolathe/tools/screwdriver
|
/datum/category_item/autolathe/tools/screwdriver
|
||||||
name = "screwdriver"
|
name = "screwdriver"
|
||||||
path =/obj/item/weapon/screwdriver
|
path =/obj/item/weapon/screwdriver
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ datum/supply_packs/costumes/witch
|
|||||||
/obj/item/clothing/under/wedding/bride_blue,
|
/obj/item/clothing/under/wedding/bride_blue,
|
||||||
/obj/item/clothing/under/wedding/bride_red,
|
/obj/item/clothing/under/wedding/bride_red,
|
||||||
/obj/item/clothing/under/wedding/bride_white,
|
/obj/item/clothing/under/wedding/bride_white,
|
||||||
/obj/item/clothing/under/dress/sundress,
|
/obj/item/clothing/under/sundress,
|
||||||
/obj/item/clothing/under/dress/dress_green,
|
/obj/item/clothing/under/dress/dress_green,
|
||||||
/obj/item/clothing/under/dress/dress_pink,
|
/obj/item/clothing/under/dress/dress_pink,
|
||||||
/obj/item/clothing/under/dress/dress_orange,
|
/obj/item/clothing/under/dress/dress_orange,
|
||||||
|
|||||||
@@ -33,6 +33,15 @@
|
|||||||
containertype = /obj/structure/closet/crate/engineering/electrical
|
containertype = /obj/structure/closet/crate/engineering/electrical
|
||||||
containername = "Electrical maintenance crate"
|
containername = "Electrical maintenance crate"
|
||||||
|
|
||||||
|
/datum/supply_packs/eng/e_welders
|
||||||
|
name = "Electric welder crate"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/weapon/weldingtool/electric = 3
|
||||||
|
)
|
||||||
|
cost = 15
|
||||||
|
containertype = /obj/structure/closet/crate/engineering/electrical
|
||||||
|
containername = "Electric welder crate"
|
||||||
|
|
||||||
/datum/supply_packs/eng/mechanical
|
/datum/supply_packs/eng/mechanical
|
||||||
name = "Mechanical maintenance crate"
|
name = "Mechanical maintenance crate"
|
||||||
contains = list(
|
contains = list(
|
||||||
|
|||||||
@@ -141,9 +141,10 @@
|
|||||||
access = access_hydroponics
|
access = access_hydroponics
|
||||||
|
|
||||||
/datum/supply_packs/hydro/tray
|
/datum/supply_packs/hydro/tray
|
||||||
name = "Empty hydroponics tray"
|
name = "Empty hydroponics trays"
|
||||||
cost = 20
|
cost = 50
|
||||||
containertype = /obj/structure/closet/crate/hydroponics
|
containertype = /obj/structure/closet/crate/hydroponics
|
||||||
containername = "Hydroponics tray crate"
|
containername = "Hydroponics tray crate"
|
||||||
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0})
|
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0} = 3)
|
||||||
access = access_hydroponics
|
access = access_hydroponics
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,27 @@
|
|||||||
containername = "Surgery crate"
|
containername = "Surgery crate"
|
||||||
access = access_medical
|
access = access_medical
|
||||||
|
|
||||||
|
/datum/supply_packs/med/deathalarm
|
||||||
|
name = "Death Alarm crate"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/weapon/storage/box/cdeathalarm_kit,
|
||||||
|
/obj/item/weapon/storage/box/cdeathalarm_kit
|
||||||
|
)
|
||||||
|
cost = 40
|
||||||
|
containertype = "/obj/structure/closet/crate/secure"
|
||||||
|
containername = "Death Alarm crate"
|
||||||
|
access = access_medical
|
||||||
|
|
||||||
|
/datum/supply_packs/med/clotting
|
||||||
|
name = "Clotting Medicine crate"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/weapon/storage/firstaid/clotting
|
||||||
|
)
|
||||||
|
cost = 40
|
||||||
|
containertype = "/obj/structure/closet/crate/secure"
|
||||||
|
containername = "Clotting Medicine crate"
|
||||||
|
access = access_medical
|
||||||
|
|
||||||
/datum/supply_packs/med/sterile
|
/datum/supply_packs/med/sterile
|
||||||
name = "Sterile equipment crate"
|
name = "Sterile equipment crate"
|
||||||
contains = list(
|
contains = list(
|
||||||
|
|||||||
@@ -74,6 +74,14 @@
|
|||||||
containername = "Energy marksman crate"
|
containername = "Energy marksman crate"
|
||||||
access = access_armory
|
access = access_armory
|
||||||
|
|
||||||
|
/datum/supply_packs/munitions/burstlaser
|
||||||
|
name = "Burst laser crate"
|
||||||
|
contains = list(/obj/item/weapon/gun/energy/gun/burst = 2)
|
||||||
|
cost = 50
|
||||||
|
containertype = /obj/structure/closet/crate/secure
|
||||||
|
containername = "Burst laser crate"
|
||||||
|
access = access_armory
|
||||||
|
|
||||||
/datum/supply_packs/munitions/ionweapons
|
/datum/supply_packs/munitions/ionweapons
|
||||||
name = "Electromagnetic weapons crate"
|
name = "Electromagnetic weapons crate"
|
||||||
contains = list(
|
contains = list(
|
||||||
@@ -85,6 +93,17 @@
|
|||||||
containername = "electromagnetic weapons crate"
|
containername = "electromagnetic weapons crate"
|
||||||
access = access_armory
|
access = access_armory
|
||||||
|
|
||||||
|
/datum/supply_packs/munitions/ionpistols
|
||||||
|
name = "Electromagnetic pistols crate"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/weapon/gun/energy/ionrifle/pistol = 2,
|
||||||
|
/obj/item/weapon/storage/box/emps
|
||||||
|
)
|
||||||
|
cost = 30
|
||||||
|
containertype = /obj/structure/closet/crate/secure
|
||||||
|
containername = "electromagnetic weapons crate"
|
||||||
|
access = access_armory
|
||||||
|
|
||||||
/datum/supply_packs/randomised/munitions/automatic
|
/datum/supply_packs/randomised/munitions/automatic
|
||||||
name = "Automatic weapon crate"
|
name = "Automatic weapon crate"
|
||||||
num_contained = 2
|
num_contained = 2
|
||||||
|
|||||||
@@ -159,3 +159,13 @@
|
|||||||
/obj/item/device/kit/paint/gygax/recitence
|
/obj/item/device/kit/paint/gygax/recitence
|
||||||
)
|
)
|
||||||
name = "Random Gygax exosuit modkit"
|
name = "Random Gygax exosuit modkit"
|
||||||
|
|
||||||
|
/datum/supply_packs/robotics/jumper_cables
|
||||||
|
name = "Jumper kit crate"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/device/defib_kit/jumper_kit = 4
|
||||||
|
)
|
||||||
|
cost = 30
|
||||||
|
containertype = /obj/structure/closet/crate/secure/science
|
||||||
|
containername = "Jumper kit crate"
|
||||||
|
access = access_robotics
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
name = "Exotic seeds crate"
|
name = "Exotic seeds crate"
|
||||||
contains = list(
|
contains = list(
|
||||||
/obj/item/seeds/replicapod = 2,
|
/obj/item/seeds/replicapod = 2,
|
||||||
|
/obj/item/seeds/ambrosiavulgarisseed = 2,
|
||||||
/obj/item/seeds/libertymycelium,
|
/obj/item/seeds/libertymycelium,
|
||||||
/obj/item/seeds/reishimycelium,
|
/obj/item/seeds/reishimycelium,
|
||||||
/obj/item/seeds/random = 6,
|
/obj/item/seeds/random = 6,
|
||||||
@@ -49,4 +50,3 @@
|
|||||||
containertype = /obj/structure/closet/crate/hydroponics
|
containertype = /obj/structure/closet/crate/hydroponics
|
||||||
containername = "Exotic Seeds crate"
|
containername = "Exotic Seeds crate"
|
||||||
access = access_hydroponics
|
access = access_hydroponics
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,16 @@
|
|||||||
item_cost = 5
|
item_cost = 5
|
||||||
path = /obj/item/weapon/storage/box/ambrosia
|
path = /obj/item/weapon/storage/box/ambrosia
|
||||||
|
|
||||||
|
/datum/uplink_item/item/medical/clotting
|
||||||
|
name = "Clotting Medicine injector"
|
||||||
|
item_cost = 10
|
||||||
|
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting
|
||||||
|
|
||||||
|
/datum/uplink_item/item/medical/bonemeds
|
||||||
|
name = "Bone Repair injector"
|
||||||
|
item_cost = 10
|
||||||
|
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed
|
||||||
|
|
||||||
/datum/uplink_item/item/medical/ambrosiadeusseeds
|
/datum/uplink_item/item/medical/ambrosiadeusseeds
|
||||||
name = "Box of 7x ambrosia deus seed packets"
|
name = "Box of 7x ambrosia deus seed packets"
|
||||||
item_cost = 10
|
item_cost = 10
|
||||||
|
|||||||
@@ -43,12 +43,15 @@
|
|||||||
/datum/antagonist/proc/create_radio(var/freq, var/mob/living/carbon/human/player)
|
/datum/antagonist/proc/create_radio(var/freq, var/mob/living/carbon/human/player)
|
||||||
var/obj/item/device/radio/R
|
var/obj/item/device/radio/R
|
||||||
|
|
||||||
if(freq == SYND_FREQ)
|
switch(freq)
|
||||||
|
if(SYND_FREQ)
|
||||||
R = new/obj/item/device/radio/headset/syndicate(player)
|
R = new/obj/item/device/radio/headset/syndicate(player)
|
||||||
|
if(RAID_FREQ)
|
||||||
|
R = new/obj/item/device/radio/headset/raider(player)
|
||||||
else
|
else
|
||||||
R = new/obj/item/device/radio/headset(player)
|
R = new/obj/item/device/radio/headset(player)
|
||||||
|
|
||||||
R.set_frequency(freq)
|
R.set_frequency(freq)
|
||||||
|
|
||||||
player.equip_to_slot_or_del(R, slot_l_ear)
|
player.equip_to_slot_or_del(R, slot_l_ear)
|
||||||
return R
|
return R
|
||||||
|
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ var/datum/antagonist/raider/raiders
|
|||||||
W.handle_item_insertion(id)
|
W.handle_item_insertion(id)
|
||||||
player.equip_to_slot_or_del(W, slot_wear_id)
|
player.equip_to_slot_or_del(W, slot_wear_id)
|
||||||
spawn_money(rand(50,150)*10,W)
|
spawn_money(rand(50,150)*10,W)
|
||||||
create_radio(SYND_FREQ, player)
|
create_radio(RAID_FREQ, player)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -305,7 +305,7 @@
|
|||||||
if(subject.isSynthetic())
|
if(subject.isSynthetic())
|
||||||
scantemp = "Error: Majority of subject is non-organic."
|
scantemp = "Error: Majority of subject is non-organic."
|
||||||
return
|
return
|
||||||
if (subject.suiciding == 1)
|
if (subject.suiciding)
|
||||||
scantemp = "Error: Subject's brain is not responding to scanning stimuli."
|
scantemp = "Error: Subject's brain is not responding to scanning stimuli."
|
||||||
return
|
return
|
||||||
if ((!subject.ckey) || (!subject.client))
|
if ((!subject.ckey) || (!subject.client))
|
||||||
|
|||||||
@@ -1,57 +1,104 @@
|
|||||||
/obj/machinery/pipelayer
|
/obj/machinery/pipelayer
|
||||||
|
|
||||||
name = "automatic pipe layer"
|
name = "automatic pipe layer"
|
||||||
icon = 'icons/obj/stationobjs.dmi'
|
icon = 'icons/obj/stationobjs.dmi'
|
||||||
icon_state = "pipe_d"
|
icon_state = "pipe_d"
|
||||||
density = 1
|
density = 1
|
||||||
var/turf/old_turf
|
circuit = /obj/item/weapon/circuitboard/pipelayer
|
||||||
var/old_dir
|
var/turf/old_turf // Last turf we were on.
|
||||||
var/on = 0
|
var/old_dir // Last direction we were facing.
|
||||||
var/a_dis = 0
|
var/on = 0 // Pipelaying online?
|
||||||
var/P_type = 0
|
var/a_dis = 0 // Auto-dismantling - If enabled it will remove floor tiles
|
||||||
var/P_type_t = ""
|
var/P_type = 0 // Currently selected pipe type
|
||||||
var/max_metal = 50
|
var/P_type_t = "" // Name of currently selected pipe type
|
||||||
var/metal = 10
|
var/max_metal = 50 // Max capacity for internal metal storage
|
||||||
var/obj/item/weapon/wrench/W
|
var/metal = 0 // Current amount in internal metal storage
|
||||||
|
var/pipe_cost = 0.25 // Cost in steel for each pipe.
|
||||||
|
var/obj/item/weapon/wrench/W // Internal wrench used for wrenching down the pipes
|
||||||
var/list/Pipes = list("regular pipes"=0,"scrubbers pipes"=31,"supply pipes"=29,"heat exchange pipes"=2)
|
var/list/Pipes = list("regular pipes"=0,"scrubbers pipes"=31,"supply pipes"=29,"heat exchange pipes"=2)
|
||||||
|
|
||||||
/obj/machinery/pipelayer/New()
|
/obj/machinery/pipelayer/New()
|
||||||
W = new(src)
|
W = new(src)
|
||||||
..()
|
..()
|
||||||
|
default_apply_parts()
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/obj/machinery/pipelayer/Destroy()
|
||||||
|
qdel(W)
|
||||||
|
W = null
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/machinery/pipelayer/RefreshParts()
|
||||||
|
var/mb_rating = 0
|
||||||
|
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
|
||||||
|
mb_rating += M.rating
|
||||||
|
max_metal = mb_rating * initial(max_metal)
|
||||||
|
|
||||||
|
/obj/machinery/pipelayer/dismantle()
|
||||||
|
eject_metal()
|
||||||
|
..()
|
||||||
|
|
||||||
|
// Whenever we move, if enabled try and lay pipe
|
||||||
/obj/machinery/pipelayer/Move(new_turf,M_Dir)
|
/obj/machinery/pipelayer/Move(new_turf,M_Dir)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
if(on && a_dis)
|
if(on && a_dis)
|
||||||
dismantleFloor(old_turf)
|
dismantleFloor(old_turf)
|
||||||
layPipe(old_turf,M_Dir,old_dir)
|
layPipe(old_turf, M_Dir, old_dir)
|
||||||
|
|
||||||
old_turf = new_turf
|
old_turf = new_turf
|
||||||
old_dir = turn(M_Dir,180)
|
old_dir = turn(M_Dir, 180)
|
||||||
|
|
||||||
/obj/machinery/pipelayer/attack_hand(mob/user as mob)
|
/obj/machinery/pipelayer/attack_hand(mob/user as mob)
|
||||||
if(!metal&&!on)
|
if(..())
|
||||||
|
return
|
||||||
|
if(panel_open)
|
||||||
|
if(metal < 1)
|
||||||
|
user << "\The [src] is empty."
|
||||||
|
return
|
||||||
|
var/answer = alert(user, "Do you want to eject all the metal in \the [src]?", , "Yes","No")
|
||||||
|
if(answer == "Yes")
|
||||||
|
var/amount_ejected = eject_metal()
|
||||||
|
user.visible_message("<span class='notice'>[user] removes [amount_ejected] sheet\s of [DEFAULT_WALL_MATERIAL] from the \the [src].</span>",
|
||||||
|
"<span class='notice'>You remove [amount_ejected] sheet\s of [DEFAULT_WALL_MATERIAL] from \the [src].</span>")
|
||||||
|
return
|
||||||
|
if(!metal && !on)
|
||||||
user << "<span class='warning'>\The [src] doesn't work without metal.</span>"
|
user << "<span class='warning'>\The [src] doesn't work without metal.</span>"
|
||||||
return
|
return
|
||||||
on=!on
|
on = !on
|
||||||
|
old_turf = get_turf(src)
|
||||||
|
old_dir = dir
|
||||||
user.visible_message("<span class='notice'>[user] has [!on?"de":""]activated \the [src].</span>", "<span class='notice'>You [!on?"de":""]activate \the [src].</span>")
|
user.visible_message("<span class='notice'>[user] has [!on?"de":""]activated \the [src].</span>", "<span class='notice'>You [!on?"de":""]activate \the [src].</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/pipelayer/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
/obj/machinery/pipelayer/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
||||||
|
if(default_deconstruction_screwdriver(user, W))
|
||||||
if (istype(W, /obj/item/weapon/wrench))
|
return
|
||||||
|
if(default_deconstruction_crowbar(user, W))
|
||||||
|
return
|
||||||
|
if(default_part_replacement(user, W))
|
||||||
|
return
|
||||||
|
if (!panel_open && iswrench(W))
|
||||||
P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes
|
P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes
|
||||||
P_type = Pipes[P_type_t]
|
P_type = Pipes[P_type_t]
|
||||||
user.visible_message("<span class='notice'>[user] has set \the [src] to manufacture [P_type_t].</span>", "<span class='notice'>You set \the [src] to manufacture [P_type_t].</span>")
|
user.visible_message("<span class='notice'>[user] has set \the [src] to manufacture [P_type_t].</span>", "<span class='notice'>You set \the [src] to manufacture [P_type_t].</span>")
|
||||||
return
|
return
|
||||||
|
if(!panel_open && iscrowbar(W))
|
||||||
if(istype(W, /obj/item/weapon/crowbar))
|
a_dis = !a_dis
|
||||||
a_dis=!a_dis
|
|
||||||
user.visible_message("<span class='notice'>[user] has [!a_dis?"de":""]activated auto-dismantling.</span>", "<span class='notice'>You [!a_dis?"de":""]activate auto-dismantling.</span>")
|
user.visible_message("<span class='notice'>[user] has [!a_dis?"de":""]activated auto-dismantling.</span>", "<span class='notice'>You [!a_dis?"de":""]activate auto-dismantling.</span>")
|
||||||
return
|
return
|
||||||
|
if(istype(W, /obj/item/pipe))
|
||||||
|
// NOTE - We must check for matter, otherwise the (free) pipe dispenser can be used to get infinite steel.
|
||||||
|
if(!W.matter || W.matter[DEFAULT_WALL_MATERIAL] < pipe_cost * SHEET_MATERIAL_AMOUNT)
|
||||||
|
user << "<span class='warning'>\The [W] doesn't contain enough [DEFAULT_WALL_MATERIAL] to recycle.</span>"
|
||||||
|
else if(metal + pipe_cost > max_metal)
|
||||||
|
user << "<span class='notice'>\The [src] is full.</span>"
|
||||||
|
else
|
||||||
|
user.drop_from_inventory(W)
|
||||||
|
metal += pipe_cost
|
||||||
|
usr << "<span class='notice'>You recycle \the [W].</span>"
|
||||||
|
qdel(W)
|
||||||
|
return
|
||||||
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL)
|
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL)
|
||||||
|
|
||||||
var/result = load_metal(W)
|
var/result = load_metal(W)
|
||||||
if(isnull(result))
|
if(isnull(result))
|
||||||
user << "<span class='warning'>Unable to load [W] - no metal found.</span>"
|
user << "<span class='warning'>Unable to load [W] - no metal found.</span>"
|
||||||
@@ -59,23 +106,8 @@
|
|||||||
user << "<span class='notice'>\The [src] is full.</span>"
|
user << "<span class='notice'>\The [src] is full.</span>"
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='notice'>[user] has loaded metal into \the [src].</span>", "<span class='notice'>You load metal into \the [src]</span>")
|
user.visible_message("<span class='notice'>[user] has loaded metal into \the [src].</span>", "<span class='notice'>You load metal into \the [src]</span>")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/screwdriver))
|
|
||||||
if(metal)
|
|
||||||
var/m = round(input(usr,"Please specify the amount of metal to remove","Remove metal",min(round(metal),50)) as num, 1)
|
|
||||||
m = min(m, 50)
|
|
||||||
m = min(m, round(metal))
|
|
||||||
m = round(m)
|
|
||||||
if(m)
|
|
||||||
use_metal(m)
|
|
||||||
var/obj/item/stack/material/steel/MM = new (get_turf(src))
|
|
||||||
MM.amount = m
|
|
||||||
user.visible_message("<span class='notice'>[user] removes [m] sheet\s of metal from the \the [src].</span>", "<span class='notice'>You remove [m] sheet\s of metal from \the [src]</span>")
|
|
||||||
else
|
|
||||||
user << "\The [src] is empty."
|
|
||||||
return
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/pipelayer/examine(mob/user)
|
/obj/machinery/pipelayer/examine(mob/user)
|
||||||
@@ -83,7 +115,7 @@
|
|||||||
user << "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated."
|
user << "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated."
|
||||||
|
|
||||||
/obj/machinery/pipelayer/proc/reset()
|
/obj/machinery/pipelayer/proc/reset()
|
||||||
on=0
|
on = 0
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/pipelayer/proc/load_metal(var/obj/item/stack/MM)
|
/obj/machinery/pipelayer/proc/load_metal(var/obj/item/stack/MM)
|
||||||
@@ -100,12 +132,22 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/pipelayer/proc/use_metal(amount)
|
/obj/machinery/pipelayer/proc/use_metal(amount)
|
||||||
if(!metal || metal<amount)
|
if(!metal || metal < amount)
|
||||||
visible_message("\The [src] deactivates as its metal source depletes.")
|
visible_message("\The [src] deactivates as its metal source depletes.")
|
||||||
return
|
return
|
||||||
metal-=amount
|
metal -= amount
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/machinery/pipelayer/proc/eject_metal()
|
||||||
|
var/amount_ejected = 0
|
||||||
|
while (metal >= 1)
|
||||||
|
var/material/M = get_material_by_name(DEFAULT_WALL_MATERIAL)
|
||||||
|
var/obj/item/stack/material/S = new M.stack_type(get_turf(src))
|
||||||
|
S.amount = min(metal, S.max_amount)
|
||||||
|
metal -= S.amount
|
||||||
|
amount_ejected += S.amount
|
||||||
|
return amount_ejected
|
||||||
|
|
||||||
/obj/machinery/pipelayer/proc/dismantleFloor(var/turf/new_turf)
|
/obj/machinery/pipelayer/proc/dismantleFloor(var/turf/new_turf)
|
||||||
if(istype(new_turf, /turf/simulated/floor))
|
if(istype(new_turf, /turf/simulated/floor))
|
||||||
var/turf/simulated/floor/T = new_turf
|
var/turf/simulated/floor/T = new_turf
|
||||||
@@ -114,11 +156,11 @@
|
|||||||
return new_turf.is_plating()
|
return new_turf.is_plating()
|
||||||
|
|
||||||
/obj/machinery/pipelayer/proc/layPipe(var/turf/w_turf,var/M_Dir,var/old_dir)
|
/obj/machinery/pipelayer/proc/layPipe(var/turf/w_turf,var/M_Dir,var/old_dir)
|
||||||
if(!on || !(M_Dir in list(1, 2, 4, 8)) || M_Dir==old_dir)
|
if(!on || !(M_Dir in list(NORTH, SOUTH, EAST, WEST)) || M_Dir==old_dir)
|
||||||
return reset()
|
return reset()
|
||||||
if(!use_metal(0.25))
|
if(!use_metal(pipe_cost))
|
||||||
return reset()
|
return reset()
|
||||||
var/fdirn = turn(M_Dir,180)
|
var/fdirn = turn(M_Dir, 180)
|
||||||
var/p_type
|
var/p_type
|
||||||
var/p_dir
|
var/p_dir
|
||||||
|
|
||||||
@@ -130,6 +172,8 @@
|
|||||||
p_dir=M_Dir
|
p_dir=M_Dir
|
||||||
|
|
||||||
var/obj/item/pipe/P = new (w_turf, pipe_type=p_type, dir=p_dir)
|
var/obj/item/pipe/P = new (w_turf, pipe_type=p_type, dir=p_dir)
|
||||||
|
// We used metal to make these, so should be reclaimable!
|
||||||
|
P.matter = list(DEFAULT_WALL_MATERIAL = pipe_cost * SHEET_MATERIAL_AMOUNT)
|
||||||
P.attackby(W , src)
|
P.attackby(W , src)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ obj/machinery/recharger
|
|||||||
idle_power_usage = 4
|
idle_power_usage = 4
|
||||||
active_power_usage = 40000 //40 kW
|
active_power_usage = 40000 //40 kW
|
||||||
var/obj/item/charging = null
|
var/obj/item/charging = null
|
||||||
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly)
|
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric)
|
||||||
var/icon_state_charged = "recharger2"
|
var/icon_state_charged = "recharger2"
|
||||||
var/icon_state_charging = "recharger1"
|
var/icon_state_charging = "recharger1"
|
||||||
var/icon_state_idle = "recharger0" //also when unpowered
|
var/icon_state_idle = "recharger0" //also when unpowered
|
||||||
@@ -33,19 +33,19 @@ obj/machinery/recharger
|
|||||||
|
|
||||||
if(allowed)
|
if(allowed)
|
||||||
if(charging)
|
if(charging)
|
||||||
user << "<span class='warning'>\A [charging] is already charging here.</span>"
|
to_chat(user, "<span class='warning'>\A [charging] is already charging here.</span>")
|
||||||
return
|
return
|
||||||
// Checks to make sure he's not in space doing it, and that the area got proper power.
|
// Checks to make sure he's not in space doing it, and that the area got proper power.
|
||||||
if(!powered())
|
if(!powered())
|
||||||
user << "<span class='warning'>The [name] blinks red as you try to insert the item!</span>"
|
to_chat(user, "<span class='warning'>The [name] blinks red as you try to insert the item!</span>")
|
||||||
return
|
return
|
||||||
if(istype(G, /obj/item/weapon/gun/energy))
|
if(istype(G, /obj/item/weapon/gun/energy))
|
||||||
var/obj/item/weapon/gun/energy/E = G
|
var/obj/item/weapon/gun/energy/E = G
|
||||||
if(!E.power_supply)
|
if(!E.power_supply)
|
||||||
user << "<span class='notice'>Your gun has no power cell.</span>"
|
to_chat(user, "<span class='notice'>Your gun has no power cell.</span>")
|
||||||
return
|
return
|
||||||
if(E.self_recharge)
|
if(E.self_recharge)
|
||||||
user << "<span class='notice'>Your gun has no recharge port.</span>"
|
to_chat(user, "<span class='notice'>Your gun has no recharge port.</span>")
|
||||||
return
|
return
|
||||||
if(istype(G, /obj/item/weapon/gun/energy/staff))
|
if(istype(G, /obj/item/weapon/gun/energy/staff))
|
||||||
return
|
return
|
||||||
@@ -65,16 +65,22 @@ obj/machinery/recharger
|
|||||||
if(!assembly.battery)
|
if(!assembly.battery)
|
||||||
to_chat(user, "<span class='warning'>The assembly doesn't have a power cell.</span>")
|
to_chat(user, "<span class='warning'>The assembly doesn't have a power cell.</span>")
|
||||||
return
|
return
|
||||||
|
if(istype(G, /obj/item/weapon/weldingtool/electric))
|
||||||
|
var/obj/item/weapon/weldingtool/electric/welder = G
|
||||||
|
if(!welder.power_supply)
|
||||||
|
to_chat(user, "<span class='notice'>Your welder has no power cell.</span>")
|
||||||
|
return
|
||||||
|
|
||||||
user.drop_item()
|
user.drop_item()
|
||||||
G.loc = src
|
G.loc = src
|
||||||
charging = G
|
charging = G
|
||||||
update_icon()
|
update_icon()
|
||||||
else if(portable && istype(G, /obj/item/weapon/wrench))
|
else if(portable && istype(G, /obj/item/weapon/wrench))
|
||||||
if(charging)
|
if(charging)
|
||||||
user << "<span class='warning'>Remove [charging] first!</span>"
|
to_chat(user, "<span class='warning'>Remove [charging] first!</span>")
|
||||||
return
|
return
|
||||||
anchored = !anchored
|
anchored = !anchored
|
||||||
user << "You [anchored ? "attached" : "detached"] the recharger."
|
to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.")
|
||||||
playsound(loc, 'sound/items/Ratchet.ogg', 75, 1)
|
playsound(loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||||
else if(default_deconstruction_screwdriver(user, G))
|
else if(default_deconstruction_screwdriver(user, G))
|
||||||
return
|
return
|
||||||
@@ -208,8 +214,8 @@ obj/machinery/recharger
|
|||||||
name = "wall recharger"
|
name = "wall recharger"
|
||||||
icon = 'icons/obj/stationobjs.dmi'
|
icon = 'icons/obj/stationobjs.dmi'
|
||||||
icon_state = "wrecharger0"
|
icon_state = "wrecharger0"
|
||||||
active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns and batons only) so make it more powerful
|
active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns, batons, and flashlights only) so make it more powerful
|
||||||
allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/weapon/cell/device)
|
allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device)
|
||||||
icon_state_charged = "wrecharger2"
|
icon_state_charged = "wrecharger2"
|
||||||
icon_state_charging = "wrecharger1"
|
icon_state_charging = "wrecharger1"
|
||||||
icon_state_idle = "wrecharger0"
|
icon_state_idle = "wrecharger0"
|
||||||
|
|||||||
@@ -374,6 +374,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
|||||||
blackbox.msg_deathsquad += blackbox_msg
|
blackbox.msg_deathsquad += blackbox_msg
|
||||||
if(SYND_FREQ)
|
if(SYND_FREQ)
|
||||||
blackbox.msg_syndicate += blackbox_msg
|
blackbox.msg_syndicate += blackbox_msg
|
||||||
|
if(RAID_FREQ)
|
||||||
|
blackbox.msg_raider += blackbox_msg
|
||||||
if(SUP_FREQ)
|
if(SUP_FREQ)
|
||||||
blackbox.msg_cargo += blackbox_msg
|
blackbox.msg_cargo += blackbox_msg
|
||||||
if(SRV_FREQ)
|
if(SRV_FREQ)
|
||||||
@@ -554,6 +556,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
|||||||
blackbox.msg_deathsquad += blackbox_msg
|
blackbox.msg_deathsquad += blackbox_msg
|
||||||
if(SYND_FREQ)
|
if(SYND_FREQ)
|
||||||
blackbox.msg_syndicate += blackbox_msg
|
blackbox.msg_syndicate += blackbox_msg
|
||||||
|
if(RAID_FREQ)
|
||||||
|
blackbox.msg_raider += blackbox_msg
|
||||||
if(SUP_FREQ)
|
if(SUP_FREQ)
|
||||||
blackbox.msg_cargo += blackbox_msg
|
blackbox.msg_cargo += blackbox_msg
|
||||||
if(SRV_FREQ)
|
if(SRV_FREQ)
|
||||||
|
|||||||
@@ -226,7 +226,7 @@
|
|||||||
delete_me = 1
|
delete_me = 1
|
||||||
|
|
||||||
/obj/effect/landmark/costume/cutewitch/New()
|
/obj/effect/landmark/costume/cutewitch/New()
|
||||||
new /obj/item/clothing/under/dress/sundress(src.loc)
|
new /obj/item/clothing/under/sundress(src.loc)
|
||||||
new /obj/item/clothing/head/witchwig(src.loc)
|
new /obj/item/clothing/head/witchwig(src.loc)
|
||||||
new /obj/item/weapon/staff/broom(src.loc)
|
new /obj/item/weapon/staff/broom(src.loc)
|
||||||
delete_me = 1
|
delete_me = 1
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
|
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
|
||||||
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/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/list/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
var/list/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
|
var/list/armorsoak = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
var/list/allowed = null //suit storage stuff.
|
var/list/allowed = null //suit storage stuff.
|
||||||
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
|
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
|
||||||
var/zoomdevicename = null //name used for message when binoculars/scope is used
|
var/zoomdevicename = null //name used for message when binoculars/scope is used
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "inteliCard"
|
name = "inteliCard"
|
||||||
icon = 'icons/obj/pda.dmi'
|
icon = 'icons/obj/pda.dmi'
|
||||||
icon_state = "aicard" // aicard-full
|
icon_state = "aicard" // aicard-full
|
||||||
item_state = "electronic"
|
item_state = "aicard"
|
||||||
w_class = ITEMSIZE_SMALL
|
w_class = ITEMSIZE_SMALL
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
show_messages = 0
|
show_messages = 0
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
var/state //0 off, 1 open, 2 working, 3 dead
|
var/state //0 off, 1 open, 2 working, 3 dead
|
||||||
var/uses = 2 //Calculates initial uses based on starting cell size
|
var/uses = 2 //Calculates initial uses based on starting cell size
|
||||||
|
var/use_on_synthetic = 0 //If 1, this is only useful on FBPs, if 0, this is only useful on fleshies
|
||||||
|
var/pad_name = "defib pads" //Just the name given for some cosmetic things
|
||||||
var/chance = 75 //Percent chance of working
|
var/chance = 75 //Percent chance of working
|
||||||
var/charge_cost //Set in New() based on uses
|
var/charge_cost //Set in New() based on uses
|
||||||
var/obj/item/weapon/cell/cell //The size is mostly irrelevant, see 'uses'
|
var/obj/item/weapon/cell/cell //The size is mostly irrelevant, see 'uses'
|
||||||
@@ -32,13 +34,31 @@
|
|||||||
if(istype(onto) && Adjacent(usr) && !usr.restrained() && !usr.stat)
|
if(istype(onto) && Adjacent(usr) && !usr.restrained() && !usr.stat)
|
||||||
var/mob/living/carbon/human/user = usr
|
var/mob/living/carbon/human/user = usr
|
||||||
//<--Feel free to code clothing checks right here
|
//<--Feel free to code clothing checks right here
|
||||||
user.visible_message("<span class='warning'>[user] begins applying defib pads to [onto].</span>",
|
if(can_defib(onto))
|
||||||
"<span class='warning'>You begin applying defib pads to [onto].</span>")
|
user.visible_message("<span class='warning'>[user] begins applying [pad_name] to [onto].</span>",
|
||||||
|
"<span class='warning'>You begin applying [pad_name] to [onto].</span>")
|
||||||
if(do_after(user, 100, onto))
|
if(do_after(user, 100, onto))
|
||||||
patient = onto
|
patient = onto
|
||||||
statechange(1,patient)
|
statechange(1,patient)
|
||||||
user.visible_message("<span class='warning'>[user] applies defib pads to [onto].</span>",
|
user.visible_message("<span class='warning'>[user] applies [pad_name] to [onto].</span>",
|
||||||
"<span class='warning'>You finish applying defib pads to [onto].</span>")
|
"<span class='warning'>You finish applying [pad_name] to [onto].</span>")
|
||||||
|
|
||||||
|
|
||||||
|
//can_defib() check is where all of the qualifying conditions should go
|
||||||
|
//Could probably toss in checks here for damage, organs, etc, but for now I'll leave it as just this
|
||||||
|
/obj/item/device/defib_kit/proc/can_defib(var/mob/living/carbon/human/target)
|
||||||
|
var/mob/living/carbon/human/user = usr
|
||||||
|
if(use_on_synthetic && !target.isSynthetic())
|
||||||
|
to_chat(user, "[src] isn't designed for organics!")
|
||||||
|
return 0
|
||||||
|
else if(!use_on_synthetic && target.isSynthetic())
|
||||||
|
to_chat(user, "[src] isn't designed for synthetics!")
|
||||||
|
return 0
|
||||||
|
else if(!target.isSynthetic() && ((world.time - target.timeofdeath) > (10 MINUTES)))//Can only revive organics within a few minutes
|
||||||
|
to_chat(user, "There is no spark of life in [target.name], they've been dead too long to revive this way.")
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/defib_kit/attackby(var/obj/item/A as obj, mob/living/user as mob)
|
/obj/item/device/defib_kit/attackby(var/obj/item/A as obj, mob/living/user as mob)
|
||||||
..()
|
..()
|
||||||
@@ -94,7 +114,7 @@
|
|||||||
|
|
||||||
//Patient moved too far
|
//Patient moved too far
|
||||||
if(patient && !(get_dist(src,patient) <= 1)) //You separated the kit and pads too far
|
if(patient && !(get_dist(src,patient) <= 1)) //You separated the kit and pads too far
|
||||||
audible_message("<span class='warning'>There's a clatter as the defib pads are yanked off of [patient].</span>")
|
audible_message("<span class='warning'>There is a clatter as the [pad_name] are yanked off of [patient].</span>")
|
||||||
statechange(0)
|
statechange(0)
|
||||||
patient = null
|
patient = null
|
||||||
return
|
return
|
||||||
@@ -111,7 +131,7 @@
|
|||||||
patient.visible_message("<span class='warning'>[patient] convulses!</span>")
|
patient.visible_message("<span class='warning'>[patient] convulses!</span>")
|
||||||
playsound(src.loc, 'sound/effects/sparks2.ogg', 75, 1)
|
playsound(src.loc, 'sound/effects/sparks2.ogg', 75, 1)
|
||||||
//Actual rezzing code
|
//Actual rezzing code
|
||||||
if(prob(chance) && ((world.time - patient.timeofdeath) < (10 MINUTES))) //Can only revive within a few minutes
|
if(prob(chance))
|
||||||
if(!patient.client && patient.mind) //Don't force the dead person to come back if they don't want to.
|
if(!patient.client && patient.mind) //Don't force the dead person to come back if they don't want to.
|
||||||
for(var/mob/observer/dead/ghost in player_list)
|
for(var/mob/observer/dead/ghost in player_list)
|
||||||
if(ghost.mind == patient.mind)
|
if(ghost.mind == patient.mind)
|
||||||
@@ -155,3 +175,10 @@
|
|||||||
break
|
break
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/item/device/defib_kit/jumper_kit
|
||||||
|
name = "jumper cable kit"
|
||||||
|
desc = "This Morpheus-branded FBP defib kit is a semi-automated model. Apply cables, step back, wait."
|
||||||
|
icon_state = "jumper_kit"
|
||||||
|
use_on_synthetic = 1
|
||||||
|
pad_name = "jumper cables"
|
||||||
|
|||||||
@@ -181,6 +181,38 @@
|
|||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/MouseDrop(obj/over_object as obj)
|
||||||
|
if(!canremove)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
|
||||||
|
|
||||||
|
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
|
||||||
|
return
|
||||||
|
|
||||||
|
if (!( istype(over_object, /obj/screen) ))
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
//makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
|
||||||
|
//there's got to be a better way of doing this.
|
||||||
|
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
|
||||||
|
return
|
||||||
|
|
||||||
|
if (( usr.restrained() ) || ( usr.stat ))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
|
||||||
|
return
|
||||||
|
|
||||||
|
switch(over_object.name)
|
||||||
|
if("r_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_r_hand(src)
|
||||||
|
if("l_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_l_hand(src)
|
||||||
|
src.add_fingerprint(usr)
|
||||||
|
|
||||||
/obj/item/device/flashlight/attackby(obj/item/weapon/W, mob/user as mob)
|
/obj/item/device/flashlight/attackby(obj/item/weapon/W, mob/user as mob)
|
||||||
if(power_use)
|
if(power_use)
|
||||||
if(istype(W, /obj/item/weapon/cell))
|
if(istype(W, /obj/item/weapon/cell))
|
||||||
@@ -210,6 +242,26 @@
|
|||||||
w_class = ITEMSIZE_TINY
|
w_class = ITEMSIZE_TINY
|
||||||
power_use = 0
|
power_use = 0
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/color //Default color is blue, just roll with it.
|
||||||
|
name = "blue flashlight"
|
||||||
|
desc = "A hand-held emergency light. This one is blue."
|
||||||
|
icon_state = "flashlight_blue"
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/color/red
|
||||||
|
name = "red flashlight"
|
||||||
|
desc = "A hand-held emergency light. This one is red."
|
||||||
|
icon_state = "flashlight_red"
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/color/orange
|
||||||
|
name = "orange flashlight"
|
||||||
|
desc = "A hand-held emergency light. This one is orange."
|
||||||
|
icon_state = "flashlight_orange"
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/color/yellow
|
||||||
|
name = "yellow flashlight"
|
||||||
|
desc = "A hand-held emergency light. This one is yellow."
|
||||||
|
icon_state = "flashlight_yellow"
|
||||||
|
|
||||||
/obj/item/device/flashlight/maglight
|
/obj/item/device/flashlight/maglight
|
||||||
name = "maglight"
|
name = "maglight"
|
||||||
desc = "A very, very heavy duty flashlight."
|
desc = "A very, very heavy duty flashlight."
|
||||||
|
|||||||
@@ -19,6 +19,12 @@
|
|||||||
origin_tech = list(TECH_ILLEGAL = 3)
|
origin_tech = list(TECH_ILLEGAL = 3)
|
||||||
syndie = 1//Signifies that it de-crypts Syndicate transmissions
|
syndie = 1//Signifies that it de-crypts Syndicate transmissions
|
||||||
|
|
||||||
|
/obj/item/device/encryptionkey/raider
|
||||||
|
icon_state = "cypherkey"
|
||||||
|
channels = list("Raider" = 1)
|
||||||
|
origin_tech = list(TECH_ILLEGAL = 2)
|
||||||
|
syndie = 1
|
||||||
|
|
||||||
/obj/item/device/encryptionkey/binary
|
/obj/item/device/encryptionkey/binary
|
||||||
icon_state = "cypherkey"
|
icon_state = "cypherkey"
|
||||||
translate_binary = 1
|
translate_binary = 1
|
||||||
|
|||||||
@@ -75,6 +75,15 @@
|
|||||||
syndie = 1
|
syndie = 1
|
||||||
ks1type = /obj/item/device/encryptionkey/syndicate
|
ks1type = /obj/item/device/encryptionkey/syndicate
|
||||||
|
|
||||||
|
/obj/item/device/radio/headset/raider
|
||||||
|
origin_tech = list(TECH_ILLEGAL = 2)
|
||||||
|
syndie = 1
|
||||||
|
ks1type = /obj/item/device/encryptionkey/raider
|
||||||
|
|
||||||
|
/obj/item/device/radio/headset/raider/initialize()
|
||||||
|
..()
|
||||||
|
set_frequency(RAID_FREQ)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/binary
|
/obj/item/device/radio/headset/binary
|
||||||
origin_tech = list(TECH_ILLEGAL = 3)
|
origin_tech = list(TECH_ILLEGAL = 3)
|
||||||
ks1type = /obj/item/device/encryptionkey/binary
|
ks1type = /obj/item/device/encryptionkey/binary
|
||||||
@@ -289,6 +298,7 @@
|
|||||||
desc = "The headset of the boss's boss."
|
desc = "The headset of the boss's boss."
|
||||||
icon_state = "com_headset"
|
icon_state = "com_headset"
|
||||||
item_state = "headset"
|
item_state = "headset"
|
||||||
|
centComm = 1
|
||||||
// freerange = 1
|
// freerange = 1
|
||||||
ks2type = /obj/item/device/encryptionkey/ert
|
ks2type = /obj/item/device/encryptionkey/ert
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
/obj/item/device/radio/intercom/specops
|
/obj/item/device/radio/intercom/specops
|
||||||
name = "\improper Spec Ops intercom"
|
name = "\improper Spec Ops intercom"
|
||||||
frequency = ERT_FREQ
|
frequency = ERT_FREQ
|
||||||
|
subspace_transmission = 1
|
||||||
|
centComm = 1
|
||||||
|
|
||||||
/obj/item/device/radio/intercom/department
|
/obj/item/device/radio/intercom/department
|
||||||
canhear_range = 5
|
canhear_range = 5
|
||||||
@@ -81,6 +83,17 @@
|
|||||||
..()
|
..()
|
||||||
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
|
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
|
||||||
|
|
||||||
|
/obj/item/device/radio/intercom/raider
|
||||||
|
name = "illicit intercom"
|
||||||
|
desc = "Pirate radio, but not in the usual sense of the word."
|
||||||
|
frequency = RAID_FREQ
|
||||||
|
subspace_transmission = 1
|
||||||
|
syndie = 1
|
||||||
|
|
||||||
|
/obj/item/device/radio/intercom/raider/New()
|
||||||
|
..()
|
||||||
|
internal_channels[num2text(RAID_FREQ)] = list(access_syndicate)
|
||||||
|
|
||||||
/obj/item/device/radio/intercom/Destroy()
|
/obj/item/device/radio/intercom/Destroy()
|
||||||
processing_objects -= src
|
processing_objects -= src
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ var/global/list/default_medbay_channels = list(
|
|||||||
var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h
|
var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h
|
||||||
var/subspace_transmission = 0
|
var/subspace_transmission = 0
|
||||||
var/syndie = 0//Holder to see if it's a syndicate encrypted radio
|
var/syndie = 0//Holder to see if it's a syndicate encrypted radio
|
||||||
|
var/centComm = 0//Holder to see if it's a CentComm encrypted radio
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
throw_speed = 2
|
throw_speed = 2
|
||||||
@@ -508,6 +509,9 @@ var/global/list/default_medbay_channels = list(
|
|||||||
if(freq in ANTAG_FREQS)
|
if(freq in ANTAG_FREQS)
|
||||||
if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys
|
if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys
|
||||||
return -1
|
return -1
|
||||||
|
if(freq in CENT_FREQS)
|
||||||
|
if(!(src.centComm))//Checks to see if it's allowed on that frequency, based on the encryption keys
|
||||||
|
return -1
|
||||||
if (!on)
|
if (!on)
|
||||||
return -1
|
return -1
|
||||||
if (!freq) //recieved on main frequency
|
if (!freq) //recieved on main frequency
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
name = "\improper T-ray scanner"
|
name = "\improper T-ray scanner"
|
||||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||||
icon_state = "t-ray0"
|
icon_state = "t-ray0"
|
||||||
|
item_state = "t-ray"
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
w_class = ITEMSIZE_SMALL
|
w_class = ITEMSIZE_SMALL
|
||||||
item_state = "electronic"
|
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
name = "robotic module reset board"
|
name = "robotic module reset board"
|
||||||
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
|
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
|
||||||
icon_state = "cyborg_upgrade1"
|
icon_state = "cyborg_upgrade1"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
|
|
||||||
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
|
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
name = "robot reclassification board"
|
name = "robot reclassification board"
|
||||||
desc = "Used to rename a cyborg."
|
desc = "Used to rename a cyborg."
|
||||||
icon_state = "cyborg_upgrade1"
|
icon_state = "cyborg_upgrade1"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
var/heldname = "default name"
|
var/heldname = "default name"
|
||||||
|
|
||||||
/obj/item/borg/upgrade/rename/attack_self(mob/user as mob)
|
/obj/item/borg/upgrade/rename/attack_self(mob/user as mob)
|
||||||
@@ -61,6 +63,7 @@
|
|||||||
name = "robot emergency restart module"
|
name = "robot emergency restart module"
|
||||||
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
|
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
|
||||||
icon_state = "cyborg_upgrade1"
|
icon_state = "cyborg_upgrade1"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
|
|
||||||
|
|
||||||
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
|
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
|
||||||
@@ -84,6 +87,7 @@
|
|||||||
name = "robotic VTEC Module"
|
name = "robotic VTEC Module"
|
||||||
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
|
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
|
||||||
icon_state = "cyborg_upgrade2"
|
icon_state = "cyborg_upgrade2"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
|
|
||||||
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
|
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
|
||||||
@@ -100,6 +104,7 @@
|
|||||||
name = "robotic Rapid Taser Cooling Module"
|
name = "robotic Rapid Taser Cooling Module"
|
||||||
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
|
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
|
||||||
icon_state = "cyborg_upgrade3"
|
icon_state = "cyborg_upgrade3"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
|
|
||||||
|
|
||||||
@@ -134,6 +139,7 @@
|
|||||||
name = "mining robot jetpack"
|
name = "mining robot jetpack"
|
||||||
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
|
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
|
||||||
icon_state = "cyborg_upgrade3"
|
icon_state = "cyborg_upgrade3"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
|
|
||||||
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
|
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
|
||||||
@@ -155,6 +161,7 @@
|
|||||||
name = "illegal equipment module"
|
name = "illegal equipment module"
|
||||||
desc = "Unlocks the hidden, deadlier functions of a robot"
|
desc = "Unlocks the hidden, deadlier functions of a robot"
|
||||||
icon_state = "cyborg_upgrade3"
|
icon_state = "cyborg_upgrade3"
|
||||||
|
item_state = "cyborg_upgrade"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
|
|
||||||
/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R)
|
/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R)
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
var/icon_on
|
var/icon_on
|
||||||
var/type_butt = null
|
var/type_butt = null
|
||||||
var/chem_volume = 0
|
var/chem_volume = 0
|
||||||
|
var/max_smoketime = 0 //Related to sprites
|
||||||
var/smoketime = 0
|
var/smoketime = 0
|
||||||
var/is_pipe = 0 //Prevents a runtime with pipes
|
var/is_pipe = 0 //Prevents a runtime with pipes
|
||||||
var/matchmes = "USER lights NAME with FLAME"
|
var/matchmes = "USER lights NAME with FLAME"
|
||||||
@@ -100,8 +101,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
..()
|
..()
|
||||||
flags |= NOREACT // so it doesn't react until you light it
|
flags |= NOREACT // so it doesn't react until you light it
|
||||||
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
|
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
|
||||||
|
if(smoketime && !max_smoketime)
|
||||||
|
max_smoketime = smoketime
|
||||||
|
|
||||||
/obj/item/clothing/mask/smokable/proc/smoke(amount)
|
/obj/item/clothing/mask/smokable/proc/smoke(amount)
|
||||||
|
if(smoketime > max_smoketime)
|
||||||
|
smoketime = max_smoketime
|
||||||
smoketime -= amount
|
smoketime -= amount
|
||||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||||
if(ishuman(loc))
|
if(ishuman(loc))
|
||||||
@@ -120,11 +125,29 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
if(location)
|
if(location)
|
||||||
location.hotspot_expose(700, 5)
|
location.hotspot_expose(700, 5)
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/smokable/update_icon()
|
||||||
|
if(lit)
|
||||||
|
icon_state = "[initial(icon_state)]_on"
|
||||||
|
item_state = "[initial(item_state)]_on"
|
||||||
|
else if(smoketime < max_smoketime)
|
||||||
|
if(is_pipe)
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
item_state = initial(item_state)
|
||||||
|
else
|
||||||
|
icon_state = "[initial(icon_state)]_burnt"
|
||||||
|
item_state = "[initial(item_state)]_burnt"
|
||||||
|
if(ismob(loc))
|
||||||
|
var/mob/living/M = loc
|
||||||
|
M.update_inv_wear_mask(0)
|
||||||
|
M.update_inv_l_hand(0)
|
||||||
|
M.update_inv_r_hand(1)
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/clothing/mask/smokable/examine(mob/user)
|
/obj/item/clothing/mask/smokable/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
if(is_pipe)
|
if(is_pipe)
|
||||||
return
|
return
|
||||||
var/smoke_percent = round((smoketime / initial(smoketime)) * 100)
|
var/smoke_percent = round((smoketime / max_smoketime) * 100)
|
||||||
switch(smoke_percent)
|
switch(smoke_percent)
|
||||||
if(90 to INFINITY)
|
if(90 to INFINITY)
|
||||||
user << "[src] is still fresh."
|
user << "[src] is still fresh."
|
||||||
@@ -156,15 +179,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
return
|
return
|
||||||
flags &= ~NOREACT // allowing reagents to react after being lit
|
flags &= ~NOREACT // allowing reagents to react after being lit
|
||||||
reagents.handle_reactions()
|
reagents.handle_reactions()
|
||||||
icon_state = icon_on
|
|
||||||
item_state = icon_on
|
|
||||||
if(ismob(loc))
|
|
||||||
var/mob/living/M = loc
|
|
||||||
M.update_inv_wear_mask(0)
|
|
||||||
M.update_inv_l_hand(0)
|
|
||||||
M.update_inv_r_hand(1)
|
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
T.visible_message(flavor_text)
|
T.visible_message(flavor_text)
|
||||||
|
update_icon()
|
||||||
set_light(2, 0.25, "#E38F46")
|
set_light(2, 0.25, "#E38F46")
|
||||||
processing_objects.Add(src)
|
processing_objects.Add(src)
|
||||||
|
|
||||||
@@ -205,14 +222,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/proc/quench()
|
/obj/item/clothing/mask/smokable/proc/quench()
|
||||||
lit = 0
|
lit = 0
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
icon_state = initial(icon_state)
|
update_icon()
|
||||||
item_state = initial(item_state)
|
|
||||||
|
|
||||||
if(ismob(loc))
|
|
||||||
var/mob/living/M = loc
|
|
||||||
M.update_inv_wear_mask(0)
|
|
||||||
M.update_inv_l_hand(0)
|
|
||||||
M.update_inv_r_hand(1)
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/smokable/attack(mob/living/carbon/human/H, mob/user, def_zone)
|
/obj/item/clothing/mask/smokable/attack(mob/living/carbon/human/H, mob/user, def_zone)
|
||||||
if(lit && H == user && istype(H))
|
if(lit && H == user && istype(H))
|
||||||
@@ -259,15 +269,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/cigarette
|
/obj/item/clothing/mask/smokable/cigarette
|
||||||
name = "cigarette"
|
name = "cigarette"
|
||||||
desc = "A roll of tobacco and nicotine."
|
desc = "A roll of tobacco and nicotine."
|
||||||
icon_state = "cigoff"
|
icon_state = "cig"
|
||||||
|
item_state = "cig"
|
||||||
throw_speed = 0.5
|
throw_speed = 0.5
|
||||||
item_state = "cigoff"
|
|
||||||
w_class = ITEMSIZE_TINY
|
w_class = ITEMSIZE_TINY
|
||||||
slot_flags = SLOT_EARS | SLOT_MASK
|
slot_flags = SLOT_EARS | SLOT_MASK
|
||||||
attack_verb = list("burnt", "singed")
|
attack_verb = list("burnt", "singed")
|
||||||
icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
|
|
||||||
type_butt = /obj/item/weapon/cigbutt
|
type_butt = /obj/item/weapon/cigbutt
|
||||||
chem_volume = 15
|
chem_volume = 15
|
||||||
|
max_smoketime = 300
|
||||||
smoketime = 300
|
smoketime = 300
|
||||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||||
lightermes = "<span class='notice'>USER manages to light their NAME with FLAME.</span>"
|
lightermes = "<span class='notice'>USER manages to light their NAME with FLAME.</span>"
|
||||||
@@ -315,11 +325,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/cigarette/cigar
|
/obj/item/clothing/mask/smokable/cigarette/cigar
|
||||||
name = "premium cigar"
|
name = "premium cigar"
|
||||||
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
|
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
|
||||||
icon_state = "cigar2off"
|
icon_state = "cigar2"
|
||||||
icon_on = "cigar2on"
|
|
||||||
type_butt = /obj/item/weapon/cigbutt/cigarbutt
|
type_butt = /obj/item/weapon/cigbutt/cigarbutt
|
||||||
throw_speed = 0.5
|
throw_speed = 0.5
|
||||||
item_state = "cigaroff"
|
item_state = "cigar"
|
||||||
|
max_smoketime = 1500
|
||||||
smoketime = 1500
|
smoketime = 1500
|
||||||
chem_volume = 20
|
chem_volume = 20
|
||||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||||
@@ -331,14 +341,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
||||||
name = "\improper Cohiba Robusto cigar"
|
name = "\improper Cohiba Robusto cigar"
|
||||||
desc = "There's little more you could want from a cigar."
|
desc = "There's little more you could want from a cigar."
|
||||||
icon_state = "cigar2off"
|
icon_state = "cigar2"
|
||||||
icon_on = "cigar2on"
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
/obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
||||||
name = "premium Havanian cigar"
|
name = "premium Havanian cigar"
|
||||||
desc = "A cigar fit for only the best of the best."
|
desc = "A cigar fit for only the best of the best."
|
||||||
icon_state = "cigar2off"
|
icon_state = "cigar2"
|
||||||
icon_on = "cigar2on"
|
max_smoketime = 7200
|
||||||
smoketime = 7200
|
smoketime = 7200
|
||||||
chem_volume = 30
|
chem_volume = 30
|
||||||
|
|
||||||
@@ -375,9 +384,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/pipe
|
/obj/item/clothing/mask/smokable/pipe
|
||||||
name = "smoking pipe"
|
name = "smoking pipe"
|
||||||
desc = "A pipe, for smoking. Made of fine, stained cherry wood."
|
desc = "A pipe, for smoking. Made of fine, stained cherry wood."
|
||||||
icon_state = "pipeoff"
|
icon_state = "pipe"
|
||||||
item_state = "pipeoff"
|
item_state = "pipe"
|
||||||
icon_on = "pipeon" //Note - these are in masks.dmi
|
|
||||||
smoketime = 0
|
smoketime = 0
|
||||||
chem_volume = 50
|
chem_volume = 50
|
||||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||||
@@ -429,6 +437,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
if (smoketime)
|
if (smoketime)
|
||||||
user << "<span class='notice'>[src] is already packed.</span>"
|
user << "<span class='notice'>[src] is already packed.</span>"
|
||||||
return
|
return
|
||||||
|
max_smoketime = 1000
|
||||||
smoketime = 1000
|
smoketime = 1000
|
||||||
if(G.reagents)
|
if(G.reagents)
|
||||||
G.reagents.trans_to_obj(src, G.reagents.total_volume)
|
G.reagents.trans_to_obj(src, G.reagents.total_volume)
|
||||||
@@ -455,9 +464,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
/obj/item/clothing/mask/smokable/pipe/cobpipe
|
/obj/item/clothing/mask/smokable/pipe/cobpipe
|
||||||
name = "corn cob pipe"
|
name = "corn cob pipe"
|
||||||
desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters."
|
desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters."
|
||||||
icon_state = "cobpipeoff"
|
icon_state = "cobpipe"
|
||||||
item_state = "cobpipeoff"
|
item_state = "cobpipe"
|
||||||
icon_on = "cobpipeon" //Note - these are in masks.dmi
|
|
||||||
chem_volume = 35
|
chem_volume = 35
|
||||||
|
|
||||||
/////////
|
/////////
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
name = "circuit board"
|
name = "circuit board"
|
||||||
icon = 'icons/obj/module.dmi'
|
icon = 'icons/obj/module.dmi'
|
||||||
icon_state = "id_mod"
|
icon_state = "id_mod"
|
||||||
item_state = "electronic"
|
|
||||||
origin_tech = list(TECH_DATA = 2)
|
origin_tech = list(TECH_DATA = 2)
|
||||||
density = 0
|
density = 0
|
||||||
anchored = 0
|
anchored = 0
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#ifndef T_BOARD
|
||||||
|
#error T_BOARD macro is not defined but we need it!
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/obj/item/weapon/circuitboard/pipelayer
|
||||||
|
name = T_BOARD("pipe layer")
|
||||||
|
build_path = /obj/machinery/pipelayer
|
||||||
|
board_type = new /datum/frame/frame_types/machine
|
||||||
|
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/weapon/stock_parts/motor = 1,
|
||||||
|
/obj/item/weapon/stock_parts/gear = 1,
|
||||||
|
/obj/item/weapon/stock_parts/matter_bin = 1)
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
name = "exosuit circuit board"
|
name = "exosuit circuit board"
|
||||||
icon = 'icons/obj/module.dmi'
|
icon = 'icons/obj/module.dmi'
|
||||||
icon_state = "std_mod"
|
icon_state = "std_mod"
|
||||||
item_state = "electronic"
|
|
||||||
board_type = "other"
|
board_type = "other"
|
||||||
|
|
||||||
/obj/item/weapon/circuitboard/mecha/ripley
|
/obj/item/weapon/circuitboard/mecha/ripley
|
||||||
|
|||||||
@@ -452,23 +452,27 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
|||||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||||
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
|
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
|
||||||
//give the syndies a bit of stealth
|
//give the syndies a bit of stealth
|
||||||
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
|
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "General")
|
||||||
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
|
// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
|
||||||
|
// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
|
||||||
else
|
else
|
||||||
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
|
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "General")
|
||||||
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
|
// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
|
||||||
|
// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
|
||||||
qdel(a)
|
qdel(a)
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
if ("emp")
|
if ("emp")
|
||||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||||
var/name = prob(50) ? t.name : pick(teleportlocs)
|
var/name = prob(50) ? t.name : pick(teleportlocs)
|
||||||
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
|
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "General")
|
||||||
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
|
// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
|
||||||
|
// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
|
||||||
qdel(a)
|
qdel(a)
|
||||||
else
|
else
|
||||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||||
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
|
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "General")
|
||||||
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
|
// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
|
||||||
|
// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
|
||||||
qdel(a)
|
qdel(a)
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
|
|
||||||
|
|||||||
@@ -68,40 +68,3 @@
|
|||||||
qdel(src)
|
qdel(src)
|
||||||
user.put_in_hands(finished)
|
user.put_in_hands(finished)
|
||||||
update_icon(user)
|
update_icon(user)
|
||||||
|
|
||||||
/obj/item/woodcirclet
|
|
||||||
name = "wood circlet"
|
|
||||||
desc = "A small wood circlet for making a flower crown."
|
|
||||||
icon = 'icons/obj/buildingobject.dmi'
|
|
||||||
icon_state = "woodcirclet"
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
|
|
||||||
/obj/item/woodcirclet/attackby(obj/item/W as obj, mob/user as mob)
|
|
||||||
var/obj/item/complete
|
|
||||||
if(istype(W,/obj/item/seeds/poppyseed))
|
|
||||||
user << "You attach the poppy to the circlet and create a beautiful flower crown."
|
|
||||||
complete = new /obj/item/clothing/head/poppy_crown(get_turf(user))
|
|
||||||
user.drop_from_inventory(W)
|
|
||||||
user.drop_from_inventory(src)
|
|
||||||
qdel(W)
|
|
||||||
qdel(src)
|
|
||||||
user.put_in_hands(complete)
|
|
||||||
return
|
|
||||||
else if(istype(W,/obj/item/seeds/sunflowerseed))
|
|
||||||
user << "You attach the sunflower to the circlet and create a beautiful flower crown."
|
|
||||||
complete = new /obj/item/clothing/head/sunflower_crown(get_turf(user))
|
|
||||||
user.drop_from_inventory(W)
|
|
||||||
user.drop_from_inventory(src)
|
|
||||||
qdel(W)
|
|
||||||
qdel(src)
|
|
||||||
user.put_in_hands(complete)
|
|
||||||
return
|
|
||||||
else if(istype(W,/obj/item/seeds/lavenderseed))
|
|
||||||
user << "You attach the lavender to the circlet and create a beautiful flower crown."
|
|
||||||
complete = new /obj/item/clothing/head/lavender_crown(get_turf(user))
|
|
||||||
user.drop_from_inventory(W)
|
|
||||||
user.drop_from_inventory(src)
|
|
||||||
qdel(W)
|
|
||||||
qdel(src)
|
|
||||||
user.put_in_hands(complete)
|
|
||||||
return
|
|
||||||
@@ -35,6 +35,13 @@
|
|||||||
icon_state = "switchblade"
|
icon_state = "switchblade"
|
||||||
unbreakable = 1
|
unbreakable = 1
|
||||||
|
|
||||||
|
/obj/item/weapon/material/butterfly/boxcutter
|
||||||
|
name = "box cutter"
|
||||||
|
desc = "A thin, inexpensive razor-blade knife designed to open cardboard boxes."
|
||||||
|
icon_state = "boxcutter"
|
||||||
|
force_divisor = 0.1 // 6 when wielded with hardness 60 (steel)
|
||||||
|
thrown_force_divisor = 0.2 // 4 when thrown with weight 20 (steel)
|
||||||
|
|
||||||
/obj/item/weapon/material/butterfly/attack_self(mob/user)
|
/obj/item/weapon/material/butterfly/attack_self(mob/user)
|
||||||
active = !active
|
active = !active
|
||||||
if(active)
|
if(active)
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
if(affecting.take_damage(force, 0))
|
if(affecting.take_damage(force, 0))
|
||||||
H.UpdateDamageIcon()
|
H.UpdateDamageIcon()
|
||||||
H.updatehealth()
|
H.updatehealth()
|
||||||
if(affecting.can_feel_pain())
|
if(affecting.organ_can_feel_pain())
|
||||||
H.Weaken(3)
|
H.Weaken(3)
|
||||||
return
|
return
|
||||||
check -= picked
|
check -= picked
|
||||||
|
|||||||
@@ -126,6 +126,7 @@
|
|||||||
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
|
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
|
||||||
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
||||||
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
|
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
|
||||||
|
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
|
||||||
new /obj/item/stack/medical/splint(src)
|
new /obj/item/stack/medical/splint(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -150,6 +151,19 @@
|
|||||||
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/firstaid/clotting
|
||||||
|
name = "clotting kit"
|
||||||
|
desc = "Contains chemicals to stop bleeding."
|
||||||
|
max_storage_space = ITEMSIZE_COST_SMALL * 7
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/firstaid/clotting/New()
|
||||||
|
..()
|
||||||
|
if (empty)
|
||||||
|
return
|
||||||
|
for(var/i = 1 to 8)
|
||||||
|
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
|
||||||
|
return
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pill Bottles
|
* Pill Bottles
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -28,6 +28,38 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/item/weapon/melee/baton/MouseDrop(obj/over_object as obj)
|
||||||
|
if(!canremove)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
|
||||||
|
|
||||||
|
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
|
||||||
|
return
|
||||||
|
|
||||||
|
if (!( istype(over_object, /obj/screen) ))
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
//makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
|
||||||
|
//there's got to be a better way of doing this.
|
||||||
|
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
|
||||||
|
return
|
||||||
|
|
||||||
|
if (( usr.restrained() ) || ( usr.stat ))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
|
||||||
|
return
|
||||||
|
|
||||||
|
switch(over_object.name)
|
||||||
|
if("r_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_r_hand(src)
|
||||||
|
if("l_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_l_hand(src)
|
||||||
|
src.add_fingerprint(usr)
|
||||||
|
|
||||||
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
|
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
|
||||||
..()
|
..()
|
||||||
bcell = new/obj/item/weapon/cell/device/weapon(src)
|
bcell = new/obj/item/weapon/cell/device/weapon(src)
|
||||||
|
|||||||
@@ -172,6 +172,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/weldingtool/examine(mob/user)
|
/obj/item/weapon/weldingtool/examine(mob/user)
|
||||||
if(..(user, 0))
|
if(..(user, 0))
|
||||||
|
if(max_fuel)
|
||||||
user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
|
user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
|
||||||
|
|
||||||
|
|
||||||
@@ -234,12 +235,16 @@
|
|||||||
|
|
||||||
/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity)
|
/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity)
|
||||||
if(!proximity) return
|
if(!proximity) return
|
||||||
if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !src.welding)
|
if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !welding)
|
||||||
|
if(!welding && max_fuel)
|
||||||
O.reagents.trans_to_obj(src, max_fuel)
|
O.reagents.trans_to_obj(src, max_fuel)
|
||||||
user << "<span class='notice'>Welder refueled</span>"
|
user << "<span class='notice'>Welder refueled</span>"
|
||||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||||
return
|
return
|
||||||
else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && src.welding)
|
else if(!welding)
|
||||||
|
user << "<span class='notice'>[src] doesn't use fuel.</span>"
|
||||||
|
return
|
||||||
|
else
|
||||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
|
message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
|
||||||
log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
|
log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
|
||||||
user << "<span class='danger'>You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.</span>"
|
user << "<span class='danger'>You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.</span>"
|
||||||
@@ -286,12 +291,44 @@
|
|||||||
|
|
||||||
/obj/item/weapon/weldingtool/update_icon()
|
/obj/item/weapon/weldingtool/update_icon()
|
||||||
..()
|
..()
|
||||||
icon_state = welding ? "welder1" : "welder"
|
icon_state = welding ? "[icon_state]1" : "[initial(icon_state)]"
|
||||||
var/mob/M = loc
|
var/mob/M = loc
|
||||||
if(istype(M))
|
if(istype(M))
|
||||||
M.update_inv_l_hand()
|
M.update_inv_l_hand()
|
||||||
M.update_inv_r_hand()
|
M.update_inv_r_hand()
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/MouseDrop(obj/over_object as obj)
|
||||||
|
if(!canremove)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
|
||||||
|
|
||||||
|
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
|
||||||
|
return
|
||||||
|
|
||||||
|
if (!( istype(over_object, /obj/screen) ))
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
//makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
|
||||||
|
//there's got to be a better way of doing this.
|
||||||
|
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
|
||||||
|
return
|
||||||
|
|
||||||
|
if (( usr.restrained() ) || ( usr.stat ))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
|
||||||
|
return
|
||||||
|
|
||||||
|
switch(over_object.name)
|
||||||
|
if("r_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_r_hand(src)
|
||||||
|
if("l_hand")
|
||||||
|
usr.u_equip(src)
|
||||||
|
usr.put_in_l_hand(src)
|
||||||
|
src.add_fingerprint(usr)
|
||||||
|
|
||||||
//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1)
|
//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1)
|
||||||
//so that the welding tool updates accordingly
|
//so that the welding tool updates accordingly
|
||||||
/obj/item/weapon/weldingtool/proc/setWelding(var/set_welding, var/mob/M)
|
/obj/item/weapon/weldingtool/proc/setWelding(var/set_welding, var/mob/M)
|
||||||
@@ -313,7 +350,8 @@
|
|||||||
processing_objects |= src
|
processing_objects |= src
|
||||||
else
|
else
|
||||||
if(M)
|
if(M)
|
||||||
M << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
var/msg = max_fuel ? "welding fuel" : "charge"
|
||||||
|
M << "<span class='notice'>You need more [msg] to complete this task.</span>"
|
||||||
return
|
return
|
||||||
//Otherwise
|
//Otherwise
|
||||||
else if(!set_welding && welding)
|
else if(!set_welding && welding)
|
||||||
@@ -370,7 +408,6 @@
|
|||||||
user.disabilities &= ~NEARSIGHTED
|
user.disabilities &= ~NEARSIGHTED
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/weldingtool/largetank
|
/obj/item/weapon/weldingtool/largetank
|
||||||
name = "industrial welding tool"
|
name = "industrial welding tool"
|
||||||
max_fuel = 40
|
max_fuel = 40
|
||||||
@@ -405,6 +442,113 @@
|
|||||||
if(get_fuel() < max_fuel && nextrefueltick < world.time)
|
if(get_fuel() < max_fuel && nextrefueltick < world.time)
|
||||||
nextrefueltick = world.time + 10
|
nextrefueltick = world.time + 10
|
||||||
reagents.add_reagent("fuel", 1)
|
reagents.add_reagent("fuel", 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Electric/Arc Welder
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric //AND HIS WELDING WAS ELECTRIC
|
||||||
|
name = "electric welding tool"
|
||||||
|
icon_state = "arcwelder"
|
||||||
|
max_fuel = 0 //We'll handle the consumption later.
|
||||||
|
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
|
||||||
|
var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
|
||||||
|
var/cell_type = /obj/item/weapon/cell/device
|
||||||
|
var/use_external_power = 0 //If in a borg or hardsuit, this needs to = 1
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/New()
|
||||||
|
..()
|
||||||
|
if(cell_type == null)
|
||||||
|
update_icon()
|
||||||
|
else if(cell_type)
|
||||||
|
power_supply = new cell_type(src)
|
||||||
|
else
|
||||||
|
power_supply = new /obj/item/weapon/cell/device(src)
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/unloaded/New()
|
||||||
|
cell_type = null
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/examine(mob/user)
|
||||||
|
..()
|
||||||
|
if(power_supply)
|
||||||
|
user << text("\icon[] [] has [] charge left.", src, src.name, get_fuel())
|
||||||
|
else
|
||||||
|
user << text("\icon[] [] has power for no power cell!", src, src.name)
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/get_fuel()
|
||||||
|
if(use_external_power)
|
||||||
|
var/obj/item/weapon/cell/external = get_external_power_supply()
|
||||||
|
return external.charge
|
||||||
|
else if(power_supply)
|
||||||
|
return power_supply.charge
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
|
||||||
|
if(!welding)
|
||||||
|
return 0
|
||||||
|
if(get_fuel() >= amount)
|
||||||
|
power_supply.checked_use(charge_cost)
|
||||||
|
if(use_external_power)
|
||||||
|
var/obj/item/weapon/cell/external = get_external_power_supply()
|
||||||
|
if(!external || !external.use(charge_cost)) //Take power from the borg...
|
||||||
|
power_supply.give(charge_cost) //Give it back to the cell.
|
||||||
|
if(M)
|
||||||
|
eyecheck(M)
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
if(M)
|
||||||
|
M << "<span class='notice'>You need more energy to complete this task.</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/attack_hand(mob/user as mob)
|
||||||
|
if(user.get_inactive_hand() == src)
|
||||||
|
if(power_supply)
|
||||||
|
power_supply.update_icon()
|
||||||
|
user.put_in_hands(power_supply)
|
||||||
|
power_supply = null
|
||||||
|
user << "<span class='notice'>You remove the cell from the [src].</span>"
|
||||||
|
setWelding(0)
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/attackby(obj/item/weapon/W, mob/user as mob)
|
||||||
|
if(istype(W, /obj/item/weapon/cell))
|
||||||
|
if(istype(W, /obj/item/weapon/cell/device))
|
||||||
|
if(!power_supply)
|
||||||
|
user.drop_item()
|
||||||
|
W.loc = src
|
||||||
|
power_supply = W
|
||||||
|
user << "<span class='notice'>You install a cell in \the [src].</span>"
|
||||||
|
update_icon()
|
||||||
|
else
|
||||||
|
user << "<span class='notice'>\The [src] already has a cell.</span>"
|
||||||
|
else
|
||||||
|
user << "<span class='notice'>\The [src] cannot use that type of cell.</span>"
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/proc/get_external_power_supply()
|
||||||
|
if(isrobot(src.loc))
|
||||||
|
var/mob/living/silicon/robot/R = src.loc
|
||||||
|
return R.cell
|
||||||
|
if(istype(src.loc, /obj/item/rig_module))
|
||||||
|
var/obj/item/rig_module/module = src.loc
|
||||||
|
if(module.holder && module.holder.wearer)
|
||||||
|
var/mob/living/carbon/human/H = module.holder.wearer
|
||||||
|
if(istype(H) && H.back)
|
||||||
|
var/obj/item/weapon/rig/suit = H.back
|
||||||
|
if(istype(suit))
|
||||||
|
return suit.cell
|
||||||
|
return null
|
||||||
|
|
||||||
|
/obj/item/weapon/weldingtool/electric/mounted
|
||||||
|
use_external_power = 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Crowbar
|
* Crowbar
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -77,11 +77,15 @@
|
|||||||
|
|
||||||
//armour
|
//armour
|
||||||
var/blocked = L.run_armor_check(target_zone, "melee")
|
var/blocked = L.run_armor_check(target_zone, "melee")
|
||||||
|
var/soaked = L.get_armor_soak(target_zone, "melee")
|
||||||
|
|
||||||
if(blocked >= 100)
|
if(blocked >= 100)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!L.apply_damage(30, BRUTE, target_zone, blocked, used_weapon=src))
|
if(soaked >= 30)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!L.apply_damage(30, BRUTE, target_zone, blocked, soaked, used_weapon=src))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
//trap the victim in place
|
//trap the victim in place
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
return 0
|
return 0
|
||||||
if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
|
if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
|
||||||
return 0
|
return 0
|
||||||
if (issilicon(user))
|
if (isAI(user))
|
||||||
user << "<span class='notice'>You need hands for this.</span>"
|
user << "<span class='notice'>You need hands for this.</span>"
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
/obj/structure/closet/chefcloset/New()
|
/obj/structure/closet/chefcloset/New()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/under/dress/sundress(src)
|
new /obj/item/clothing/under/sundress(src)
|
||||||
new /obj/item/clothing/under/waiter(src)
|
new /obj/item/clothing/under/waiter(src)
|
||||||
new /obj/item/clothing/under/waiter(src)
|
new /obj/item/clothing/under/waiter(src)
|
||||||
new /obj/item/device/radio/headset/headset_service(src)
|
new /obj/item/device/radio/headset/headset_service(src)
|
||||||
|
|||||||
@@ -150,20 +150,22 @@
|
|||||||
|
|
||||||
var/def_zone = ran_zone()
|
var/def_zone = ran_zone()
|
||||||
var/blocked = occupant.run_armor_check(def_zone, "melee")
|
var/blocked = occupant.run_armor_check(def_zone, "melee")
|
||||||
|
var/soaked = occupant.get_armor_soak(def_zone, "melee")
|
||||||
occupant.throw_at(A, 3, propelled)
|
occupant.throw_at(A, 3, propelled)
|
||||||
occupant.apply_effect(6, STUN, blocked)
|
occupant.apply_effect(6, STUN, blocked)
|
||||||
occupant.apply_effect(6, WEAKEN, blocked)
|
occupant.apply_effect(6, WEAKEN, blocked)
|
||||||
occupant.apply_effect(6, STUTTER, blocked)
|
occupant.apply_effect(6, STUTTER, blocked)
|
||||||
occupant.apply_damage(10, BRUTE, def_zone, blocked)
|
occupant.apply_damage(10, BRUTE, def_zone, blocked, soaked)
|
||||||
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||||
if(istype(A, /mob/living))
|
if(istype(A, /mob/living))
|
||||||
var/mob/living/victim = A
|
var/mob/living/victim = A
|
||||||
def_zone = ran_zone()
|
def_zone = ran_zone()
|
||||||
blocked = victim.run_armor_check(def_zone, "melee")
|
blocked = victim.run_armor_check(def_zone, "melee")
|
||||||
|
soaked = victim.get_armor_soak(def_zone, "melee")
|
||||||
victim.apply_effect(6, STUN, blocked)
|
victim.apply_effect(6, STUN, blocked)
|
||||||
victim.apply_effect(6, WEAKEN, blocked)
|
victim.apply_effect(6, WEAKEN, blocked)
|
||||||
victim.apply_effect(6, STUTTER, blocked)
|
victim.apply_effect(6, STUTTER, blocked)
|
||||||
victim.apply_damage(10, BRUTE, def_zone, blocked)
|
victim.apply_damage(10, BRUTE, def_zone, blocked, soaked)
|
||||||
occupant.visible_message("<span class='danger'>[occupant] crashed into \the [A]!</span>")
|
occupant.visible_message("<span class='danger'>[occupant] crashed into \the [A]!</span>")
|
||||||
|
|
||||||
/obj/structure/bed/chair/office/light
|
/obj/structure/bed/chair/office/light
|
||||||
|
|||||||
@@ -149,20 +149,22 @@
|
|||||||
|
|
||||||
var/def_zone = ran_zone()
|
var/def_zone = ran_zone()
|
||||||
var/blocked = occupant.run_armor_check(def_zone, "melee")
|
var/blocked = occupant.run_armor_check(def_zone, "melee")
|
||||||
|
var/soaked = occupant.get_armor_soak(def_zone, "melee")
|
||||||
occupant.throw_at(A, 3, propelled)
|
occupant.throw_at(A, 3, propelled)
|
||||||
occupant.apply_effect(6, STUN, blocked)
|
occupant.apply_effect(6, STUN, blocked)
|
||||||
occupant.apply_effect(6, WEAKEN, blocked)
|
occupant.apply_effect(6, WEAKEN, blocked)
|
||||||
occupant.apply_effect(6, STUTTER, blocked)
|
occupant.apply_effect(6, STUTTER, blocked)
|
||||||
occupant.apply_damage(10, BRUTE, def_zone)
|
occupant.apply_damage(10, BRUTE, def_zone, soaked)
|
||||||
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||||
if(istype(A, /mob/living))
|
if(istype(A, /mob/living))
|
||||||
var/mob/living/victim = A
|
var/mob/living/victim = A
|
||||||
def_zone = ran_zone()
|
def_zone = ran_zone()
|
||||||
blocked = victim.run_armor_check(def_zone, "melee")
|
blocked = victim.run_armor_check(def_zone, "melee")
|
||||||
|
soaked = victim.get_armor_soak(def_zone, "melee")
|
||||||
victim.apply_effect(6, STUN, blocked)
|
victim.apply_effect(6, STUN, blocked)
|
||||||
victim.apply_effect(6, WEAKEN, blocked)
|
victim.apply_effect(6, WEAKEN, blocked)
|
||||||
victim.apply_effect(6, STUTTER, blocked)
|
victim.apply_effect(6, STUTTER, blocked)
|
||||||
victim.apply_damage(10, BRUTE, def_zone)
|
victim.apply_damage(10, BRUTE, def_zone, soaked)
|
||||||
if(pulling)
|
if(pulling)
|
||||||
occupant.visible_message("<span class='danger'>[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!</span>")
|
occupant.visible_message("<span class='danger'>[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!</span>")
|
||||||
|
|
||||||
|
|||||||
@@ -178,3 +178,5 @@
|
|||||||
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
||||||
else if( istype(M, /mob/living/silicon/robot ))
|
else if( istype(M, /mob/living/silicon/robot ))
|
||||||
new /obj/effect/decal/cleanable/blood/oil(src)
|
new /obj/effect/decal/cleanable/blood/oil(src)
|
||||||
|
else if(ishuman(M))
|
||||||
|
add_blood(M)
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
|
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
|
||||||
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
||||||
return
|
return
|
||||||
suiciding = 1
|
suiciding = 15
|
||||||
does_not_breathe = 0 //Prevents ling-suicide zombies, or something
|
does_not_breathe = 0 //Prevents ling-suicide zombies, or something
|
||||||
var/obj/item/held_item = get_active_hand()
|
var/obj/item/held_item = get_active_hand()
|
||||||
if(held_item)
|
if(held_item)
|
||||||
@@ -73,10 +73,16 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
log_and_message_admins("[key_name(src)] commited suicide")
|
log_and_message_admins("[key_name(src)] commited suicide")
|
||||||
viewers(src) << pick("<span class='danger'>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</span>", \
|
|
||||||
|
var/suicidemsg
|
||||||
|
suicidemsg = pick("<span class='danger'>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</span>", \
|
||||||
"<span class='danger'>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</span>", \
|
"<span class='danger'>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</span>", \
|
||||||
"<span class='danger'>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</span>", \
|
"<span class='danger'>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</span>", \
|
||||||
"<span class='danger'>[src] is holding \his breath! It looks like \he's trying to commit suicide.</span>")
|
"<span class='danger'>[src] is holding \his breath! It looks like \he's trying to commit suicide.</span>")
|
||||||
|
if(isSynthetic())
|
||||||
|
suicidemsg = "<span class='danger'>[src] is attempting to switch \his power off! It looks like \he's trying to commit suicide.</span>"
|
||||||
|
visible_message(suicidemsg)
|
||||||
|
|
||||||
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
|
||||||
@@ -172,7 +178,7 @@
|
|||||||
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
|
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
|
||||||
|
|
||||||
if(confirm == "Yes")
|
if(confirm == "Yes")
|
||||||
suiciding = 1
|
suiciding = 30
|
||||||
setOxyLoss(100)
|
setOxyLoss(100)
|
||||||
adjustBruteLoss(100 - getBruteLoss())
|
adjustBruteLoss(100 - getBruteLoss())
|
||||||
setToxLoss(100)
|
setToxLoss(100)
|
||||||
|
|||||||
@@ -218,6 +218,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
++ind
|
++ind
|
||||||
if(ind > 1)
|
if(ind > 1)
|
||||||
. += ", "
|
. += ", "
|
||||||
|
switch(organ_name)
|
||||||
|
if ("brain")
|
||||||
|
. += "\tPositronic [organ_name]"
|
||||||
|
else
|
||||||
. += "\tSynthetic [organ_name]"
|
. += "\tSynthetic [organ_name]"
|
||||||
else if(status == "digital")
|
else if(status == "digital")
|
||||||
++ind
|
++ind
|
||||||
@@ -612,15 +616,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
organ = O_LUNGS
|
organ = O_LUNGS
|
||||||
if("Brain")
|
if("Brain")
|
||||||
if(pref.organ_data[BP_HEAD] != "cyborg")
|
if(pref.organ_data[BP_HEAD] != "cyborg")
|
||||||
user << "<span class='warning'>You may only select an assisted or synthetic brain if you have a full prosthetic body.</span>"
|
user << "<span class='warning'>You may only select a cybernetic or synthetic brain if you have a full prosthetic body.</span>"
|
||||||
return
|
return
|
||||||
organ = "brain"
|
organ = "brain"
|
||||||
|
|
||||||
var/list/organ_choices = list("Normal","Assisted","Mechanical")
|
var/list/organ_choices = list("Normal")
|
||||||
if(pref.organ_data[BP_TORSO] == "cyborg")
|
if(pref.organ_data[BP_TORSO] == "cyborg")
|
||||||
organ_choices -= "Normal"
|
organ_choices -= "Normal"
|
||||||
if(organ_name == "Brain")
|
if(organ_name == "Brain")
|
||||||
organ_choices += "Digital"
|
organ_choices += "Cybernetic"
|
||||||
|
organ_choices += "Positronic"
|
||||||
|
organ_choices += "Drone"
|
||||||
|
else
|
||||||
|
organ_choices += "Assisted"
|
||||||
|
organ_choices += "Mechanical"
|
||||||
|
else
|
||||||
|
organ_choices += "Assisted"
|
||||||
|
organ_choices += "Mechanical"
|
||||||
|
|
||||||
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
|
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
|
||||||
if(!new_state) return
|
if(!new_state) return
|
||||||
@@ -630,10 +642,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
pref.organ_data[organ] = null
|
pref.organ_data[organ] = null
|
||||||
if("Assisted")
|
if("Assisted")
|
||||||
pref.organ_data[organ] = "assisted"
|
pref.organ_data[organ] = "assisted"
|
||||||
if("Mechanical")
|
if("Cybernetic")
|
||||||
|
pref.organ_data[organ] = "assisted"
|
||||||
|
if ("Mechanical")
|
||||||
pref.organ_data[organ] = "mechanical"
|
pref.organ_data[organ] = "mechanical"
|
||||||
if("Digital")
|
if("Drone")
|
||||||
pref.organ_data[organ] = "digital"
|
pref.organ_data[organ] = "digital"
|
||||||
|
if("Positronic")
|
||||||
|
pref.organ_data[organ] = "mechanical"
|
||||||
|
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["disabilities"])
|
else if(href_list["disabilities"])
|
||||||
|
|||||||
@@ -356,6 +356,22 @@
|
|||||||
..()
|
..()
|
||||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
|
|
||||||
/datum/gear/suit/miscellaneous/redandblackjacket
|
/datum/gear/suit/miscellaneous/sec_dep_jacket
|
||||||
display_name = "red and black jacket"
|
display_name = "department jacket, security"
|
||||||
path = /obj/item/clothing/suit/storage/toggle/redandblackjacket
|
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
|
||||||
|
|
||||||
|
/datum/gear/suit/miscellaneous/engi_dep_jacket
|
||||||
|
display_name = "department jacket, engineering"
|
||||||
|
path = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket
|
||||||
|
|
||||||
|
/datum/gear/suit/miscellaneous/supply_dep_jacket
|
||||||
|
display_name = "department jacket, supply"
|
||||||
|
path = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket
|
||||||
|
|
||||||
|
/datum/gear/suit/miscellaneous/sci_dep_jacket
|
||||||
|
display_name = "department jacket, science"
|
||||||
|
path = /obj/item/clothing/suit/storage/toggle/sci_dep_jacket
|
||||||
|
|
||||||
|
/datum/gear/suit/miscellaneous/med_dep_jacket
|
||||||
|
display_name = "department jacket, medical"
|
||||||
|
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||||
@@ -273,11 +273,11 @@
|
|||||||
|
|
||||||
/datum/gear/uniform/sundress
|
/datum/gear/uniform/sundress
|
||||||
display_name = "sundress"
|
display_name = "sundress"
|
||||||
path = /obj/item/clothing/under/dress/sundress
|
path = /obj/item/clothing/under/sundress
|
||||||
|
|
||||||
/datum/gear/uniform/sundress/white
|
/datum/gear/uniform/sundress/white
|
||||||
display_name = "sundress, white"
|
display_name = "sundress, white"
|
||||||
path = /obj/item/clothing/under/dress/sundress/white
|
path = /obj/item/clothing/under/sundress_white
|
||||||
|
|
||||||
/datum/gear/uniform/dress_fire
|
/datum/gear/uniform/dress_fire
|
||||||
display_name = "flame dress"
|
display_name = "flame dress"
|
||||||
@@ -446,10 +446,10 @@
|
|||||||
display_name = "jumpsuit, hephaestus"
|
display_name = "jumpsuit, hephaestus"
|
||||||
path = /obj/item/clothing/under/hephaestus
|
path = /obj/item/clothing/under/hephaestus
|
||||||
|
|
||||||
/datum/gear/uniform/yoga
|
/datum/gear/uniform/yogapants
|
||||||
display_name = "yoga pants"
|
display_name = "yoga pants"
|
||||||
path = /obj/item/clothing/under/pants/yoga
|
path = /obj/item/clothing/under/pants/yogapants
|
||||||
|
|
||||||
/datum/gear/uniform/yoga/New()
|
/datum/gear/uniform/yogapants/New()
|
||||||
..()
|
..()
|
||||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
@@ -46,6 +46,22 @@
|
|||||||
display_name = "flashlight"
|
display_name = "flashlight"
|
||||||
path = /obj/item/device/flashlight
|
path = /obj/item/device/flashlight
|
||||||
|
|
||||||
|
/datum/gear/utility/flashlight_blue
|
||||||
|
display_name = "flashlight, blue"
|
||||||
|
path = /obj/item/device/flashlight/color
|
||||||
|
|
||||||
|
/datum/gear/utility/flashlight_orange
|
||||||
|
display_name = "flashlight, orange"
|
||||||
|
path = /obj/item/device/flashlight/color/orange
|
||||||
|
|
||||||
|
/datum/gear/utility/flashlight_red
|
||||||
|
display_name = "flashlight, red"
|
||||||
|
path = /obj/item/device/flashlight/color/red
|
||||||
|
|
||||||
|
/datum/gear/utility/flashlight_yellow
|
||||||
|
display_name = "flashlight, yellow"
|
||||||
|
path = /obj/item/device/flashlight/color/yellow
|
||||||
|
|
||||||
/datum/gear/utility/maglight
|
/datum/gear/utility/maglight
|
||||||
display_name = "flashlight, maglight"
|
display_name = "flashlight, maglight"
|
||||||
path = /obj/item/device/flashlight/maglight
|
path = /obj/item/device/flashlight/maglight
|
||||||
|
|||||||
@@ -39,32 +39,24 @@
|
|||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
|
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
|
||||||
|
|
||||||
/datum/gear/ears/skrell/cloth/male
|
/datum/gear/ears/skrell/cloth/male
|
||||||
display_name = "male headtail cloth selection (Skrell)"
|
display_name = "male headtail cloth (Skrell)"
|
||||||
path = /obj/item/clothing/ears/skrell/cloth_male
|
path = /obj/item/clothing/ears/skrell/cloth_male/black
|
||||||
sort_category = "Xenowear"
|
sort_category = "Xenowear"
|
||||||
whitelisted = "Skrell"
|
whitelisted = "Skrell"
|
||||||
|
|
||||||
/datum/gear/ears/skrell/cloth/male/New()
|
/datum/gear/ears/skrell/cloth/male/New()
|
||||||
..()
|
..()
|
||||||
var/list/clothtypes = list()
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_male))
|
|
||||||
var/obj/item/clothing/ears/skrell/cloth_male/cloth = cloth_style
|
|
||||||
clothtypes[initial(cloth.name)] = cloth
|
|
||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
|
||||||
|
|
||||||
/datum/gear/ears/skrell/cloth/female
|
/datum/gear/ears/skrell/cloth/female
|
||||||
display_name = "female headtail cloth selection (Skrell)"
|
display_name = "female headtail cloth (Skrell)"
|
||||||
path = /obj/item/clothing/ears/skrell/cloth_female
|
path = /obj/item/clothing/ears/skrell/cloth_female/black
|
||||||
sort_category = "Xenowear"
|
sort_category = "Xenowear"
|
||||||
whitelisted = "Skrell"
|
whitelisted = "Skrell"
|
||||||
|
|
||||||
/datum/gear/ears/skrell/cloth/female/New()
|
/datum/gear/ears/skrell/cloth/female/New()
|
||||||
..()
|
..()
|
||||||
var/list/clothtypes = list()
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_female))
|
|
||||||
var/obj/item/clothing/ears/skrell/cloth_female/cloth = cloth_style
|
|
||||||
clothtypes[initial(cloth.name)] = cloth
|
|
||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
|
||||||
|
|
||||||
/datum/gear/ears/skrell/colored/band
|
/datum/gear/ears/skrell/colored/band
|
||||||
display_name = "Colored bands (Skrell)"
|
display_name = "Colored bands (Skrell)"
|
||||||
|
|||||||
@@ -525,10 +525,6 @@
|
|||||||
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||||
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||||
sprite_sheets = list(
|
sprite_sheets = list(
|
||||||
"Human" = 'icons/mob/uniforms/uniform.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/uniform.dmi',
|
|
||||||
"Tajaran" = 'icons/mob/species/tajaran/uniforms/uniform.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/uniform.dmi',
|
|
||||||
"Teshari" = 'icons/mob/species/seromi/uniform.dmi',
|
"Teshari" = 'icons/mob/species/seromi/uniform.dmi',
|
||||||
"Vox" = 'icons/mob/species/vox/uniform.dmi'
|
"Vox" = 'icons/mob/species/vox/uniform.dmi'
|
||||||
)
|
)
|
||||||
@@ -539,6 +535,9 @@
|
|||||||
valid_accessory_slots = list("utility","armband","decor","over")
|
valid_accessory_slots = list("utility","armband","decor","over")
|
||||||
restricted_accessory_slots = list("utility", "armband")
|
restricted_accessory_slots = list("utility", "armband")
|
||||||
|
|
||||||
|
var/icon/rolled_down_icon = 'icons/mob/uniform_rolled_down.dmi'
|
||||||
|
var/icon/rolled_down_sleeves_icon = 'icons/mob/uniform_sleeves_rolled.dmi'
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/under/attack_hand(var/mob/user)
|
/obj/item/clothing/under/attack_hand(var/mob/user)
|
||||||
if(accessories && accessories.len)
|
if(accessories && accessories.len)
|
||||||
@@ -558,7 +557,7 @@
|
|||||||
|
|
||||||
//autodetect rollability
|
//autodetect rollability
|
||||||
if(rolled_down < 0)
|
if(rolled_down < 0)
|
||||||
if((worn_state + "_d_s") in icon_states('icons/mob/uniform.dmi'))
|
if(("[worn_state]_d_s" in icon_states(INV_W_UNIFORM_DEF_ICON)) || ("[worn_state]_s" in icon_states(rolled_down_icon)) || ("[worn_state]_d_s" in icon_states(icon_override)))
|
||||||
rolled_down = 0
|
rolled_down = 0
|
||||||
|
|
||||||
/obj/item/clothing/under/proc/update_rolldown_status()
|
/obj/item/clothing/under/proc/update_rolldown_status()
|
||||||
@@ -573,11 +572,13 @@
|
|||||||
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||||
else if(item_icons && item_icons[slot_w_uniform_str])
|
else if(item_icons && item_icons[slot_w_uniform_str])
|
||||||
under_icon = item_icons[slot_w_uniform_str]
|
under_icon = item_icons[slot_w_uniform_str]
|
||||||
|
else if ("[worn_state]_s" in icon_states(rolled_down_icon))
|
||||||
|
under_icon = rolled_down_icon
|
||||||
else
|
else
|
||||||
under_icon = INV_W_UNIFORM_DEF_ICON
|
under_icon = INV_W_UNIFORM_DEF_ICON
|
||||||
|
|
||||||
// The _s is because the icon update procs append it.
|
// The _s is because the icon update procs append it.
|
||||||
if(("[worn_state]_d_s") in icon_states(under_icon))
|
if((under_icon == rolled_down_icon && "[worn_state]_s" in icon_states(under_icon)) || ("[worn_state]_d_s" in icon_states(under_icon)))
|
||||||
if(rolled_down != 1)
|
if(rolled_down != 1)
|
||||||
rolled_down = 0
|
rolled_down = 0
|
||||||
else
|
else
|
||||||
@@ -596,11 +597,13 @@
|
|||||||
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||||
else if(item_icons && item_icons[slot_w_uniform_str])
|
else if(item_icons && item_icons[slot_w_uniform_str])
|
||||||
under_icon = item_icons[slot_w_uniform_str]
|
under_icon = item_icons[slot_w_uniform_str]
|
||||||
|
else if ("[worn_state]_s" in icon_states(rolled_down_sleeves_icon))
|
||||||
|
under_icon = rolled_down_sleeves_icon
|
||||||
else
|
else
|
||||||
under_icon = INV_W_UNIFORM_DEF_ICON
|
under_icon = INV_W_UNIFORM_DEF_ICON
|
||||||
|
|
||||||
// The _s is because the icon update procs append it.
|
// The _s is because the icon update procs append it.
|
||||||
if(("[worn_state]_r_s") in icon_states(under_icon))
|
if((under_icon == rolled_down_sleeves_icon && "[worn_state]_s" in icon_states(under_icon)) || ("[worn_state]_r_s" in icon_states(under_icon)))
|
||||||
if(rolled_sleeves != 1)
|
if(rolled_sleeves != 1)
|
||||||
rolled_sleeves = 0
|
rolled_sleeves = 0
|
||||||
else
|
else
|
||||||
@@ -682,10 +685,17 @@
|
|||||||
if(rolled_down)
|
if(rolled_down)
|
||||||
body_parts_covered = initial(body_parts_covered)
|
body_parts_covered = initial(body_parts_covered)
|
||||||
body_parts_covered &= ~(UPPER_TORSO|ARMS)
|
body_parts_covered &= ~(UPPER_TORSO|ARMS)
|
||||||
|
if("[worn_state]_s" in icon_states(rolled_down_icon))
|
||||||
|
icon_override = rolled_down_icon
|
||||||
|
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||||
|
else
|
||||||
item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
|
item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
|
||||||
|
|
||||||
usr << "<span class='notice'>You roll down your [src].</span>"
|
usr << "<span class='notice'>You roll down your [src].</span>"
|
||||||
else
|
else
|
||||||
body_parts_covered = initial(body_parts_covered)
|
body_parts_covered = initial(body_parts_covered)
|
||||||
|
if(icon_override == rolled_down_icon)
|
||||||
|
icon_override = initial(icon_override)
|
||||||
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||||
usr << "<span class='notice'>You roll up your [src].</span>"
|
usr << "<span class='notice'>You roll up your [src].</span>"
|
||||||
update_clothing_icon()
|
update_clothing_icon()
|
||||||
@@ -708,10 +718,16 @@
|
|||||||
rolled_sleeves = !rolled_sleeves
|
rolled_sleeves = !rolled_sleeves
|
||||||
if(rolled_sleeves)
|
if(rolled_sleeves)
|
||||||
body_parts_covered &= ~(ARMS)
|
body_parts_covered &= ~(ARMS)
|
||||||
|
if("[worn_state]_s" in icon_states(rolled_down_sleeves_icon))
|
||||||
|
icon_override = rolled_down_sleeves_icon
|
||||||
|
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||||
|
else
|
||||||
item_state_slots[slot_w_uniform_str] = "[worn_state]_r"
|
item_state_slots[slot_w_uniform_str] = "[worn_state]_r"
|
||||||
usr << "<span class='notice'>You roll up your [src]'s sleeves.</span>"
|
usr << "<span class='notice'>You roll up your [src]'s sleeves.</span>"
|
||||||
else
|
else
|
||||||
body_parts_covered = initial(body_parts_covered)
|
body_parts_covered = initial(body_parts_covered)
|
||||||
|
if(icon_override == rolled_down_sleeves_icon)
|
||||||
|
icon_override = initial(icon_override)
|
||||||
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||||
usr << "<span class='notice'>You roll down your [src]'s sleeves.</span>"
|
usr << "<span class='notice'>You roll down your [src]'s sleeves.</span>"
|
||||||
update_clothing_icon()
|
update_clothing_icon()
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ BLIND // can't see anything
|
|||||||
name = "welding goggles"
|
name = "welding goggles"
|
||||||
desc = "Protects the eyes from welders, approved by the mad scientist association."
|
desc = "Protects the eyes from welders, approved by the mad scientist association."
|
||||||
icon_state = "welding-g"
|
icon_state = "welding-g"
|
||||||
item_state_slots = list(slot_r_hand_str = "g", slot_l_hand_str = "g")
|
item_state_slots = list(slot_r_hand_str = "welding-g", slot_l_hand_str = "welding-g")
|
||||||
action_button_name = "Flip Welding Goggles"
|
action_button_name = "Flip Welding Goggles"
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 1000)
|
matter = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 1000)
|
||||||
var/up = 0
|
var/up = 0
|
||||||
|
|||||||
56
code/modules/clothing/head/flowercrowns.dm
Normal file
56
code/modules/clothing/head/flowercrowns.dm
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/obj/item/clothing/head/woodcirclet
|
||||||
|
name = "wood circlet"
|
||||||
|
desc = "A small wood circlet for making a flower crown."
|
||||||
|
icon_state = "woodcirclet"
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/head/woodcirclet/attackby(obj/item/W as obj, mob/user as mob)
|
||||||
|
var/obj/item/complete
|
||||||
|
if(istype(W,/obj/item/seeds/poppyseed))
|
||||||
|
user << "You attach the poppy to the circlet and create a beautiful flower crown."
|
||||||
|
complete = new /obj/item/clothing/head/poppy_crown(get_turf(user))
|
||||||
|
user.drop_from_inventory(W)
|
||||||
|
user.drop_from_inventory(src)
|
||||||
|
qdel(W)
|
||||||
|
qdel(src)
|
||||||
|
user.put_in_hands(complete)
|
||||||
|
return
|
||||||
|
else if(istype(W,/obj/item/seeds/sunflowerseed))
|
||||||
|
user << "You attach the sunflower to the circlet and create a beautiful flower crown."
|
||||||
|
complete = new /obj/item/clothing/head/sunflower_crown(get_turf(user))
|
||||||
|
user.drop_from_inventory(W)
|
||||||
|
user.drop_from_inventory(src)
|
||||||
|
qdel(W)
|
||||||
|
qdel(src)
|
||||||
|
user.put_in_hands(complete)
|
||||||
|
return
|
||||||
|
else if(istype(W,/obj/item/seeds/lavenderseed))
|
||||||
|
user << "You attach the lavender to the circlet and create a beautiful flower crown."
|
||||||
|
complete = new /obj/item/clothing/head/lavender_crown(get_turf(user))
|
||||||
|
user.drop_from_inventory(W)
|
||||||
|
user.drop_from_inventory(src)
|
||||||
|
qdel(W)
|
||||||
|
qdel(src)
|
||||||
|
user.put_in_hands(complete)
|
||||||
|
return
|
||||||
|
|
||||||
|
//Flower crowns
|
||||||
|
|
||||||
|
/obj/item/clothing/head/sunflower_crown
|
||||||
|
name = "sunflower crown"
|
||||||
|
desc = "A flower crown weaved with sunflowers."
|
||||||
|
icon_state = "sunflower_crown"
|
||||||
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/head/lavender_crown
|
||||||
|
name = "lavender crown"
|
||||||
|
desc = "A flower crown weaved with lavender."
|
||||||
|
icon_state = "lavender_crown"
|
||||||
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/head/poppy_crown
|
||||||
|
name = "poppy crown"
|
||||||
|
desc = "A flower crown weaved with poppies."
|
||||||
|
icon_state = "poppy_crown"
|
||||||
|
body_parts_covered = 0
|
||||||
@@ -347,24 +347,3 @@
|
|||||||
desc = "A wide-brimmed hat popularly worn in Mexico."
|
desc = "A wide-brimmed hat popularly worn in Mexico."
|
||||||
icon_state = "sombrero"
|
icon_state = "sombrero"
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
|
||||||
//Flower crowns
|
|
||||||
|
|
||||||
/obj/item/clothing/head/sunflower_crown
|
|
||||||
name = "sunflower crown"
|
|
||||||
desc = "A flower crown weaved with sunflowers."
|
|
||||||
icon_state = "sunflower_crown"
|
|
||||||
body_parts_covered = 0
|
|
||||||
|
|
||||||
/obj/item/clothing/head/lavender_crown
|
|
||||||
name = "lavender crown"
|
|
||||||
desc = "A flower crown weaved with lavender."
|
|
||||||
icon_state = "lavender_crown"
|
|
||||||
body_parts_covered = 0
|
|
||||||
|
|
||||||
/obj/item/clothing/head/poppy_crown
|
|
||||||
name = "poppy crown"
|
|
||||||
desc = "A flower crown weaved with poppies."
|
|
||||||
icon_state = "poppy_crown"
|
|
||||||
body_parts_covered = 0
|
|
||||||
@@ -157,6 +157,7 @@
|
|||||||
list("antibiotics", "spaceacillin", 0, 20),
|
list("antibiotics", "spaceacillin", 0, 20),
|
||||||
list("antitoxins", "anti_toxin", 0, 20),
|
list("antitoxins", "anti_toxin", 0, 20),
|
||||||
list("nutrients", "glucose", 0, 80),
|
list("nutrients", "glucose", 0, 80),
|
||||||
|
list("clotting agent", "myelamine", 0, 80),
|
||||||
list("hyronalin", "hyronalin", 0, 20),
|
list("hyronalin", "hyronalin", 0, 20),
|
||||||
list("radium", "radium", 0, 20)
|
list("radium", "radium", 0, 20)
|
||||||
)
|
)
|
||||||
@@ -246,6 +247,7 @@
|
|||||||
list("hyperzine", "hyperzine", 0, 30),
|
list("hyperzine", "hyperzine", 0, 30),
|
||||||
list("oxycodone", "oxycodone", 0, 30),
|
list("oxycodone", "oxycodone", 0, 30),
|
||||||
list("nutrients", "glucose", 0, 80),
|
list("nutrients", "glucose", 0, 80),
|
||||||
|
list("clotting agent", "myelamine", 0, 80)
|
||||||
)
|
)
|
||||||
|
|
||||||
interface_name = "combat chem dispenser"
|
interface_name = "combat chem dispenser"
|
||||||
@@ -263,6 +265,20 @@
|
|||||||
interface_name = "mounted chem injector"
|
interface_name = "mounted chem injector"
|
||||||
interface_desc = "Dispenses loaded chemicals via an arm-mounted injector."
|
interface_desc = "Dispenses loaded chemicals via an arm-mounted injector."
|
||||||
|
|
||||||
|
/obj/item/rig_module/chem_dispenser/injector/advanced
|
||||||
|
|
||||||
|
charges = list(
|
||||||
|
list("tricordrazine", "tricordrazine", 0, 80),
|
||||||
|
list("tramadol", "tramadol", 0, 80),
|
||||||
|
list("dexalin plus", "dexalinp", 0, 80),
|
||||||
|
list("antibiotics", "spaceacillin", 0, 80),
|
||||||
|
list("antitoxins", "anti_toxin", 0, 80),
|
||||||
|
list("nutrients", "glucose", 0, 80),
|
||||||
|
list("hyronalin", "hyronalin", 0, 80),
|
||||||
|
list("radium", "radium", 0, 80),
|
||||||
|
list("clotting agent", "myelamine", 0, 80)
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/rig_module/voice
|
/obj/item/rig_module/voice
|
||||||
|
|
||||||
name = "hardsuit voice synthesiser"
|
name = "hardsuit voice synthesiser"
|
||||||
|
|||||||
@@ -161,6 +161,7 @@
|
|||||||
piece.permeability_coefficient = permeability_coefficient
|
piece.permeability_coefficient = permeability_coefficient
|
||||||
piece.unacidable = unacidable
|
piece.unacidable = unacidable
|
||||||
if(islist(armor)) piece.armor = armor.Copy()
|
if(islist(armor)) piece.armor = armor.Copy()
|
||||||
|
if(islist(armorsoak)) piece.armorsoak = armorsoak.Copy()
|
||||||
|
|
||||||
update_icon(1)
|
update_icon(1)
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
/obj/item/rig_module/ai_container,
|
/obj/item/rig_module/ai_container,
|
||||||
/obj/item/rig_module/maneuvering_jets,
|
/obj/item/rig_module/maneuvering_jets,
|
||||||
/obj/item/rig_module/device/healthscanner,
|
/obj/item/rig_module/device/healthscanner,
|
||||||
/obj/item/rig_module/chem_dispenser/injector
|
/obj/item/rig_module/chem_dispenser/injector/advanced
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/rig/ert/security
|
/obj/item/weapon/rig/ert/security
|
||||||
|
|||||||
@@ -574,12 +574,6 @@ obj/item/clothing/suit/kimono
|
|||||||
icon_state = "smw_hoodie"
|
icon_state = "smw_hoodie"
|
||||||
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
|
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/toggle/redandblackjacket
|
|
||||||
name = "red and black jacket"
|
|
||||||
desc = "A cool red and black jacket to keep you stylish and cozy."
|
|
||||||
icon_state = "redandblackjacket"
|
|
||||||
flags_inv = HIDEHOLSTER
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/whitedress
|
/obj/item/clothing/suit/whitedress
|
||||||
name = "white dress"
|
name = "white dress"
|
||||||
desc = "A fancy white dress."
|
desc = "A fancy white dress."
|
||||||
@@ -776,6 +770,44 @@ obj/item/clothing/suit/kimono
|
|||||||
name = "brown varsity jacket"
|
name = "brown varsity jacket"
|
||||||
icon_state = "varsity_brown"
|
icon_state = "varsity_brown"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Department Jackets
|
||||||
|
*/
|
||||||
|
/obj/item/clothing/suit/storage/toggle/sec_dep_jacket
|
||||||
|
name = "department jacket, security"
|
||||||
|
desc = "A cozy jacket in security's colors. Show your department pride!"
|
||||||
|
icon_state = "sec_dep_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "sec_dep_jacket", slot_l_hand_str = "sec_dep_jacket")
|
||||||
|
flags_inv = HIDEHOLSTER
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/toggle/engi_dep_jacket
|
||||||
|
name = "department jacket, engineering"
|
||||||
|
desc = "A cozy jacket in engineering's colors. Show your department pride!"
|
||||||
|
icon_state = "engi_dep_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "engi_dep_jacket", slot_l_hand_str = "engi_dep_jacket")
|
||||||
|
flags_inv = HIDEHOLSTER
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/toggle/supply_dep_jacket
|
||||||
|
name = "department jacket, supply"
|
||||||
|
desc = "A cozy jacket in supply's colors. Show your department pride!"
|
||||||
|
icon_state = "supply_dep_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "supply_dep_jacket", slot_l_hand_str = "supply_dep_jacket")
|
||||||
|
flags_inv = HIDEHOLSTER
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/toggle/sci_dep_jacket
|
||||||
|
name = "department jacket, science"
|
||||||
|
desc = "A cozy jacket in science's colors. Show your department pride!"
|
||||||
|
icon_state = "sci_dep_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "sci_dep_jacket", slot_l_hand_str = "sci_dep_jacket")
|
||||||
|
flags_inv = HIDEHOLSTER
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||||
|
name = "department jacket, medical"
|
||||||
|
desc = "A cozy jacket in medical's colors. Show your department pride!"
|
||||||
|
icon_state = "med_dep_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket")
|
||||||
|
flags_inv = HIDEHOLSTER
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Track Jackets
|
* Track Jackets
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,11 +1,3 @@
|
|||||||
/obj/item/clothing/under/color
|
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/color.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/color.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/color.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/color.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/color.dmi'
|
|
||||||
)
|
|
||||||
/obj/item/clothing/under/color/black
|
/obj/item/clothing/under/color/black
|
||||||
name = "black jumpsuit"
|
name = "black jumpsuit"
|
||||||
icon_state = "black"
|
icon_state = "black"
|
||||||
|
|||||||
@@ -255,13 +255,6 @@
|
|||||||
*/
|
*/
|
||||||
/obj/item/clothing/under/dress
|
/obj/item/clothing/under/dress
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/dresses.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/dresses.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/dresses.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/dresses.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/dresses.dmi'
|
|
||||||
)
|
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/blacktango
|
/obj/item/clothing/under/dress/blacktango
|
||||||
name = "black tango dress"
|
name = "black tango dress"
|
||||||
@@ -353,14 +346,6 @@
|
|||||||
*/
|
*/
|
||||||
/obj/item/clothing/under/wedding
|
/obj/item/clothing/under/wedding
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/dresses.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/dresses.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/dresses.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/dresses.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/dresses.dmi'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/under/wedding/bride_orange
|
/obj/item/clothing/under/wedding/bride_orange
|
||||||
name = "orange wedding dress"
|
name = "orange wedding dress"
|
||||||
@@ -393,13 +378,13 @@
|
|||||||
flags_inv = HIDESHOES
|
flags_inv = HIDESHOES
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/sundress
|
/obj/item/clothing/under/sundress
|
||||||
name = "sundress"
|
name = "sundress"
|
||||||
desc = "Makes you want to frolic in a field of daisies."
|
desc = "Makes you want to frolic in a field of daisies."
|
||||||
icon_state = "sundress"
|
icon_state = "sundress"
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/sundress/white
|
/obj/item/clothing/under/sundress_white
|
||||||
name = "white sundress"
|
name = "white sundress"
|
||||||
desc = "A white sundress decorated with purple lilies."
|
desc = "A white sundress decorated with purple lilies."
|
||||||
icon_state = "sundress_white"
|
icon_state = "sundress_white"
|
||||||
@@ -474,13 +459,6 @@
|
|||||||
/obj/item/clothing/under/cheongsam
|
/obj/item/clothing/under/cheongsam
|
||||||
name = "white cheongsam"
|
name = "white cheongsam"
|
||||||
desc = "It is a white cheongsam dress."
|
desc = "It is a white cheongsam dress."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/dresses.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/dresses.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/dresses.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/dresses.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/dresses.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "mai_yang"
|
icon_state = "mai_yang"
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||||
|
|
||||||
@@ -508,13 +486,6 @@
|
|||||||
/obj/item/clothing/under/croptop
|
/obj/item/clothing/under/croptop
|
||||||
name = "crop top"
|
name = "crop top"
|
||||||
desc = "A shirt that has had the top cropped. This one is NT sponsored."
|
desc = "A shirt that has had the top cropped. This one is NT sponsored."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/dresses.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/dresses.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/dresses.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/dresses.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/dresses.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "croptop"
|
icon_state = "croptop"
|
||||||
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
|
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,6 @@
|
|||||||
/obj/item/clothing/under/pants
|
/obj/item/clothing/under/pants
|
||||||
name = "jeans"
|
name = "jeans"
|
||||||
desc = "A nondescript pair of tough blue jeans."
|
desc = "A nondescript pair of tough blue jeans."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/pants.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/pants.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/pants.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/pants.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/pants.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "jeans"
|
icon_state = "jeans"
|
||||||
gender = PLURAL
|
gender = PLURAL
|
||||||
body_parts_covered = LOWER_TORSO|LEGS
|
body_parts_covered = LOWER_TORSO|LEGS
|
||||||
@@ -124,10 +117,10 @@
|
|||||||
desc = "A pair of sexy, tight black leather chaps."
|
desc = "A pair of sexy, tight black leather chaps."
|
||||||
icon_state = "chapsbl"
|
icon_state = "chapsbl"
|
||||||
|
|
||||||
/obj/item/clothing/under/pants/yoga
|
/obj/item/clothing/under/pants/yogapants
|
||||||
name = "yoga pants"
|
name = "yoga pants"
|
||||||
desc = "A pair of tight-fitting yoga pants for those lazy days."
|
desc = "A pair of tight-fitting yoga pants for those lazy days."
|
||||||
icon_state = "yoga"
|
icon_state = "yogapants"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Baggy Pants
|
* Baggy Pants
|
||||||
|
|||||||
@@ -2,13 +2,6 @@
|
|||||||
/obj/item/clothing/under/shorts
|
/obj/item/clothing/under/shorts
|
||||||
name = "athletic shorts"
|
name = "athletic shorts"
|
||||||
desc = "95% Polyester, 5% Spandex!"
|
desc = "95% Polyester, 5% Spandex!"
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/pants.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/pants.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/pants.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/pants.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/pants.dmi'
|
|
||||||
)
|
|
||||||
gender = PLURAL
|
gender = PLURAL
|
||||||
body_parts_covered = LOWER_TORSO
|
body_parts_covered = LOWER_TORSO
|
||||||
|
|
||||||
@@ -103,13 +96,6 @@
|
|||||||
/obj/item/clothing/under/skirt
|
/obj/item/clothing/under/skirt
|
||||||
name = "short black skirt"
|
name = "short black skirt"
|
||||||
desc = "A skirt that is a shiny black."
|
desc = "A skirt that is a shiny black."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/dresses.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/dresses.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/dresses.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/dresses.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/dresses.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "skirt_short_black"
|
icon_state = "skirt_short_black"
|
||||||
body_parts_covered = LOWER_TORSO
|
body_parts_covered = LOWER_TORSO
|
||||||
rolled_sleeves = -1
|
rolled_sleeves = -1
|
||||||
@@ -168,8 +154,6 @@
|
|||||||
icon_state = "plaid_purple"
|
icon_state = "plaid_purple"
|
||||||
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
|
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
|
||||||
|
|
||||||
//Job skirts
|
|
||||||
|
|
||||||
/obj/item/clothing/under/rank/cargo/skirt
|
/obj/item/clothing/under/rank/cargo/skirt
|
||||||
name = "quartermaster's jumpskirt"
|
name = "quartermaster's jumpskirt"
|
||||||
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||||
|
|||||||
@@ -4,12 +4,6 @@
|
|||||||
/obj/item/clothing/under/pt
|
/obj/item/clothing/under/pt
|
||||||
name = "pt uniform"
|
name = "pt uniform"
|
||||||
desc = "Shorts! Shirt! Miami! Sexy!"
|
desc = "Shorts! Shirt! Miami! Sexy!"
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/military.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/military.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/military.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/military.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "miami"
|
icon_state = "miami"
|
||||||
worn_state = "miami"
|
worn_state = "miami"
|
||||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
@@ -40,13 +34,6 @@
|
|||||||
/obj/item/clothing/under/utility
|
/obj/item/clothing/under/utility
|
||||||
name = "utility uniform"
|
name = "utility uniform"
|
||||||
desc = "A comfortable turtleneck and black utility trousers."
|
desc = "A comfortable turtleneck and black utility trousers."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/military.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/military.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/military.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/military.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/military.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "blackutility"
|
icon_state = "blackutility"
|
||||||
worn_state = "blackutility"
|
worn_state = "blackutility"
|
||||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
@@ -107,6 +94,7 @@
|
|||||||
icon_state = "blackutility_com"
|
icon_state = "blackutility_com"
|
||||||
worn_state = "blackutility_com"
|
worn_state = "blackutility_com"
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/under/utility/fleet
|
/obj/item/clothing/under/utility/fleet
|
||||||
name = "fleet coveralls"
|
name = "fleet coveralls"
|
||||||
desc = "The utility uniform of the SCG Fleet, made from an insulated material."
|
desc = "The utility uniform of the SCG Fleet, made from an insulated material."
|
||||||
@@ -145,6 +133,7 @@
|
|||||||
icon_state = "navyutility_com"
|
icon_state = "navyutility_com"
|
||||||
worn_state = "navyutility_com"
|
worn_state = "navyutility_com"
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/under/utility/marine
|
/obj/item/clothing/under/utility/marine
|
||||||
name = "marine fatigues"
|
name = "marine fatigues"
|
||||||
desc = "The utility uniform of the SCG Marine Corps, made from durable material."
|
desc = "The utility uniform of the SCG Marine Corps, made from durable material."
|
||||||
@@ -199,13 +188,6 @@
|
|||||||
/obj/item/clothing/under/service
|
/obj/item/clothing/under/service
|
||||||
name = "service uniform"
|
name = "service uniform"
|
||||||
desc = "A service uniform of some kind."
|
desc = "A service uniform of some kind."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/military.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/military.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/military.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/military.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/military.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "whiteservice"
|
icon_state = "whiteservice"
|
||||||
worn_state = "whiteservice"
|
worn_state = "whiteservice"
|
||||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
@@ -233,13 +215,6 @@
|
|||||||
/obj/item/clothing/under/mildress
|
/obj/item/clothing/under/mildress
|
||||||
name = "dress uniform"
|
name = "dress uniform"
|
||||||
desc = "A dress uniform of some kind."
|
desc = "A dress uniform of some kind."
|
||||||
sprite_sheets = list(
|
|
||||||
"Human" = 'icons/mob/uniforms/military.dmi',
|
|
||||||
"Skrell" = 'icons/mob/species/skrell/uniforms/military.dmi',
|
|
||||||
"Tajara" = 'icons/mob/species/tajaran/uniforms/military.dmi',
|
|
||||||
"Unathi" = 'icons/mob/species/unathi/uniforms/military.dmi',
|
|
||||||
"Diona" = 'icons/mob/species/diona/uniforms/military.dmi'
|
|
||||||
)
|
|
||||||
icon_state = "greydress"
|
icon_state = "greydress"
|
||||||
worn_state = "greydress"
|
worn_state = "greydress"
|
||||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ I said no!
|
|||||||
/datum/recipe/xenoburger
|
/datum/recipe/xenoburger
|
||||||
items = list(
|
items = list(
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/bun,
|
/obj/item/weapon/reagent_containers/food/snacks/bun,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
/obj/item/weapon/reagent_containers/food/snacks/spidermeat // /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||||
)
|
)
|
||||||
result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger
|
result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger
|
||||||
|
|
||||||
@@ -224,9 +224,9 @@ I said no!
|
|||||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
|
/obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
|
/obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
|
/obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||||
|
|||||||
@@ -114,8 +114,11 @@
|
|||||||
|
|
||||||
if(!target_limb) target_limb = pick(BP_ALL)
|
if(!target_limb) target_limb = pick(BP_ALL)
|
||||||
var/blocked = target.run_armor_check(target_limb, "melee")
|
var/blocked = target.run_armor_check(target_limb, "melee")
|
||||||
|
var/soaked = target.get_armor_soak(target_limb, "melee")
|
||||||
|
|
||||||
if(blocked >= 100)
|
if(blocked >= 100)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/organ/external/affecting = target.get_organ(target_limb)
|
var/obj/item/organ/external/affecting = target.get_organ(target_limb)
|
||||||
var/damage = 0
|
var/damage = 0
|
||||||
var/has_edge = 0
|
var/has_edge = 0
|
||||||
@@ -125,7 +128,7 @@
|
|||||||
|
|
||||||
if(affecting)
|
if(affecting)
|
||||||
to_chat(target, "<span class='danger'>\The [fruit]'s thorns pierce your [affecting.name] greedily!</span>")
|
to_chat(target, "<span class='danger'>\The [fruit]'s thorns pierce your [affecting.name] greedily!</span>")
|
||||||
target.apply_damage(damage, BRUTE, target_limb, blocked, "Thorns", sharp=1, edge=has_edge)
|
target.apply_damage(damage, BRUTE, target_limb, blocked, soaked, "Thorns", sharp=1, edge=has_edge)
|
||||||
else
|
else
|
||||||
to_chat(target, "<span class='danger'>\The [fruit]'s thorns pierce your flesh greedily!</span>")
|
to_chat(target, "<span class='danger'>\The [fruit]'s thorns pierce your flesh greedily!</span>")
|
||||||
target.adjustBruteLoss(damage)
|
target.adjustBruteLoss(damage)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
used for power or data transmission."
|
used for power or data transmission."
|
||||||
icon = 'icons/obj/electronic_assemblies.dmi'
|
icon = 'icons/obj/electronic_assemblies.dmi'
|
||||||
icon_state = "wirer-wire"
|
icon_state = "wirer-wire"
|
||||||
|
item_state = "wirer"
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
w_class = 2
|
w_class = 2
|
||||||
var/datum/integrated_io/selected_io = null
|
var/datum/integrated_io/selected_io = null
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
/material/wood/generate_recipes()
|
/material/wood/generate_recipes()
|
||||||
..()
|
..()
|
||||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
|
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
|
||||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/woodcirclet, 1)
|
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1)
|
||||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1)
|
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1)
|
||||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||||
|
|||||||
@@ -101,9 +101,9 @@
|
|||||||
/mob/living/silicon/ai/special_mentions()
|
/mob/living/silicon/ai/special_mentions()
|
||||||
return list("AI") // AI door!
|
return list("AI") // AI door!
|
||||||
|
|
||||||
// Converts specific characters, like *, /, and _ to formatted output.
|
// Converts specific characters, like *, |, and _ to formatted output.
|
||||||
/mob/proc/say_emphasis(var/message)
|
/mob/proc/say_emphasis(var/message)
|
||||||
message = encode_html_emphasis(message, "/", "i")
|
message = encode_html_emphasis(message, "|", "i")
|
||||||
message = encode_html_emphasis(message, "+", "b")
|
message = encode_html_emphasis(message, "+", "b")
|
||||||
message = encode_html_emphasis(message, "_", "u")
|
message = encode_html_emphasis(message, "_", "u")
|
||||||
return message
|
return message
|
||||||
|
|||||||
@@ -71,15 +71,11 @@
|
|||||||
|
|
||||||
/mob/living/carbon/brain/handle_chemicals_in_body()
|
/mob/living/carbon/brain/handle_chemicals_in_body()
|
||||||
chem_effects.Cut()
|
chem_effects.Cut()
|
||||||
analgesic = 0
|
|
||||||
|
|
||||||
if(touching) touching.metabolize()
|
if(touching) touching.metabolize()
|
||||||
if(ingested) ingested.metabolize()
|
if(ingested) ingested.metabolize()
|
||||||
if(bloodstr) bloodstr.metabolize()
|
if(bloodstr) bloodstr.metabolize()
|
||||||
|
|
||||||
if(CE_PAINKILLER in chem_effects)
|
|
||||||
analgesic = chem_effects[CE_PAINKILLER]
|
|
||||||
|
|
||||||
confused = max(0, confused - 1)
|
confused = max(0, confused - 1)
|
||||||
// decrement dizziness counter, clamped to 0
|
// decrement dizziness counter, clamped to 0
|
||||||
if(resting)
|
if(resting)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
return null
|
return null
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/hit_zone)
|
/mob/living/carbon/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/soaked, var/hit_zone)
|
||||||
if(!effective_force || blocked >= 100)
|
if(!effective_force || blocked >= 100)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -12,6 +12,10 @@
|
|||||||
if(HULK in user.mutations)
|
if(HULK in user.mutations)
|
||||||
effective_force *= 2
|
effective_force *= 2
|
||||||
|
|
||||||
|
//If the armor soaks all of the damage, it just skips the rest of the checks
|
||||||
|
if(effective_force <= soaked)
|
||||||
|
return 0
|
||||||
|
|
||||||
//Apply weapon damage
|
//Apply weapon damage
|
||||||
var/weapon_sharp = is_sharp(I)
|
var/weapon_sharp = is_sharp(I)
|
||||||
var/weapon_edge = has_edge(I)
|
var/weapon_edge = has_edge(I)
|
||||||
|
|||||||
@@ -7,8 +7,7 @@
|
|||||||
var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm
|
var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm
|
||||||
|
|
||||||
var/life_tick = 0 // The amount of life ticks that have processed on this mob.
|
var/life_tick = 0 // The amount of life ticks that have processed on this mob.
|
||||||
var/analgesic = 0 // when this is set, the mob isn't affected by shock or pain
|
|
||||||
// life should decrease this by 1 every tick
|
|
||||||
// total amount of wounds on mob, used to spread out healing and the like over all wounds
|
// total amount of wounds on mob, used to spread out healing and the like over all wounds
|
||||||
var/number_wounds = 0
|
var/number_wounds = 0
|
||||||
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
|
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
|
||||||
|
|||||||
@@ -282,7 +282,7 @@
|
|||||||
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span>\n"
|
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span>\n"
|
||||||
|
|
||||||
//splints
|
//splints
|
||||||
for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM))
|
for(var/organ in BP_ALL)
|
||||||
var/obj/item/organ/external/o = get_organ(organ)
|
var/obj/item/organ/external/o = get_organ(organ)
|
||||||
if(o && o.splinted && o.splinted.loc == o)
|
if(o && o.splinted && o.splinted.loc == o)
|
||||||
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span>\n"
|
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span>\n"
|
||||||
|
|||||||
@@ -1071,7 +1071,7 @@
|
|||||||
"<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>", \
|
"<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>", \
|
||||||
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>", \
|
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>", \
|
||||||
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>")
|
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>")
|
||||||
src << msg
|
custom_pain(msg, 40)
|
||||||
|
|
||||||
organ.take_damage(rand(1,3), 0, 0)
|
organ.take_damage(rand(1,3), 0, 0)
|
||||||
if(!(organ.robotic >= ORGAN_ROBOT) && (should_have_organ(O_HEART))) //There is no blood in protheses.
|
if(!(organ.robotic >= ORGAN_ROBOT) && (should_have_organ(O_HEART))) //There is no blood in protheses.
|
||||||
@@ -1473,6 +1473,7 @@
|
|||||||
|
|
||||||
if(stat) return
|
if(stat) return
|
||||||
var/datum/category_group/underwear/UWC = input(usr, "Choose underwear:", "Show/hide underwear") as null|anything in global_underwear.categories
|
var/datum/category_group/underwear/UWC = input(usr, "Choose underwear:", "Show/hide underwear") as null|anything in global_underwear.categories
|
||||||
|
if(!UWC) return
|
||||||
var/datum/category_item/underwear/UWI = all_underwear[UWC.name]
|
var/datum/category_item/underwear/UWI = all_underwear[UWC.name]
|
||||||
if(!UWI || UWI.name == "None")
|
if(!UWI || UWI.name == "None")
|
||||||
src << "<span class='notice'>You do not have [UWC.gender==PLURAL ? "[UWC.display_name]" : "\a [UWC.display_name]"].</span>"
|
src << "<span class='notice'>You do not have [UWC.gender==PLURAL ? "[UWC.display_name]" : "\a [UWC.display_name]"].</span>"
|
||||||
@@ -1510,7 +1511,7 @@
|
|||||||
if(check_organ)
|
if(check_organ)
|
||||||
if(!istype(check_organ))
|
if(!istype(check_organ))
|
||||||
return 0
|
return 0
|
||||||
return check_organ.can_feel_pain()
|
return check_organ.organ_can_feel_pain()
|
||||||
return !(species.flags & NO_PAIN)
|
return !(species.flags & NO_PAIN)
|
||||||
|
|
||||||
/mob/living/carbon/human/is_muzzled()
|
/mob/living/carbon/human/is_muzzled()
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
// Should this all be in Touch()?
|
// Should this all be in Touch()?
|
||||||
if(istype(H))
|
if(istype(H))
|
||||||
if(get_accuracy_penalty(H)) //Should only trigger if they're not aiming well
|
if(get_accuracy_penalty(H) && H != src) //Should only trigger if they're not aiming well
|
||||||
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
|
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
|
||||||
if(!hit_zone)
|
if(!hit_zone)
|
||||||
H.do_attack_animation(src)
|
H.do_attack_animation(src)
|
||||||
@@ -51,6 +51,7 @@
|
|||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affecting = get_organ(ran_zone(H.zone_sel.selecting))
|
var/obj/item/organ/external/affecting = get_organ(ran_zone(H.zone_sel.selecting))
|
||||||
var/armor_block = run_armor_check(affecting, "melee")
|
var/armor_block = run_armor_check(affecting, "melee")
|
||||||
|
var/armor_soak = get_armor_soak(affecting, "melee")
|
||||||
|
|
||||||
if(HULK in H.mutations)
|
if(HULK in H.mutations)
|
||||||
damage += 5
|
damage += 5
|
||||||
@@ -59,7 +60,10 @@
|
|||||||
|
|
||||||
visible_message("\red <B>[H] has punched [src]!</B>")
|
visible_message("\red <B>[H] has punched [src]!</B>")
|
||||||
|
|
||||||
apply_damage(damage, HALLOSS, affecting, armor_block)
|
if(armor_soak >= damage)
|
||||||
|
return
|
||||||
|
|
||||||
|
apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak)
|
||||||
if(damage >= 9)
|
if(damage >= 9)
|
||||||
visible_message("\red <B>[H] has weakened [src]!</B>")
|
visible_message("\red <B>[H] has weakened [src]!</B>")
|
||||||
apply_effect(4, WEAKEN, armor_block)
|
apply_effect(4, WEAKEN, armor_block)
|
||||||
@@ -258,11 +262,12 @@
|
|||||||
real_damage = max(1, real_damage)
|
real_damage = max(1, real_damage)
|
||||||
|
|
||||||
var/armour = run_armor_check(affecting, "melee")
|
var/armour = run_armor_check(affecting, "melee")
|
||||||
|
var/soaked = get_armor_soak(affecting, "melee")
|
||||||
// Apply additional unarmed effects.
|
// Apply additional unarmed effects.
|
||||||
attack.apply_effects(H, src, armour, rand_damage, hit_zone)
|
attack.apply_effects(H, src, armour, rand_damage, hit_zone)
|
||||||
|
|
||||||
// Finally, apply damage to target
|
// Finally, apply damage to target
|
||||||
apply_damage(real_damage, (attack.deal_halloss ? HALLOSS : BRUTE), affecting, armour, sharp=attack.sharp, edge=attack.edge)
|
apply_damage(real_damage, (attack.deal_halloss ? HALLOSS : BRUTE), affecting, armour, soaked, sharp=attack.sharp, edge=attack.edge)
|
||||||
|
|
||||||
if(I_DISARM)
|
if(I_DISARM)
|
||||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
|
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
|
||||||
@@ -338,7 +343,8 @@
|
|||||||
var/dam_zone = pick(organs_by_name)
|
var/dam_zone = pick(organs_by_name)
|
||||||
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
||||||
var/armor_block = run_armor_check(affecting, "melee")
|
var/armor_block = run_armor_check(affecting, "melee")
|
||||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
var/armor_soak = get_armor_soak(affecting, "melee")
|
||||||
|
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak)
|
||||||
updatehealth()
|
updatehealth()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ This function restores all organs.
|
|||||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||||
if(damagetype == HALLOSS)
|
if(damagetype == HALLOSS)
|
||||||
if((damage > 25 && prob(20)) || (damage > 50 && prob(60)))
|
if((damage > 25 && prob(20)) || (damage > 50 && prob(60)))
|
||||||
if(organ && organ.can_feel_pain())
|
if(organ && organ.organ_can_feel_pain())
|
||||||
emote("scream")
|
emote("scream")
|
||||||
..(damage, damagetype, def_zone, blocked)
|
..(damage, damagetype, def_zone, blocked)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ emp_act
|
|||||||
emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!")
|
emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!")
|
||||||
else
|
else
|
||||||
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
||||||
emote("me", 1, "[affected.can_feel_pain() ? "" : emote_scream]drops what they were holding in their [affected.name]!")
|
emote("me", 1, "[affected.organ_can_feel_pain() ? "" : emote_scream] drops what they were holding in their [affected.name]!")
|
||||||
|
|
||||||
..(stun_amount, agony_amount, def_zone)
|
..(stun_amount, agony_amount, def_zone)
|
||||||
|
|
||||||
@@ -93,6 +93,29 @@ emp_act
|
|||||||
total += weight
|
total += weight
|
||||||
return (armorval/max(total, 1))
|
return (armorval/max(total, 1))
|
||||||
|
|
||||||
|
//Like getarmor, but the value it returns will be numerical damage reduction
|
||||||
|
/mob/living/carbon/human/getsoak(var/def_zone, var/type)
|
||||||
|
var/soakval = 0
|
||||||
|
var/total = 0
|
||||||
|
|
||||||
|
if(def_zone)
|
||||||
|
if(isorgan(def_zone))
|
||||||
|
return getsoak_organ(def_zone, type)
|
||||||
|
var/obj/item/organ/external/affecting = get_organ(def_zone)
|
||||||
|
if(affecting)
|
||||||
|
return getsoak_organ(affecting, type)
|
||||||
|
//If a specific bodypart is targetted, check how that bodypart is protected and return the value.
|
||||||
|
|
||||||
|
//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_by_name)
|
||||||
|
if (organ_name in organ_rel_size)
|
||||||
|
var/obj/item/organ/external/organ = organs_by_name[organ_name]
|
||||||
|
if(organ)
|
||||||
|
var/weight = organ_rel_size[organ_name]
|
||||||
|
soakval += getsoak_organ(organ, type) * weight
|
||||||
|
total += weight
|
||||||
|
return (soakval/max(total, 1))
|
||||||
|
|
||||||
//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ.
|
//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ.
|
||||||
/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/obj/item/organ/external/def_zone)
|
/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/obj/item/organ/external/def_zone)
|
||||||
if (!def_zone)
|
if (!def_zone)
|
||||||
@@ -119,6 +142,17 @@ emp_act
|
|||||||
protection += C.armor[type]
|
protection += C.armor[type]
|
||||||
return protection
|
return protection
|
||||||
|
|
||||||
|
/mob/living/carbon/human/proc/getsoak_organ(var/obj/item/organ/external/def_zone, var/type)
|
||||||
|
if(!type || !def_zone) return 0
|
||||||
|
var/soaked = 0
|
||||||
|
var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes)
|
||||||
|
for(var/gear in protective_gear)
|
||||||
|
if(gear && istype(gear ,/obj/item/clothing))
|
||||||
|
var/obj/item/clothing/C = gear
|
||||||
|
if(istype(C) && C.body_parts_covered & def_zone.body_part)
|
||||||
|
soaked += C.armorsoak[type]
|
||||||
|
return soaked
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/check_head_coverage()
|
/mob/living/carbon/human/proc/check_head_coverage()
|
||||||
|
|
||||||
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
|
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
|
||||||
@@ -195,25 +229,35 @@ emp_act
|
|||||||
|
|
||||||
visible_message("<span class='danger'>[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] in the [affecting.name] with [I.name] by [user]!</span>")
|
visible_message("<span class='danger'>[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] in the [affecting.name] with [I.name] by [user]!</span>")
|
||||||
|
|
||||||
|
var/soaked = get_armor_soak(hit_zone, "melee", I.armor_penetration)
|
||||||
|
|
||||||
|
if(soaked >= effective_force)
|
||||||
|
src << "Your armor absorbs the force of [I.name]!"
|
||||||
|
return
|
||||||
|
|
||||||
var/blocked = run_armor_check(hit_zone, "melee", I.armor_penetration, "Your armor has protected your [affecting.name].", "Your armor has softened the blow to your [affecting.name].")
|
var/blocked = run_armor_check(hit_zone, "melee", I.armor_penetration, "Your armor has protected your [affecting.name].", "Your armor has softened the blow to your [affecting.name].")
|
||||||
standard_weapon_hit_effects(I, user, effective_force, blocked, hit_zone)
|
|
||||||
|
standard_weapon_hit_effects(I, user, effective_force, blocked, soaked, hit_zone)
|
||||||
|
|
||||||
return blocked
|
return blocked
|
||||||
|
|
||||||
/mob/living/carbon/human/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/hit_zone)
|
/mob/living/carbon/human/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/soaked, var/hit_zone)
|
||||||
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
||||||
if(!affecting)
|
if(!affecting)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
if(soaked >= effective_force)
|
||||||
|
return 0
|
||||||
|
|
||||||
// Handle striking to cripple.
|
// Handle striking to cripple.
|
||||||
if(user.a_intent == I_DISARM)
|
if(user.a_intent == I_DISARM)
|
||||||
effective_force *= 0.5 //reduced effective force...
|
effective_force *= 0.5 //reduced effective force...
|
||||||
if(!..(I, user, effective_force, blocked, hit_zone))
|
if(!..(I, user, effective_force, blocked, soaked, hit_zone))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
//set the dislocate mult less than the effective force mult so that
|
//set the dislocate mult less than the effective force mult so that
|
||||||
//dislocating limbs on disarm is a bit easier than breaking limbs on harm
|
//dislocating limbs on disarm is a bit easier than breaking limbs on harm
|
||||||
attack_joint(affecting, I, effective_force, 0.75, blocked) //...but can dislocate joints
|
attack_joint(affecting, I, effective_force, 0.75, blocked, soaked) //...but can dislocate joints
|
||||||
else if(!..())
|
else if(!..())
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -243,7 +287,7 @@ emp_act
|
|||||||
switch(hit_zone)
|
switch(hit_zone)
|
||||||
if("head")//Harder to score a stun but if you do it lasts a bit longer
|
if("head")//Harder to score a stun but if you do it lasts a bit longer
|
||||||
if(prob(effective_force))
|
if(prob(effective_force))
|
||||||
apply_effect(20, PARALYZE, blocked)
|
apply_effect(20, PARALYZE, blocked, soaked)
|
||||||
visible_message("<span class='danger'>\The [src] has been knocked unconscious!</span>")
|
visible_message("<span class='danger'>\The [src] has been knocked unconscious!</span>")
|
||||||
if(bloody)//Apply blood
|
if(bloody)//Apply blood
|
||||||
if(wear_mask)
|
if(wear_mask)
|
||||||
@@ -257,15 +301,15 @@ emp_act
|
|||||||
update_inv_glasses(0)
|
update_inv_glasses(0)
|
||||||
if("chest")//Easier to score a stun but lasts less time
|
if("chest")//Easier to score a stun but lasts less time
|
||||||
if(prob(effective_force + 10))
|
if(prob(effective_force + 10))
|
||||||
apply_effect(6, WEAKEN, blocked)
|
apply_effect(6, WEAKEN, blocked, soaked)
|
||||||
visible_message("<span class='danger'>\The [src] has been knocked down!</span>")
|
visible_message("<span class='danger'>\The [src] has been knocked down!</span>")
|
||||||
if(bloody)
|
if(bloody)
|
||||||
bloody_body(src)
|
bloody_body(src)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked)
|
/mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked, var/soaked)
|
||||||
if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1) || blocked >= 100)
|
if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1) || blocked >= 100 || soaked > effective_force)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(W.damtype != BRUTE)
|
if(W.damtype != BRUTE)
|
||||||
@@ -338,10 +382,6 @@ emp_act
|
|||||||
var/hit_area = affecting.name
|
var/hit_area = affecting.name
|
||||||
|
|
||||||
src.visible_message("\red [src] has been hit in the [hit_area] by [O].")
|
src.visible_message("\red [src] has been hit in the [hit_area] by [O].")
|
||||||
var/armor = run_armor_check(affecting, "melee", O.armor_penetration, "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here
|
|
||||||
|
|
||||||
if(armor < 100)
|
|
||||||
apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O)
|
|
||||||
|
|
||||||
if(ismob(O.thrower))
|
if(ismob(O.thrower))
|
||||||
var/mob/M = O.thrower
|
var/mob/M = O.thrower
|
||||||
@@ -352,12 +392,25 @@ emp_act
|
|||||||
if(!istype(src,/mob/living/simple_animal/mouse))
|
if(!istype(src,/mob/living/simple_animal/mouse))
|
||||||
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
|
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
|
||||||
|
|
||||||
|
//If the armor absorbs all of the damage, skip the rest of the calculations
|
||||||
|
var/soaked = get_armor_soak(affecting, "melee", O.armor_penetration)
|
||||||
|
if(soaked >= throw_damage)
|
||||||
|
src << "Your armor absorbs the force of [O.name]!"
|
||||||
|
return
|
||||||
|
|
||||||
|
var/armor = run_armor_check(affecting, "melee", O.armor_penetration, "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here
|
||||||
|
if(armor < 100)
|
||||||
|
apply_damage(throw_damage, dtype, zone, armor, soaked, is_sharp(O), has_edge(O), O)
|
||||||
|
|
||||||
|
|
||||||
//thrown weapon embedded object code.
|
//thrown weapon embedded object code.
|
||||||
if(dtype == BRUTE && istype(O,/obj/item))
|
if(dtype == BRUTE && istype(O,/obj/item))
|
||||||
var/obj/item/I = O
|
var/obj/item/I = O
|
||||||
if (!is_robot_module(I))
|
if (!is_robot_module(I))
|
||||||
var/sharp = is_sharp(I)
|
var/sharp = is_sharp(I)
|
||||||
var/damage = throw_damage
|
var/damage = throw_damage
|
||||||
|
if (soaked)
|
||||||
|
damage -= soaked
|
||||||
if (armor)
|
if (armor)
|
||||||
damage /= armor+1
|
damage /= armor+1
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
if (!lying && !buckled && world.time - l_move_time < 15)
|
if (!lying && !buckled && world.time - l_move_time < 15)
|
||||||
//Moving around with fractured ribs won't do you any good
|
//Moving around with fractured ribs won't do you any good
|
||||||
if (prob(10) && !stat && can_feel_pain() && analgesic < 50 && E.is_broken() && E.internal_organs.len)
|
if (prob(10) && !stat && can_feel_pain() && chem_effects[CE_PAINKILLER] < 50 && E.is_broken() && E.internal_organs.len)
|
||||||
custom_pain("Pain jolts through your broken [E.encased ? E.encased : E.name], staggering you!", 50)
|
custom_pain("Pain jolts through your broken [E.encased ? E.encased : E.name], staggering you!", 50)
|
||||||
drop_item(loc)
|
drop_item(loc)
|
||||||
Stun(2)
|
Stun(2)
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
else if (E.is_dislocated())
|
else if (E.is_dislocated())
|
||||||
stance_damage += 0.5
|
stance_damage += 0.5
|
||||||
|
|
||||||
if(E) limb_pain = E.can_feel_pain()
|
if(E) limb_pain = E.organ_can_feel_pain()
|
||||||
|
|
||||||
// Canes and crutches help you stand (if the latter is ever added)
|
// Canes and crutches help you stand (if the latter is ever added)
|
||||||
// One cane mitigates a broken leg+foot, or a missing foot.
|
// One cane mitigates a broken leg+foot, or a missing foot.
|
||||||
@@ -159,7 +159,7 @@
|
|||||||
drop_from_inventory(r_hand)
|
drop_from_inventory(r_hand)
|
||||||
|
|
||||||
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
||||||
emote("me", 1, "[(E.can_feel_pain()) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
|
emote("me", 1, "[(can_feel_pain()) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
|
||||||
|
|
||||||
else if(E.is_malfunctioning())
|
else if(E.is_malfunctioning())
|
||||||
switch(E.body_part)
|
switch(E.body_part)
|
||||||
|
|||||||
@@ -187,7 +187,7 @@
|
|||||||
var/rn = rand(0, 200)
|
var/rn = rand(0, 200)
|
||||||
if(getBrainLoss() >= 5)
|
if(getBrainLoss() >= 5)
|
||||||
if(0 <= rn && rn <= 3)
|
if(0 <= rn && rn <= 3)
|
||||||
custom_pain("Your head feels numb and painful.")
|
custom_pain("Your head feels numb and painful.", 10)
|
||||||
if(getBrainLoss() >= 15)
|
if(getBrainLoss() >= 15)
|
||||||
if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
|
if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
|
||||||
src << "<span class='warning'>It becomes hard to see for some reason.</span>"
|
src << "<span class='warning'>It becomes hard to see for some reason.</span>"
|
||||||
@@ -329,17 +329,20 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(suiciding)
|
||||||
|
failed_last_breath = 1
|
||||||
|
adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster
|
||||||
|
oxygen_alert = max(oxygen_alert, 1)
|
||||||
|
suiciding --
|
||||||
|
return 0
|
||||||
|
|
||||||
if(does_not_breathe)
|
if(does_not_breathe)
|
||||||
failed_last_breath = 0
|
failed_last_breath = 0
|
||||||
adjustOxyLoss(-5)
|
adjustOxyLoss(-5)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!breath || (breath.total_moles == 0) || suiciding)
|
if(!breath || (breath.total_moles == 0))
|
||||||
failed_last_breath = 1
|
failed_last_breath = 1
|
||||||
if(suiciding)
|
|
||||||
adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster
|
|
||||||
oxygen_alert = max(oxygen_alert, 1)
|
|
||||||
return 0
|
|
||||||
if(health > config.health_threshold_crit)
|
if(health > config.health_threshold_crit)
|
||||||
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
||||||
else
|
else
|
||||||
@@ -350,10 +353,6 @@
|
|||||||
if(!L.is_bruised() && prob(8))
|
if(!L.is_bruised() && prob(8))
|
||||||
rupture_lung()
|
rupture_lung()
|
||||||
|
|
||||||
if(should_have_organ("brain"))
|
|
||||||
if(prob(5))
|
|
||||||
adjustBrainLoss(0.02 * oxyloss) //2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
|
||||||
|
|
||||||
oxygen_alert = max(oxygen_alert, 1)
|
oxygen_alert = max(oxygen_alert, 1)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@@ -372,6 +371,7 @@
|
|||||||
safe_pressure_min *= 1.25
|
safe_pressure_min *= 1.25
|
||||||
else if(breath)
|
else if(breath)
|
||||||
if(breath.total_moles < BREATH_MOLES / 10 || breath.total_moles > BREATH_MOLES * 5)
|
if(breath.total_moles < BREATH_MOLES / 10 || breath.total_moles > BREATH_MOLES * 5)
|
||||||
|
if(is_below_sound_pressure(get_turf(src))) //No more popped lungs from choking/drowning
|
||||||
if (prob(8))
|
if (prob(8))
|
||||||
rupture_lung()
|
rupture_lung()
|
||||||
|
|
||||||
@@ -794,7 +794,6 @@
|
|||||||
|
|
||||||
if(reagents)
|
if(reagents)
|
||||||
chem_effects.Cut()
|
chem_effects.Cut()
|
||||||
analgesic = 0
|
|
||||||
|
|
||||||
if(!isSynthetic())
|
if(!isSynthetic())
|
||||||
|
|
||||||
@@ -802,9 +801,6 @@
|
|||||||
if(ingested) ingested.metabolize()
|
if(ingested) ingested.metabolize()
|
||||||
if(bloodstr) bloodstr.metabolize()
|
if(bloodstr) bloodstr.metabolize()
|
||||||
|
|
||||||
if(CE_PAINKILLER in chem_effects)
|
|
||||||
analgesic = chem_effects[CE_PAINKILLER]
|
|
||||||
|
|
||||||
var/total_phoronloss = 0
|
var/total_phoronloss = 0
|
||||||
for(var/obj/item/I in src)
|
for(var/obj/item/I in src)
|
||||||
if(I.contaminated)
|
if(I.contaminated)
|
||||||
@@ -923,6 +919,14 @@
|
|||||||
for(var/atom/a in hallucinations)
|
for(var/atom/a in hallucinations)
|
||||||
qdel(a)
|
qdel(a)
|
||||||
|
|
||||||
|
//Brain damage from Oxyloss
|
||||||
|
if(should_have_organ("brain"))
|
||||||
|
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
||||||
|
if(CE_STABLE in chem_effects)
|
||||||
|
brainOxPercent = 0.01 //Halved in effect
|
||||||
|
if(oxyloss >= 20 && prob(5))
|
||||||
|
adjustBrainLoss(brainOxPercent * oxyloss)
|
||||||
|
|
||||||
if(halloss >= species.total_health)
|
if(halloss >= species.total_health)
|
||||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||||
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
||||||
@@ -1155,7 +1159,7 @@
|
|||||||
see_invisible = SEE_INVISIBLE_LIVING
|
see_invisible = SEE_INVISIBLE_LIVING
|
||||||
|
|
||||||
if(healths)
|
if(healths)
|
||||||
if (analgesic > 100)
|
if (chem_effects[CE_PAINKILLER] > 100)
|
||||||
healths.icon_state = "health_numb"
|
healths.icon_state = "health_numb"
|
||||||
else
|
else
|
||||||
// Generate a by-limb health display.
|
// Generate a by-limb health display.
|
||||||
@@ -1443,8 +1447,11 @@
|
|||||||
shock_stage = max(shock_stage-1, 0)
|
shock_stage = max(shock_stage-1, 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(stat)
|
||||||
|
return 0
|
||||||
|
|
||||||
if(shock_stage == 10)
|
if(shock_stage == 10)
|
||||||
src << "<span class='danger'>[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!</span>"
|
custom_pain("[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!", 40)
|
||||||
|
|
||||||
if(shock_stage >= 30)
|
if(shock_stage >= 30)
|
||||||
if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
|
if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
|
||||||
|
|||||||
@@ -72,6 +72,7 @@
|
|||||||
var/toxins_mod = 1 // Toxloss modifier
|
var/toxins_mod = 1 // Toxloss modifier
|
||||||
var/radiation_mod = 1 // Radiation modifier
|
var/radiation_mod = 1 // Radiation modifier
|
||||||
var/flash_mod = 1 // Stun from blindness modifier.
|
var/flash_mod = 1 // Stun from blindness modifier.
|
||||||
|
var/chemOD_mod = 1 // Damage modifier for overdose
|
||||||
var/vision_flags = SEE_SELF // Same flags as glasses.
|
var/vision_flags = SEE_SELF // Same flags as glasses.
|
||||||
|
|
||||||
// Death vars.
|
// Death vars.
|
||||||
|
|||||||
@@ -174,6 +174,7 @@
|
|||||||
|
|
||||||
darksight = 4
|
darksight = 4
|
||||||
flash_mod = 1.2
|
flash_mod = 1.2
|
||||||
|
chemOD_mod = 0.9
|
||||||
|
|
||||||
ambiguous_genders = TRUE
|
ambiguous_genders = TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ var/global/list/sparring_attack_cache = list()
|
|||||||
if(eyes)
|
if(eyes)
|
||||||
eyes.take_damage(rand(3,4), 1)
|
eyes.take_damage(rand(3,4), 1)
|
||||||
user.visible_message("<span class='danger'>[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!</span>")
|
user.visible_message("<span class='danger'>[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!</span>")
|
||||||
var/eye_pain = eyes.can_feel_pain()
|
var/eye_pain = eyes.organ_can_feel_pain()
|
||||||
target << "<span class='danger'>You experience[(eye_pain) ? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(eye_pain)? "." : "!"]</span>"
|
target << "<span class='danger'>You experience[(eye_pain) ? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(eye_pain)? "." : "!"]</span>"
|
||||||
return
|
return
|
||||||
user.visible_message("<span class='danger'>[user] attempts to press \his [eye_attack_text] into [target]'s eyes, but they don't have any!</span>")
|
user.visible_message("<span class='danger'>[user] attempts to press \his [eye_attack_text] into [target]'s eyes, but they don't have any!</span>")
|
||||||
|
|||||||
@@ -67,15 +67,11 @@
|
|||||||
|
|
||||||
/mob/living/carbon/slime/handle_chemicals_in_body()
|
/mob/living/carbon/slime/handle_chemicals_in_body()
|
||||||
chem_effects.Cut()
|
chem_effects.Cut()
|
||||||
analgesic = 0
|
|
||||||
|
|
||||||
if(touching) touching.metabolize()
|
if(touching) touching.metabolize()
|
||||||
if(ingested) ingested.metabolize()
|
if(ingested) ingested.metabolize()
|
||||||
if(bloodstr) bloodstr.metabolize()
|
if(bloodstr) bloodstr.metabolize()
|
||||||
|
|
||||||
if(CE_PAINKILLER in chem_effects)
|
|
||||||
analgesic = chem_effects[CE_PAINKILLER]
|
|
||||||
|
|
||||||
src.updatehealth()
|
src.updatehealth()
|
||||||
|
|
||||||
return //TODO: DEFERRED
|
return //TODO: DEFERRED
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!")
|
var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!")
|
||||||
if (ishuman(M))
|
if (ishuman(M))
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
H.custom_pain(painMes)
|
H.custom_pain(painMes, 100)
|
||||||
else if (istype(M, /mob/living/carbon))
|
else if (istype(M, /mob/living/carbon))
|
||||||
var/mob/living/carbon/C = M
|
var/mob/living/carbon/C = M
|
||||||
if (C.can_feel_pain())
|
if (C.can_feel_pain())
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
1.2 * src.getShockBruteLoss() + \
|
1.2 * src.getShockBruteLoss() + \
|
||||||
1.7 * src.getCloneLoss() + \
|
1.7 * src.getCloneLoss() + \
|
||||||
2 * src.halloss + \
|
2 * src.halloss + \
|
||||||
-1 * src.analgesic
|
-1 * src.chem_effects[CE_PAINKILLER]
|
||||||
|
|
||||||
if(src.slurring)
|
if(src.slurring)
|
||||||
src.traumatic_shock -= 20
|
src.traumatic_shock -= 20
|
||||||
|
|||||||
@@ -8,11 +8,13 @@
|
|||||||
Returns
|
Returns
|
||||||
standard 0 if fail
|
standard 0 if fail
|
||||||
*/
|
*/
|
||||||
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0)
|
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0)
|
||||||
if(Debug2)
|
if(Debug2)
|
||||||
world.log << "## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked]."
|
world.log << "## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked]."
|
||||||
if(!damage || (blocked >= 100))
|
if(!damage || (blocked >= 100) || soaked >= damage)
|
||||||
return 0
|
return 0
|
||||||
|
if(soaked)
|
||||||
|
damage -= soaked
|
||||||
blocked = (100-blocked)/100
|
blocked = (100-blocked)/100
|
||||||
switch(damagetype)
|
switch(damagetype)
|
||||||
if(BRUTE)
|
if(BRUTE)
|
||||||
|
|||||||
@@ -733,11 +733,20 @@ default behaviour is:
|
|||||||
src << "<span class='warning'>You feel like you are about to throw up!</span>"
|
src << "<span class='warning'>You feel like you are about to throw up!</span>"
|
||||||
sleep(100) //and you have 10 more for mad dash to the bucket
|
sleep(100) //and you have 10 more for mad dash to the bucket
|
||||||
|
|
||||||
|
//Damaged livers cause you to vomit blood.
|
||||||
|
if(!blood_vomit)
|
||||||
|
if(ishuman(src))
|
||||||
|
var/mob/living/carbon/human/H = src
|
||||||
|
if(!H.isSynthetic())
|
||||||
|
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
||||||
|
if(L.is_broken())
|
||||||
|
blood_vomit = 1
|
||||||
|
|
||||||
Stun(5)
|
Stun(5)
|
||||||
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
||||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||||
|
|
||||||
var/turf/simulated/T = get_turf(src)
|
var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
if(blood_vomit)
|
if(blood_vomit)
|
||||||
T.add_blood_floor(src)
|
T.add_blood_floor(src)
|
||||||
|
|||||||
@@ -77,10 +77,20 @@
|
|||||||
return 0
|
return 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//Certain pieces of armor actually absorb flat amounts of damage from income attacks
|
||||||
|
/mob/living/proc/get_armor_soak(var/def_zone = null, var/attack_flag = "melee", var/armour_pen = 0)
|
||||||
|
var/soaked = getsoak(def_zone, attack_flag)
|
||||||
|
//5 points of armor pen negate one point of soak
|
||||||
|
if(armour_pen)
|
||||||
|
soaked = max(soaked - (armour_pen/5), 0)
|
||||||
|
return soaked
|
||||||
|
|
||||||
//if null is passed for def_zone, then this should return something appropriate for all zones (e.g. area effect damage)
|
//if null is passed for def_zone, then this should return something appropriate for all zones (e.g. area effect damage)
|
||||||
/mob/living/proc/getarmor(var/def_zone, var/type)
|
/mob/living/proc/getarmor(var/def_zone, var/type)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
/mob/living/proc/getsoak(var/def_zone, var/type)
|
||||||
|
return 0
|
||||||
|
|
||||||
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||||
|
|
||||||
@@ -93,6 +103,7 @@
|
|||||||
signaler.signal()
|
signaler.signal()
|
||||||
|
|
||||||
//Armor
|
//Armor
|
||||||
|
var/soaked = get_armor_soak(def_zone, P.check_armour, P.armor_penetration)
|
||||||
var/absorb = run_armor_check(def_zone, P.check_armour, P.armor_penetration)
|
var/absorb = run_armor_check(def_zone, P.check_armour, P.armor_penetration)
|
||||||
var/proj_sharp = is_sharp(P)
|
var/proj_sharp = is_sharp(P)
|
||||||
var/proj_edge = has_edge(P)
|
var/proj_edge = has_edge(P)
|
||||||
@@ -105,13 +116,13 @@
|
|||||||
stun_effect_act(0, P.agony, def_zone, P)
|
stun_effect_act(0, P.agony, def_zone, P)
|
||||||
src <<"\red You have been hit by [P]!"
|
src <<"\red You have been hit by [P]!"
|
||||||
if(!P.nodamage)
|
if(!P.nodamage)
|
||||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge)
|
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, P, sharp=proj_sharp, edge=proj_edge)
|
||||||
qdel(P)
|
qdel(P)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!P.nodamage)
|
if(!P.nodamage)
|
||||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge)
|
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, P, sharp=proj_sharp, edge=proj_edge)
|
||||||
P.on_hit(src, absorb, def_zone)
|
P.on_hit(src, absorb, soaked, def_zone)
|
||||||
|
|
||||||
if(absorb == 100)
|
if(absorb == 100)
|
||||||
return 2
|
return 2
|
||||||
@@ -153,8 +164,12 @@
|
|||||||
/mob/living/proc/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone)
|
/mob/living/proc/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone)
|
||||||
visible_message("<span class='danger'>[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] with [I.name] by [user]!</span>")
|
visible_message("<span class='danger'>[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] with [I.name] by [user]!</span>")
|
||||||
|
|
||||||
|
var/soaked = get_armor_soak(hit_zone, "melee")
|
||||||
var/blocked = run_armor_check(hit_zone, "melee")
|
var/blocked = run_armor_check(hit_zone, "melee")
|
||||||
standard_weapon_hit_effects(I, user, effective_force, blocked, hit_zone)
|
|
||||||
|
//If the armor absorbs all of the damage, skip the damage calculation and the blood
|
||||||
|
if(!soaked > effective_force)
|
||||||
|
standard_weapon_hit_effects(I, user, effective_force, blocked, soaked, hit_zone)
|
||||||
|
|
||||||
if(I.damtype == BRUTE && prob(33)) // Added blood for whacking non-humans too
|
if(I.damtype == BRUTE && prob(33)) // Added blood for whacking non-humans too
|
||||||
var/turf/simulated/location = get_turf(src)
|
var/turf/simulated/location = get_turf(src)
|
||||||
@@ -163,7 +178,7 @@
|
|||||||
return blocked
|
return blocked
|
||||||
|
|
||||||
//returns 0 if the effects failed to apply for some reason, 1 otherwise.
|
//returns 0 if the effects failed to apply for some reason, 1 otherwise.
|
||||||
/mob/living/proc/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/hit_zone)
|
/mob/living/proc/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/soaked, var/hit_zone)
|
||||||
if(!effective_force || blocked >= 100)
|
if(!effective_force || blocked >= 100)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -171,6 +186,10 @@
|
|||||||
if(HULK in user.mutations)
|
if(HULK in user.mutations)
|
||||||
effective_force *= 2
|
effective_force *= 2
|
||||||
|
|
||||||
|
//Armor soak
|
||||||
|
if(soaked >= effective_force)
|
||||||
|
return 0
|
||||||
|
|
||||||
//Apply weapon damage
|
//Apply weapon damage
|
||||||
var/weapon_sharp = is_sharp(I)
|
var/weapon_sharp = is_sharp(I)
|
||||||
var/weapon_edge = has_edge(I)
|
var/weapon_edge = has_edge(I)
|
||||||
@@ -178,7 +197,7 @@
|
|||||||
weapon_sharp = 0
|
weapon_sharp = 0
|
||||||
weapon_edge = 0
|
weapon_edge = 0
|
||||||
|
|
||||||
apply_damage(effective_force, I.damtype, hit_zone, blocked, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
|
apply_damage(effective_force, I.damtype, hit_zone, blocked, soaked, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -200,8 +219,10 @@
|
|||||||
|
|
||||||
src.visible_message("\red [src] has been hit by [O].")
|
src.visible_message("\red [src] has been hit by [O].")
|
||||||
var/armor = run_armor_check(null, "melee")
|
var/armor = run_armor_check(null, "melee")
|
||||||
|
var/soaked = get_armor_soak(null, "melee")
|
||||||
|
|
||||||
apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O)
|
|
||||||
|
apply_damage(throw_damage, dtype, null, armor, soaked, is_sharp(O), has_edge(O), O)
|
||||||
|
|
||||||
O.throwing = 0 //it hit, so stop moving
|
O.throwing = 0 //it hit, so stop moving
|
||||||
|
|
||||||
@@ -230,6 +251,9 @@
|
|||||||
if(!O || !src) return
|
if(!O || !src) return
|
||||||
|
|
||||||
if(O.sharp) //Projectile is suitable for pinning.
|
if(O.sharp) //Projectile is suitable for pinning.
|
||||||
|
if(soaked >= throw_damage) //Don't embed if it didn't actually damage
|
||||||
|
return
|
||||||
|
|
||||||
//Handles embedding for non-humans and simple_animals.
|
//Handles embedding for non-humans and simple_animals.
|
||||||
embed(O)
|
embed(O)
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ var/list/department_radio_keys = list(
|
|||||||
":s" = "Security", ".s" = "Security",
|
":s" = "Security", ".s" = "Security",
|
||||||
":w" = "whisper", ".w" = "whisper",
|
":w" = "whisper", ".w" = "whisper",
|
||||||
":t" = "Mercenary", ".t" = "Mercenary",
|
":t" = "Mercenary", ".t" = "Mercenary",
|
||||||
|
":x" = "Raider", ".x" = "Raider",
|
||||||
":u" = "Supply", ".u" = "Supply",
|
":u" = "Supply", ".u" = "Supply",
|
||||||
":v" = "Service", ".v" = "Service",
|
":v" = "Service", ".v" = "Service",
|
||||||
":p" = "AI Private", ".p" = "AI Private",
|
":p" = "AI Private", ".p" = "AI Private",
|
||||||
@@ -26,6 +27,7 @@ var/list/department_radio_keys = list(
|
|||||||
":S" = "Security", ".S" = "Security",
|
":S" = "Security", ".S" = "Security",
|
||||||
":W" = "whisper", ".W" = "whisper",
|
":W" = "whisper", ".W" = "whisper",
|
||||||
":T" = "Mercenary", ".T" = "Mercenary",
|
":T" = "Mercenary", ".T" = "Mercenary",
|
||||||
|
":X" = "Raider", ".X" = "Raider",
|
||||||
":U" = "Supply", ".U" = "Supply",
|
":U" = "Supply", ".U" = "Supply",
|
||||||
":V" = "Service", ".V" = "Service",
|
":V" = "Service", ".V" = "Service",
|
||||||
":P" = "AI Private", ".P" = "AI Private",
|
":P" = "AI Private", ".P" = "AI Private",
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
|||||||
var/choice = alert("Would you like to select a hologram based on a (visible) crew member, switch to unique avatar, or load your character from your character slot?",,"Crew Member","Unique","My Character")
|
var/choice = alert("Would you like to select a hologram based on a (visible) crew member, switch to unique avatar, or load your character from your character slot?",,"Crew Member","Unique","My Character")
|
||||||
|
|
||||||
switch(choice)
|
switch(choice)
|
||||||
if("Crew Member")
|
if("Crew Member") //A seeable crew member (or a dog)
|
||||||
var/list/targets = trackable_mobs()
|
var/list/targets = trackable_mobs()
|
||||||
if(targets.len)
|
if(targets.len)
|
||||||
input = input("Select a crew member:") as null|anything in targets //The definition of "crew member" is a little loose...
|
input = input("Select a crew member:") as null|anything in targets //The definition of "crew member" is a little loose...
|
||||||
@@ -561,7 +561,7 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
|||||||
else
|
else
|
||||||
alert("No suitable records found. Aborting.")
|
alert("No suitable records found. Aborting.")
|
||||||
|
|
||||||
if("My Character")
|
if("My Character") //Loaded character slot
|
||||||
if(!client || !client.prefs) return
|
if(!client || !client.prefs) return
|
||||||
var/mob/living/carbon/human/dummy/dummy = new ()
|
var/mob/living/carbon/human/dummy/dummy = new ()
|
||||||
//This doesn't include custom_items because that's ... hard.
|
//This doesn't include custom_items because that's ... hard.
|
||||||
@@ -574,11 +574,16 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
|||||||
qdel(dummy)
|
qdel(dummy)
|
||||||
holo_icon = new_holo
|
holo_icon = new_holo
|
||||||
|
|
||||||
else //One from the dmi.
|
else //A premade from the dmi
|
||||||
var/icon_list[] = list(
|
var/icon_list[] = list(
|
||||||
"default",
|
"default",
|
||||||
"floating face",
|
"floating face",
|
||||||
|
"singularity",
|
||||||
|
"drone",
|
||||||
"carp",
|
"carp",
|
||||||
|
"spider",
|
||||||
|
"bear",
|
||||||
|
"slime",
|
||||||
"ian",
|
"ian",
|
||||||
"runtime",
|
"runtime",
|
||||||
"poly",
|
"poly",
|
||||||
@@ -602,8 +607,18 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
|||||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))
|
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))
|
||||||
if("floating face")
|
if("floating face")
|
||||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo2"))
|
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo2"))
|
||||||
|
if("singularity")
|
||||||
|
holo_icon = getHologramIcon(icon('icons/obj/singularity.dmi',"singularity_s1"))
|
||||||
|
if("drone")
|
||||||
|
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"drone0"))
|
||||||
if("carp")
|
if("carp")
|
||||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo4"))
|
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo4"))
|
||||||
|
if("spider")
|
||||||
|
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"nurse"))
|
||||||
|
if("bear")
|
||||||
|
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"brownbear"))
|
||||||
|
if("slime")
|
||||||
|
holo_icon = getHologramIcon(icon('icons/mob/slimes.dmi',"cerulean adult slime"))
|
||||||
if("ian")
|
if("ian")
|
||||||
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"corgi"))
|
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"corgi"))
|
||||||
if("runtime")
|
if("runtime")
|
||||||
|
|||||||
@@ -28,11 +28,14 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
name = "Red"
|
name = "Red"
|
||||||
alive_icon = "ai-red"
|
alive_icon = "ai-red"
|
||||||
alive_light = "#F04848"
|
alive_light = "#F04848"
|
||||||
|
dead_icon = "ai-red_dead"
|
||||||
|
dead_light = "#F04848"
|
||||||
|
|
||||||
/datum/ai_icon/green
|
/datum/ai_icon/green
|
||||||
name = "Green"
|
name = "Green"
|
||||||
alive_icon = "ai-wierd"
|
alive_icon = "ai-wierd"
|
||||||
alive_light = "#00FF99"
|
alive_light = "#00FF99"
|
||||||
|
dead_icon = "ai-weird_dead"
|
||||||
|
|
||||||
/datum/ai_icon/blue
|
/datum/ai_icon/blue
|
||||||
name = "Blue"
|
name = "Blue"
|
||||||
@@ -44,6 +47,11 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
alive_icon = "ai-angryface"
|
alive_icon = "ai-angryface"
|
||||||
alive_light = "#FFFF33"
|
alive_light = "#FFFF33"
|
||||||
|
|
||||||
|
/datum/ai_icon/angel
|
||||||
|
name = "Angel"
|
||||||
|
alive_icon = "ai-angel"
|
||||||
|
dead_icon = "ai-angel_dead"
|
||||||
|
|
||||||
/datum/ai_icon/bliss
|
/datum/ai_icon/bliss
|
||||||
name = "Bliss"
|
name = "Bliss"
|
||||||
alive_icon = "ai-bliss"
|
alive_icon = "ai-bliss"
|
||||||
@@ -57,6 +65,7 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
/datum/ai_icon/database
|
/datum/ai_icon/database
|
||||||
name = "Database"
|
name = "Database"
|
||||||
alive_icon = "ai-database"
|
alive_icon = "ai-database"
|
||||||
|
dead_icon = "ai-database_dead"
|
||||||
|
|
||||||
/datum/ai_icon/dorf
|
/datum/ai_icon/dorf
|
||||||
name = "Dorf"
|
name = "Dorf"
|
||||||
@@ -80,6 +89,8 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
name = "Goon"
|
name = "Goon"
|
||||||
alive_icon = "ai-goon"
|
alive_icon = "ai-goon"
|
||||||
alive_light = "#3E5C80"
|
alive_light = "#3E5C80"
|
||||||
|
dead_icon = "ai-goon-crash"
|
||||||
|
dead_light = "#3E5C80"
|
||||||
|
|
||||||
/datum/ai_icon/heartline
|
/datum/ai_icon/heartline
|
||||||
name = "Heartline"
|
name = "Heartline"
|
||||||
@@ -91,6 +102,10 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
alive_icon = "ai-helios"
|
alive_icon = "ai-helios"
|
||||||
alive_light = "#F2CF73"
|
alive_light = "#F2CF73"
|
||||||
|
|
||||||
|
/datum/ai_icon/hourglass
|
||||||
|
name = "Hourglass"
|
||||||
|
alive_icon = "ai-hourglass"
|
||||||
|
|
||||||
/datum/ai_icon/inverted
|
/datum/ai_icon/inverted
|
||||||
name = "Inverted"
|
name = "Inverted"
|
||||||
alive_icon = "ai-u"
|
alive_icon = "ai-u"
|
||||||
@@ -100,6 +115,7 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
name = "Lonestar"
|
name = "Lonestar"
|
||||||
alive_icon = "ai-lonestar"
|
alive_icon = "ai-lonestar"
|
||||||
alive_light = "#58751C"
|
alive_light = "#58751C"
|
||||||
|
dead_icon = "ai-lonestar_dead"
|
||||||
|
|
||||||
/datum/ai_icon/matrix
|
/datum/ai_icon/matrix
|
||||||
name = "Matrix"
|
name = "Matrix"
|
||||||
@@ -110,6 +126,7 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
name = "Monochrome"
|
name = "Monochrome"
|
||||||
alive_icon = "ai-mono"
|
alive_icon = "ai-mono"
|
||||||
alive_light = "#585858"
|
alive_light = "#585858"
|
||||||
|
dead_icon = "ai-mono_dead"
|
||||||
|
|
||||||
/datum/ai_icon/nanotrasen
|
/datum/ai_icon/nanotrasen
|
||||||
name = "NanoTrasen"
|
name = "NanoTrasen"
|
||||||
@@ -128,13 +145,16 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
|
|
||||||
/datum/ai_icon/soviet
|
/datum/ai_icon/soviet
|
||||||
name = "Soviet"
|
name = "Soviet"
|
||||||
alive_icon = "ai-redoctober"
|
alive_icon = "ai-soviet"
|
||||||
alive_light = "#FF4307"
|
alive_light = "#FF4307"
|
||||||
|
dead_icon = "ai-soviet_dead"
|
||||||
|
dead_light = "#FF4307"
|
||||||
|
|
||||||
/datum/ai_icon/Static
|
/datum/ai_icon/Static
|
||||||
name = "Static"
|
name = "Static"
|
||||||
alive_icon = "ai-static"
|
alive_icon = "ai-static"
|
||||||
alive_light = "#4784C1"
|
alive_light = "#4784C1"
|
||||||
|
alive_icon = "ai-static_dead"
|
||||||
|
|
||||||
/datum/ai_icon/text
|
/datum/ai_icon/text
|
||||||
name = "Text"
|
name = "Text"
|
||||||
@@ -143,6 +163,7 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
/datum/ai_icon/trapped
|
/datum/ai_icon/trapped
|
||||||
name = "Trapped"
|
name = "Trapped"
|
||||||
alive_icon = "ai-hades"
|
alive_icon = "ai-hades"
|
||||||
|
dead_icon = "ai-hades_dead"
|
||||||
|
|
||||||
/datum/ai_icon/triumvirate_static
|
/datum/ai_icon/triumvirate_static
|
||||||
name = "Triumvirate"
|
name = "Triumvirate"
|
||||||
|
|||||||
@@ -158,9 +158,19 @@ var/global/list/robot_modules = list(
|
|||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/standard
|
/obj/item/weapon/robot_module/robot/standard
|
||||||
name = "standard robot module"
|
name = "standard robot module"
|
||||||
sprites = list( "Basic" = "robot_old",
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robot",
|
||||||
|
"Cabeiri" = "eyebot-standard",
|
||||||
|
"CUPCAKE" = "Noble-STD",
|
||||||
|
"Haruka" = "marinaSD",
|
||||||
|
"Usagi" = "tallflower",
|
||||||
|
"Telemachus" = "toiletbot",
|
||||||
|
"WTOperator" = "sleekstandard",
|
||||||
|
"WTOmni" = "omoikane",
|
||||||
|
"XI-GUS" = "spider",
|
||||||
|
"XI-ALP" = "heavyStandard",
|
||||||
|
"Basic" = "robot_old",
|
||||||
"Android" = "droid",
|
"Android" = "droid",
|
||||||
"Default" = "robot",
|
|
||||||
"Drone" = "drone-standard"
|
"Drone" = "drone-standard"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -181,8 +191,16 @@ var/global/list/robot_modules = list(
|
|||||||
/obj/item/weapon/robot_module/robot/medical/surgeon
|
/obj/item/weapon/robot_module/robot/medical/surgeon
|
||||||
name = "surgeon robot module"
|
name = "surgeon robot module"
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotMedi",
|
||||||
|
"Cabeiri" = "eyebot-medical",
|
||||||
|
"CUPCAKE" = "Noble-MED",
|
||||||
|
"Haruka" = "marinaMD",
|
||||||
|
"Minako" = "arachne",
|
||||||
|
"Usagi" = "tallwhite",
|
||||||
|
"Telemachus" = "toiletbotsurgeon",
|
||||||
|
"WTOperator" = "sleekcmo",
|
||||||
|
"XI-ALP" = "heavyMed",
|
||||||
"Basic" = "Medbot",
|
"Basic" = "Medbot",
|
||||||
"Standard" = "surgeon",
|
|
||||||
"Advanced Droid" = "droid-medical",
|
"Advanced Droid" = "droid-medical",
|
||||||
"Needles" = "medicalrobot",
|
"Needles" = "medicalrobot",
|
||||||
"Drone" = "drone-surgery"
|
"Drone" = "drone-surgery"
|
||||||
@@ -230,8 +248,16 @@ var/global/list/robot_modules = list(
|
|||||||
/obj/item/weapon/robot_module/robot/medical/crisis
|
/obj/item/weapon/robot_module/robot/medical/crisis
|
||||||
name = "crisis robot module"
|
name = "crisis robot module"
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotMedi",
|
||||||
|
"Cabeiri" = "eyebot-medical",
|
||||||
|
"CUPCAKE" = "Noble-MED",
|
||||||
|
"Haruka" = "marinaMD",
|
||||||
|
"Minako" = "arachne",
|
||||||
|
"Usagi" = "tallwhite",
|
||||||
|
"Telemachus" = "toiletbotmedical",
|
||||||
|
"WTOperator" = "sleekmedic",
|
||||||
|
"XI-ALP" = "heavyMed",
|
||||||
"Basic" = "Medbot",
|
"Basic" = "Medbot",
|
||||||
"Standard" = "surgeon",
|
|
||||||
"Advanced Droid" = "droid-medical",
|
"Advanced Droid" = "droid-medical",
|
||||||
"Needles" = "medicalrobot",
|
"Needles" = "medicalrobot",
|
||||||
"Drone - Medical" = "drone-medical",
|
"Drone - Medical" = "drone-medical",
|
||||||
@@ -295,6 +321,15 @@ var/global/list/robot_modules = list(
|
|||||||
networks = list(NETWORK_ENGINEERING)
|
networks = list(NETWORK_ENGINEERING)
|
||||||
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
|
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotEngi",
|
||||||
|
"Cabeiri" = "eyebot-engineering",
|
||||||
|
"CUPCAKE" = "Noble-ENG",
|
||||||
|
"Haruka" = "marinaENG",
|
||||||
|
"Usagi" = "tallyellow",
|
||||||
|
"Telemachus" = "toiletbotengineering",
|
||||||
|
"WTOperator" = "sleekce",
|
||||||
|
"XI-GUS" = "spidereng",
|
||||||
|
"XI-ALP" = "heavyEng",
|
||||||
"Basic" = "Engineering",
|
"Basic" = "Engineering",
|
||||||
"Antique" = "engineerrobot",
|
"Antique" = "engineerrobot",
|
||||||
"Landmate" = "landmate",
|
"Landmate" = "landmate",
|
||||||
@@ -312,7 +347,7 @@ var/global/list/robot_modules = list(
|
|||||||
src.modules += new /obj/item/weapon/rcd/borg(src)
|
src.modules += new /obj/item/weapon/rcd/borg(src)
|
||||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||||
src.modules += new /obj/item/weapon/wrench(src)
|
src.modules += new /obj/item/weapon/wrench(src)
|
||||||
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
|
src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
|
||||||
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||||
src.modules += new /obj/item/device/pipe_painter(src)
|
src.modules += new /obj/item/device/pipe_painter(src)
|
||||||
src.modules += new /obj/item/device/floor_painter(src)
|
src.modules += new /obj/item/device/floor_painter(src)
|
||||||
@@ -348,7 +383,7 @@ var/global/list/robot_modules = list(
|
|||||||
/obj/item/weapon/robot_module/robot/engineering/general/New()
|
/obj/item/weapon/robot_module/robot/engineering/general/New()
|
||||||
..()
|
..()
|
||||||
src.modules += new /obj/item/borg/sight/meson(src)
|
src.modules += new /obj/item/borg/sight/meson(src)
|
||||||
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
|
src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
|
||||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||||
src.modules += new /obj/item/weapon/wrench(src)
|
src.modules += new /obj/item/weapon/wrench(src)
|
||||||
src.modules += new /obj/item/weapon/wirecutters(src)
|
src.modules += new /obj/item/weapon/wirecutters(src)
|
||||||
@@ -408,11 +443,19 @@ var/global/list/robot_modules = list(
|
|||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/security/general
|
/obj/item/weapon/robot_module/robot/security/general
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotSecy",
|
||||||
|
"Cabeiri" = "eyebot-security",
|
||||||
|
"Cerberus" = "bloodhound",
|
||||||
|
"Cerberus - Treaded" = "treadhound",
|
||||||
|
"CUPCAKE" = "Noble-SEC",
|
||||||
|
"Haruka" = "marinaSC",
|
||||||
|
"Usagi" = "tallred",
|
||||||
|
"Telemachus" = "toiletbotsecurity",
|
||||||
|
"WTOperator" = "sleeksecurity",
|
||||||
|
"XI-GUS" = "spidersec",
|
||||||
|
"XI-ALP" = "heavySec",
|
||||||
"Basic" = "secborg",
|
"Basic" = "secborg",
|
||||||
"Red Knight" = "Security",
|
|
||||||
"Black Knight" = "securityrobot",
|
"Black Knight" = "securityrobot",
|
||||||
"Bloodhound" = "bloodhound",
|
|
||||||
"Bloodhound - Treaded" = "secborg+tread",
|
|
||||||
"Drone" = "drone-sec"
|
"Drone" = "drone-sec"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -448,6 +491,13 @@ var/global/list/robot_modules = list(
|
|||||||
name = "janitorial robot module"
|
name = "janitorial robot module"
|
||||||
channels = list("Service" = 1)
|
channels = list("Service" = 1)
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotJani",
|
||||||
|
"Cabeiri" = "eyebot-janitor",
|
||||||
|
"CUPCAKE" = "Noble-CLN",
|
||||||
|
"Haruka" = "marinaJN",
|
||||||
|
"Telemachus" = "toiletbotjanitor",
|
||||||
|
"WTOperator" = "sleekjanitor",
|
||||||
|
"XI-ALP" = "heavyRes",
|
||||||
"Basic" = "JanBot2",
|
"Basic" = "JanBot2",
|
||||||
"Mopbot" = "janitorrobot",
|
"Mopbot" = "janitorrobot",
|
||||||
"Mop Gear Rex" = "mopgearrex",
|
"Mop Gear Rex" = "mopgearrex",
|
||||||
@@ -488,11 +538,21 @@ var/global/list/robot_modules = list(
|
|||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/clerical/butler
|
/obj/item/weapon/robot_module/robot/clerical/butler
|
||||||
sprites = list( "Waitress" = "Service",
|
sprites = list(
|
||||||
"Kent" = "toiletbot",
|
"M-USE NanoTrasen" = "robotServ",
|
||||||
|
"Cabeiri" = "eyebot-standard",
|
||||||
|
"CUPCAKE" = "Noble-SRV",
|
||||||
|
"Haruka" = "marinaSV",
|
||||||
|
"Usagi" = "tallgreen",
|
||||||
|
"Telemachus" = "toiletbot",
|
||||||
|
"WTOperator" = "sleekservice",
|
||||||
|
"WTOmni" = "omoikane",
|
||||||
|
"XI-GUS" = "spider",
|
||||||
|
"XI-ALP" = "heavyServ",
|
||||||
|
"Standard" = "Service2",
|
||||||
|
"Waitress" = "Service",
|
||||||
"Bro" = "Brobot",
|
"Bro" = "Brobot",
|
||||||
"Rich" = "maximillion",
|
"Rich" = "maximillion",
|
||||||
"Default" = "Service2",
|
|
||||||
"Drone - Service" = "drone-service",
|
"Drone - Service" = "drone-service",
|
||||||
"Drone - Hydro" = "drone-hydro"
|
"Drone - Hydro" = "drone-hydro"
|
||||||
)
|
)
|
||||||
@@ -532,12 +592,21 @@ var/global/list/robot_modules = list(
|
|||||||
/obj/item/weapon/robot_module/robot/clerical/general
|
/obj/item/weapon/robot_module/robot/clerical/general
|
||||||
name = "clerical robot module"
|
name = "clerical robot module"
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"M-USE NanoTrasen" = "robotCler",
|
||||||
|
"Cabeiri" = "eyebot-standard",
|
||||||
|
"CUPCAKE" = "Noble-SRV",
|
||||||
|
"Haruka" = "marinaSV",
|
||||||
|
"Usagi" = "tallgreen",
|
||||||
|
"Telemachus" = "toiletbot",
|
||||||
|
"WTOperator" = "sleekclerical",
|
||||||
|
"WTOmni" = "omoikane",
|
||||||
|
"XI-GUS" = "spidercom",
|
||||||
|
"XI-ALP" = "heavyServ",
|
||||||
"Waitress" = "Service",
|
"Waitress" = "Service",
|
||||||
"Kent" = "toiletbot",
|
|
||||||
"Bro" = "Brobot",
|
"Bro" = "Brobot",
|
||||||
"Rich" = "maximillion",
|
"Rich" = "maximillion",
|
||||||
"Default" = "Service2",
|
"Default" = "Service2",
|
||||||
"Drone" = "drone-service"
|
"Drone" = "drone-blu"
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/clerical/general/New()
|
/obj/item/weapon/robot_module/robot/clerical/general/New()
|
||||||
@@ -563,6 +632,14 @@ var/global/list/robot_modules = list(
|
|||||||
channels = list("Supply" = 1)
|
channels = list("Supply" = 1)
|
||||||
networks = list(NETWORK_MINE)
|
networks = list(NETWORK_MINE)
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"NM-USE NanoTrasen" = "robotMine",
|
||||||
|
"Cabeiri" = "eyebot-miner",
|
||||||
|
"CUPCAKE" = "Noble-DIG",
|
||||||
|
"Haruka" = "marinaMN",
|
||||||
|
"Telemachus" = "toiletbotminer",
|
||||||
|
"WTOperator" = "sleekminer",
|
||||||
|
"XI-GUS" = "spidermining",
|
||||||
|
"XI-ALP" = "heavyMiner",
|
||||||
"Basic" = "Miner_old",
|
"Basic" = "Miner_old",
|
||||||
"Advanced Droid" = "droid-miner",
|
"Advanced Droid" = "droid-miner",
|
||||||
"Treadhead" = "Miner",
|
"Treadhead" = "Miner",
|
||||||
@@ -586,6 +663,10 @@ var/global/list/robot_modules = list(
|
|||||||
name = "research module"
|
name = "research module"
|
||||||
channels = list("Science" = 1)
|
channels = list("Science" = 1)
|
||||||
sprites = list(
|
sprites = list(
|
||||||
|
"L'Ouef" = "peaceborg",
|
||||||
|
"Cabeiri" = "eyebot-science",
|
||||||
|
"Haruka" = "marinaSCI",
|
||||||
|
"WTOperator" = "sleekscience",
|
||||||
"Droid" = "droid-science",
|
"Droid" = "droid-science",
|
||||||
"Drone" = "drone-science"
|
"Drone" = "drone-science"
|
||||||
)
|
)
|
||||||
@@ -599,7 +680,7 @@ var/global/list/robot_modules = list(
|
|||||||
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
||||||
src.modules += new /obj/item/device/robotanalyzer(src)
|
src.modules += new /obj/item/device/robotanalyzer(src)
|
||||||
src.modules += new /obj/item/weapon/card/robot(src)
|
src.modules += new /obj/item/weapon/card/robot(src)
|
||||||
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
|
src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
|
||||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||||
src.modules += new /obj/item/weapon/wrench(src)
|
src.modules += new /obj/item/weapon/wrench(src)
|
||||||
src.modules += new /obj/item/weapon/wirecutters(src)
|
src.modules += new /obj/item/weapon/wirecutters(src)
|
||||||
@@ -641,7 +722,13 @@ var/global/list/robot_modules = list(
|
|||||||
LANGUAGE_SIGN = 0
|
LANGUAGE_SIGN = 0
|
||||||
)
|
)
|
||||||
sprites = list(
|
sprites = list(
|
||||||
"Dread" = "securityrobot",
|
"Cerberus" = "syndie_bloodhound",
|
||||||
|
"Cerberus - Treaded" = "syndie_treadhound",
|
||||||
|
"Ares" = "squats",
|
||||||
|
"Telemachus" = "toiletbotantag",
|
||||||
|
"WTOperator" = "hosborg",
|
||||||
|
"XI-GUS" = "spidersyndi",
|
||||||
|
"XI-ALP" = "syndi-heavy"
|
||||||
)
|
)
|
||||||
var/id
|
var/id
|
||||||
|
|
||||||
@@ -666,7 +753,10 @@ var/global/list/robot_modules = list(
|
|||||||
/obj/item/weapon/robot_module/robot/security/combat
|
/obj/item/weapon/robot_module/robot/security/combat
|
||||||
name = "combat robot module"
|
name = "combat robot module"
|
||||||
hide_on_manifest = 1
|
hide_on_manifest = 1
|
||||||
sprites = list("Combat Android" = "droid-combat")
|
sprites = list(
|
||||||
|
"Haruka" = "marinaCB",
|
||||||
|
"Combat Android" = "droid-combat"
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/security/combat/New()
|
/obj/item/weapon/robot_module/robot/security/combat/New()
|
||||||
..()
|
..()
|
||||||
@@ -686,7 +776,8 @@ var/global/list/robot_modules = list(
|
|||||||
|
|
||||||
/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot)
|
/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot)
|
||||||
..()
|
..()
|
||||||
src.modules += new /obj/item/weapon/weldingtool(src)
|
src.modules += new /obj/item/borg/sight/meson(src)
|
||||||
|
src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
|
||||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||||
src.modules += new /obj/item/weapon/wrench(src)
|
src.modules += new /obj/item/weapon/wrench(src)
|
||||||
src.modules += new /obj/item/weapon/crowbar(src)
|
src.modules += new /obj/item/weapon/crowbar(src)
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
var/mob/living/carbon/human/H = target_mob
|
var/mob/living/carbon/human/H = target_mob
|
||||||
var/dam_zone = pick(BP_TORSO, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG)
|
var/dam_zone = pick(BP_TORSO, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG)
|
||||||
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
|
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
|
||||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1, edge=1)
|
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), H.get_armor_soak(affecting, "melee"), sharp=1, edge=1)
|
||||||
return H
|
return H
|
||||||
else if(isliving(target_mob))
|
else if(isliving(target_mob))
|
||||||
var/mob/living/L = target_mob
|
var/mob/living/L = target_mob
|
||||||
|
|||||||
73
code/modules/mob/living/simple_animal/animals/fish.dm
Normal file
73
code/modules/mob/living/simple_animal/animals/fish.dm
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
// Different types of fish! They are all subtypes of this tho
|
||||||
|
/mob/living/simple_animal/fish
|
||||||
|
name = "fish"
|
||||||
|
desc = "Its a fishy. No touchy fishy."
|
||||||
|
icon = 'icons/mob/fish.dmi'
|
||||||
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
|
|
||||||
|
// By defautl they can be in any water turf. Subtypes might restrict to deep/shallow etc
|
||||||
|
var/global/list/suitable_turf_types = list(
|
||||||
|
/turf/simulated/floor/beach/water,
|
||||||
|
/turf/simulated/floor/beach/coastline,
|
||||||
|
/turf/simulated/floor/holofloor/beach/water,
|
||||||
|
/turf/simulated/floor/holofloor/beach/coastline,
|
||||||
|
/turf/simulated/floor/water
|
||||||
|
)
|
||||||
|
|
||||||
|
// Don't swim out of the water
|
||||||
|
/mob/living/simple_animal/fish/handle_wander_movement()
|
||||||
|
if(isturf(src.loc) && !resting && !buckled && canmove) //Physically capable of moving?
|
||||||
|
lifes_since_move++ //Increment turns since move (turns are life() cycles)
|
||||||
|
if(lifes_since_move >= turns_per_move)
|
||||||
|
if(!(stop_when_pulled && pulledby)) //Some animals don't move when pulled
|
||||||
|
var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND
|
||||||
|
moving_to = pick(cardinal)
|
||||||
|
dir = moving_to //How about we turn them the direction they are moving, yay.
|
||||||
|
var/turf/T = get_step(src,moving_to)
|
||||||
|
if(T && is_type_in_list(T, suitable_turf_types))
|
||||||
|
Move(T)
|
||||||
|
lifes_since_move = 0
|
||||||
|
|
||||||
|
// Take damage if we are not in water
|
||||||
|
/mob/living/simple_animal/fish/handle_breathing()
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(T && !is_type_in_list(T, suitable_turf_types))
|
||||||
|
if(prob(50))
|
||||||
|
say(pick("Blub", "Glub", "Burble"))
|
||||||
|
adjustBruteLoss(unsuitable_atoms_damage)
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/bass
|
||||||
|
name = "bass"
|
||||||
|
icon_state = "bass-swim"
|
||||||
|
icon_living = "bass-swim"
|
||||||
|
icon_dead = "bass-dead"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/trout
|
||||||
|
name = "trout"
|
||||||
|
icon_state = "trout-swim"
|
||||||
|
icon_living = "trout-swim"
|
||||||
|
icon_dead = "trout-dead"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/salmon
|
||||||
|
name = "salmon"
|
||||||
|
icon_state = "salmon-swim"
|
||||||
|
icon_living = "salmon-swim"
|
||||||
|
icon_dead = "salmon-dead"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/perch
|
||||||
|
name = "perch"
|
||||||
|
icon_state = "perch-swim"
|
||||||
|
icon_living = "perch-swim"
|
||||||
|
icon_dead = "perch-dead"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/pike
|
||||||
|
name = "pike"
|
||||||
|
icon_state = "pike-swim"
|
||||||
|
icon_living = "pike-swim"
|
||||||
|
icon_dead = "pike-dead"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/fish/koi
|
||||||
|
name = "koi"
|
||||||
|
icon_state = "koi-swim"
|
||||||
|
icon_living = "koi-swim"
|
||||||
|
icon_dead = "koi-dead"
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
speak_emote = list("chitters")
|
speak_emote = list("chitters")
|
||||||
emote_hear = list("chitters")
|
emote_hear = list("chitters")
|
||||||
|
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/spidermeat
|
||||||
|
|
||||||
var/busy = 0
|
var/busy = 0
|
||||||
var/poison_per_bite = 5
|
var/poison_per_bite = 5
|
||||||
|
|||||||
@@ -481,7 +481,7 @@
|
|||||||
var/mob/living/carbon/human/H = parrot_interest
|
var/mob/living/carbon/human/H = parrot_interest
|
||||||
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
||||||
|
|
||||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
|
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), H.get_armor_soak(affecting, "melee"), sharp=1)
|
||||||
visible_emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
|
visible_emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -904,7 +904,7 @@ mob/proc/yank_out_object()
|
|||||||
if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-.
|
if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-.
|
||||||
var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15))
|
var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15))
|
||||||
affected.wounds += I
|
affected.wounds += I
|
||||||
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
|
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50)
|
||||||
|
|
||||||
if (ishuman(U))
|
if (ishuman(U))
|
||||||
var/mob/living/carbon/human/human_user = U
|
var/mob/living/carbon/human/human_user = U
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
user << "<span class='notice'>You must stand still to feel [E] for fractures.</span>"
|
user << "<span class='notice'>You must stand still to feel [E] for fractures.</span>"
|
||||||
else if(E.status & ORGAN_BROKEN)
|
else if(E.status & ORGAN_BROKEN)
|
||||||
user << "<span class='warning'>The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!</span>"
|
user << "<span class='warning'>The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!</span>"
|
||||||
H.custom_pain("Your [E.name] hurts where it's poked.")
|
H.custom_pain("Your [E.name] hurts where it's poked.", 40)
|
||||||
else
|
else
|
||||||
user << "<span class='notice'>The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.</span>"
|
user << "<span class='notice'>The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.</span>"
|
||||||
|
|
||||||
@@ -56,7 +56,8 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/armor = target.run_armor_check(target, "melee")
|
var/armor = target.run_armor_check(target, "melee")
|
||||||
if(armor < 60)
|
var/soaked = target.get_armor_soak(target, "melee")
|
||||||
|
if(armor + soaked < 60)
|
||||||
target << "<span class='danger'>You feel extreme pain!</span>"
|
target << "<span class='danger'>You feel extreme pain!</span>"
|
||||||
|
|
||||||
var/max_halloss = round(target.species.total_health * 0.8) //up to 80% of passing out
|
var/max_halloss = round(target.species.total_health * 0.8) //up to 80% of passing out
|
||||||
@@ -100,8 +101,9 @@
|
|||||||
damage += hat.force * 3
|
damage += hat.force * 3
|
||||||
|
|
||||||
var/armor = target.run_armor_check(BP_HEAD, "melee")
|
var/armor = target.run_armor_check(BP_HEAD, "melee")
|
||||||
target.apply_damage(damage, BRUTE, BP_HEAD, armor)
|
var/soaked = target.get_armor_soak(BP_HEAD, "melee")
|
||||||
attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD, "melee"))
|
target.apply_damage(damage, BRUTE, BP_HEAD, armor, soaked)
|
||||||
|
attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD), attacker.get_armor_soak(BP_HEAD), "melee")
|
||||||
|
|
||||||
if(!armor && target.headcheck(BP_HEAD) && prob(damage))
|
if(!armor && target.headcheck(BP_HEAD) && prob(damage))
|
||||||
target.apply_effect(20, PARALYZE)
|
target.apply_effect(20, PARALYZE)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user