Polaris sync
@@ -57,3 +57,4 @@
|
|||||||
#define INFECTION_LEVEL_ONE 100
|
#define INFECTION_LEVEL_ONE 100
|
||||||
#define INFECTION_LEVEL_TWO 500
|
#define INFECTION_LEVEL_TWO 500
|
||||||
#define INFECTION_LEVEL_THREE 1000
|
#define INFECTION_LEVEL_THREE 1000
|
||||||
|
#define INFECTION_LEVEL_MAX 1500
|
||||||
@@ -63,11 +63,13 @@
|
|||||||
/obj/item/clothing/suit/storage/vest/heavy/merc,
|
/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||||
/obj/item/clothing/glasses/night,
|
/obj/item/clothing/glasses/night,
|
||||||
/obj/item/weapon/storage/box/anti_photons,
|
/obj/item/weapon/storage/box/anti_photons,
|
||||||
/obj/item/ammo_magazine/clip/c12g/pellet, /obj/item/ammo_magazine/clip/c12g
|
/obj/item/ammo_magazine/clip/c12g/pellet,
|
||||||
|
/obj/item/ammo_magazine/clip/c12g
|
||||||
),
|
),
|
||||||
list( //the doc,
|
list( //the doc,
|
||||||
/obj/item/weapon/storage/firstaid/combat,
|
/obj/item/weapon/storage/firstaid/combat,
|
||||||
/obj/item/weapon/gun/projectile/dartgun, /obj/item/weapon/reagent_containers/hypospray,
|
/obj/item/weapon/gun/projectile/dartgun,
|
||||||
|
/obj/item/weapon/reagent_containers/hypospray,
|
||||||
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate,
|
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate,
|
||||||
/obj/item/weapon/reagent_containers/glass/bottle/cyanide,
|
/obj/item/weapon/reagent_containers/glass/bottle/cyanide,
|
||||||
/obj/item/ammo_magazine/chemdart
|
/obj/item/ammo_magazine/chemdart
|
||||||
|
|||||||
@@ -119,7 +119,7 @@
|
|||||||
/obj/item/weapon/storage/belt/medical,
|
/obj/item/weapon/storage/belt/medical,
|
||||||
/obj/item/device/radio/headset/heads/cmo,
|
/obj/item/device/radio/headset/heads/cmo,
|
||||||
/obj/item/clothing/under/rank/chief_medical_officer,
|
/obj/item/clothing/under/rank/chief_medical_officer,
|
||||||
/obj/item/weapon/reagent_containers/hypospray,
|
/obj/item/weapon/reagent_containers/hypospray/vial,
|
||||||
/obj/item/clothing/accessory/stethoscope,
|
/obj/item/clothing/accessory/stethoscope,
|
||||||
/obj/item/clothing/glasses/hud/health,
|
/obj/item/clothing/glasses/hud/health,
|
||||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
/obj/item/clothing/shoes/magboots = 2,
|
/obj/item/clothing/shoes/magboots = 2,
|
||||||
/obj/item/weapon/tank/oxygen = 2
|
/obj/item/weapon/tank/oxygen = 2
|
||||||
)
|
)
|
||||||
cost = 50
|
cost = 60
|
||||||
containertype = "/obj/structure/closet/crate/secure"
|
containertype = "/obj/structure/closet/crate/secure"
|
||||||
containername = "Vey-Med Medical voidsuit crate"
|
containername = "Vey-Med Medical voidsuit crate"
|
||||||
access = access_medical_equip
|
access = access_medical_equip
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/atom/movable
|
/atom/movable
|
||||||
layer = 3
|
layer = 3
|
||||||
appearance_flags = TILE_BOUND
|
appearance_flags = TILE_BOUND|PIXEL_SCALE
|
||||||
var/last_move = null
|
var/last_move = null
|
||||||
var/anchored = 0
|
var/anchored = 0
|
||||||
// var/elevation = 2 - not used anywhere
|
// var/elevation = 2 - not used anywhere
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
var/moved_recently = 0
|
var/moved_recently = 0
|
||||||
var/mob/pulledby = null
|
var/mob/pulledby = null
|
||||||
var/item_state = null // Used to specify the item state for the on-mob overlays.
|
var/item_state = null // Used to specify the item state for the on-mob overlays.
|
||||||
|
var/icon_scale = 1 // Used to scale icons up or down in update_transform().
|
||||||
var/auto_init = 1
|
var/auto_init = 1
|
||||||
|
|
||||||
/atom/movable/New()
|
/atom/movable/New()
|
||||||
@@ -296,3 +296,12 @@
|
|||||||
return null
|
return null
|
||||||
return text2num(pickweight(candidates))
|
return text2num(pickweight(candidates))
|
||||||
|
|
||||||
|
/atom/movable/proc/update_transform()
|
||||||
|
var/matrix/M = matrix()
|
||||||
|
M.Scale(icon_scale)
|
||||||
|
src.transform = M
|
||||||
|
|
||||||
|
// Use this to set the object's scale.
|
||||||
|
/atom/movable/proc/adjust_scale(new_scale)
|
||||||
|
icon_scale = new_scale
|
||||||
|
update_transform()
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
|||||||
var/list/datum/absorbed_dna/absorbed_dna = list()
|
var/list/datum/absorbed_dna/absorbed_dna = list()
|
||||||
var/list/absorbed_languages = list() // Necessary because of set_species stuff
|
var/list/absorbed_languages = list() // Necessary because of set_species stuff
|
||||||
var/absorbedcount = 0
|
var/absorbedcount = 0
|
||||||
|
var/lingabsorbedcount = 1 //Starts at one, because that's us
|
||||||
var/chem_charges = 20
|
var/chem_charges = 20
|
||||||
var/chem_recharge_rate = 0.5
|
var/chem_recharge_rate = 0.5
|
||||||
var/chem_storage = 50
|
var/chem_storage = 50
|
||||||
@@ -11,8 +12,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
|||||||
var/changelingID = "Changeling"
|
var/changelingID = "Changeling"
|
||||||
var/geneticdamage = 0
|
var/geneticdamage = 0
|
||||||
var/isabsorbing = 0
|
var/isabsorbing = 0
|
||||||
var/geneticpoints = 5
|
var/geneticpoints = 7
|
||||||
var/max_geneticpoints = 5
|
var/max_geneticpoints = 7
|
||||||
var/readapts = 1
|
var/readapts = 1
|
||||||
var/max_readapts = 2
|
var/max_readapts = 2
|
||||||
var/list/purchased_powers = list()
|
var/list/purchased_powers = list()
|
||||||
|
|||||||
@@ -90,16 +90,23 @@
|
|||||||
continue
|
continue
|
||||||
absorbDNA(dna_data)
|
absorbDNA(dna_data)
|
||||||
changeling.absorbedcount++
|
changeling.absorbedcount++
|
||||||
|
|
||||||
T.mind.changeling.absorbed_dna.len = 1
|
T.mind.changeling.absorbed_dna.len = 1
|
||||||
|
|
||||||
changeling.geneticpoints += 5
|
// This is where lings get boosts from eating eachother
|
||||||
changeling.max_geneticpoints += 5
|
if(T.mind.changeling.lingabsorbedcount)
|
||||||
|
for(var/a = 1 to T.mind.changeling.lingabsorbedcount)
|
||||||
|
changeling.lingabsorbedcount++
|
||||||
|
changeling.geneticpoints += 4
|
||||||
|
changeling.max_geneticpoints += 4
|
||||||
|
|
||||||
src << "<span class='notice'>We absorbed another changeling, and we grow stronger. Our genomes increase.</span>"
|
src << "<span class='notice'>We absorbed another changeling, and we grow stronger. Our genomes increase.</span>"
|
||||||
|
|
||||||
T.mind.changeling.chem_charges = 0
|
T.mind.changeling.chem_charges = 0
|
||||||
T.mind.changeling.geneticpoints = -1
|
T.mind.changeling.geneticpoints = -1
|
||||||
T.mind.changeling.max_geneticpoints = -1 //To prevent revival.
|
T.mind.changeling.max_geneticpoints = -1 //To prevent revival.
|
||||||
T.mind.changeling.absorbedcount = 0
|
T.mind.changeling.absorbedcount = 0
|
||||||
|
T.mind.changeling.lingabsorbedcount = 0
|
||||||
|
|
||||||
changeling.absorbedcount++
|
changeling.absorbedcount++
|
||||||
changeling.isabsorbing = 0
|
changeling.isabsorbing = 0
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
|||||||
/datum/game_mode/heist
|
/datum/game_mode/heist
|
||||||
name = "Heist"
|
name = "Heist"
|
||||||
config_tag = "heist"
|
config_tag = "heist"
|
||||||
required_players = 9
|
required_players = 12
|
||||||
required_players_secret = 9
|
required_players_secret = 12
|
||||||
required_enemies = 3
|
required_enemies = 3
|
||||||
round_description = "An unidentified bluespace signature is approaching the station!"
|
round_description = "An unidentified bluespace signature is approaching the station!"
|
||||||
extended_round_description = "The Company's majority control of phoron in the system has marked the \
|
extended_round_description = "The Company's majority control of phoron in the system has marked the \
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ var/list/nuke_disks = list()
|
|||||||
colony of sizable population and considerable wealth causes it to often be the target of various \
|
colony of sizable population and considerable wealth causes it to often be the target of various \
|
||||||
attempts of robbery, fraud and other malicious actions."
|
attempts of robbery, fraud and other malicious actions."
|
||||||
config_tag = "mercenary"
|
config_tag = "mercenary"
|
||||||
required_players = 9
|
required_players = 12
|
||||||
required_players_secret = 9
|
required_players_secret = 12
|
||||||
required_enemies = 3
|
required_enemies = 3
|
||||||
end_on_antag_death = 0
|
end_on_antag_death = 0
|
||||||
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
|
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
|
||||||
|
|||||||
@@ -440,7 +440,7 @@ datum/objective/steal
|
|||||||
"a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer,
|
"a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer,
|
||||||
"a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security,
|
"a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security,
|
||||||
"a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel,
|
"a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel,
|
||||||
"the hypospray" = /obj/item/weapon/reagent_containers/hypospray,
|
"the hypospray" = /obj/item/weapon/reagent_containers/hypospray/vial,
|
||||||
"the colony director's pinpointer" = /obj/item/weapon/pinpointer,
|
"the colony director's pinpointer" = /obj/item/weapon/pinpointer,
|
||||||
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
|
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
|
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
|
||||||
return
|
return
|
||||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||||
user << "You cut the tag off the bodybag"
|
to_chat(user, "You cut the tag off the bodybag")
|
||||||
src.name = "body bag"
|
src.name = "body bag"
|
||||||
src.overlays.Cut()
|
src.overlays.Cut()
|
||||||
return
|
return
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
O.name = "used stasis bag"
|
O.name = "used stasis bag"
|
||||||
O.icon = src.icon
|
O.icon = src.icon
|
||||||
O.icon_state = "bodybag_used"
|
O.icon_state = "bodybag_used"
|
||||||
O.desc = "Pretty useless now.."
|
O.desc = "Pretty useless now..."
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
|
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
|
||||||
@@ -211,9 +211,9 @@
|
|||||||
/obj/structure/closet/body_bag/cryobag/examine(mob/user)
|
/obj/structure/closet/body_bag/cryobag/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
if(Adjacent(user)) //The bag's rather thick and opaque from a distance.
|
if(Adjacent(user)) //The bag's rather thick and opaque from a distance.
|
||||||
user << "<span class='info'>You peer into \the [src].</span>"
|
to_chat(user, "<span class='info'>You peer into \the [src].</span>")
|
||||||
if(syringe)
|
if(syringe)
|
||||||
user << "<span class='info'>It has a syringe added to it.</span>"
|
to_chat(user, "<span class='info'>It has a syringe added to it.</span>")
|
||||||
for(var/mob/living/L in contents)
|
for(var/mob/living/L in contents)
|
||||||
L.examine(user)
|
L.examine(user)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#define RAD_LEVEL_LOW 5 //10 // Around the level at which radiation starts to become harmful
|
#define RAD_LEVEL_LOW 0.01 // Around the level at which radiation starts to become harmful
|
||||||
#define RAD_LEVEL_MODERATE 15 //15
|
#define RAD_LEVEL_MODERATE 10
|
||||||
#define RAD_LEVEL_HIGH 50 //50
|
#define RAD_LEVEL_HIGH 25
|
||||||
#define RAD_LEVEL_VERY_HIGH 100 //100
|
#define RAD_LEVEL_VERY_HIGH 50
|
||||||
|
|
||||||
//Geiger counter
|
//Geiger counter
|
||||||
//Rewritten version of TG's geiger counter
|
//Rewritten version of TG's geiger counter
|
||||||
@@ -19,7 +19,14 @@
|
|||||||
/obj/item/device/geiger/New()
|
/obj/item/device/geiger/New()
|
||||||
processing_objects |= src
|
processing_objects |= src
|
||||||
|
|
||||||
|
/obj/item/device/geiger/Destroy()
|
||||||
|
processing_objects -= src
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/device/geiger/process()
|
/obj/item/device/geiger/process()
|
||||||
|
get_radiation()
|
||||||
|
|
||||||
|
/obj/item/device/geiger/proc/get_radiation()
|
||||||
if(!scanning)
|
if(!scanning)
|
||||||
return
|
return
|
||||||
radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
|
radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
|
||||||
@@ -27,12 +34,29 @@
|
|||||||
|
|
||||||
/obj/item/device/geiger/examine(mob/user)
|
/obj/item/device/geiger/examine(mob/user)
|
||||||
..(user)
|
..(user)
|
||||||
to_chat(user, "<span class='warning'>[scanning ? "ambient" : "stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.</span>")
|
get_radiation()
|
||||||
|
to_chat(user, "<span class='warning'>[scanning ? "Ambient" : "Stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.</span>")
|
||||||
|
|
||||||
|
/obj/item/device/geiger/rad_act(amount)
|
||||||
|
if(!amount || !scanning)
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
if(amount > radiation_count)
|
||||||
|
radiation_count = amount
|
||||||
|
|
||||||
|
var/sound = "geiger"
|
||||||
|
if(amount < 5)
|
||||||
|
sound = "geiger_weak"
|
||||||
|
playsound(src, sound, between(10, 10 + (radiation_count * 4), 100), 0)
|
||||||
|
if(sound == "geiger_weak") // A weak geiger sound every two seconds sounds too infrequent.
|
||||||
|
spawn(1 SECOND)
|
||||||
|
playsound(src, sound, between(10, 10 + (radiation_count * 4), 100), 0)
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/item/device/geiger/attack_self(var/mob/user)
|
/obj/item/device/geiger/attack_self(var/mob/user)
|
||||||
scanning = !scanning
|
scanning = !scanning
|
||||||
update_icon()
|
update_icon()
|
||||||
to_chat(user, "<span class='notice'>\icon[src] You switch [scanning ? "on" : "off"] [src].</span>")
|
to_chat(user, "<span class='notice'>\icon[src] You switch [scanning ? "on" : "off"] \the [src].</span>")
|
||||||
|
|
||||||
/obj/item/device/geiger/update_icon()
|
/obj/item/device/geiger/update_icon()
|
||||||
if(!scanning)
|
if(!scanning)
|
||||||
@@ -40,12 +64,18 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
switch(radiation_count)
|
switch(radiation_count)
|
||||||
if(null) icon_state = "geiger_on_1"
|
if(null)
|
||||||
if(-INFINITY to RAD_LEVEL_LOW) icon_state = "geiger_on_1"
|
icon_state = "geiger_on_1"
|
||||||
if(RAD_LEVEL_LOW + 1 to RAD_LEVEL_MODERATE) icon_state = "geiger_on_2"
|
if(-INFINITY to RAD_LEVEL_LOW)
|
||||||
if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) icon_state = "geiger_on_3"
|
icon_state = "geiger_on_1"
|
||||||
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) icon_state = "geiger_on_4"
|
if(RAD_LEVEL_LOW to RAD_LEVEL_MODERATE)
|
||||||
if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY) icon_state = "geiger_on_5"
|
icon_state = "geiger_on_2"
|
||||||
|
if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH)
|
||||||
|
icon_state = "geiger_on_3"
|
||||||
|
if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH)
|
||||||
|
icon_state = "geiger_on_4"
|
||||||
|
if(RAD_LEVEL_VERY_HIGH to INFINITY)
|
||||||
|
icon_state = "geiger_on_5"
|
||||||
|
|
||||||
#undef RAD_LEVEL_LOW
|
#undef RAD_LEVEL_LOW
|
||||||
#undef RAD_LEVEL_MODERATE
|
#undef RAD_LEVEL_MODERATE
|
||||||
|
|||||||
@@ -75,11 +75,11 @@
|
|||||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||||
|
|
||||||
if(affecting.open)
|
if(affecting.open)
|
||||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(affecting.is_bandaged())
|
if(affecting.is_bandaged())
|
||||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>"
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||||
@@ -93,9 +93,13 @@
|
|||||||
if(used == amount)
|
if(used == amount)
|
||||||
break
|
break
|
||||||
if(!do_mob(user, M, W.damage/5))
|
if(!do_mob(user, M, W.damage/5))
|
||||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||||
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||||
|
return 1
|
||||||
|
|
||||||
if (W.current_stage <= W.max_bleeding_stage)
|
if (W.current_stage <= W.max_bleeding_stage)
|
||||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||||
@@ -111,9 +115,9 @@
|
|||||||
affecting.update_damages()
|
affecting.update_damages()
|
||||||
if(used == amount)
|
if(used == amount)
|
||||||
if(affecting.is_bandaged())
|
if(affecting.is_bandaged())
|
||||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||||
use(used)
|
use(used)
|
||||||
|
|
||||||
/obj/item/stack/medical/ointment
|
/obj/item/stack/medical/ointment
|
||||||
@@ -135,17 +139,20 @@
|
|||||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||||
|
|
||||||
if(affecting.open)
|
if(affecting.open)
|
||||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(affecting.is_salved())
|
if(affecting.is_salved())
|
||||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||||
if(!do_mob(user, M, 10))
|
if(!do_mob(user, M, 10))
|
||||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||||
|
return 1
|
||||||
|
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||||
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||||
return 1
|
return 1
|
||||||
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
||||||
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
||||||
@@ -169,11 +176,11 @@
|
|||||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||||
|
|
||||||
if(affecting.open)
|
if(affecting.open)
|
||||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(affecting.is_bandaged() && affecting.is_disinfected())
|
if(affecting.is_bandaged() && affecting.is_disinfected())
|
||||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>"
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>")
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||||
@@ -187,8 +194,11 @@
|
|||||||
if(used == amount)
|
if(used == amount)
|
||||||
break
|
break
|
||||||
if(!do_mob(user, M, W.damage/5))
|
if(!do_mob(user, M, W.damage/5))
|
||||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||||
break
|
break
|
||||||
|
if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||||
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||||
|
return 1
|
||||||
if (W.current_stage <= W.max_bleeding_stage)
|
if (W.current_stage <= W.max_bleeding_stage)
|
||||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||||
@@ -205,9 +215,9 @@
|
|||||||
affecting.update_damages()
|
affecting.update_damages()
|
||||||
if(used == amount)
|
if(used == amount)
|
||||||
if(affecting.is_bandaged())
|
if(affecting.is_bandaged())
|
||||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||||
use(used)
|
use(used)
|
||||||
|
|
||||||
/obj/item/stack/medical/advanced/ointment
|
/obj/item/stack/medical/advanced/ointment
|
||||||
@@ -228,16 +238,19 @@
|
|||||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||||
|
|
||||||
if(affecting.open)
|
if(affecting.open)
|
||||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||||
|
|
||||||
if(affecting.is_salved())
|
if(affecting.is_salved())
|
||||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||||
if(!do_mob(user, M, 10))
|
if(!do_mob(user, M, 10))
|
||||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||||
|
return 1
|
||||||
|
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||||
|
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||||
return 1
|
return 1
|
||||||
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
||||||
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
||||||
@@ -264,20 +277,23 @@
|
|||||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||||
var/limb = affecting.name
|
var/limb = affecting.name
|
||||||
if(!(affecting.organ_tag in splintable_organs))
|
if(!(affecting.organ_tag in splintable_organs))
|
||||||
user << "<span class='danger'>You can't use \the [src] to apply a splint there!</span>"
|
to_chat(user, "<span class='danger'>You can't use \the [src] to apply a splint there!</span>")
|
||||||
return
|
return
|
||||||
if(affecting.splinted)
|
if(affecting.splinted)
|
||||||
user << "<span class='danger'>[M]'s [limb] is already splinted!</span>"
|
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||||
return
|
return
|
||||||
if (M != user)
|
if (M != user)
|
||||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
else
|
else
|
||||||
if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \
|
if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \
|
||||||
user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) ))
|
user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) ))
|
||||||
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
to_chat(user, "<span class='danger'>You can't apply a splint to the arm you're using!</span>")
|
||||||
return
|
return
|
||||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
if(do_after(user, 50, M))
|
if(do_after(user, 50, M))
|
||||||
|
if(affecting.splinted)
|
||||||
|
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||||
|
return
|
||||||
if(M == user && prob(75))
|
if(M == user && prob(75))
|
||||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
|
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
|
||||||
if(do_after(user, 20 * O.toolspeed))
|
if(do_after(user, 20 * O.toolspeed))
|
||||||
src.locked = 0
|
src.locked = 0
|
||||||
user << "<span class = 'caution'> You disable the locking modules.</span>"
|
to_chat(user, "<span class = 'caution'> You disable the locking modules.</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
else if(istype(O, /obj/item/weapon))
|
else if(istype(O, /obj/item/weapon))
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
else
|
else
|
||||||
playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time
|
playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time
|
||||||
if(W.force < 15)
|
if(W.force < 15)
|
||||||
user << "<span class='notice'>The cabinet's protective glass glances off the hit.</span>"
|
to_chat(user, "<span class='notice'>The cabinet's protective glass glances off the hit.</span>")
|
||||||
else
|
else
|
||||||
src.hitstaken++
|
src.hitstaken++
|
||||||
if(src.hitstaken == 4)
|
if(src.hitstaken == 4)
|
||||||
@@ -63,12 +63,14 @@
|
|||||||
if (istype(O, /obj/item/weapon/material/twohanded/fireaxe) && src.localopened)
|
if (istype(O, /obj/item/weapon/material/twohanded/fireaxe) && src.localopened)
|
||||||
if(!fireaxe)
|
if(!fireaxe)
|
||||||
if(O:wielded)
|
if(O:wielded)
|
||||||
user << "<span class='warning'>Unwield the axe first.</span>"
|
O:wielded = 0
|
||||||
return
|
O.update_icon()
|
||||||
|
//to_chat(user, "<span class='warning'>Unwield the axe first.</span>")
|
||||||
|
//return
|
||||||
fireaxe = O
|
fireaxe = O
|
||||||
user.remove_from_mob(O)
|
user.remove_from_mob(O)
|
||||||
src.contents += O
|
src.contents += O
|
||||||
user << "<span class='notice'>You place the fire axe back in the [src.name].</span>"
|
to_chat(user, "<span class='notice'>You place the fire axe back in the [src.name].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
else
|
else
|
||||||
if(src.smashed)
|
if(src.smashed)
|
||||||
@@ -91,11 +93,11 @@
|
|||||||
spawn(10) update_icon()
|
spawn(10) update_icon()
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>Resetting circuitry...</span>"
|
to_chat(user, "<span class='warning'>Resetting circuitry...</span>")
|
||||||
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
|
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
|
||||||
if(do_after(user,20 * O.toolspeed))
|
if(do_after(user,20 * O.toolspeed))
|
||||||
src.locked = 1
|
src.locked = 1
|
||||||
user << "<span class = 'caution'> You re-enable the locking modules.</span>"
|
to_chat(user, "<span class = 'caution'> You re-enable the locking modules.</span>")
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
localopened = !localopened
|
localopened = !localopened
|
||||||
@@ -116,13 +118,13 @@
|
|||||||
hasaxe = 1
|
hasaxe = 1
|
||||||
|
|
||||||
if(src.locked)
|
if(src.locked)
|
||||||
user <<"<span class='warning'>The cabinet won't budge!</span>"
|
to_chat(user, "<span class='warning'>The cabinet won't budge!</span>")
|
||||||
return
|
return
|
||||||
if(localopened)
|
if(localopened)
|
||||||
if(fireaxe)
|
if(fireaxe)
|
||||||
user.put_in_hands(fireaxe)
|
user.put_in_hands(fireaxe)
|
||||||
fireaxe = null
|
fireaxe = null
|
||||||
user << "<span class='notice'>You take the fire axe from the [name].</span>"
|
to_chat (user, "<span class='notice'>You take the fire axe from the [name].</span>")
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
update_icon()
|
update_icon()
|
||||||
else
|
else
|
||||||
@@ -149,7 +151,7 @@
|
|||||||
attack_tk(mob/user as mob)
|
attack_tk(mob/user as mob)
|
||||||
if(localopened && fireaxe)
|
if(localopened && fireaxe)
|
||||||
fireaxe.forceMove(loc)
|
fireaxe.forceMove(loc)
|
||||||
user << "<span class='notice'>You telekinetically remove the fire axe.</span>"
|
to_chat(user, "<span class='notice'>You telekinetically remove the fire axe.</span>")
|
||||||
fireaxe = null
|
fireaxe = null
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
@@ -161,9 +163,9 @@
|
|||||||
|
|
||||||
if (isrobot(usr) || src.locked || src.smashed)
|
if (isrobot(usr) || src.locked || src.smashed)
|
||||||
if(src.locked)
|
if(src.locked)
|
||||||
usr << "<span class='warning'>The cabinet won't budge!</span>"
|
to_chat(usr, "<span class='warning'>The cabinet won't budge!</span>")
|
||||||
else if(src.smashed)
|
else if(src.smashed)
|
||||||
usr << "<span class='notice'>The protective glass is broken!</span>"
|
to_chat(usr, "<span class='notice'>The protective glass is broken!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
localopened = !localopened
|
localopened = !localopened
|
||||||
@@ -180,23 +182,23 @@
|
|||||||
if(fireaxe)
|
if(fireaxe)
|
||||||
usr.put_in_hands(fireaxe)
|
usr.put_in_hands(fireaxe)
|
||||||
fireaxe = null
|
fireaxe = null
|
||||||
usr << "<span class='notice'>You take the Fire axe from the [name].</span>"
|
to_chat(usr, "<span class='notice'>You take the Fire axe from the [name].</span>")
|
||||||
else
|
else
|
||||||
usr << "<span class='notice'>The [src.name] is empty.</span>"
|
to_chat(usr, "<span class='notice'>The [src.name] is empty.</span>")
|
||||||
else
|
else
|
||||||
usr << "<span class='notice'>The [src.name] is closed.</span>"
|
to_chat(usr, "<span class='notice'>The [src.name] is closed.</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
attack_ai(mob/user as mob)
|
attack_ai(mob/user as mob)
|
||||||
if(src.smashed)
|
if(src.smashed)
|
||||||
user << "<span class='warning'>The security of the cabinet is compromised.</span>"
|
to_chat(user, "<span class='warning'>The security of the cabinet is compromised.</span>")
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
locked = !locked
|
locked = !locked
|
||||||
if(locked)
|
if(locked)
|
||||||
user << "<span class='warning'>Cabinet locked.</span>"
|
to_chat(user, "<span class='warning'>Cabinet locked.</span>")
|
||||||
else
|
else
|
||||||
user << "<span class='notice'>Cabinet unlocked.</span>"
|
to_chat(user, "<span class='notice'>Cabinet unlocked.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
|
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
|
||||||
|
|||||||
65
code/game/objects/structures/fitness.dm
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/obj/structure/fitness
|
||||||
|
icon = 'icons/obj/stationobjs.dmi'
|
||||||
|
anchored = 1
|
||||||
|
var/being_used = 0
|
||||||
|
|
||||||
|
/obj/structure/fitness/punchingbag
|
||||||
|
name = "punching bag"
|
||||||
|
desc = "A punching bag."
|
||||||
|
icon_state = "punchingbag"
|
||||||
|
density = 1
|
||||||
|
var/list/hit_message = list("hit", "punch", "kick", "robust")
|
||||||
|
|
||||||
|
/obj/structure/fitness/punchingbag/attack_hand(var/mob/living/carbon/human/user)
|
||||||
|
if(!istype(user))
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
if(user.nutrition < 20)
|
||||||
|
to_chat(user, "<span class='warning'>You need more energy to use the punching bag. Go eat something.</span>")
|
||||||
|
else
|
||||||
|
if(user.a_intent == I_HURT)
|
||||||
|
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||||
|
flick("[icon_state]_hit", src)
|
||||||
|
playsound(src.loc, 'sound/effects/woodhit.ogg', 25, 1, -1)
|
||||||
|
user.do_attack_animation(src)
|
||||||
|
user.nutrition = user.nutrition - 5
|
||||||
|
to_chat(user, "<span class='warning'>You [pick(hit_message)] \the [src].</span>")
|
||||||
|
|
||||||
|
/obj/structure/fitness/weightlifter
|
||||||
|
name = "weightlifting machine"
|
||||||
|
desc = "A machine used to lift weights."
|
||||||
|
icon_state = "weightlifter"
|
||||||
|
var/weight = 1
|
||||||
|
var/list/qualifiers = list("with ease", "without any trouble", "with great effort")
|
||||||
|
|
||||||
|
/obj/structure/fitness/weightlifter/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
|
||||||
|
weight = ((weight) % qualifiers.len) + 1
|
||||||
|
to_chat(user, "You set the machine's weight level to [weight].")
|
||||||
|
|
||||||
|
/obj/structure/fitness/weightlifter/attack_hand(var/mob/living/carbon/human/user)
|
||||||
|
if(!istype(user))
|
||||||
|
return
|
||||||
|
if(user.loc != src.loc)
|
||||||
|
to_chat(user, "<span class='warning'>You must be on the weight machine to use it.</span>")
|
||||||
|
return
|
||||||
|
if(user.nutrition < 50)
|
||||||
|
to_chat(user, "<span class='warning'>You need more energy to lift weights. Go eat something.</span>")
|
||||||
|
return
|
||||||
|
if(being_used)
|
||||||
|
to_chat(user, "<span class='warning'>The weight machine is already in use by somebody else.</span>")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
being_used = 1
|
||||||
|
playsound(src.loc, 'sound/effects/weightlifter.ogg', 50, 1)
|
||||||
|
user.set_dir(SOUTH)
|
||||||
|
flick("[icon_state]_[weight]", src)
|
||||||
|
if(do_after(user, 20 + (weight * 10)))
|
||||||
|
playsound(src.loc, 'sound/effects/weightdrop.ogg', 25, 1)
|
||||||
|
user.nutrition -= weight * 10
|
||||||
|
to_chat(user, "<span class='notice'>You lift the weights [qualifiers[weight]].</span>")
|
||||||
|
being_used = 0
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='notice'>Against your previous judgement, perhaps working out is not for you.</span>")
|
||||||
|
being_used = 0
|
||||||
@@ -51,6 +51,8 @@ var/list/keyboard_sound = list ('sound/effects/keyboard/keyboard1.ogg','sound/ef
|
|||||||
var/list/mechstep_sound = list('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg')
|
var/list/mechstep_sound = list('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg')
|
||||||
var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg')
|
var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg')
|
||||||
var/list/can_sound = list('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg')
|
var/list/can_sound = list('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg')
|
||||||
|
var/list/geiger_sound = list('sound/items/geiger1.ogg', 'sound/items/geiger2.ogg', 'sound/items/geiger3.ogg', 'sound/items/geiger4.ogg', 'sound/items/geiger5.ogg')
|
||||||
|
var/list/geiger_weak_sound = list('sound/items/geiger_weak1.ogg', 'sound/items/geiger_weak2.ogg', 'sound/items/geiger_weak3.ogg', 'sound/items/geiger_weak4.ogg')
|
||||||
|
|
||||||
//var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
|
//var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
|
||||||
|
|
||||||
@@ -188,4 +190,6 @@ var/const/FALLOFF_SOUNDS = 0.5
|
|||||||
if ("canopen") soundin = pick(can_sound)
|
if ("canopen") soundin = pick(can_sound)
|
||||||
if ("mechstep") soundin = pick(mechstep_sound)
|
if ("mechstep") soundin = pick(mechstep_sound)
|
||||||
//if ("gunshot") soundin = pick(gun_sound)
|
//if ("gunshot") soundin = pick(gun_sound)
|
||||||
|
if("geiger") soundin = pick(geiger_sound)
|
||||||
|
if("geiger_weak") soundin = pick(geiger_weak_sound)
|
||||||
return soundin
|
return soundin
|
||||||
|
|||||||
@@ -46,6 +46,8 @@
|
|||||||
var/ooc_style = "everyone"
|
var/ooc_style = "everyone"
|
||||||
if(holder && !holder.fakekey)
|
if(holder && !holder.fakekey)
|
||||||
ooc_style = "elevated"
|
ooc_style = "elevated"
|
||||||
|
if(holder.rights & R_EVENT)
|
||||||
|
ooc_style = "event_manager"
|
||||||
if(holder.rights & R_MOD)
|
if(holder.rights & R_MOD)
|
||||||
ooc_style = "moderator"
|
ooc_style = "moderator"
|
||||||
if(holder.rights & R_DEBUG)
|
if(holder.rights & R_DEBUG)
|
||||||
|
|||||||
@@ -779,7 +779,7 @@ var/list/admin_verbs_event_manager = list(
|
|||||||
set category = "Admin"
|
set category = "Admin"
|
||||||
|
|
||||||
if(holder)
|
if(holder)
|
||||||
if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someont promoting you.",,"Yes","No") == "Yes")
|
if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someone promoting you.",,"Yes","No") == "Yes")
|
||||||
log_admin("[src] deadmined themself.")
|
log_admin("[src] deadmined themself.")
|
||||||
message_admins("[src] deadmined themself.", 1)
|
message_admins("[src] deadmined themself.", 1)
|
||||||
deadmin()
|
deadmin()
|
||||||
|
|||||||
@@ -72,6 +72,25 @@
|
|||||||
Regardless, you find it quite difficult to land shots where you wanted them to go."
|
Regardless, you find it quite difficult to land shots where you wanted them to go."
|
||||||
modifier_type = /datum/modifier/trait/inaccurate
|
modifier_type = /datum/modifier/trait/inaccurate
|
||||||
|
|
||||||
|
/datum/trait/modifier/physical/smaller
|
||||||
|
name = "Smaller"
|
||||||
|
modifier_type = /datum/modifier/trait/smaller
|
||||||
|
mutually_exclusive = list(/datum/trait/modifier/physical/small, /datum/trait/modifier/physical/large, /datum/trait/modifier/physical/larger)
|
||||||
|
|
||||||
|
/datum/trait/modifier/physical/small
|
||||||
|
name = "Small"
|
||||||
|
modifier_type = /datum/modifier/trait/small
|
||||||
|
mutually_exclusive = list(/datum/trait/modifier/physical/smaller, /datum/trait/modifier/physical/large, /datum/trait/modifier/physical/larger)
|
||||||
|
|
||||||
|
/datum/trait/modifier/physical/large
|
||||||
|
name = "Large"
|
||||||
|
modifier_type = /datum/modifier/trait/large
|
||||||
|
mutually_exclusive = list(/datum/trait/modifier/physical/smaller, /datum/trait/modifier/physical/small, /datum/trait/modifier/physical/larger)
|
||||||
|
|
||||||
|
/datum/trait/modifier/physical/larger
|
||||||
|
name = "Larger"
|
||||||
|
modifier_type = /datum/modifier/trait/larger
|
||||||
|
mutually_exclusive = list(/datum/trait/modifier/physical/smaller, /datum/trait/modifier/physical/small, /datum/trait/modifier/physical/large)
|
||||||
|
|
||||||
// These two traits might be borderline, feel free to remove if they get abused.
|
// These two traits might be borderline, feel free to remove if they get abused.
|
||||||
/datum/trait/modifier/physical/high_metabolism
|
/datum/trait/modifier/physical/high_metabolism
|
||||||
|
|||||||
@@ -150,20 +150,20 @@
|
|||||||
item_state_slots = list(slot_r_hand_str = "medical_voidsuit_bio", slot_l_hand_str = "medical_voidsuit_bio")
|
item_state_slots = list(slot_r_hand_str = "medical_voidsuit_bio", slot_l_hand_str = "medical_voidsuit_bio")
|
||||||
armor = list(melee = 45, bullet = 5, laser = 20, energy = 5, bomb = 15, bio = 100, rad = 75)
|
armor = list(melee = 45, bullet = 5, laser = 20, energy = 5, bomb = 15, bio = 100, rad = 75)
|
||||||
|
|
||||||
//Medical Surplus Voidsuit
|
//Medical Streamlined Voidsuit
|
||||||
/obj/item/clothing/head/helmet/space/void/medical/alt
|
/obj/item/clothing/head/helmet/space/void/medical/alt
|
||||||
name = "streamlined medical voidsuit helmet"
|
name = "streamlined medical voidsuit helmet"
|
||||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching green."
|
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching green."
|
||||||
icon_state = "rig0-medicalalt"
|
icon_state = "rig0-medicalalt"
|
||||||
armor = list(melee = 30, bullet = 5, laser = 10,energy = 5, bomb = 5, bio = 100, rad = 60)
|
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
|
||||||
light_overlay = "helmet_light_dual_green"
|
light_overlay = "helmet_light_dual_green"
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/void/medical/alt
|
/obj/item/clothing/suit/space/void/medical/alt
|
||||||
icon_state = "rig-medicalalt"
|
icon_state = "rig-medicalalt"
|
||||||
name = "streamlined medical voidsuit"
|
name = "streamlined medical voidsuit"
|
||||||
desc = "A more recent model of Vey-Med voidsuit, featuring the latest in radiation shielding technology, without sacrificing comfort or style."
|
desc = "A more recent model of Vey-Med voidsuit, featuring the latest in radiation shielding technology, without sacrificing comfort or style."
|
||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
slowdown = 0
|
||||||
armor = list(melee = 30, bullet = 5, laser = 10,energy = 5, bomb = 5, bio = 100, rad = 60)
|
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
|
||||||
|
|
||||||
//Security
|
//Security
|
||||||
/obj/item/clothing/head/helmet/space/void/security
|
/obj/item/clothing/head/helmet/space/void/security
|
||||||
|
|||||||
@@ -112,6 +112,8 @@ list[](
|
|||||||
|
|
||||||
/datum/integrated_io/proc/write_data_to_pin(var/new_data)
|
/datum/integrated_io/proc/write_data_to_pin(var/new_data)
|
||||||
if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data)) // Anything else is a type we don't want.
|
if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data)) // Anything else is a type we don't want.
|
||||||
|
if(istext(new_data))
|
||||||
|
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||||
data = new_data
|
data = new_data
|
||||||
holder.on_data_written()
|
holder.on_data_written()
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,14 @@
|
|||||||
|
|
||||||
/datum/integrated_io/string/ask_for_pin_data(mob/user)
|
/datum/integrated_io/string/ask_for_pin_data(mob/user)
|
||||||
var/new_data = input("Please type in a string.","[src] string writing") as null|text
|
var/new_data = input("Please type in a string.","[src] string writing") as null|text
|
||||||
if(holder.check_interactivity(user) )
|
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||||
|
|
||||||
|
if(new_data && holder.check_interactivity(user) )
|
||||||
to_chat(user, "<span class='notice'>You input [new_data ? "new_data" : "NULL"] into the pin.</span>")
|
to_chat(user, "<span class='notice'>You input [new_data ? "new_data" : "NULL"] into the pin.</span>")
|
||||||
write_data_to_pin(new_data)
|
write_data_to_pin(new_data)
|
||||||
|
|
||||||
/datum/integrated_io/string/write_data_to_pin(var/new_data)
|
/datum/integrated_io/string/write_data_to_pin(var/new_data)
|
||||||
|
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||||
if(isnull(new_data) || istext(new_data))
|
if(isnull(new_data) || istext(new_data))
|
||||||
data = new_data
|
data = new_data
|
||||||
holder.on_data_written()
|
holder.on_data_written()
|
||||||
|
|||||||
@@ -125,6 +125,7 @@
|
|||||||
if("string")
|
if("string")
|
||||||
accepting_refs = 0
|
accepting_refs = 0
|
||||||
new_data = input("Now type in a string.","[src] string writing") as null|text
|
new_data = input("Now type in a string.","[src] string writing") as null|text
|
||||||
|
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||||
if(istext(new_data) && CanInteract(user, physical_state))
|
if(istext(new_data) && CanInteract(user, physical_state))
|
||||||
data_to_write = new_data
|
data_to_write = new_data
|
||||||
to_chat(user, "<span class='notice'>You set \the [src]'s memory to \"[new_data]\".</span>")
|
to_chat(user, "<span class='notice'>You set \the [src]'s memory to \"[new_data]\".</span>")
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Each point makes it 15% easier or harder, just like evasion.
|
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Each point makes it 15% easier or harder, just like evasion.
|
||||||
var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties.
|
var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties.
|
||||||
var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing.
|
var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing.
|
||||||
|
var/icon_scale_percent // Makes the holder's icon get scaled up or down.
|
||||||
|
|
||||||
/datum/modifier/New(var/new_holder, var/new_origin)
|
/datum/modifier/New(var/new_holder, var/new_origin)
|
||||||
holder = new_holder
|
holder = new_holder
|
||||||
@@ -62,6 +63,8 @@
|
|||||||
holder.modifiers.Remove(src)
|
holder.modifiers.Remove(src)
|
||||||
if(mob_overlay_state) // We do this after removing ourselves from the list so that the overlay won't remain.
|
if(mob_overlay_state) // We do this after removing ourselves from the list so that the overlay won't remain.
|
||||||
holder.update_modifier_visuals()
|
holder.update_modifier_visuals()
|
||||||
|
if(icon_scale_percent) // Correct the scaling.
|
||||||
|
holder.update_transform()
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
// Override this for special effects when it gets removed.
|
// Override this for special effects when it gets removed.
|
||||||
@@ -117,6 +120,8 @@
|
|||||||
modifiers.Add(mod)
|
modifiers.Add(mod)
|
||||||
if(mod.mob_overlay_state)
|
if(mod.mob_overlay_state)
|
||||||
update_modifier_visuals()
|
update_modifier_visuals()
|
||||||
|
if(mod.icon_scale_percent)
|
||||||
|
update_transform()
|
||||||
|
|
||||||
return mod
|
return mod
|
||||||
|
|
||||||
@@ -198,6 +203,8 @@
|
|||||||
effects += "Your metabolism is [metabolism_percent > 1.0 ? "faster" : "slower"], \
|
effects += "Your metabolism is [metabolism_percent > 1.0 ? "faster" : "slower"], \
|
||||||
causing reagents in your body to process, and hunger to occur [multipler_to_percentage(metabolism_percent, TRUE)] [metabolism_percent > 1.0 ? "faster" : "slower"]."
|
causing reagents in your body to process, and hunger to occur [multipler_to_percentage(metabolism_percent, TRUE)] [metabolism_percent > 1.0 ? "faster" : "slower"]."
|
||||||
|
|
||||||
|
if(!isnull(icon_scale_percent))
|
||||||
|
effects += "Your appearance is [multipler_to_percentage(icon_scale_percent, TRUE)] [icon_scale_percent > 1 ? "larger" : "smaller"]."
|
||||||
|
|
||||||
return jointext(effects, "<br>")
|
return jointext(effects, "<br>")
|
||||||
|
|
||||||
|
|||||||
@@ -58,4 +58,28 @@
|
|||||||
desc = "Your body's metabolism is slower than average."
|
desc = "Your body's metabolism is slower than average."
|
||||||
|
|
||||||
metabolism_percent = 0.5
|
metabolism_percent = 0.5
|
||||||
incoming_healing_percent = 0.6
|
incoming_healing_percent = 0.6
|
||||||
|
|
||||||
|
/datum/modifier/trait/larger
|
||||||
|
name = "Larger"
|
||||||
|
desc = "Your body is larger than average."
|
||||||
|
|
||||||
|
icon_scale_percent = 1.2
|
||||||
|
|
||||||
|
/datum/modifier/trait/large
|
||||||
|
name = "Large"
|
||||||
|
desc = "Your body is a bit larger than average."
|
||||||
|
|
||||||
|
icon_scale_percent = 1.1
|
||||||
|
|
||||||
|
/datum/modifier/trait/small
|
||||||
|
name = "Small"
|
||||||
|
desc = "Your body is a bit smaller than average."
|
||||||
|
|
||||||
|
icon_scale_percent = 0.95
|
||||||
|
|
||||||
|
/datum/modifier/trait/smaller
|
||||||
|
name = "Smaller"
|
||||||
|
desc = "Your body is smaller than average."
|
||||||
|
|
||||||
|
icon_scale_percent = 0.9
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
if (I_GRAB)
|
if (I_GRAB)
|
||||||
if (M == src)
|
if (M == src)
|
||||||
return
|
return
|
||||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M, M, src )
|
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M, src )
|
||||||
|
|
||||||
M.put_in_active_hand(G)
|
M.put_in_active_hand(G)
|
||||||
|
|
||||||
@@ -56,4 +56,4 @@
|
|||||||
for(var/mob/O in viewers(src, null))
|
for(var/mob/O in viewers(src, null))
|
||||||
if ((O.client && !( O.blinded )))
|
if ((O.client && !( O.blinded )))
|
||||||
O.show_message(text("<font color='red'><B>[] has attempted to punch []!</B></font>", M, src), 1)
|
O.show_message(text("<font color='red'><B>[] has attempted to punch []!</B></font>", M, src), 1)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -18,17 +18,9 @@
|
|||||||
var/skiparms = 0
|
var/skiparms = 0
|
||||||
var/skipfeet = 0
|
var/skipfeet = 0
|
||||||
|
|
||||||
|
if(alpha <= 50)
|
||||||
var/cloaked = 0 // 0 for normal, 1 for cloaked close
|
src.loc.examine(user)
|
||||||
|
return
|
||||||
if(mind && mind.changeling && mind.changeling.cloaked && !istype(user, /mob/observer))
|
|
||||||
var/distance = get_dist(user, src)
|
|
||||||
if(distance > 2)
|
|
||||||
src.loc.examine(user)
|
|
||||||
return
|
|
||||||
else
|
|
||||||
cloaked = 1
|
|
||||||
|
|
||||||
|
|
||||||
var/looks_synth = looksSynthetic()
|
var/looks_synth = looksSynthetic()
|
||||||
|
|
||||||
@@ -97,8 +89,6 @@
|
|||||||
|
|
||||||
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
|
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
|
||||||
T = gender_datums[PLURAL]
|
T = gender_datums[PLURAL]
|
||||||
if(cloaked)
|
|
||||||
T = gender_datums[NEUTER]
|
|
||||||
|
|
||||||
else if(species && species.ambiguous_genders)
|
else if(species && species.ambiguous_genders)
|
||||||
var/can_detect_gender = FALSE
|
var/can_detect_gender = FALSE
|
||||||
@@ -474,7 +464,7 @@
|
|||||||
msg += "<span class = 'deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a>\n"
|
msg += "<span class = 'deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a>\n"
|
||||||
|
|
||||||
|
|
||||||
if(print_flavor_text() && !cloaked)
|
if(print_flavor_text())
|
||||||
msg += "[print_flavor_text()]\n"
|
msg += "[print_flavor_text()]\n"
|
||||||
|
|
||||||
// VOREStation Start
|
// VOREStation Start
|
||||||
@@ -483,20 +473,13 @@
|
|||||||
// VOREStation End
|
// VOREStation End
|
||||||
msg += "*---------*</span><br>"
|
msg += "*---------*</span><br>"
|
||||||
msg += applying_pressure
|
msg += applying_pressure
|
||||||
if (pose && !cloaked)
|
if (pose)
|
||||||
if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 )
|
if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 )
|
||||||
pose = addtext(pose,".") //Makes sure all emotes end with a period.
|
pose = addtext(pose,".") //Makes sure all emotes end with a period.
|
||||||
msg += "[T.He] [pose]"
|
msg += "[T.He] [pose]"
|
||||||
|
|
||||||
user << jointext(msg, null)
|
user << jointext(msg, null)
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/get_description_fluff()
|
|
||||||
if(mind && mind.changeling && mind.changeling.cloaked)
|
|
||||||
return ""
|
|
||||||
else
|
|
||||||
return ..()
|
|
||||||
|
|
||||||
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
|
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
|
||||||
/proc/hasHUD(mob/M as mob, hudtype)
|
/proc/hasHUD(mob/M as mob, hudtype)
|
||||||
if(istype(M, /mob/living/carbon/human))
|
if(istype(M, /mob/living/carbon/human))
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
var/tail_animation // If set, the icon to obtain tail animation states from.
|
var/tail_animation // If set, the icon to obtain tail animation states from.
|
||||||
var/tail_hair
|
var/tail_hair
|
||||||
|
|
||||||
|
var/icon_scale = 1 // Makes the icon larger/smaller.
|
||||||
|
|
||||||
var/race_key = 0 // Used for mob icon cache string.
|
var/race_key = 0 // Used for mob icon cache string.
|
||||||
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
|
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
|
||||||
var/mob_size = MOB_MEDIUM
|
var/mob_size = MOB_MEDIUM
|
||||||
|
|||||||
@@ -39,6 +39,8 @@
|
|||||||
burn_mod = 0.85
|
burn_mod = 0.85
|
||||||
metabolic_rate = 0.85
|
metabolic_rate = 0.85
|
||||||
item_slowdown_mod = 0.5
|
item_slowdown_mod = 0.5
|
||||||
|
mob_size = MOB_LARGE
|
||||||
|
blood_volume = 840
|
||||||
num_alternate_languages = 3
|
num_alternate_languages = 3
|
||||||
secondary_langs = list(LANGUAGE_UNATHI)
|
secondary_langs = list(LANGUAGE_UNATHI)
|
||||||
name_language = LANGUAGE_UNATHI
|
name_language = LANGUAGE_UNATHI
|
||||||
|
|||||||
@@ -160,16 +160,29 @@ Please contact me on #coderbus IRC. ~Carn x
|
|||||||
for(var/inner_entry in entry)
|
for(var/inner_entry in entry)
|
||||||
overlays += inner_entry
|
overlays += inner_entry
|
||||||
|
|
||||||
|
update_transform()
|
||||||
|
|
||||||
|
/mob/living/carbon/human/update_transform()
|
||||||
|
// First, get the correct size.
|
||||||
|
var/desired_scale = icon_scale
|
||||||
|
|
||||||
|
desired_scale *= species.icon_scale
|
||||||
|
|
||||||
|
for(var/datum/modifier/M in modifiers)
|
||||||
|
if(!isnull(M.icon_scale_percent))
|
||||||
|
desired_scale *= M.icon_scale_percent
|
||||||
|
|
||||||
|
// Regular stuff again.
|
||||||
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
|
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
|
||||||
var/matrix/M = matrix()
|
var/matrix/M = matrix()
|
||||||
M.Turn(90)
|
M.Turn(90)
|
||||||
M.Scale(size_multiplier)
|
M.Scale(desired_scale)
|
||||||
M.Translate(1,-6)
|
M.Translate(1,-6)
|
||||||
src.transform = M
|
src.transform = M
|
||||||
else
|
else
|
||||||
var/matrix/M = matrix()
|
var/matrix/M = matrix()
|
||||||
M.Scale(size_multiplier)
|
M.Scale(desired_scale)
|
||||||
M.Translate(0, 16*(size_multiplier-1))
|
M.Translate(0, 16*(desired_scale-1))
|
||||||
src.transform = M
|
src.transform = M
|
||||||
|
|
||||||
var/global/list/damage_icon_parts = list()
|
var/global/list/damage_icon_parts = list()
|
||||||
|
|||||||
@@ -1046,3 +1046,17 @@ default behaviour is:
|
|||||||
// Called by job_controller.
|
// Called by job_controller.
|
||||||
/mob/living/proc/equip_post_job()
|
/mob/living/proc/equip_post_job()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/update_transform()
|
||||||
|
// First, get the correct size.
|
||||||
|
var/desired_scale = icon_scale
|
||||||
|
for(var/datum/modifier/M in modifiers)
|
||||||
|
if(!isnull(M.icon_scale_percent))
|
||||||
|
desired_scale *= M.icon_scale_percent
|
||||||
|
|
||||||
|
// Now for the regular stuff.
|
||||||
|
var/matrix/M = matrix()
|
||||||
|
M.Scale(desired_scale)
|
||||||
|
M.Translate(0, 16*(desired_scale-1))
|
||||||
|
src.transform = M
|
||||||
@@ -17,10 +17,6 @@ var/list/ai_verbs_default = list(
|
|||||||
/mob/living/silicon/ai/proc/show_laws_verb,
|
/mob/living/silicon/ai/proc/show_laws_verb,
|
||||||
/mob/living/silicon/ai/proc/toggle_acceleration,
|
/mob/living/silicon/ai/proc/toggle_acceleration,
|
||||||
/mob/living/silicon/ai/proc/toggle_hologram_movement,
|
/mob/living/silicon/ai/proc/toggle_hologram_movement,
|
||||||
/mob/living/silicon/ai/proc/toggle_hidden_verbs,
|
|
||||||
)
|
|
||||||
|
|
||||||
var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.com/1172/,
|
|
||||||
/mob/living/silicon/ai/proc/ai_announcement,
|
/mob/living/silicon/ai/proc/ai_announcement,
|
||||||
/mob/living/silicon/ai/proc/ai_call_shuttle,
|
/mob/living/silicon/ai/proc/ai_call_shuttle,
|
||||||
/mob/living/silicon/ai/proc/ai_camera_track,
|
/mob/living/silicon/ai/proc/ai_camera_track,
|
||||||
@@ -808,16 +804,5 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
|||||||
if(rig)
|
if(rig)
|
||||||
rig.force_rest(src)
|
rig.force_rest(src)
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/toggle_hidden_verbs()
|
|
||||||
set name = "Toggle Hidden Verbs"
|
|
||||||
set category = "AI Settings"
|
|
||||||
|
|
||||||
if(/mob/living/silicon/ai/proc/ai_announcement in verbs)
|
|
||||||
src << "Extra verbs toggled off."
|
|
||||||
verbs -= ai_verbs_hidden
|
|
||||||
else
|
|
||||||
src << "Extra verbs toggled on."
|
|
||||||
verbs |= ai_verbs_hidden
|
|
||||||
|
|
||||||
#undef AI_CHECK_WIRELESS
|
#undef AI_CHECK_WIRELESS
|
||||||
#undef AI_CHECK_RADIO
|
#undef AI_CHECK_RADIO
|
||||||
|
|||||||
@@ -399,6 +399,11 @@
|
|||||||
C.toggled = 1
|
C.toggled = 1
|
||||||
src << "<font color='red'>You enable [C.name].</font>"
|
src << "<font color='red'>You enable [C.name].</font>"
|
||||||
|
|
||||||
|
/mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence.
|
||||||
|
set category = "Robot Commands"
|
||||||
|
set name = "Emit Sparks"
|
||||||
|
spark_system.start()
|
||||||
|
|
||||||
// this function displays jetpack pressure in the stat panel
|
// this function displays jetpack pressure in the stat panel
|
||||||
/mob/living/silicon/robot/proc/show_jetpack_pressure()
|
/mob/living/silicon/robot/proc/show_jetpack_pressure()
|
||||||
// if you have a jetpack, show the internal tank pressure
|
// if you have a jetpack, show the internal tank pressure
|
||||||
@@ -642,7 +647,8 @@
|
|||||||
|
|
||||||
else
|
else
|
||||||
if( !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/healthanalyzer)) )
|
if( !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/healthanalyzer)) )
|
||||||
spark_system.start()
|
if(W.force > 0)
|
||||||
|
spark_system.start()
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/silicon/robot/attack_hand(mob/user)
|
/mob/living/silicon/robot/attack_hand(mob/user)
|
||||||
|
|||||||
@@ -90,6 +90,7 @@
|
|||||||
var/assist_distance = 25 // Radius in which I'll ask my comrades for help.
|
var/assist_distance = 25 // Radius in which I'll ask my comrades for help.
|
||||||
var/supernatural = 0 // If the mob is supernatural (used in null-rod stuff for banishing?)
|
var/supernatural = 0 // If the mob is supernatural (used in null-rod stuff for banishing?)
|
||||||
var/grab_resist = 75 // Chance of me resisting a grab attempt.
|
var/grab_resist = 75 // Chance of me resisting a grab attempt.
|
||||||
|
var/taser_kill = 1 // Is the mob weak to tasers
|
||||||
|
|
||||||
//Attack ranged settings
|
//Attack ranged settings
|
||||||
var/ranged = 0 // Do I attack at range?
|
var/ranged = 0 // Do I attack at range?
|
||||||
@@ -1446,16 +1447,17 @@
|
|||||||
|
|
||||||
//Shot with taser/stunvolver
|
//Shot with taser/stunvolver
|
||||||
/mob/living/simple_animal/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
|
/mob/living/simple_animal/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
|
||||||
var/stunDam = 0
|
if(taser_kill)
|
||||||
var/agonyDam = 0
|
var/stunDam = 0
|
||||||
|
var/agonyDam = 0
|
||||||
|
|
||||||
if(stun_amount)
|
if(stun_amount)
|
||||||
stunDam += stun_amount * 0.5
|
stunDam += stun_amount * 0.5
|
||||||
adjustFireLoss(stunDam)
|
adjustFireLoss(stunDam)
|
||||||
|
|
||||||
if(agony_amount)
|
if(agony_amount)
|
||||||
agonyDam += agony_amount * 0.5
|
agonyDam += agony_amount * 0.5
|
||||||
adjustFireLoss(agonyDam)
|
adjustFireLoss(agonyDam)
|
||||||
|
|
||||||
/mob/living/simple_animal/emp_act(severity)
|
/mob/living/simple_animal/emp_act(severity)
|
||||||
if(!isSynthetic())
|
if(!isSynthetic())
|
||||||
|
|||||||
@@ -535,6 +535,7 @@
|
|||||||
if(M != usr) return
|
if(M != usr) return
|
||||||
if(usr == src) return
|
if(usr == src) return
|
||||||
if(!Adjacent(usr)) return
|
if(!Adjacent(usr)) return
|
||||||
|
if(usr.incapacitated(INCAPACITATION_STUNNED | INCAPACITATION_FORCELYING | INCAPACITATION_KNOCKOUT | INCAPACITATION_RESTRAINED)) return //Incapacitated.
|
||||||
if(istype(M,/mob/living/silicon/ai)) return
|
if(istype(M,/mob/living/silicon/ai)) return
|
||||||
show_inv(usr)
|
show_inv(usr)
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/organ/internal/appendix/process()
|
/obj/item/organ/internal/appendix/process()
|
||||||
|
..()
|
||||||
|
|
||||||
if(!inflamed || !owner)
|
if(!inflamed || !owner)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -44,21 +44,6 @@
|
|||||||
tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1)
|
tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1)
|
||||||
tmp_owner = null
|
tmp_owner = null
|
||||||
|
|
||||||
/obj/item/organ/internal/pariah_brain
|
|
||||||
name = "brain remnants"
|
|
||||||
desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
|
|
||||||
organ_tag = "brain"
|
|
||||||
parent_organ = BP_HEAD
|
|
||||||
icon = 'icons/mob/alien.dmi'
|
|
||||||
icon_state = "chitin"
|
|
||||||
vital = 1
|
|
||||||
|
|
||||||
/obj/item/organ/internal/brain/xeno
|
|
||||||
name = "thinkpan"
|
|
||||||
desc = "It looks kind of like an enormous wad of purple bubblegum."
|
|
||||||
icon = 'icons/mob/alien.dmi'
|
|
||||||
icon_state = "chitin"
|
|
||||||
|
|
||||||
/obj/item/organ/internal/brain/New()
|
/obj/item/organ/internal/brain/New()
|
||||||
..()
|
..()
|
||||||
health = config.default_brain_health
|
health = config.default_brain_health
|
||||||
@@ -127,6 +112,21 @@
|
|||||||
target.key = brainmob.key
|
target.key = brainmob.key
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/obj/item/organ/internal/pariah_brain
|
||||||
|
name = "brain remnants"
|
||||||
|
desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
|
||||||
|
organ_tag = "brain"
|
||||||
|
parent_organ = BP_HEAD
|
||||||
|
icon = 'icons/mob/alien.dmi'
|
||||||
|
icon_state = "chitin"
|
||||||
|
vital = 1
|
||||||
|
|
||||||
|
/obj/item/organ/internal/brain/xeno
|
||||||
|
name = "thinkpan"
|
||||||
|
desc = "It looks kind of like an enormous wad of purple bubblegum."
|
||||||
|
icon = 'icons/mob/alien.dmi'
|
||||||
|
icon_state = "chitin"
|
||||||
|
|
||||||
/obj/item/organ/internal/brain/slime
|
/obj/item/organ/internal/brain/slime
|
||||||
name = "slime core"
|
name = "slime core"
|
||||||
desc = "A complex, organic knot of jelly and crystalline particles."
|
desc = "A complex, organic knot of jelly and crystalline particles."
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
/obj/item/organ/internal/kidneys/process()
|
/obj/item/organ/internal/kidneys/process()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
if(!owner) return
|
if(!owner) return
|
||||||
|
|
||||||
// Coffee is really bad for you with busted kidneys.
|
// Coffee is really bad for you with busted kidneys.
|
||||||
|
|||||||
@@ -58,5 +58,7 @@
|
|||||||
if (prob(3))
|
if (prob(3))
|
||||||
take_damage(1,silent=prob(30))
|
take_damage(1,silent=prob(30))
|
||||||
|
|
||||||
//if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE, others are handled on each specific organ
|
if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE
|
||||||
//Nothing that generic internal organs do for this
|
if (prob(50))
|
||||||
|
take_damage(1,silent=prob(15))
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ var/list/organ_cache = list()
|
|||||||
if(owner && vital)
|
if(owner && vital)
|
||||||
owner.death()
|
owner.death()
|
||||||
|
|
||||||
|
/obj/item/organ/proc/adjust_germ_level(var/amount) // Unless you're setting germ level directly to 0, use this proc instead
|
||||||
|
germ_level = Clamp(germ_level + amount, 0, INFECTION_LEVEL_MAX)
|
||||||
|
|
||||||
/obj/item/organ/process()
|
/obj/item/organ/process()
|
||||||
|
|
||||||
if(loc != owner)
|
if(loc != owner)
|
||||||
@@ -117,9 +120,9 @@ var/list/organ_cache = list()
|
|||||||
if(config.organs_decay) damage += rand(1,3)
|
if(config.organs_decay) damage += rand(1,3)
|
||||||
if(damage >= max_damage)
|
if(damage >= max_damage)
|
||||||
damage = max_damage
|
damage = max_damage
|
||||||
germ_level += rand(2,6)
|
adjust_germ_level(rand(2,6))
|
||||||
if(germ_level >= INFECTION_LEVEL_TWO)
|
if(germ_level >= INFECTION_LEVEL_TWO)
|
||||||
germ_level += rand(2,6)
|
adjust_germ_level(rand(2,6))
|
||||||
if(germ_level >= INFECTION_LEVEL_THREE)
|
if(germ_level >= INFECTION_LEVEL_THREE)
|
||||||
die()
|
die()
|
||||||
|
|
||||||
@@ -158,12 +161,12 @@ var/list/organ_cache = list()
|
|||||||
owner.adjustToxLoss(infection_damage)
|
owner.adjustToxLoss(infection_damage)
|
||||||
|
|
||||||
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
|
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
|
||||||
germ_level--
|
adjust_germ_level(-1)
|
||||||
|
|
||||||
if (germ_level >= INFECTION_LEVEL_ONE/2)
|
if (germ_level >= INFECTION_LEVEL_ONE/2)
|
||||||
//aiming for germ level to go from ambient to INFECTION_LEVEL_TWO in an average of 15 minutes
|
//aiming for germ level to go from ambient to INFECTION_LEVEL_TWO in an average of 15 minutes
|
||||||
if(antibiotics < 5 && prob(round(germ_level/6)))
|
if(antibiotics < 5 && prob(round(germ_level/6)))
|
||||||
germ_level++
|
adjust_germ_level(1)
|
||||||
|
|
||||||
if(germ_level >= INFECTION_LEVEL_ONE)
|
if(germ_level >= INFECTION_LEVEL_ONE)
|
||||||
. = 1 //Organ qualifies for effect-specific processing
|
. = 1 //Organ qualifies for effect-specific processing
|
||||||
@@ -179,7 +182,7 @@ var/list/organ_cache = list()
|
|||||||
|
|
||||||
if (germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30)
|
if (germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30)
|
||||||
. = 3 //Organ qualifies for effect-specific processing
|
. = 3 //Organ qualifies for effect-specific processing
|
||||||
germ_level++ //Germ_level increases without overdose of antibiotics
|
adjust_germ_level(rand(5,10)) //Germ_level increases without overdose of antibiotics
|
||||||
|
|
||||||
/obj/item/organ/proc/handle_rejection()
|
/obj/item/organ/proc/handle_rejection()
|
||||||
// Process unsuitable transplants. TODO: consider some kind of
|
// Process unsuitable transplants. TODO: consider some kind of
|
||||||
@@ -193,13 +196,13 @@ var/list/organ_cache = list()
|
|||||||
if(rejecting % 10 == 0) //Only fire every ten rejection ticks.
|
if(rejecting % 10 == 0) //Only fire every ten rejection ticks.
|
||||||
switch(rejecting)
|
switch(rejecting)
|
||||||
if(1 to 50)
|
if(1 to 50)
|
||||||
germ_level++
|
adjust_germ_level(1)
|
||||||
if(51 to 200)
|
if(51 to 200)
|
||||||
germ_level += rand(1,2)
|
adjust_germ_level(rand(1,2))
|
||||||
if(201 to 500)
|
if(201 to 500)
|
||||||
germ_level += rand(2,3)
|
adjust_germ_level(rand(2,3))
|
||||||
if(501 to INFINITY)
|
if(501 to INFINITY)
|
||||||
germ_level += rand(3,5)
|
adjust_germ_level(rand(3,5))
|
||||||
owner.reagents.add_reagent("toxin", rand(1,2))
|
owner.reagents.add_reagent("toxin", rand(1,2))
|
||||||
|
|
||||||
/obj/item/organ/proc/receive_chem(chemical as obj)
|
/obj/item/organ/proc/receive_chem(chemical as obj)
|
||||||
@@ -238,9 +241,11 @@ var/list/organ_cache = list()
|
|||||||
if (germ_level < INFECTION_LEVEL_ONE)
|
if (germ_level < INFECTION_LEVEL_ONE)
|
||||||
germ_level = 0 //cure instantly
|
germ_level = 0 //cure instantly
|
||||||
else if (germ_level < INFECTION_LEVEL_TWO)
|
else if (germ_level < INFECTION_LEVEL_TWO)
|
||||||
germ_level -= 6 //at germ_level == 500, this should cure the infection in a minute
|
adjust_germ_level(-6) //at germ_level < 500, this should cure the infection in a minute
|
||||||
|
else if (germ_level < INFECTION_LEVEL_THREE)
|
||||||
|
adjust_germ_level(-2) //at germ_level < 1000, this will cure the infection in 5 minutes
|
||||||
else
|
else
|
||||||
germ_level -= 2 //at germ_level == 1000, this will cure the infection in 5 minutes
|
adjust_germ_level(-1) // You waited this long to get treated, you don't really deserve this organ
|
||||||
|
|
||||||
//Adds autopsy data for used_weapon.
|
//Adds autopsy data for used_weapon.
|
||||||
/obj/item/organ/proc/add_autopsy_data(var/used_weapon, var/damage)
|
/obj/item/organ/proc/add_autopsy_data(var/used_weapon, var/damage)
|
||||||
|
|||||||
@@ -119,8 +119,8 @@
|
|||||||
|
|
||||||
/obj/item/weapon/pen/reagent/paralysis/New()
|
/obj/item/weapon/pen/reagent/paralysis/New()
|
||||||
..()
|
..()
|
||||||
reagents.add_reagent("zombiepowder", 10)
|
reagents.add_reagent("zombiepowder", 5)
|
||||||
reagents.add_reagent("cryptobiolin", 15)
|
reagents.add_reagent("cryptobiolin", 10)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Chameleon pen
|
* Chameleon pen
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
than the alternative."
|
than the alternative."
|
||||||
icon_state = "gridchecker_on"
|
icon_state = "gridchecker_on"
|
||||||
circuit = /obj/item/weapon/circuitboard/grid_checker
|
circuit = /obj/item/weapon/circuitboard/grid_checker
|
||||||
|
density = 1
|
||||||
|
anchored = 1
|
||||||
var/power_failing = FALSE // Turns to TRUE when the grid check event is fired by the Game Master, or perhaps a cheeky antag.
|
var/power_failing = FALSE // Turns to TRUE when the grid check event is fired by the Game Master, or perhaps a cheeky antag.
|
||||||
// Wire stuff below.
|
// Wire stuff below.
|
||||||
var/datum/wires/grid_checker/wires
|
var/datum/wires/grid_checker/wires
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
icon_state = "generator0"
|
icon_state = "generator0"
|
||||||
var/active = 0
|
var/active = 0
|
||||||
var/field_radius = 3
|
var/field_radius = 3
|
||||||
var/max_field_radius = 100
|
var/max_field_radius = 150
|
||||||
var/list/field = list()
|
var/list/field = list()
|
||||||
density = 1
|
density = 1
|
||||||
var/locked = 0
|
var/locked = 0
|
||||||
@@ -323,4 +323,4 @@
|
|||||||
T = locate(gen_turf.x + field_radius, gen_turf.y + y_offset, gen_turf.z)
|
T = locate(gen_turf.x + field_radius, gen_turf.y + y_offset, gen_turf.z)
|
||||||
if (T) out += T
|
if (T) out += T
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ em {font-style: normal;font-weight: bold;}
|
|||||||
.ooc .moderator {color: #184880;}
|
.ooc .moderator {color: #184880;}
|
||||||
.ooc .developer {color: #1b521f;}
|
.ooc .developer {color: #1b521f;}
|
||||||
.ooc .admin {color: #b82e00;}
|
.ooc .admin {color: #b82e00;}
|
||||||
|
.ooc .event_manager {color: #660033;}
|
||||||
.ooc .aooc {color: #960018;}
|
.ooc .aooc {color: #960018;}
|
||||||
|
|
||||||
/* Admin: Private Messages */
|
/* Admin: Private Messages */
|
||||||
@@ -36,7 +37,7 @@ em {font-style: normal;font-weight: bold;}
|
|||||||
.mod_channel {color: #735638; font-weight: bold;}
|
.mod_channel {color: #735638; font-weight: bold;}
|
||||||
.mod_channel .admin {color: #b82e00; font-weight: bold;}
|
.mod_channel .admin {color: #b82e00; font-weight: bold;}
|
||||||
.admin_channel {color: #9611D4; font-weight: bold;}
|
.admin_channel {color: #9611D4; font-weight: bold;}
|
||||||
.event_channel {color: #009933; font-weight: bold;}
|
.event_channel {color: #cc3399; font-weight: bold;}
|
||||||
|
|
||||||
/* Radio: Misc */
|
/* Radio: Misc */
|
||||||
.deadsay {color: #530FAD;}
|
.deadsay {color: #530FAD;}
|
||||||
|
|||||||
4
html/changelogs/Atermonera-AI_verbs.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
author: Atermonera
|
||||||
|
delete-after: True
|
||||||
|
changes:
|
||||||
|
- bugfix: "AI verbs are no longer hidden on the tabs."
|
||||||
4
html/changelogs/Atermonera-incap_inv.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
author: Atermonera
|
||||||
|
delete-after: True
|
||||||
|
changes:
|
||||||
|
- bugfix: "Incapacitated mobs can no longer open your inventory and steal your gubbins."
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 42 KiB |
BIN
icons/turf/flooring/carpet_old.dmi
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 93 KiB |
BIN
icons/turf/flooring/decals_old.dmi
Normal file
|
After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
BIN
icons/turf/flooring/plating_old.dmi
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 22 KiB |
BIN
icons/turf/flooring/tiles_old.dmi
Normal file
|
After Width: | Height: | Size: 25 KiB |
@@ -213,6 +213,8 @@
|
|||||||
warmup_time = 0
|
warmup_time = 0
|
||||||
origin = /area/syndicate_station/start
|
origin = /area/syndicate_station/start
|
||||||
interim = /area/syndicate_station/transit
|
interim = /area/syndicate_station/transit
|
||||||
|
can_cloak = TRUE
|
||||||
|
cloaked = TRUE
|
||||||
start_location = "Mercenary Base"
|
start_location = "Mercenary Base"
|
||||||
destinations = list(
|
destinations = list(
|
||||||
"Northwest of the station" = /area/syndicate_station/northwest,
|
"Northwest of the station" = /area/syndicate_station/northwest,
|
||||||
@@ -243,6 +245,8 @@
|
|||||||
warmup_time = 0
|
warmup_time = 0
|
||||||
origin = /area/skipjack_station/start
|
origin = /area/skipjack_station/start
|
||||||
interim = /area/skipjack_station/transit
|
interim = /area/skipjack_station/transit
|
||||||
|
can_cloak = TRUE
|
||||||
|
cloaked = TRUE
|
||||||
destinations = list(
|
destinations = list(
|
||||||
"Fore Starboard Solars" = /area/skipjack_station/northeast_solars,
|
"Fore Starboard Solars" = /area/skipjack_station/northeast_solars,
|
||||||
"Fore Port Solars" = /area/skipjack_station/northwest_solars,
|
"Fore Port Solars" = /area/skipjack_station/northwest_solars,
|
||||||
|
|||||||
@@ -6300,7 +6300,7 @@
|
|||||||
"crh" = (/obj/structure/table/rack{dir = 4},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
|
"crh" = (/obj/structure/table/rack{dir = 4},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
|
||||||
"cri" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
|
"cri" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
|
||||||
"crj" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
|
"crj" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
|
||||||
"crk" = (/obj/structure/closet/crate,/obj/item/stack/material/gold,/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
"crk" = (/obj/structure/closet/crate,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
||||||
"crl" = (/obj/structure/closet/secure_closet/freezer/money,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/item/weapon/storage/secure/briefcase/money{desc = "An sleek tidy briefcase."; name = "secure briefcase"},/obj/structure/cable,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
"crl" = (/obj/structure/closet/secure_closet/freezer/money,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/item/weapon/storage/secure/briefcase/money{desc = "An sleek tidy briefcase."; name = "secure briefcase"},/obj/structure/cable,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
||||||
"crm" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
"crm" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
|
||||||
"crn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/medbay_aft)
|
"crn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/medbay_aft)
|
||||||
|
|||||||
@@ -258,3 +258,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
"}
|
"}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
new /obj/item/clothing/gloves/sterile/latex(src)
|
new /obj/item/clothing/gloves/sterile/latex(src)
|
||||||
new /obj/item/device/radio/headset/heads/cmo/alt(src)
|
new /obj/item/device/radio/headset/heads/cmo/alt(src)
|
||||||
new /obj/item/device/flash(src)
|
new /obj/item/device/flash(src)
|
||||||
new /obj/item/weapon/reagent_containers/hypospray(src)
|
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
|
||||||
new /obj/item/weapon/storage/box/freezer(src)
|
new /obj/item/weapon/storage/box/freezer(src)
|
||||||
new /obj/item/clothing/mask/gas(src)
|
new /obj/item/clothing/mask/gas(src)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{{if data.map_levels.length}}
|
{{if data.map_levels.length}}
|
||||||
<div class="notice" style="height: 22px">
|
<div class="notice" style="height: 22px">
|
||||||
{{:helper.link('Show Air Alrms On Map', 'pin-s', {'showMap' : 1})}}
|
{{:helper.link('Show Air Alarms On Map', 'pin-s', {'showMap' : 1})}}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class='item'>
|
<div class='item'>
|
||||||
{{for data.alarms}}
|
{{for data.alarms}}
|
||||||
{{:helper.link(value.name, null, {'alarm' : value.ref}, null, value.danger == 2 ? 'redButton' : (value.danger == 1 ? 'yellowButton' : null))}}
|
{{:helper.link(value.name, null, {'alarm' : value.ref}, null, value.danger == 2 ? 'redButton' : (value.danger == 1 ? 'yellowButton' : null))}}
|
||||||
{{/for}}
|
{{/for}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
BIN
sound/effects/weightdrop.ogg
Normal file
BIN
sound/effects/weightlifter.ogg
Normal file
BIN
sound/items/geiger1.ogg
Normal file
BIN
sound/items/geiger2.ogg
Normal file
BIN
sound/items/geiger3.ogg
Normal file
BIN
sound/items/geiger4.ogg
Normal file
BIN
sound/items/geiger5.ogg
Normal file
BIN
sound/items/geiger_weak1.ogg
Normal file
BIN
sound/items/geiger_weak2.ogg
Normal file
BIN
sound/items/geiger_weak3.ogg
Normal file
BIN
sound/items/geiger_weak4.ogg
Normal file
@@ -1078,6 +1078,7 @@
|
|||||||
#include "code\game\objects\structures\door_assembly.dm"
|
#include "code\game\objects\structures\door_assembly.dm"
|
||||||
#include "code\game\objects\structures\electricchair.dm"
|
#include "code\game\objects\structures\electricchair.dm"
|
||||||
#include "code\game\objects\structures\extinguisher.dm"
|
#include "code\game\objects\structures\extinguisher.dm"
|
||||||
|
#include "code\game\objects\structures\fitness.dm"
|
||||||
#include "code\game\objects\structures\flora.dm"
|
#include "code\game\objects\structures\flora.dm"
|
||||||
#include "code\game\objects\structures\girders.dm"
|
#include "code\game\objects\structures\girders.dm"
|
||||||
#include "code\game\objects\structures\gravemarker.dm"
|
#include "code\game\objects\structures\gravemarker.dm"
|
||||||
|
|||||||