Merge pull request #2492 from Cameron653/master

Emergency Polaris Sync
This commit is contained in:
Cameron653
2017-11-17 19:51:07 -05:00
committed by GitHub
77 changed files with 413 additions and 195 deletions
+1
View File
@@ -57,3 +57,4 @@
#define INFECTION_LEVEL_ONE 100
#define INFECTION_LEVEL_TWO 500
#define INFECTION_LEVEL_THREE 1000
#define INFECTION_LEVEL_MAX 1500
+4 -2
View File
@@ -63,11 +63,13 @@
/obj/item/clothing/suit/storage/vest/heavy/merc,
/obj/item/clothing/glasses/night,
/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,
/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/cyanide,
/obj/item/ammo_magazine/chemdart
+1 -1
View File
@@ -119,7 +119,7 @@
/obj/item/weapon/storage/belt/medical,
/obj/item/device/radio/headset/heads/cmo,
/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/glasses/hud/health,
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
+1 -1
View File
@@ -142,7 +142,7 @@
/obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2
)
cost = 50
cost = 60
containertype = "/obj/structure/closet/crate/secure"
containername = "Vey-Med Medical voidsuit crate"
access = access_medical_equip
+11 -2
View File
@@ -1,6 +1,6 @@
/atom/movable
layer = 3
appearance_flags = TILE_BOUND
appearance_flags = TILE_BOUND|PIXEL_SCALE
var/last_move = null
var/anchored = 0
// var/elevation = 2 - not used anywhere
@@ -15,7 +15,7 @@
var/moved_recently = 0
var/mob/pulledby = null
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
/atom/movable/New()
@@ -296,3 +296,12 @@
return null
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/absorbed_languages = list() // Necessary because of set_species stuff
var/absorbedcount = 0
var/lingabsorbedcount = 1 //Starts at one, because that's us
var/chem_charges = 20
var/chem_recharge_rate = 0.5
var/chem_storage = 50
@@ -11,8 +12,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
var/changelingID = "Changeling"
var/geneticdamage = 0
var/isabsorbing = 0
var/geneticpoints = 5
var/max_geneticpoints = 5
var/geneticpoints = 7
var/max_geneticpoints = 7
var/readapts = 1
var/max_readapts = 2
var/list/purchased_powers = list()
@@ -90,16 +90,23 @@
continue
absorbDNA(dna_data)
changeling.absorbedcount++
T.mind.changeling.absorbed_dna.len = 1
changeling.geneticpoints += 5
changeling.max_geneticpoints += 5
// This is where lings get boosts from eating eachother
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>"
T.mind.changeling.chem_charges = 0
T.mind.changeling.geneticpoints = -1
T.mind.changeling.max_geneticpoints = -1 //To prevent revival.
T.mind.changeling.absorbedcount = 0
T.mind.changeling.lingabsorbedcount = 0
changeling.absorbedcount++
changeling.isabsorbing = 0
+2 -2
View File
@@ -7,8 +7,8 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
/datum/game_mode/heist
name = "Heist"
config_tag = "heist"
required_players = 9
required_players_secret = 9
required_players = 12
required_players_secret = 12
required_enemies = 3
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 \
+2 -2
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 \
attempts of robbery, fraud and other malicious actions."
config_tag = "mercenary"
required_players = 9
required_players_secret = 9
required_players = 12
required_players_secret = 12
required_enemies = 3
end_on_antag_death = 0
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
+1 -1
View File
@@ -440,7 +440,7 @@ datum/objective/steal
"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 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,
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
)
+4 -4
View File
@@ -59,7 +59,7 @@
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
return
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.overlays.Cut()
return
@@ -160,7 +160,7 @@
O.name = "used stasis bag"
O.icon = src.icon
O.icon_state = "bodybag_used"
O.desc = "Pretty useless now.."
O.desc = "Pretty useless now..."
qdel(src)
/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)
..()
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)
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)
L.examine(user)
+42 -12
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_MODERATE 15 //15
#define RAD_LEVEL_HIGH 50 //50
#define RAD_LEVEL_VERY_HIGH 100 //100
#define RAD_LEVEL_LOW 0.01 // Around the level at which radiation starts to become harmful
#define RAD_LEVEL_MODERATE 10
#define RAD_LEVEL_HIGH 25
#define RAD_LEVEL_VERY_HIGH 50
//Geiger counter
//Rewritten version of TG's geiger counter
@@ -19,7 +19,14 @@
/obj/item/device/geiger/New()
processing_objects |= src
/obj/item/device/geiger/Destroy()
processing_objects -= src
return ..()
/obj/item/device/geiger/process()
get_radiation()
/obj/item/device/geiger/proc/get_radiation()
if(!scanning)
return
radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
@@ -27,12 +34,29 @@
/obj/item/device/geiger/examine(mob/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)
scanning = !scanning
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()
if(!scanning)
@@ -40,12 +64,18 @@
return 1
switch(radiation_count)
if(null) icon_state = "geiger_on_1"
if(-INFINITY to RAD_LEVEL_LOW) icon_state = "geiger_on_1"
if(RAD_LEVEL_LOW + 1 to RAD_LEVEL_MODERATE) icon_state = "geiger_on_2"
if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) icon_state = "geiger_on_3"
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) icon_state = "geiger_on_4"
if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY) icon_state = "geiger_on_5"
if(null)
icon_state = "geiger_on_1"
if(-INFINITY to RAD_LEVEL_LOW)
icon_state = "geiger_on_1"
if(RAD_LEVEL_LOW to RAD_LEVEL_MODERATE)
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_MODERATE
+35 -19
View File
@@ -75,11 +75,11 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
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
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
else
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
@@ -93,9 +93,13 @@
if(used == amount)
break
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
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)
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>" )
@@ -111,9 +115,9 @@
affecting.update_damages()
if(used == amount)
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
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)
/obj/item/stack/medical/ointment
@@ -135,17 +139,20 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
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
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
else
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>" )
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
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>" )
@@ -169,11 +176,11 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
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
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
else
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
@@ -187,8 +194,11 @@
if(used == amount)
break
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
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)
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>" )
@@ -205,9 +215,9 @@
affecting.update_damages()
if(used == amount)
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
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)
/obj/item/stack/medical/advanced/ointment
@@ -228,16 +238,19 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
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())
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
else
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>" )
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
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>" )
@@ -264,20 +277,23 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.name
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
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
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>")
else
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 << "<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
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(affecting.splinted)
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
return
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>")
return
+21 -21
View File
@@ -6,6 +6,7 @@
icon_state = "nanopaste"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
amount = 10
toolspeed = 0.75 //Used in surgery, shouldn't be the same speed as a normal screwdriver on mechanical organ repair.
w_class = ITEMSIZE_SMALL
no_variants = FALSE
@@ -14,12 +15,13 @@
return 0
if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
if (R.getBruteLoss() || R.getFireLoss() )
R.adjustBruteLoss(-15)
R.adjustFireLoss(-15)
R.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applied some [src] on [R]'s damaged areas.</span>",\
if (R.getBruteLoss() || R.getFireLoss())
if(do_after(user,7 * toolspeed))
R.adjustBruteLoss(-15)
R.adjustFireLoss(-15)
R.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applied some [src] on [R]'s damaged areas.</span>",\
"<span class='notice'>You apply some [src] at [R]'s damaged areas.</span>")
else
user << "<span class='notice'>All [R]'s systems are nominal.</span>"
@@ -28,19 +30,17 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
if(S.open >= 2)
if (S && (S.robotic >= ORGAN_ROBOT))
if(!S.get_damage())
user << "<span class='notice'>Nothing to fix here.</span>"
else if(can_use(1))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].</span>",\
"<span class='notice'>You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].</span>")
//VOREStation Add - External robolimb repair with nanopaste
else if(S && (S.robotic >= ORGAN_ROBOT))
if(S.robo_repair(5, "omni", "some damage", src, user))
if (S && (S.robotic >= ORGAN_ROBOT))
if(!S.get_damage())
user << "<span class='notice'>Nothing to fix here.</span>"
else if(can_use(1))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(S.open >= 2)
if(do_after(user,5 * toolspeed))
S.heal_damage(20, 20, robo_repair = 1)
else if(do_after(user,5 * toolspeed))
S.heal_damage(10,10, robo_repair =1)
H.updatehealth()
use(1)
//VOREStation Add End
user.visible_message("<span class='notice'>\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].</span>",\
"<span class='notice'>You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].</span>")
@@ -36,7 +36,7 @@
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
if(do_after(user, 20 * O.toolspeed))
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()
return
else if(istype(O, /obj/item/weapon))
@@ -50,7 +50,7 @@
else
playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time
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
src.hitstaken++
if(src.hitstaken == 4)
@@ -63,12 +63,14 @@
if (istype(O, /obj/item/weapon/material/twohanded/fireaxe) && src.localopened)
if(!fireaxe)
if(O:wielded)
user << "<span class='warning'>Unwield the axe first.</span>"
return
O:wielded = 0
O.update_icon()
//to_chat(user, "<span class='warning'>Unwield the axe first.</span>")
//return
fireaxe = O
user.remove_from_mob(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()
else
if(src.smashed)
@@ -91,11 +93,11 @@
spawn(10) update_icon()
return
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)
if(do_after(user,20 * O.toolspeed))
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
else
localopened = !localopened
@@ -116,13 +118,13 @@
hasaxe = 1
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
if(localopened)
if(fireaxe)
user.put_in_hands(fireaxe)
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)
update_icon()
else
@@ -149,7 +151,7 @@
attack_tk(mob/user as mob)
if(localopened && fireaxe)
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
update_icon()
return
@@ -161,9 +163,9 @@
if (isrobot(usr) || src.locked || src.smashed)
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)
usr << "<span class='notice'>The protective glass is broken!</span>"
to_chat(usr, "<span class='notice'>The protective glass is broken!</span>")
return
localopened = !localopened
@@ -180,23 +182,23 @@
if(fireaxe)
usr.put_in_hands(fireaxe)
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
usr << "<span class='notice'>The [src.name] is empty.</span>"
to_chat(usr, "<span class='notice'>The [src.name] is empty.</span>")
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()
attack_ai(mob/user as mob)
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
else
locked = !locked
if(locked)
user << "<span class='warning'>Cabinet locked.</span>"
to_chat(user, "<span class='warning'>Cabinet locked.</span>")
else
user << "<span class='notice'>Cabinet unlocked.</span>"
to_chat(user, "<span class='notice'>Cabinet unlocked.</span>")
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
@@ -206,6 +206,7 @@
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray/vr(src) //VOREStation Edit - MKII Hypospray
new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr(src) //VOREStation Edit - A vial for hypo
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/clothing/shoes/boots/winter/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
+65
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
+4
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/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/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')
@@ -188,4 +190,6 @@ var/const/FALLOFF_SOUNDS = 0.5
if ("canopen") soundin = pick(can_sound)
if ("mechstep") soundin = pick(mechstep_sound)
//if ("gunshot") soundin = pick(gun_sound)
if("geiger") soundin = pick(geiger_sound)
if("geiger_weak") soundin = pick(geiger_weak_sound)
return soundin
+2
View File
@@ -46,6 +46,8 @@
var/ooc_style = "everyone"
if(holder && !holder.fakekey)
ooc_style = "elevated"
if(holder.rights & R_EVENT)
ooc_style = "event_manager"
if(holder.rights & R_MOD)
ooc_style = "moderator"
if(holder.rights & R_DEBUG)
+1 -1
View File
@@ -779,7 +779,7 @@ var/list/admin_verbs_event_manager = list(
set category = "Admin"
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.")
message_admins("[src] deadmined themself.", 1)
deadmin()
@@ -72,6 +72,25 @@
Regardless, you find it quite difficult to land shots where you wanted them to go."
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.
/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")
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
name = "streamlined medical voidsuit helmet"
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching green."
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"
/obj/item/clothing/suit/space/void/medical/alt
icon_state = "rig-medicalalt"
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."
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)
armor = list(melee = 30, bullet = 5, laser = 10,energy = 5, bomb = 5, bio = 100, rad = 60)
slowdown = 0
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
//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)
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
holder.on_data_written()
@@ -4,11 +4,14 @@
/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
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>")
write_data_to_pin(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))
data = new_data
holder.on_data_written()
@@ -125,6 +125,7 @@
if("string")
accepting_refs = 0
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))
data_to_write = new_data
to_chat(user, "<span class='notice'>You set \the [src]'s memory to \"[new_data]\".</span>")
+7
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_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/icon_scale_percent // Makes the holder's icon get scaled up or down.
/datum/modifier/New(var/new_holder, var/new_origin)
holder = new_holder
@@ -62,6 +63,8 @@
holder.modifiers.Remove(src)
if(mob_overlay_state) // We do this after removing ourselves from the list so that the overlay won't remain.
holder.update_modifier_visuals()
if(icon_scale_percent) // Correct the scaling.
holder.update_transform()
qdel(src)
// Override this for special effects when it gets removed.
@@ -117,6 +120,8 @@
modifiers.Add(mod)
if(mod.mob_overlay_state)
update_modifier_visuals()
if(mod.icon_scale_percent)
update_transform()
return mod
@@ -198,6 +203,8 @@
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"]."
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>")
+25 -1
View File
@@ -58,4 +58,28 @@
desc = "Your body's metabolism is slower than average."
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 (M == src)
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)
@@ -56,4 +56,4 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
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/skipfeet = 0
var/cloaked = 0 // 0 for normal, 1 for cloaked close
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
if(alpha <= 50)
src.loc.examine(user)
return
var/looks_synth = looksSynthetic()
@@ -97,8 +89,6 @@
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
T = gender_datums[PLURAL]
if(cloaked)
T = gender_datums[NEUTER]
else if(species && species.ambiguous_genders)
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"
if(print_flavor_text() && !cloaked)
if(print_flavor_text())
msg += "[print_flavor_text()]\n"
// VOREStation Start
@@ -483,20 +473,13 @@
// VOREStation End
msg += "*---------*</span><br>"
msg += applying_pressure
if (pose && !cloaked)
if (pose)
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.
msg += "[T.He] [pose]"
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.
/proc/hasHUD(mob/M as mob, hudtype)
if(istype(M, /mob/living/carbon/human))
@@ -324,8 +324,6 @@
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
/mob/living/carbon/human/proc/get_visible_name()
if( mind && mind.changeling && mind.changeling.cloaked)
return "Unknown"
if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
return get_id_name("Unknown")
if( head && (head.flags_inv&HIDEFACE) )
@@ -30,6 +30,8 @@
var/tail_animation // If set, the icon to obtain tail animation states from.
var/tail_hair
var/icon_scale = 1 // Makes the icon larger/smaller.
var/race_key = 0 // Used for mob icon cache string.
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
var/mob_size = MOB_MEDIUM
@@ -39,6 +39,8 @@
burn_mod = 0.85
metabolic_rate = 0.85
item_slowdown_mod = 0.5
mob_size = MOB_LARGE
blood_volume = 840
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_UNATHI)
name_language = LANGUAGE_UNATHI
@@ -163,13 +163,13 @@ Please contact me on #coderbus IRC. ~Carn x
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
var/matrix/M = matrix()
M.Turn(90)
M.Scale(size_multiplier)
M.Scale(size_multiplier) //VOREStation Edit. Look at Polaris pull #4267 to see things edited.
M.Translate(1,-6)
src.transform = M
else
var/matrix/M = matrix()
M.Scale(size_multiplier)
M.Translate(0, 16*(size_multiplier-1))
M.Scale(size_multiplier) //VOREStation Edit.
M.Translate(0, 16*(size_multiplier-1)) //VOREStation Edit.
src.transform = M
var/global/list/damage_icon_parts = list()
+15
View File
@@ -1046,3 +1046,18 @@ default behaviour is:
// Called by job_controller.
/mob/living/proc/equip_post_job()
return
/* //VOREStation Edit. We have a better system in place.
/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
*/ //VOREStation Edit
-15
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/toggle_acceleration,
/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_call_shuttle,
/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)
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_RADIO
@@ -399,6 +399,11 @@
C.toggled = 1
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
/mob/living/silicon/robot/proc/show_jetpack_pressure()
// if you have a jetpack, show the internal tank pressure
@@ -642,7 +647,8 @@
else
if( !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/healthanalyzer)) )
spark_system.start()
if(W.force > 0)
spark_system.start()
return ..()
/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/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/taser_kill = 1 // Is the mob weak to tasers
//Attack ranged settings
var/ranged = 0 // Do I attack at range?
@@ -1446,16 +1447,17 @@
//Shot with taser/stunvolver
/mob/living/simple_animal/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
var/stunDam = 0
var/agonyDam = 0
if(taser_kill)
var/stunDam = 0
var/agonyDam = 0
if(stun_amount)
stunDam += stun_amount * 0.5
adjustFireLoss(stunDam)
if(stun_amount)
stunDam += stun_amount * 0.5
adjustFireLoss(stunDam)
if(agony_amount)
agonyDam += agony_amount * 0.5
adjustFireLoss(agonyDam)
if(agony_amount)
agonyDam += agony_amount * 0.5
adjustFireLoss(agonyDam)
/mob/living/simple_animal/emp_act(severity)
if(!isSynthetic())
+1
View File
@@ -535,6 +535,7 @@
if(M != usr) return
if(usr == src) 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
show_inv(usr)
+2
View File
@@ -18,6 +18,8 @@
return 0
/obj/item/organ/internal/appendix/process()
..()
if(!inflamed || !owner)
return
+15 -15
View File
@@ -44,21 +44,6 @@
tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1)
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()
..()
health = config.default_brain_health
@@ -127,6 +112,21 @@
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
name = "slime core"
desc = "A complex, organic knot of jelly and crystalline particles."
+1
View File
@@ -9,6 +9,7 @@
/obj/item/organ/internal/kidneys/process()
..()
if(!owner) return
// Coffee is really bad for you with busted kidneys.
@@ -58,5 +58,7 @@
if (prob(3))
take_damage(1,silent=prob(30))
//if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE, others are handled on each specific organ
//Nothing that generic internal organs do for this
if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE
if (prob(50))
take_damage(1,silent=prob(15))
+16 -11
View File
@@ -91,6 +91,9 @@ var/list/organ_cache = list()
if(owner && vital)
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()
if(loc != owner)
@@ -117,9 +120,9 @@ var/list/organ_cache = list()
if(config.organs_decay) damage += rand(1,3)
if(damage >= max_damage)
damage = max_damage
germ_level += rand(2,6)
adjust_germ_level(rand(2,6))
if(germ_level >= INFECTION_LEVEL_TWO)
germ_level += rand(2,6)
adjust_germ_level(rand(2,6))
if(germ_level >= INFECTION_LEVEL_THREE)
die()
@@ -158,12 +161,12 @@ var/list/organ_cache = list()
owner.adjustToxLoss(infection_damage)
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)
//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)))
germ_level++
adjust_germ_level(1)
if(germ_level >= INFECTION_LEVEL_ONE)
. = 1 //Organ qualifies for effect-specific processing
@@ -179,7 +182,7 @@ var/list/organ_cache = list()
if (germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30)
. = 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()
// 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.
switch(rejecting)
if(1 to 50)
germ_level++
adjust_germ_level(1)
if(51 to 200)
germ_level += rand(1,2)
adjust_germ_level(rand(1,2))
if(201 to 500)
germ_level += rand(2,3)
adjust_germ_level(rand(2,3))
if(501 to INFINITY)
germ_level += rand(3,5)
adjust_germ_level(rand(3,5))
owner.reagents.add_reagent("toxin", rand(1,2))
/obj/item/organ/proc/receive_chem(chemical as obj)
@@ -238,9 +241,11 @@ var/list/organ_cache = list()
if (germ_level < INFECTION_LEVEL_ONE)
germ_level = 0 //cure instantly
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
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.
/obj/item/organ/proc/add_autopsy_data(var/used_weapon, var/damage)
+10 -9
View File
@@ -71,7 +71,7 @@ var/global/list/limb_icon_cache = list()
overlays |= lip_icon
mob_icon.Blend(lip_icon, ICON_OVERLAY)
//Head markings, duplicated (sadly) below.
//Head markings.
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
@@ -132,14 +132,15 @@ var/global/list/limb_icon_cache = list()
mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
//Body markings, does not include head, duplicated (sadly) above.
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
overlays |= mark_s //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
//Body markings, actually does not include head this time. Done separately above.
if(!istype(src,/obj/item/organ/external/head))
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
overlays |= mark_s //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
+2 -2
View File
@@ -119,8 +119,8 @@
/obj/item/weapon/pen/reagent/paralysis/New()
..()
reagents.add_reagent("zombiepowder", 10)
reagents.add_reagent("cryptobiolin", 15)
reagents.add_reagent("zombiepowder", 5)
reagents.add_reagent("cryptobiolin", 10)
/*
* Chameleon pen
+2
View File
@@ -4,6 +4,8 @@
than the alternative."
icon_state = "gridchecker_on"
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.
// Wire stuff below.
var/datum/wires/grid_checker/wires
+2 -2
View File
@@ -5,7 +5,7 @@
icon_state = "generator0"
var/active = 0
var/field_radius = 3
var/max_field_radius = 100
var/max_field_radius = 150
var/list/field = list()
density = 1
var/locked = 0
@@ -323,4 +323,4 @@
T = locate(gen_turf.x + field_radius, gen_turf.y + y_offset, gen_turf.z)
if (T) out += T
return out
return out
+2 -1
View File
@@ -24,6 +24,7 @@ em {font-style: normal;font-weight: bold;}
.ooc .moderator {color: #184880;}
.ooc .developer {color: #1b521f;}
.ooc .admin {color: #b82e00;}
.ooc .event_manager {color: #660033;}
.ooc .aooc {color: #960018;}
/* Admin: Private Messages */
@@ -36,7 +37,7 @@ em {font-style: normal;font-weight: bold;}
.mod_channel {color: #735638; font-weight: bold;}
.mod_channel .admin {color: #b82e00; 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 */
.deadsay {color: #530FAD;}
+4
View File
@@ -0,0 +1,4 @@
author: Atermonera
delete-after: True
changes:
- bugfix: "AI verbs are no longer hidden on the tabs."
+4
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

@@ -213,6 +213,8 @@
warmup_time = 0
origin = /area/syndicate_station/start
interim = /area/syndicate_station/transit
can_cloak = TRUE
cloaked = TRUE
start_location = "Mercenary Base"
destinations = list(
"Northwest of the station" = /area/syndicate_station/northwest,
@@ -243,6 +245,8 @@
warmup_time = 0
origin = /area/skipjack_station/start
interim = /area/skipjack_station/transit
can_cloak = TRUE
cloaked = TRUE
destinations = list(
"Fore Starboard Solars" = /area/skipjack_station/northeast_solars,
"Fore Port Solars" = /area/skipjack_station/northwest_solars,
+1 -1
View File
@@ -6300,7 +6300,7 @@
"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)
"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)
"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)
+1
View File
@@ -258,3 +258,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
@@ -25,7 +25,7 @@
new /obj/item/clothing/gloves/sterile/latex(src)
new /obj/item/device/radio/headset/heads/cmo/alt(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/clothing/mask/gas(src)
return
+2 -2
View File
@@ -1,10 +1,10 @@
{{if data.map_levels.length}}
<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>
{{/if}}
<div class='item'>
{{for data.alarms}}
{{:helper.link(value.name, null, {'alarm' : value.ref}, null, value.danger == 2 ? 'redButton' : (value.danger == 1 ? 'yellowButton' : null))}}
{{/for}}
</div>
</div>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -1078,6 +1078,7 @@
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\electricchair.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\girders.dm"
#include "code\game\objects\structures\gravemarker.dm"