Merge branch 'master' of https://github.com/tgstation/-tg-station into Boxes_of_the_Spessmen
Conflicts: _maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -11,7 +11,7 @@ var/list/archive_diseases = list()
|
||||
|
||||
// The order goes from easy to cure to hard to cure.
|
||||
var/list/advance_cures = list(
|
||||
"nutriment", "sugar", "orangejuice",
|
||||
"sodiumchloride", "sugar", "orangejuice",
|
||||
"spaceacillin", "salglu_solution", "ethanol",
|
||||
"leporazine", "synaptizine", "lipolicide",
|
||||
"silver", "gold"
|
||||
@@ -424,4 +424,4 @@ var/list/advance_cures = list(
|
||||
src << "<a href='?_src_=vars;Vars=\ref[D]'>[D.name] - [D.holder]</a>"
|
||||
*/
|
||||
|
||||
#undef RANDOM_STARTING_LEVEL
|
||||
#undef RANDOM_STARTING_LEVEL
|
||||
|
||||
@@ -27,24 +27,24 @@
|
||||
/area/New()
|
||||
icon_state = ""
|
||||
layer = 10
|
||||
master = src //moved outside the spawn(1) to avoid runtimes in lighting.dm when it references src.loc.loc.master ~Carn
|
||||
master = src
|
||||
uid = ++global_uid
|
||||
related = list(src)
|
||||
|
||||
if(requires_power)
|
||||
luminosity = 0
|
||||
else
|
||||
power_light = 1 //rastaf0
|
||||
power_equip = 1 //rastaf0
|
||||
power_environ = 1 //rastaf0
|
||||
power_light = 1
|
||||
power_equip = 1
|
||||
power_environ = 1
|
||||
luminosity = 1
|
||||
lighting_use_dynamic = 0
|
||||
|
||||
..()
|
||||
|
||||
power_change() // all machines set to current power level, also updates lighting icon
|
||||
power_change() // all machines set to current power level, also updates icon
|
||||
|
||||
blend_mode = BLEND_MULTIPLY // Putting this in the constructure so that it stops the icons being screwed up in the map editor.
|
||||
blend_mode = BLEND_MULTIPLY // Putting this in the constructor so that it stops the icons being screwed up in the map editor.
|
||||
|
||||
|
||||
|
||||
@@ -225,20 +225,21 @@
|
||||
if ((fire || eject || party) && (!requires_power||power_environ))//If it doesn't require power, can still activate this proc.
|
||||
if(fire && !eject && !party)
|
||||
icon_state = "blue"
|
||||
/*else if(atmosalm && !fire && !eject && !party)
|
||||
icon_state = "bluenew"*/
|
||||
else if(!fire && eject && !party)
|
||||
icon_state = "red"
|
||||
else if(party && !fire && !eject)
|
||||
icon_state = "party"
|
||||
else
|
||||
icon_state = "blue-red"
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
else
|
||||
// new lighting behaviour with obj lights
|
||||
icon_state = null
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/area/space/updateicon()
|
||||
icon_state = null
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/*
|
||||
#define EQUIP 1
|
||||
@@ -271,8 +272,7 @@
|
||||
for(var/area/RA in related)
|
||||
for(var/obj/machinery/M in RA) // for each machine in the area
|
||||
M.power_change() // reverify power status (to update icons etc.)
|
||||
if (fire || eject || party)
|
||||
RA.updateicon()
|
||||
RA.updateicon()
|
||||
|
||||
/area/proc/usage(chan)
|
||||
var/used = 0
|
||||
|
||||
@@ -331,24 +331,30 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/human/target)
|
||||
var/datum/changelingprofile/prof = stored_profiles[1]
|
||||
if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
|
||||
user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>"
|
||||
return
|
||||
/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/human/target, var/verbose=1)
|
||||
if(stored_profiles.len)
|
||||
var/datum/changelingprofile/prof = stored_profiles[1]
|
||||
if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
|
||||
if(verbose)
|
||||
user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>"
|
||||
return
|
||||
if(!target)
|
||||
return
|
||||
if((target.disabilities & NOCLONE) || (target.disabilities & HUSK))
|
||||
user << "<span class='warning'>DNA of [target] is ruined beyond usability!</span>"
|
||||
if(verbose)
|
||||
user << "<span class='warning'>DNA of [target] is ruined beyond usability!</span>"
|
||||
return
|
||||
if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway!
|
||||
user << "<span class='warning'>We could gain no benefit from absorbing a lesser creature.</span>"
|
||||
if(verbose)
|
||||
user << "<span class='warning'>We could gain no benefit from absorbing a lesser creature.</span>"
|
||||
return
|
||||
if(has_dna(target.dna))
|
||||
user << "<span class='warning'>We already have this DNA in storage!</span>"
|
||||
if(verbose)
|
||||
user << "<span class='warning'>We already have this DNA in storage!</span>"
|
||||
return
|
||||
if(!target.has_dna())
|
||||
user << "<span class='warning'>[target] is not compatible with our biology.</span>"
|
||||
if(verbose)
|
||||
user << "<span class='warning'>[target] is not compatible with our biology.</span>"
|
||||
return
|
||||
return 1
|
||||
|
||||
@@ -366,17 +372,24 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
prof.name = H.real_name
|
||||
prof.protected = protect
|
||||
|
||||
prof.underwear = H.underwear
|
||||
prof.undershirt = H.undershirt
|
||||
prof.socks = H.socks
|
||||
|
||||
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
|
||||
for(var/slot in slots)
|
||||
var/obj/item/I = H.vars[slot]
|
||||
if(!I)
|
||||
if(slot in H.vars)
|
||||
var/obj/item/I = H.vars[slot]
|
||||
if(!I)
|
||||
continue
|
||||
prof.name_list[slot] = I.name
|
||||
prof.appearance_list[slot] = I.appearance
|
||||
prof.flags_cover_list[slot] = I.flags_cover
|
||||
prof.item_color_list[slot] = I.item_color
|
||||
prof.item_state_list[slot] = I.item_state
|
||||
prof.exists_list[slot] = 1
|
||||
else
|
||||
continue
|
||||
prof.name_list[slot] = I.name
|
||||
prof.appearance_list[slot] = I.appearance
|
||||
prof.flags_cover_list[slot] = I.flags_cover
|
||||
prof.item_color_list[slot] = I.item_color
|
||||
prof.item_state_list[slot] = I.item_state
|
||||
prof.exists_list[slot] = 1
|
||||
|
||||
stored_profiles += prof
|
||||
absorbedcount++
|
||||
@@ -406,8 +419,13 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
/proc/changeling_transform(var/mob/living/carbon/human/user, var/datum/changelingprofile/chosen_prof)
|
||||
var/datum/dna/chosen_dna = chosen_prof.dna
|
||||
user.real_name = chosen_prof.name
|
||||
user.underwear = chosen_prof.underwear
|
||||
user.undershirt = chosen_prof.undershirt
|
||||
user.socks = chosen_prof.socks
|
||||
|
||||
chosen_dna.transfer_identity(user, 1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.update_body()
|
||||
user.domutcheck()
|
||||
|
||||
//vars hackery. not pretty, but better than the alternative.
|
||||
@@ -452,6 +470,10 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
var/list/item_color_list = list()
|
||||
var/list/item_state_list = list()
|
||||
|
||||
var/underwear
|
||||
var/undershirt
|
||||
var/socks
|
||||
|
||||
/datum/changelingprofile/Destroy()
|
||||
qdel(dna)
|
||||
return ..()
|
||||
@@ -370,9 +370,10 @@ var/list/sting_paths
|
||||
mind.changeling.purchasedpowers+=S
|
||||
S.on_purchase(src)
|
||||
|
||||
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
|
||||
var/datum/changelingprofile/prof = mind.changeling.add_profile(C) //not really a point in typecasting here but somebody will probably get mad at me if i dont
|
||||
mind.changeling.first_prof = prof
|
||||
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
|
||||
if(ishuman(C))
|
||||
var/datum/changelingprofile/prof = mind.changeling.add_profile(C)
|
||||
mind.changeling.first_prof = prof
|
||||
return 1
|
||||
|
||||
/datum/changeling/proc/reset()
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight
|
||||
name = "Augmented Eyesight"
|
||||
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
|
||||
helptext = "Grants us night vision and thermal vision. It may be toggled on or off. We will become more vulnerable to flash-based devices while active."
|
||||
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability, or protects your vision from flashes."
|
||||
helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash-based devices while thermal vision is active."
|
||||
chemical_cost = 0
|
||||
dna_cost = 2 //Would be 1 without thermal vision
|
||||
var/active = 0 //Whether or not vision is enhanced
|
||||
@@ -12,24 +12,70 @@
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
active = !active
|
||||
if(active)
|
||||
user << "<span class='notice'>We feel a minute twitch in our eyes, and darkness creeps away.</span>"
|
||||
user.weakeyes = 1
|
||||
user.sight |= SEE_MOBS
|
||||
user.permanent_sight_flags |= SEE_MOBS
|
||||
user.see_in_dark = 8
|
||||
user.dna.species.invis_sight = SEE_INVISIBLE_MINIMUM
|
||||
if(user.getorgan(/obj/item/organ/internal/cyberimp/eyes/thermals/ling))
|
||||
user << "<span class='notice'>Our eyes are protected from flashes.</span>"
|
||||
var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling()
|
||||
O.Insert(user)
|
||||
|
||||
else
|
||||
user << "<span class='notice'>Our vision dulls. Shadows gather.</span>"
|
||||
user.weakeyes = 0
|
||||
user.sight &= ~SEE_MOBS
|
||||
user.permanent_sight_flags &= ~SEE_MOBS
|
||||
user.see_in_dark = 0
|
||||
user.dna.species.invis_sight = initial(user.dna.species.invis_sight)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling()
|
||||
O.Insert(user)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user)
|
||||
user.permanent_sight_flags &= ~SEE_MOBS
|
||||
user.sight &= ~SEE_MOBS
|
||||
var/obj/item/organ/internal/cyberimp/eyes/O = user.getorganslot("eye_ling")
|
||||
O.Remove(user)
|
||||
qdel(O)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling
|
||||
name = "protective membranes"
|
||||
desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage."
|
||||
icon_state = "ling_eyeshield"
|
||||
eye_color = null
|
||||
implant_overlay = null
|
||||
origin_tech = "biotech=4"
|
||||
slot = "eye_ling"
|
||||
status = ORGAN_ORGANIC
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life()
|
||||
..()
|
||||
if(owner.eye_blind || owner.eye_stat || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHT))
|
||||
owner.reagents.add_reagent("oculine", 1)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat()
|
||||
var/obj/S = ..()
|
||||
S.reagents.add_reagent("oculine", 15)
|
||||
return S
|
||||
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/thermals/ling
|
||||
name = "heat receptors"
|
||||
desc = "These heat receptors dramatically increases eyes light sensing ability."
|
||||
icon_state = "ling_thermal"
|
||||
eye_color = null
|
||||
implant_overlay = null
|
||||
origin_tech = "biotech=5;magnets=5"
|
||||
slot = "eye_ling"
|
||||
status = ORGAN_ORGANIC
|
||||
aug_message = "You feel a minute twitch in our eyes, and darkness creeps away."
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.weakeyes = 1
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Remove(mob/living/carbon/M, special = 0)
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.weakeyes = 0
|
||||
..()
|
||||
@@ -29,8 +29,9 @@
|
||||
for(var/obj/item/organ/internal/I in organs)
|
||||
I.loc = crab
|
||||
crab.origin = M
|
||||
if(M)
|
||||
M.transfer_to(crab)
|
||||
if(crab.origin)
|
||||
crab.origin.active = 1
|
||||
crab.origin.transfer_to(crab)
|
||||
crab << "<span class='warning'>You burst out of the remains of your former body in a shower of gore!</span>"
|
||||
user.gib()
|
||||
feedback_add_details("changeling_powers","LR")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/effect/proc_holder/changeling/panacea
|
||||
name = "Anatomic Panacea"
|
||||
desc = "Expels impurifications from our form; curing diseases, removing toxins and radiation, and resetting our genetic code completely."
|
||||
desc = "Expels impurifications from our form; curing diseases, removing parasites, toxins and radiation, and resetting our genetic code completely."
|
||||
helptext = "Can be used while unconscious."
|
||||
chemical_cost = 20
|
||||
dna_cost = 1
|
||||
@@ -9,15 +9,23 @@
|
||||
//Heals the things that the other regenerative abilities don't.
|
||||
/obj/effect/proc_holder/changeling/panacea/sting_action(mob/user)
|
||||
user << "<span class='notice'>We begin cleansing impurities from our form.</span>"
|
||||
|
||||
var/obj/item/organ/internal/body_egg/egg = user.getorgan(/obj/item/organ/internal/body_egg)
|
||||
if(egg)
|
||||
egg.Remove(user)
|
||||
user.visible_message("<span class='danger'>[user] vomits up [egg]!</span>", "<span class='userdanger'>[user] vomits up [egg]!</span>")
|
||||
playsound(user.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/location = user.loc
|
||||
if(istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(user, 1)
|
||||
egg.loc = location
|
||||
|
||||
user.reagents.add_reagent("mutadone", 10)
|
||||
user.reagents.add_reagent("potass_iodide", 10)
|
||||
user.reagents.add_reagent("charcoal", 20)
|
||||
|
||||
for(var/datum/disease/D in user.viruses)
|
||||
D.cure()
|
||||
for(var/obj/item/organ/internal/I in user)
|
||||
if(istype(I,/obj/item/organ/internal/body_egg/alien_embryo))
|
||||
I.Remove(user)
|
||||
I.loc = get_turf(user)
|
||||
feedback_add_details("changeling_powers","AP")
|
||||
return 1
|
||||
return 1
|
||||
@@ -100,6 +100,7 @@
|
||||
|
||||
target.visible_message("<span class='danger'>[target] begins to violenty convulse!</span>","<span class='userdanger'>You feel a tiny prick and a begin to uncontrollably convulse!</span>")
|
||||
spawn(10)
|
||||
user.real_name = NewDNA.real_name
|
||||
NewDNA.transfer_identity(C, transfer_SE=1)
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
C.domutcheck()
|
||||
|
||||
@@ -85,7 +85,7 @@ Made by Xhuis
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
var/shadowlings = max(2, round(num_players()/10))
|
||||
var/shadowlings = max(2, round(num_players()/20))
|
||||
|
||||
|
||||
while(shadowlings)
|
||||
|
||||
@@ -256,14 +256,30 @@ About the new airlock wires panel:
|
||||
lights_overlay = get_airlock_overlay("lights_bolts", overlays_file)
|
||||
else if(emergency)
|
||||
lights_overlay = get_airlock_overlay("lights_emergency", overlays_file)
|
||||
|
||||
if(AIRLOCK_DENY)
|
||||
overlays += get_airlock_overlay("lights_denied", overlays_file)
|
||||
sleep(4)
|
||||
update_icon(AIRLOCK_CLOSED)
|
||||
return
|
||||
frame_overlay = get_airlock_overlay("closed", icon)
|
||||
if(airlock_material)
|
||||
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
|
||||
else
|
||||
filling_overlay = get_airlock_overlay("fill_closed", icon)
|
||||
if(p_open)
|
||||
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
|
||||
if(welded)
|
||||
weld_overlay = get_airlock_overlay("welded", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_denied", overlays_file)
|
||||
|
||||
if(AIRLOCK_EMAG)
|
||||
overlays += get_airlock_overlay("sparks", overlays_file)
|
||||
return
|
||||
frame_overlay = get_airlock_overlay("closed", icon)
|
||||
sparks_overlay = get_airlock_overlay("sparks", overlays_file)
|
||||
if(airlock_material)
|
||||
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
|
||||
else
|
||||
filling_overlay = get_airlock_overlay("fill_closed", icon)
|
||||
if(p_open)
|
||||
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
|
||||
if(welded)
|
||||
weld_overlay = get_airlock_overlay("welded", overlays_file)
|
||||
|
||||
if(AIRLOCK_CLOSING)
|
||||
frame_overlay = get_airlock_overlay("closing", icon)
|
||||
@@ -319,6 +335,8 @@ About the new airlock wires panel:
|
||||
update_icon(AIRLOCK_CLOSING)
|
||||
if("deny")
|
||||
update_icon(AIRLOCK_DENY)
|
||||
sleep(6)
|
||||
update_icon(AIRLOCK_CLOSED)
|
||||
icon_state = "closed"
|
||||
|
||||
/obj/machinery/door/airlock/examine(mob/user)
|
||||
@@ -1119,7 +1137,8 @@ About the new airlock wires panel:
|
||||
sleep(6)
|
||||
if(qdeleted(src))
|
||||
return
|
||||
open()
|
||||
if(!open())
|
||||
update_icon(AIRLOCK_CLOSED)
|
||||
emagged = 1
|
||||
desc = "<span class='warning'>Its access panel is smoking slightly.</span>"
|
||||
lights = 0
|
||||
|
||||
@@ -96,6 +96,10 @@
|
||||
else
|
||||
icon_state = "recharger3"
|
||||
|
||||
/obj/machinery/recharger/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/recharger/emp_act(severity)
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
..(severity)
|
||||
@@ -114,7 +118,9 @@
|
||||
|
||||
|
||||
/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
|
||||
if(charging)
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
icon_state = "rechargeroff"
|
||||
else if(charging)
|
||||
icon_state = "recharger1"
|
||||
else
|
||||
icon_state = "recharger0"
|
||||
@@ -6,6 +6,15 @@
|
||||
var/thrusters = 0
|
||||
var/datum/action/mecha/mech_toggle_thrusters/thrusters_action = new
|
||||
|
||||
/obj/mecha/combat/CheckParts(atom/holder)
|
||||
var/obj/item/weapon/stock_parts/capacitor/C = locate() in holder
|
||||
var/obj/item/weapon/stock_parts/scanning_module/SM = locate() in holder
|
||||
step_energy_drain = 20 - (5 * SM.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best
|
||||
var/DR = damage_absorption["energy"]
|
||||
damage_absorption["energy"] = DR - (C.rating / 10) //Each level of capacitor protects the mech against emp by 10%
|
||||
qdel(C)
|
||||
qdel(SM)
|
||||
|
||||
/obj/mecha/combat/moved_inside(mob/living/carbon/human/H)
|
||||
if(..())
|
||||
if(H.client)
|
||||
|
||||
@@ -336,7 +336,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Advanced capacitor is installed."),
|
||||
//8
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Advanced scanner module is secured."),
|
||||
//9
|
||||
@@ -344,7 +344,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Advanced scanner module is installed."),
|
||||
//10
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Weapon control module is secured."),
|
||||
//11
|
||||
@@ -473,42 +473,48 @@
|
||||
holder.icon_state = "gygax8"
|
||||
if(10)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs advanced scanner module to the [holder].", "<span class='notice'>You install advanced scanner module to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs scanner module to the [holder].", "<span class='notice'>You install scanner module to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "gygax11"
|
||||
else
|
||||
user.visible_message("[user] unfastens the weapon control module.", "<span class='notice'>You unfasten the weapon control module.</span>")
|
||||
holder.icon_state = "gygax9"
|
||||
if(9)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the advanced scanner module.", "<span class='notice'>You secure the advanced scanner module.</span>")
|
||||
user.visible_message("[user] secures the advanced scanner module.", "<span class='notice'>You secure the scanner module.</span>")
|
||||
holder.icon_state = "gygax12"
|
||||
else
|
||||
user.visible_message("[user] removes the advanced scanner module from the [holder].", "<span class='notice'>You remove the advanced scanner module from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
|
||||
user.visible_message("[user] removes the advanced scanner module from the [holder].", "<span class='notice'>You remove the scanner module from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/scanning_module) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "gygax10"
|
||||
if(8)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs advanced capacitor to the [holder].", "<span class='notice'>You install advanced capacitor to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs capacitor to the [holder].", "<span class='notice'>You install capacitor to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "gygax13"
|
||||
else
|
||||
user.visible_message("[user] unfastens the advanced scanner module.", "<span class='notice'>You unfasten the advanced scanner module.</span>")
|
||||
user.visible_message("[user] unfastens the scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
|
||||
holder.icon_state = "gygax11"
|
||||
if(7)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the advanced capacitor.", "<span class='notice'>You secure the advanced capacitor.</span>")
|
||||
user.visible_message("[user] secures the capacitor.", "<span class='notice'>You secure the capacitor.</span>")
|
||||
holder.icon_state = "gygax14"
|
||||
else
|
||||
user.visible_message("[user] removes the advanced capacitor from the [holder].", "<span class='notice'>You remove the advanced capacitor from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
|
||||
user.visible_message("[user] removes the capacitor from the [holder].", "<span class='notice'>You remove the capacitor from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/capacitor) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "gygax12"
|
||||
if(6)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs the internal armor layer to the [holder].", "<span class='notice'>You install the internal armor layer to the [holder].</span>")
|
||||
holder.icon_state = "gygax15"
|
||||
else
|
||||
user.visible_message("[user] unfastens the advanced capacitor.", "<span class='notice'>You unfasten the advanced capacitor.</span>")
|
||||
user.visible_message("[user] unfastens the capacitor.", "<span class='notice'>You unfasten the capacitor.</span>")
|
||||
holder.icon_state = "gygax13"
|
||||
if(5)
|
||||
if(diff==FORWARD)
|
||||
@@ -551,7 +557,9 @@
|
||||
return 1
|
||||
|
||||
/datum/construction/reversible/mecha/gygax/spawn_result()
|
||||
..()
|
||||
var/obj/mecha/combat/gygax/M = new result(get_turf(holder))
|
||||
M.CheckParts(holder)
|
||||
qdel(holder)
|
||||
feedback_inc("mecha_gygax_created",1)
|
||||
return
|
||||
|
||||
@@ -914,7 +922,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Super capacitor is installed."),
|
||||
//8
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor/super,
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Phasic scanner module is secured."),
|
||||
//9
|
||||
@@ -922,7 +930,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Phasic scanner module is installed."),
|
||||
//10
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module/phasic,
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Weapon control module is secured."),
|
||||
//11
|
||||
@@ -1052,42 +1060,48 @@
|
||||
holder.icon_state = "durand8"
|
||||
if(10)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs phasic scanner module to the [holder].", "<span class='notice'>You install phasic scanner module to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs scanner module to the [holder].", "<span class='notice'>You install phasic scanner module to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "durand11"
|
||||
else
|
||||
user.visible_message("[user] unfastens the weapon control module.", "<span class='notice'>You unfasten the weapon control module.</span>")
|
||||
holder.icon_state = "durand9"
|
||||
if(9)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the phasic scanner module.", "<span class='notice'>You secure the phasic scanner module.</span>")
|
||||
user.visible_message("[user] secures the scanner module.", "<span class='notice'>You secure the scanner module.</span>")
|
||||
holder.icon_state = "durand12"
|
||||
else
|
||||
user.visible_message("[user] removes the phasic scanner module from the [holder].", "<span class='notice'>You remove the phasic scanner module from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/scanning_module/phasic(get_turf(holder))
|
||||
user.visible_message("[user] removes the scanner module from the [holder].", "<span class='notice'>You remove the scanner module from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/scanning_module) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "durand10"
|
||||
if(8)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs super capacitor to the [holder].", "<span class='notice'>You install super capacitor to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs capacitor to the [holder].", "<span class='notice'>You install capacitor to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "durand13"
|
||||
else
|
||||
user.visible_message("[user] unfastens the phasic scanner module.", "<span class='notice'>You unfasten the phasic scanner module.</span>")
|
||||
user.visible_message("[user] unfastens the scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
|
||||
holder.icon_state = "durand11"
|
||||
if(7)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the super capacitor.", "<span class='notice'>You secure the super capacitor.</span>")
|
||||
user.visible_message("[user] secures the capacitor.", "<span class='notice'>You secure the capacitor.</span>")
|
||||
holder.icon_state = "durand14"
|
||||
else
|
||||
user.visible_message("[user] removes the super capacitor from the [holder].", "<span class='notice'>You remove the super capacitor from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/capacitor/super(get_turf(holder))
|
||||
user.visible_message("[user] removes the super capacitor from the [holder].", "<span class='notice'>You remove the capacitor from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/capacitor) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "durand12"
|
||||
if(6)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs the internal armor layer to the [holder].", "<span class='notice'>You install the internal armor layer to the [holder].</span>")
|
||||
holder.icon_state = "durand15"
|
||||
else
|
||||
user.visible_message("[user] unfastens the super capacitor.", "<span class='notice'>You unfasten the super capacitor.</span>")
|
||||
user.visible_message("[user] unfastens the super capacitor.", "<span class='notice'>You unfasten the capacitor.</span>")
|
||||
holder.icon_state = "durand13"
|
||||
if(5)
|
||||
if(diff==FORWARD)
|
||||
@@ -1130,7 +1144,9 @@
|
||||
return 1
|
||||
|
||||
/datum/construction/reversible/mecha/durand/spawn_result()
|
||||
..()
|
||||
var/obj/mecha/combat/gygax/M = new result(get_turf(holder))
|
||||
M.CheckParts(holder)
|
||||
qdel(holder)
|
||||
feedback_inc("mecha_durand_created",1)
|
||||
return
|
||||
|
||||
@@ -1213,7 +1229,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Super capacitor is installed."),
|
||||
//12
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor/super,
|
||||
list("key"=/obj/item/weapon/stock_parts/capacitor,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Phasic scanner module is secured."),
|
||||
//13
|
||||
@@ -1221,7 +1237,7 @@
|
||||
"backkey"=/obj/item/weapon/crowbar,
|
||||
"desc"="Phasic scanner module is installed."),
|
||||
//14
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module/phasic,
|
||||
list("key"=/obj/item/weapon/stock_parts/scanning_module,
|
||||
"backkey"=/obj/item/weapon/screwdriver,
|
||||
"desc"="Weapon control module is secured."),
|
||||
//15
|
||||
@@ -1351,35 +1367,41 @@
|
||||
holder.icon_state = "phazon8"
|
||||
if(14)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs phasic scanner module to the [holder].", "<span class='notice'>You install phasic scanner module to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs phasic scanner module to the [holder].", "<span class='notice'>You install scanner module to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "phazon11"
|
||||
else
|
||||
user.visible_message("[user] unfastens the weapon control module.", "<span class='notice'>You unfasten the weapon control module.</span>")
|
||||
holder.icon_state = "phazon9"
|
||||
if(13)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the phasic scanner module.", "<span class='notice'>You secure the phasic scanner module.</span>")
|
||||
user.visible_message("[user] secures the phasic scanner module.", "<span class='notice'>You secure the scanner module.</span>")
|
||||
holder.icon_state = "phazon12"
|
||||
else
|
||||
user.visible_message("[user] removes the phasic scanner module from the [holder].", "<span class='notice'>You remove the phasic scanner module from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/scanning_module/phasic(get_turf(holder))
|
||||
user.visible_message("[user] removes the phasic scanner module from the [holder].", "<span class='notice'>You remove the scanner module from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/scanning_module) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "phazon10"
|
||||
if(12)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs super capacitor to the [holder].", "<span class='notice'>You install super capacitor to the [holder].</span>")
|
||||
qdel(used_atom)
|
||||
user.visible_message("[user] installs super capacitor to the [holder].", "<span class='notice'>You install capacitor to the [holder].</span>")
|
||||
var/obj/item/I = used_atom
|
||||
user.unEquip(I)
|
||||
I.loc = holder
|
||||
holder.icon_state = "phazon13"
|
||||
else
|
||||
user.visible_message("[user] unfastens the phasic scanner module.", "<span class='notice'>You unfasten the phasic scanner module.</span>")
|
||||
user.visible_message("[user] unfastens the phasic scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
|
||||
holder.icon_state = "phazon11"
|
||||
if(11)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the super capacitor.", "<span class='notice'>You secure the super capacitor.</span>")
|
||||
user.visible_message("[user] secures the super capacitor.", "<span class='notice'>You secure the capacitor.</span>")
|
||||
holder.icon_state = "phazon14"
|
||||
else
|
||||
user.visible_message("[user] removes the super capacitor from the [holder].", "<span class='notice'>You remove the super capacitor from the [holder].</span>")
|
||||
new /obj/item/weapon/stock_parts/capacitor/super(get_turf(holder))
|
||||
user.visible_message("[user] removes the super capacitor from the [holder].", "<span class='notice'>You remove the capacitor from the [holder].</span>")
|
||||
var/obj/item/I = locate(/obj/item/weapon/stock_parts/capacitor) in holder
|
||||
I.loc = get_turf(holder)
|
||||
holder.icon_state = "phazon12"
|
||||
if(10)
|
||||
if(diff==FORWARD)
|
||||
@@ -1387,7 +1409,7 @@
|
||||
qdel(used_atom)
|
||||
holder.icon_state = "phazon15"
|
||||
else
|
||||
user.visible_message("[user] unsecures the super capacitor from the [holder].", "<span class='notice'>You unsecure the super capacitor from the [holder].</span>")
|
||||
user.visible_message("[user] unsecures the super capacitor from the [holder].", "<span class='notice'>You unsecure the capacitor from the [holder].</span>")
|
||||
holder.icon_state = "phazon13"
|
||||
if(9)
|
||||
if(diff==FORWARD)
|
||||
@@ -1456,7 +1478,9 @@
|
||||
return 1
|
||||
|
||||
/datum/construction/reversible/mecha/phazon/spawn_result()
|
||||
..()
|
||||
var/obj/mecha/combat/gygax/M = new result(get_turf(holder))
|
||||
M.CheckParts(holder)
|
||||
qdel(holder)
|
||||
feedback_inc("mecha_phazon_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -192,7 +192,8 @@ MASS SPECTROMETER
|
||||
|
||||
var/implant_detect
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs)
|
||||
implant_detect += "[H.name] is modified with a [CI.name].<br>"
|
||||
if(CI.status == ORGAN_ROBOTIC)
|
||||
implant_detect += "[H.name] is modified with a [CI.name].<br>"
|
||||
if(implant_detect)
|
||||
user.show_message("<span class='notice'>Detected cybernetic modifications:</span>")
|
||||
user.show_message("<span class='notice'>[implant_detect]</span>")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "large cardboard box"
|
||||
desc = "Just a box..."
|
||||
icon_state = "cardboard"
|
||||
health = 10 //At the end of the day it's still just a box
|
||||
health = 10
|
||||
mob_storage_capacity = 1
|
||||
burntime = 20
|
||||
can_weld_shut = 0
|
||||
@@ -48,4 +48,4 @@
|
||||
viewing |= M.client
|
||||
flick_overlay(I,viewing,8)
|
||||
I.alpha = 0
|
||||
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)
|
||||
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)
|
||||
|
||||
@@ -70,9 +70,9 @@
|
||||
H.buckled = src
|
||||
H.dir = 2
|
||||
buckled_mob = H
|
||||
var/matrix/m120 = matrix(H.transform)
|
||||
m120.Turn(180)
|
||||
animate(H, transform = m120, time = 3)
|
||||
var/matrix/m180 = matrix(H.transform)
|
||||
m180.Turn(180)
|
||||
animate(H, transform = m180, time = 3)
|
||||
H.pixel_y = H.get_standard_pixel_y_offset(180)
|
||||
return
|
||||
user << "<span class='danger'>You can't use that on the spike!</span>"
|
||||
@@ -109,13 +109,12 @@
|
||||
return
|
||||
if(!M.buckled)
|
||||
return
|
||||
var/mob/living/L = buckled_mob
|
||||
var/matrix/m120 = matrix(L.transform)
|
||||
m120.Turn(360)
|
||||
animate(L, transform = m120, time = 3)
|
||||
L.pixel_y = L.get_standard_pixel_y_offset(360)
|
||||
var/matrix/m180 = matrix(M.transform)
|
||||
m180.Turn(180)
|
||||
animate(M, transform = m180, time = 3)
|
||||
M.pixel_y = M.get_standard_pixel_y_offset(180)
|
||||
M.adjustBruteLoss(30)
|
||||
src.visible_message(text("<span class='danger'>[M] falls free of the [src]!</span>"))
|
||||
unbuckle_mob()
|
||||
L.emote("scream")
|
||||
L.AdjustWeakened(10)
|
||||
M.emote("scream")
|
||||
M.AdjustWeakened(10)
|
||||
|
||||
@@ -52,7 +52,7 @@ var/sound/admin_sound
|
||||
|
||||
/client/proc/stop_sounds()
|
||||
set category = "Debug"
|
||||
set name = "Stop Sounds"
|
||||
set name = "Stop All Playing Sounds"
|
||||
if(!src.holder) return
|
||||
|
||||
log_admin("[key_name(src)] stopped all currently playing sounds.")
|
||||
|
||||
@@ -156,6 +156,13 @@
|
||||
admin_sound.status ^= SOUND_PAUSED
|
||||
feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/stop_client_sounds()
|
||||
set name = "Stop Sounds"
|
||||
set category = "Preferences"
|
||||
set desc = "Kills all currently playing sounds, use if admin taste in midis a shite"
|
||||
src << sound(null)
|
||||
feedback_add_details("admin_verb","SAPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/listen_ooc()
|
||||
set name = "Show/Hide OOC"
|
||||
set category = "Preferences"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/obj/item/organ/internal/alien
|
||||
origin_tech = "biotech=5"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xgibmid2"
|
||||
var/list/alien_powers = list()
|
||||
|
||||
@@ -30,6 +29,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel
|
||||
name = "plasma vessel"
|
||||
icon_state = "plasma"
|
||||
origin_tech = "biotech=5;plasma=2"
|
||||
w_class = 3
|
||||
zone = "chest"
|
||||
@@ -48,6 +48,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/large
|
||||
name = "large plasma vessel"
|
||||
icon_state = "plasma_large"
|
||||
w_class = 4
|
||||
storedPlasma = 200
|
||||
max_plasma = 500
|
||||
@@ -59,6 +60,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/small
|
||||
name = "small plasma vessel"
|
||||
icon_state = "plasma_small"
|
||||
w_class = 2
|
||||
storedPlasma = 100
|
||||
max_plasma = 150
|
||||
@@ -66,6 +68,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/small/tiny
|
||||
name = "tiny plasma vessel"
|
||||
icon_state = "plasma_tiny"
|
||||
w_class = 1
|
||||
max_plasma = 100
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
|
||||
@@ -100,6 +103,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/hivenode
|
||||
name = "hive node"
|
||||
icon_state = "hivenode"
|
||||
zone = "head"
|
||||
slot = "hivenode"
|
||||
origin_tech = "biotech=5;magnets=4;bluespace=3"
|
||||
@@ -117,6 +121,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/resinspinner
|
||||
name = "resin spinner"
|
||||
icon_state = "stomach-x"
|
||||
zone = "mouth"
|
||||
slot = "resinspinner"
|
||||
origin_tech = "biotech=5;materials=4"
|
||||
@@ -125,6 +130,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/acid
|
||||
name = "acid gland"
|
||||
icon_state = "acid"
|
||||
zone = "mouth"
|
||||
slot = "acidgland"
|
||||
origin_tech = "biotech=5;materials=2;combat=2"
|
||||
@@ -133,6 +139,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/neurotoxin
|
||||
name = "neurotoxin gland"
|
||||
icon_state = "neurotox"
|
||||
zone = "mouth"
|
||||
slot = "neurotoxingland"
|
||||
origin_tech = "biotech=5;combat=5"
|
||||
@@ -141,6 +148,7 @@
|
||||
|
||||
/obj/item/organ/internal/alien/eggsac
|
||||
name = "egg sac"
|
||||
icon_state = "eggsac"
|
||||
zone = "groin"
|
||||
slot = "eggsac"
|
||||
w_class = 4
|
||||
|
||||
@@ -57,6 +57,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
RefreshInfectionImage()
|
||||
|
||||
if(stage == 5 && prob(50))
|
||||
for(var/datum/surgery/S in owner.surgeries)
|
||||
if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs))
|
||||
AttemptGrow(0)
|
||||
return
|
||||
AttemptGrow()
|
||||
|
||||
|
||||
@@ -79,10 +83,8 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
stage = 4 // Let's try again later.
|
||||
return
|
||||
|
||||
if(owner.lying)
|
||||
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
|
||||
else
|
||||
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_stand")
|
||||
var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
|
||||
owner.overlays += overlay
|
||||
spawn(6)
|
||||
var/atom/xeno_loc = owner
|
||||
if(!gib_on_success)
|
||||
@@ -94,6 +96,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
if(gib_on_success)
|
||||
owner.stomach_contents += new_xeno
|
||||
owner.gib()
|
||||
else
|
||||
owner.adjustBruteLoss(40)
|
||||
owner.overlays -= overlay
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -119,5 +119,5 @@
|
||||
/obj/item/organ/internal/brain/alien
|
||||
name = "alien brain"
|
||||
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
|
||||
icon_state = "brain-alien"
|
||||
icon_state = "brain-x"
|
||||
origin_tech = "biotech=7"
|
||||
@@ -50,9 +50,12 @@
|
||||
msg += "It isn't responding to anything around it; it seems to be asleep.\n"
|
||||
msg += "</span>"
|
||||
|
||||
if (digitalcamo)
|
||||
if(digitalcamo)
|
||||
msg += "It is moving its body in an unnatural and blatantly unsimian manner.\n"
|
||||
|
||||
if(!getorgan(/obj/item/organ/internal/brain))
|
||||
msg += "<span class='deadsay'>It appears that it's brain is missing...</span>\n"
|
||||
|
||||
msg += "*---------*</span>"
|
||||
|
||||
user << msg
|
||||
@@ -280,7 +280,8 @@
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical))
|
||||
var/implant_detect
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in internal_organs)
|
||||
implant_detect += "[name] is modified with a [CI.name].<br>"
|
||||
if(CI.status == ORGAN_ROBOTIC)
|
||||
implant_detect += "[name] is modified with a [CI.name].<br>"
|
||||
if(implant_detect)
|
||||
msg += "Detected cybernetic modifications:<br>"
|
||||
msg += implant_detect
|
||||
|
||||
@@ -80,8 +80,12 @@
|
||||
|
||||
if(origin)
|
||||
origin.transfer_to(M)
|
||||
if(origin.changeling)
|
||||
origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
|
||||
if(!origin.changeling)
|
||||
M.make_changeling()
|
||||
if(origin.changeling.can_absorb_dna(M, owner))
|
||||
origin.changeling.add_profile(owner, M)
|
||||
|
||||
origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
|
||||
M.key = origin.key
|
||||
owner.gib()
|
||||
|
||||
|
||||
@@ -252,25 +252,42 @@
|
||||
OpenFire()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed)
|
||||
new /obj/item/asteroid/hivelord_core(src.loc)
|
||||
new /obj/item/organ/internal/hivelord_core(src.loc)
|
||||
mouse_opacity = 1
|
||||
..(gibbed)
|
||||
|
||||
/obj/item/asteroid/hivelord_core
|
||||
/obj/item/organ/internal/hivelord_core
|
||||
name = "hivelord remains"
|
||||
desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly."
|
||||
icon = 'icons/obj/food/food.dmi'
|
||||
icon_state = "boiledrorocore"
|
||||
icon_state = "roro core 2"
|
||||
flags = NOBLUDGEON
|
||||
slot = "hivecore"
|
||||
force = 0
|
||||
var/inert = 0
|
||||
|
||||
/obj/item/asteroid/hivelord_core/New()
|
||||
spawn(1200)
|
||||
inert = 1
|
||||
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
|
||||
/obj/item/organ/internal/hivelord_core/New()
|
||||
..()
|
||||
spawn(2400)
|
||||
if(!owner)
|
||||
inert = 1
|
||||
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
|
||||
|
||||
/obj/item/asteroid/hivelord_core/attack(mob/living/M, mob/living/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
/obj/item/organ/internal/hivelord_core/on_life()
|
||||
..()
|
||||
|
||||
owner.adjustBruteLoss(-1)
|
||||
owner.adjustFireLoss(-1)
|
||||
owner.adjustOxyLoss(-2)
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood
|
||||
var/blood_volume = round(H.vessel.get_reagent_amount("blood"))
|
||||
if(B && blood_volume < 560 && blood_volume)
|
||||
B.volume += 2 // Fast blood regen
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(inert)
|
||||
user << "<span class='notice'>[src] have become inert, its healing properties are no more.</span>"
|
||||
return
|
||||
@@ -286,6 +303,9 @@
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/prepare_eat()
|
||||
return null
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood
|
||||
name = "hivelord brood"
|
||||
desc = "A fragment of the original Hivelord, rallying behind its original. One isn't much of a threat, but..."
|
||||
@@ -591,7 +611,7 @@
|
||||
/obj/item/asteroid/fugu_gland
|
||||
name = "wumborian fugu gland"
|
||||
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "fugu_gland"
|
||||
flags = NOBLUDGEON
|
||||
w_class = 3
|
||||
|
||||
@@ -45,6 +45,10 @@
|
||||
var/mob/living/carbon/D = M
|
||||
C.dna.transfer_identity(D)
|
||||
D.updateappearance(mutcolor_update=1, mutations_overlay_update=1)
|
||||
else if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
client.prefs.copy_to(H)
|
||||
H.dna.update_dna_identity()
|
||||
|
||||
if(mind && istype(M, /mob/living))
|
||||
mind.transfer_to(M)
|
||||
|
||||
@@ -587,15 +587,23 @@
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
|
||||
if(M.eye_blind > 0 && current_cycle > 20)
|
||||
if(prob(30))
|
||||
if(current_cycle > 15)
|
||||
if(M.disabilities & BLIND)
|
||||
if(prob(20))
|
||||
M.disabilities &= ~BLIND
|
||||
M.disabilities &= NEARSIGHT
|
||||
M.eye_blurry = 35
|
||||
|
||||
else if(M.disabilities & NEARSIGHT)
|
||||
M.disabilities &= ~NEARSIGHT
|
||||
M.eye_blurry = 10
|
||||
|
||||
else if(M.eye_blind || M.eye_blurry)
|
||||
M.eye_blind = 0
|
||||
else if(prob(80))
|
||||
M.eye_blind = 0
|
||||
M.eye_blurry = 1
|
||||
if(M.eye_blurry > 0)
|
||||
if(prob(80))
|
||||
M.eye_blurry = 0
|
||||
M.eye_blurry = 0
|
||||
else if(M.eye_stat > 0)
|
||||
M.eye_stat -= 1
|
||||
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -123,8 +123,6 @@
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='notice'>[src] is empty.</span>"
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
user << "<span class='warning'>You cannot directly fill [target]!</span>"
|
||||
|
||||
@@ -62,25 +62,22 @@
|
||||
else
|
||||
item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE)
|
||||
if(ispath(I,/obj/item/weapon/stock_parts) || ispath(I,/obj/item/weapon/grenade/chem_grenade) || ispath(I,/obj/item/weapon/kitchen))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null) //check it's an actual usable item, in a hacky way
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
|
||||
valid_items += 15
|
||||
valid_items += I
|
||||
probWeight++
|
||||
qdel(tempCheck)
|
||||
|
||||
if(ispath(I,/obj/item/weapon/reagent_containers/food))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null) //check it's an actual usable item, in a hacky way
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
|
||||
valid_items += rand(1,max(2,35-probWeight))
|
||||
valid_items += I
|
||||
qdel(tempCheck)
|
||||
|
||||
if(ispath(I,/obj/item/weapon/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null)
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null)
|
||||
critical_items += I
|
||||
qdel(tempCheck)
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/New()
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/datum/surgery_step/manipulate_organs
|
||||
time = 64
|
||||
name = "manipulate organs"
|
||||
implements = list(/obj/item/organ/internal = 100)
|
||||
implements = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0)
|
||||
var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55)
|
||||
var/implements_mend = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
|
||||
var/current_type
|
||||
@@ -84,7 +84,12 @@
|
||||
|
||||
else if(implement_type in implements_mend)
|
||||
current_type = "mend"
|
||||
user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].",
|
||||
"<span class='notice'>You begin to mend the incision in [target]'s [parse_zone(target_zone)]...</span>")
|
||||
|
||||
else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ))
|
||||
user << "<span class='warning'>[tool] was biten by someone! It's too damaged to use!</span>"
|
||||
return -1
|
||||
|
||||
/datum/surgery_step/manipulate_organs/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(current_type == "mend")
|
||||
|
||||
@@ -8,9 +8,11 @@
|
||||
w_class = 1
|
||||
|
||||
var/sight_flags = 0
|
||||
var/dark_view = 0
|
||||
var/eye_color = "fff"
|
||||
var/old_eye_color = "fff"
|
||||
var/flash_protect = 0
|
||||
var/see_invisible = 0
|
||||
var/aug_message = "Your vision is augmented!"
|
||||
|
||||
|
||||
@@ -36,6 +38,10 @@
|
||||
/obj/item/organ/internal/cyberimp/eyes/on_life()
|
||||
..()
|
||||
owner.sight |= sight_flags
|
||||
if(dark_view)
|
||||
owner.see_in_dark = dark_view
|
||||
if(see_invisible)
|
||||
owner.see_invisible = see_invisible
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/emp_act(severity)
|
||||
if(!owner)
|
||||
@@ -60,6 +66,7 @@
|
||||
eye_color = "000"
|
||||
implant_color = "#000000"
|
||||
origin_tech = "materials=6;programming=4;biotech=6;magnets=5"
|
||||
dark_view = 8
|
||||
sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/thermals
|
||||
@@ -67,9 +74,11 @@
|
||||
desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included."
|
||||
eye_color = "FC0"
|
||||
implant_color = "#FFCC00"
|
||||
sight_flags = SEE_MOBS
|
||||
flash_protect = -1
|
||||
origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4"
|
||||
sight_flags = SEE_MOBS
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
flash_protect = -1
|
||||
dark_view = 8
|
||||
aug_message = "You see prey everywhere you look..."
|
||||
|
||||
|
||||
|
||||
@@ -14,13 +14,12 @@ mob/living/carbon/getorgan(typepath)
|
||||
mob/living/carbon/getorganszone(zone, var/subzones = 0)
|
||||
var/list/returnorg = list()
|
||||
if(subzones)
|
||||
// Include subzones - groin for chest, eyes and mouth for head
|
||||
if(zone == "head")
|
||||
returnorg = getorganszone("eyes") + getorganszone("mouth")
|
||||
// We don't have mouth organs now, but who knows?
|
||||
if(zone == "chest")
|
||||
returnorg = getorganszone("groin")
|
||||
|
||||
|
||||
for(var/obj/item/organ/internal/O in internal_organs)
|
||||
if(zone == O.zone)
|
||||
returnorg += O
|
||||
|
||||
@@ -40,17 +40,24 @@
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/proc/prepare_eat()
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/S = new
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new
|
||||
S.name = name
|
||||
S.desc = desc
|
||||
S.icon = icon
|
||||
S.icon_state = icon_state
|
||||
S.origin_tech = origin_tech
|
||||
S.w_class = w_class
|
||||
S.reagents.add_reagent("nutriment", 5)
|
||||
|
||||
return S
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/organ
|
||||
name = "appendix"
|
||||
icon_state = "appendix"
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
|
||||
list_reagents = list("nutriment" = 5)
|
||||
|
||||
|
||||
/obj/item/organ/internal/Destroy()
|
||||
if(owner)
|
||||
Remove(owner, 1)
|
||||
|
||||
@@ -55,6 +55,17 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">26 September 2015</h2>
|
||||
<h3 class="author">MMMiracles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Nanotrasen's genetic researchers have rediscovered the inactive dwarfism genetic defect inside all bipedal humanoids. Suffer not the short to live.</li>
|
||||
</ul>
|
||||
<h3 class="author">WJohnston updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Repiped the entire station. Atmosia and the disposals loop were not touched.</li>
|
||||
<li class="tweak">Moved mulebot delivery from misc lab to RnD.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">25 September 2015</h2>
|
||||
<h3 class="author">Xhuis updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -1935,3 +1935,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- tweak: Last Resort now blinds and confuses nearby humans and briefly disables
|
||||
silicons upon use.
|
||||
- tweak: Headslugs now have 50 health, up from 20.
|
||||
2015-09-26:
|
||||
MMMiracles:
|
||||
- rscadd: Nanotrasen's genetic researchers have rediscovered the inactive dwarfism
|
||||
genetic defect inside all bipedal humanoids. Suffer not the short to live.
|
||||
WJohnston:
|
||||
- tweak: Repiped the entire station. Atmosia and the disposals loop were not touched.
|
||||
- tweak: Moved mulebot delivery from misc lab to RnD.
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
author: MMMiracles
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Nanotrasen's genetic researchers have rediscovered the inactive dwarfism genetic defect inside all bipedal humanoids. Suffer not the short to live."
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
author: Razharas
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Added button to preferences menu that kills all currently playing sounds when pressed, now you can kill midis and any other sounds for real."
|
||||
@@ -0,0 +1,7 @@
|
||||
author: Feemjmeem
|
||||
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Rechargers can now be wrenched and unwrenched by cyborgs."
|
||||
- bugfix: "Rechargers no longer stop working forever if you move them from an unpowered area to a powered area, and now actually look powered off when they are."
|
||||
- bugfix: "Guns and batons can no longer be placed in unwrenched chargers."
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |