Polaris sync

This commit is contained in:
killer653
2017-11-17 19:27:03 -05:00
73 changed files with 393 additions and 163 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,4 @@
author: Atermonera
delete-after: True
changes:
- bugfix: "AI verbs are no longer hidden on the tabs."

View File

@@ -0,0 +1,4 @@
author: Atermonera
delete-after: True
changes:
- bugfix: "Incapacitated mobs can no longer open your inventory and steal your gubbins."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

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

View File

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

View File

@@ -258,3 +258,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"} "}

View File

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

View File

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

Binary file not shown.

Binary file not shown.

BIN
sound/items/geiger1.ogg Normal file

Binary file not shown.

BIN
sound/items/geiger2.ogg Normal file

Binary file not shown.

BIN
sound/items/geiger3.ogg Normal file

Binary file not shown.

BIN
sound/items/geiger4.ogg Normal file

Binary file not shown.

BIN
sound/items/geiger5.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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