Merge remote-tracking branch 'polaris/master' into pl-chemistry

This commit is contained in:
GinjaNinja32
2015-12-24 15:06:16 +00:00
243 changed files with 2401 additions and 1971 deletions
+1 -1
View File
@@ -81,7 +81,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging
heat_limit = H.species.heat_level_3
if(pipe_air.temperature > heat_limit + 1)
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest", used_weapon = "Excessive Heat")
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, BP_TORSO, used_weapon = "Excessive Heat")
//fancy radiation glowing
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //start glowing at 500K
+6 -6
View File
@@ -227,14 +227,14 @@ mob/living/carbon/human/airflow_hit(atom/A)
bloody_body(src)
var/b_loss = airflow_speed * vsc.airflow_damage
var/blocked = run_armor_check("head","melee")
apply_damage(b_loss/3, BRUTE, "head", blocked, 0, "Airflow")
var/blocked = run_armor_check(BP_HEAD,"melee")
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, 0, "Airflow")
blocked = run_armor_check("chest","melee")
apply_damage(b_loss/3, BRUTE, "chest", blocked, 0, "Airflow")
blocked = run_armor_check(BP_TORSO,"melee")
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, 0, "Airflow")
blocked = run_armor_check("groin","melee")
apply_damage(b_loss/3, BRUTE, "groin", blocked, 0, "Airflow")
blocked = run_armor_check(BP_GROIN,"melee")
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, 0, "Airflow")
if(airflow_speed > 10)
Paralyse(round(airflow_speed * vsc.airflow_stun))
+22 -22
View File
@@ -65,12 +65,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
/zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
if(!fuel_objs.len)
return
//As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel,
//As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel,
//some have less, but whatever. It will mean that sometimes we will remove a tiny bit less fuel then we intended to.
var/fuel_to_remove = used_liquid_fuel/(fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units
for(var/O in fuel_objs)
var/obj/effect/decal/cleanable/liquid_fuel/fuel = O
if(!istype(fuel))
@@ -188,7 +188,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
return
set_dir(pick(cardinal))
var/datum/gas_mixture/air_contents = loc.return_air()
color = fire_color(air_contents.temperature)
set_light(3, 1, color)
@@ -209,7 +209,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
var/turf/T = loc
if (istype(T))
set_light(0)
T.fire = null
loc = null
air_master.active_hotspots.Remove(src)
@@ -224,12 +224,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
/datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0)
. = 0
if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
#ifdef FIREDBG
log_debug("***************** FIREDBG *****************")
log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
#endif
var/gas_fuel = 0
var/liquid_fuel = 0
var/total_fuel = 0
@@ -278,7 +278,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
var/used_fuel = min(total_reaction_progress, reaction_limit)
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
#ifdef FIREDBG
log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
@@ -312,12 +312,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
//calculate the energy produced by the reaction and then set the new temperature of the mix
temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
update_values()
#ifdef FIREDBG
log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
log_debug("new temperature = [temperature]; new pressure = [return_pressure()]")
#endif
return firelevel
datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
@@ -369,19 +369,19 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
if(total_combustables > 0)
//slows down the burning when the concentration of the reactants is low
var/damping_multiplier = min(1, active_combustables / (total_moles/group_multiplier))
//weight the damping mult so that it only really brings down the firelevel when the ratio is closer to 0
damping_multiplier = 2*damping_multiplier - (damping_multiplier*damping_multiplier)
//calculates how close the mixture of the reactants is to the optimum
//fires burn better when there is more oxidizer -- too much fuel will choke the fire out a bit, reducing firelevel.
var/mix_multiplier = 1 / (1 + (5 * ((total_fuel / total_combustables) ** 2)))
#ifdef FIREDBG
ASSERT(damping_multiplier <= 1)
ASSERT(mix_multiplier <= 1)
#endif
//toss everything together -- should produce a value between 0 and fire_firelevel_multiplier
firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
@@ -425,10 +425,10 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
apply_damage(2.5*mx*head_exposure, BURN, "head", 0, 0, "Fire")
apply_damage(2.5*mx*chest_exposure, BURN, "chest", 0, 0, "Fire")
apply_damage(2.0*mx*groin_exposure, BURN, "groin", 0, 0, "Fire")
apply_damage(0.6*mx*legs_exposure, BURN, "l_leg", 0, 0, "Fire")
apply_damage(0.6*mx*legs_exposure, BURN, "r_leg", 0, 0, "Fire")
apply_damage(0.4*mx*arms_exposure, BURN, "l_arm", 0, 0, "Fire")
apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire")
apply_damage(2.5*mx*head_exposure, BURN, BP_HEAD, 0, 0, "Fire")
apply_damage(2.5*mx*chest_exposure, BURN, BP_TORSO, 0, 0, "Fire")
apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, 0, 0, "Fire")
apply_damage(0.6*mx*legs_exposure, BURN, BP_L_LEG, 0, 0, "Fire")
apply_damage(0.6*mx*legs_exposure, BURN, BP_R_LEG, 0, 0, "Fire")
apply_damage(0.4*mx*arms_exposure, BURN, BP_L_ARM, 0, 0, "Fire")
apply_damage(0.4*mx*arms_exposure, BURN, BP_R_ARM, 0, 0, "Fire")
+4 -8
View File
@@ -116,11 +116,7 @@ obj/var/contaminated = 0
/mob/living/carbon/human/proc/burn_eyes()
//The proc that handles eye burning.
if(!species.has_organ["eyes"])
return
var/obj/item/organ/eyes/E = internal_organs_by_name["eyes"]
var/obj/item/organ/internal/eyes/E = internal_organs_by_name[O_EYES]
if(E)
if(prob(20)) src << "<span class='danger'>Your eyes burn!</span>"
E.damage += 2.5
@@ -143,15 +139,15 @@ obj/var/contaminated = 0
//Checks if the suit is adequately sealed.
var/coverage = 0
for(var/obj/item/protection in list(wear_suit, gloves, shoes))
if(!protection)
if(!protection)
continue
if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD))
return 0
coverage |= protection.body_parts_covered
if(vsc.plc.PHORONGUARD_ONLY)
return 1
return BIT_TEST_ALL(coverage, UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS)
/mob/living/carbon/human/proc/suit_contamination()
-1
View File
@@ -23,7 +23,6 @@
#define IS_UNATHI 4
#define IS_TAJARA 5
#define IS_XENOS 6
#define IS_MACHINE 7
#define CE_STABLE "stable" // Inaprovaline
#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin
+9 -9
View File
@@ -30,15 +30,15 @@
#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
// Organ defines.
#define ORGAN_CUT_AWAY 1<<0
#define ORGAN_BLEEDING 1<<1
#define ORGAN_BROKEN 1<<2
#define ORGAN_DESTROYED 1<<3
#define ORGAN_ROBOT 1<<4
#define ORGAN_SPLINTED 1<<5
#define ORGAN_DEAD 1<<6
#define ORGAN_MUTATED 1<<7
#define ORGAN_ASSISTED 1<<8
#define ORGAN_CUT_AWAY (1<<0)
#define ORGAN_BLEEDING (1<<1)
#define ORGAN_BROKEN (1<<2)
#define ORGAN_DESTROYED (1<<3)
#define ORGAN_ROBOT (1<<4)
#define ORGAN_SPLINTED (1<<5)
#define ORGAN_DEAD (1<<6)
#define ORGAN_MUTATED (1<<7)
#define ORGAN_ASSISTED (1<<8)
#define DROPLIMB_EDGE 0
#define DROPLIMB_BLUNT 1
+36
View File
@@ -136,3 +136,39 @@
#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY)
#define INCAPACITATION_ALL (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY)
// Bodyparts and organs.
#define O_MOUTH "mouth"
#define O_EYES "eyes"
#define O_HEART "heart"
#define O_LUNGS "lungs"
#define O_BRAIN "brain"
#define O_LIVER "liver"
#define O_KIDNEYS "kidneys"
#define O_PLASMA "plasma vessel"
#define O_HIVE "hive node"
#define O_NUTRIENT "nutrient vessel"
#define O_STRATA "neural strata"
#define O_RESPONSE "response node"
#define O_GBLADDER "gas bladder"
#define O_POLYP "polyp segment"
#define O_ANCHOR "anchoring ligament"
#define O_ACID "acid gland"
#define O_EGG "egg sac"
#define O_RESIN "resin spinner"
#define BP_L_FOOT "l_foot"
#define BP_R_FOOT "r_foot"
#define BP_L_LEG "l_leg"
#define BP_R_LEG "r_leg"
#define BP_L_HAND "l_hand"
#define BP_R_HAND "r_hand"
#define BP_L_ARM "l_arm"
#define BP_R_ARM "r_arm"
#define BP_HEAD "head"
#define BP_TORSO "torso"
#define BP_GROIN "groin"
#define BP_ALL list(BP_GROIN, BP_TORSO, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)
#define SYNTH_BLOOD_COLOUR "#030303"
#define SYNTH_FLESH_COLOUR "#575757"
+2 -4
View File
@@ -1,12 +1,10 @@
// Species flags.
#define NO_BLOOD 0x1 // Vessel var is not filled with blood, cannot bleed out.
#define NO_BREATHE 0x2 // Cannot suffocate or take oxygen loss.
#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows)
#define IS_PLANT 0x2 // Is a treeperson.
#define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen.
#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
#define NO_SLIP 0x10 // Cannot fall over.
#define NO_POISON 0x20 // Cannot not suffer toxloss.
#define IS_PLANT 0x40 // Is a treeperson.
#define NO_MINOR_CUT 0x80 // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows)
// unused: 0x8000 - higher than this will overflow
// Species spawn flags
+16 -10
View File
@@ -29,10 +29,13 @@ proc/random_hair_style(gender, species = "Human")
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(gender != NEUTER && gender != PLURAL)
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if( !(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
@@ -48,10 +51,13 @@ proc/random_facial_hair_style(gender, species = "Human")
var/list/valid_facialhairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(gender != NEUTER && gender != PLURAL)
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if( !(species in S.species_allowed))
continue
@@ -61,12 +67,12 @@ proc/random_facial_hair_style(gender, species = "Human")
f_style = pick(valid_facialhairstyles)
return f_style
proc/sanitize_name(name, species = "Human")
var/datum/species/current_species
if(species)
current_species = all_species[species]
return current_species ? current_species.sanitize_name(name) : sanitizeName(name)
proc/random_name(gender, species = "Human")
+15 -15
View File
@@ -98,7 +98,7 @@
name = "damage zone"
icon_state = "zone_sel"
screen_loc = ui_zonesel
var/selecting = "chest"
var/selecting = BP_TORSO
/obj/screen/zone_sel/Click(location, control,params)
var/list/PL = params2list(params)
@@ -110,52 +110,52 @@
if(1 to 3) //Feet
switch(icon_x)
if(10 to 15)
selecting = "r_foot"
selecting = BP_R_FOOT
if(17 to 22)
selecting = "l_foot"
selecting = BP_L_FOOT
else
return 1
if(4 to 9) //Legs
switch(icon_x)
if(10 to 15)
selecting = "r_leg"
selecting = BP_R_LEG
if(17 to 22)
selecting = "l_leg"
selecting = BP_L_LEG
else
return 1
if(10 to 13) //Hands and groin
switch(icon_x)
if(8 to 11)
selecting = "r_hand"
selecting = BP_R_HAND
if(12 to 20)
selecting = "groin"
selecting = BP_GROIN
if(21 to 24)
selecting = "l_hand"
selecting = BP_L_HAND
else
return 1
if(14 to 22) //Chest and arms to shoulders
switch(icon_x)
if(8 to 11)
selecting = "r_arm"
selecting = BP_R_ARM
if(12 to 20)
selecting = "chest"
selecting = BP_TORSO
if(21 to 24)
selecting = "l_arm"
selecting = BP_L_ARM
else
return 1
if(23 to 30) //Head, but we need to check for eye or mouth
if(icon_x in 12 to 20)
selecting = "head"
selecting = BP_HEAD
switch(icon_y)
if(23 to 24)
if(icon_x in 15 to 17)
selecting = "mouth"
selecting = O_MOUTH
if(26) //Eyeline, eyes are on 15 and 17
if(icon_x in 14 to 18)
selecting = "eyes"
selecting = O_EYES
if(25 to 27)
if(icon_x in 15 to 17)
selecting = "eyes"
selecting = O_EYES
if(old_selecting != selecting)
update_icon()
@@ -48,7 +48,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
if (evac)
emergency_shuttle_docked.Announce("The Emergency Shuttle has docked with the station at docks one and two. You have approximately [round(estimate_launch_time()/60,1)] minutes to board the Emergency Shuttle.")
else
priority_announcement.Announce("The scheduled shuttle to the Vir Regional Spaceport has docked with the station at docks one and two. It will depart in approximately [round(emergency_shuttle.estimate_launch_time()/60,1)] minutes.")
priority_announcement.Announce("The scheduled shuttle to the Vir Interstellar Spaceport has docked with the station at docks one and two. It will depart in approximately [round(emergency_shuttle.estimate_launch_time()/60,1)] minutes.")
//arm the escape pods
if (evac)
@@ -94,7 +94,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
//reset the shuttle transit time if we need to
shuttle.move_time = SHUTTLE_TRANSIT_DURATION
priority_announcement.Announce("The regularly scheduled shuttle to the Vir Regional Spaceport will arrive in in approximately [round(estimate_arrival_time()/60)] minutes. Those leaving should proceed to docks one and two.")
priority_announcement.Announce("The regularly scheduled shuttle to the Vir Interstellar Spaceport will arrive in in approximately [round(estimate_arrival_time()/60)] minutes. Those leaving should proceed to docks one and two.")
//recalls the shuttle
/datum/emergency_shuttle_controller/proc/recall()
@@ -111,7 +111,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
A.readyreset()
evac = 0
else
priority_announcement.Announce("The scheduled crew transfer has been cancelled.")
priority_announcement.Announce("The scheduled transfer shuttle has been cancelled.")
/datum/emergency_shuttle_controller/proc/can_call()
if (!universe.OnShuttleCall(null))
+3 -3
View File
@@ -286,9 +286,9 @@ var/global/datum/shuttle_controller/shuttle_controller
"Mining Station" = locate(/area/skipjack_station/mining)
)
VS.announcer = "NDV Icarus"
VS.arrival_message = "Attention, [station_short], we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not."
VS.departure_message = "Your guests are pulling away, [station_short] - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
VS.announcer = "Colony Automated Radar Array"
VS.arrival_message = "Attention. Unidentified object approaching the colony."
VS.departure_message = "Attention. Unidentified object exiting local space. Unidentified object expected to escape Kara gravity well with current velocity."
VS.interim = locate(/area/skipjack_station/transit)
VS.warmup_time = 0
+5 -1
View File
@@ -222,6 +222,7 @@
locked += L
return
// TODO.
proc/get_id_photo(var/mob/living/carbon/human/H, var/assigned_role)
var/icon/preview_icon = null
@@ -258,7 +259,10 @@ proc/get_id_photo(var/mob/living/carbon/human/H, var/assigned_role)
if(!H.species || H.species.flags & HAS_SKIN_COLOR)
preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
var/use_eye_icon = "eyes_s"
var/obj/item/organ/external/head/temp_head = H.get_organ(BP_HEAD)
if(temp_head) use_eye_icon = temp_head.eye_icon
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = use_eye_icon)
if (H.species.flags & HAS_EYE_COLOR)
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
+1 -1
View File
@@ -57,7 +57,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
// Some species are immune to viruses entirely.
if(affected_mob && istype(affected_mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = affected_mob
if(H.species.virus_immune)
if(H.species.get_virus_immune(H))
cure()
return
age++
+3 -30
View File
@@ -27,29 +27,15 @@ Bonus
stage_speed = 0
transmittable = 1
level = 3
var/bloodvomit
/datum/symptom/vomit/Activate(var/datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB / 2))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
M << "<span class='notice'>[pick("You feel nauseous.", "You feel like you're going to throw up!")]</span>"
else
Vomit(M)
spawn M.vomit(M, bloodvomit)
return
/datum/symptom/vomit/proc/Vomit(var/mob/living/M)
M.visible_message("<B>[M]</B> vomits on the floor!")
M.nutrition -= 20
M.adjustToxLoss(-3)
var/turf/pos = get_turf(M)
pos.add_vomit_floor(M)
playsound(pos, 'sound/effects/splat.ogg', 50, 1)
/*
//////////////////////////////////////
@@ -78,17 +64,4 @@ Bonus
stage_speed = -1
transmittable = 1
level = 4
/datum/symptom/vomit/blood/Vomit(var/mob/living/M)
M.Stun(1)
M.visible_message("<B>[M]</B> vomits on the floor!")
// They lose blood and health.
var/brute_dam = M.getBruteLoss()
if(brute_dam < 50)
M.adjustBruteLoss(3)
var/turf/simulated/pos = get_turf(M)
pos.add_blood_floor(M)
playsound(pos, 'sound/effects/splat.ogg', 50, 1)
bloodvomit = 1
+4 -8
View File
@@ -33,20 +33,16 @@
affected_mob.adjustToxLoss(1)
if(stage > 2)
if(prob(1))
if (affected_mob.nutrition > 100)
var/mob/living/carbon/human/H = affected_mob
H.vomit()
else
affected_mob << "<span class='danger'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
affected_mob.Weaken(10)
affected_mob.adjustToxLoss(3)
var/mob/living/carbon/human/H = affected_mob
spawn H.vomit()
if(stage > 3)
if(prob(1) && ishuman(affected_mob))
var/mob/living/carbon/human/H = affected_mob
H << "<span class='danger'>Your abdomen is a world of pain!</span>"
H.Weaken(10)
var/obj/item/organ/external/groin = H.get_organ("groin")
var/obj/item/organ/external/groin = H.get_organ(BP_GROIN)
var/datum/wound/W = new /datum/wound/internal_bleeding(20)
H.adjustToxLoss(25)
groin.wounds += W
+20
View File
@@ -248,6 +248,23 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Wizard costume crate"
group = "Miscellaneous"
/datum/supply_packs/foam_weapons
name = "Foam Weapon Crate"
contains = list(
/obj/item/weapon/material/sword/foam,
/obj/item/weapon/material/sword/foam,
/obj/item/weapon/material/twohanded/baseballbat/foam,
/obj/item/weapon/material/twohanded/baseballbat/foam,
/obj/item/weapon/material/twohanded/spear/foam,
/obj/item/weapon/material/twohanded/spear/foam,
/obj/item/weapon/material/twohanded/fireaxe/foam,
/obj/item/weapon/material/twohanded/fireaxe/foam
)
cost = 80
containertype = /obj/structure/closet/crate
containername = "foam weapon crate"
group = "Miscellaneous"
/datum/supply_packs/mule
name = "MULEbot Crate"
contains = list(/obj/machinery/bot/mulebot)
@@ -2070,6 +2087,9 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/clothing/head/surgery/green,
/obj/item/clothing/head/surgery/green,
/obj/item/clothing/head/surgery/green,
/obj/item/clothing/head/surgery/black,
/obj/item/clothing/head/surgery/black,
/obj/item/clothing/head/surgery/black,
/obj/item/weapon/storage/box/masks,
/obj/item/weapon/storage/box/gloves)
cost = 15
+2 -2
View File
@@ -37,12 +37,12 @@ var/datum/antagonist/xenos/borer/borers
var/mob/living/carbon/human/host
for(var/mob/living/carbon/human/H in mob_list)
if(H.stat != DEAD && !H.has_brain_worms())
var/obj/item/organ/external/head = H.get_organ("head")
var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
if(head && !(head.status & ORGAN_ROBOT))
host = H
break
if(istype(host))
var/obj/item/organ/external/head = host.get_organ("head")
var/obj/item/organ/external/head = host.get_organ(BP_HEAD)
borer.host = host
head.implants += borer
borer.forceMove(head)
@@ -54,3 +54,14 @@
survive_objective.owner = changeling
changeling.objectives += survive_objective
return
/datum/antagonist/changeling/can_become_antag(var/datum/mind/player, var/ignore_role)
if(..())
if(player.current && ishuman(player.current))
var/mob/living/carbon/human/H = player.current
if(H.isSynthetic())
return 0
if(H.species.flags & NO_SCAN)
return 0
return 1
return 0
+1
View File
@@ -1480,6 +1480,7 @@ area/space/atmosalert()
/area/holodeck/source_thunderdomecourt
name = "\improper Holodeck - Thunderdome Court"
requires_power = 0
sound_env = ARENA
/area/holodeck/source_courtroom
+2 -3
View File
@@ -198,7 +198,7 @@ its easier to just keep the beam vertical.
f_name = "some "
else
f_name = "a "
if(blood_color != "#030303")
if(blood_color != SYNTH_BLOOD_COLOUR)
f_name += "<span class='danger'>blood-stained</span> [name][infix]!"
else
f_name += "oil-stained [name][infix]."
@@ -399,8 +399,7 @@ its easier to just keep the beam vertical.
M.dna = new /datum/dna(null)
M.dna.real_name = M.real_name
M.check_dna()
if (M.species)
blood_color = M.species.blood_color
blood_color = M.species.get_blood_colour(M)
. = 1
return 1
+5 -4
View File
@@ -150,10 +150,11 @@
H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative.
if (dna.GetUIState(DNA_UI_GENDER))
H.gender = FEMALE
else
H.gender = MALE
if(H.gender != NEUTER)
if (dna.GetUIState(DNA_UI_GENDER))
H.gender = FEMALE
else
H.gender = MALE
//Hair
var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_list.len)
@@ -19,8 +19,8 @@
return
var/mob/living/carbon/human/T = G.affecting
if(!istype(T))
src << "<span class='warning'>[T] is not compatible with our biology.</span>"
if(!istype(T) || T.isSynthetic())
src << "<span class='warning'>\The [T] is not compatible with our biology.</span>"
return
if(T.species.flags & NO_SCAN)
@@ -30,10 +30,10 @@
if(istype(held_item,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = held_item
if(G.affecting)
G.affecting.electrocute_act(5,src,1.0,"chest")
G.affecting.electrocute_act(5,src,1.0,BP_TORSO)
var/agony = 60 //The same as a stunbaton.
var/stun = 0
G.affecting.stun_effect_act(stun, agony, "chest", src)
G.affecting.stun_effect_act(stun, agony, BP_TORSO, src)
msg_admin_attack("[key_name(src)] stunned [key_name(G.affecting)] with the [src].")
@@ -112,10 +112,10 @@
src << "<span class='warning'>We require more chemicals to electrocute [C]!</span>"
return 0
C.electrocute_act(5,src,1.0,"chest")
C.electrocute_act(5,src,1.0,BP_TORSO)
var/agony = 60 //The same as a stunbaton.
var/stun = 0
C.stun_effect_act(stun, agony, "chest", src)
C.stun_effect_act(stun, agony, BP_TORSO, src)
msg_admin_attack("[key_name(user)] stunned [key_name(C)] with the [src].")
@@ -18,7 +18,18 @@
return 0
var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting)
if(!T) return 0
if(!istype(T) || T.isSynthetic())
src << "<span class='warning'>\The [T] is not compatible with our biology.</span>"
return 0
if(T.species.flags & NO_SCAN)
src << "<span class='warning'>We do not know how to parse this creature's DNA!</span>"
return 0
if(HUSK in T.mutations)
src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
return 0
T.dna.real_name = T.real_name
changeling.absorbed_dna |= T.dna
@@ -23,7 +23,7 @@
C.radiation = 0
C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss())
C.reagents.clear_reagents()
C.restore_all_organs() //Covers things like fractures and other things not covered by the above.
C.restore_all_organs(ignore_prosthetic_prefs=1) //Covers things like fractures and other things not covered by the above.
if(ishuman(C))
var/mob/living/carbon/human/H = src
H.restore_blood()
+1 -1
View File
@@ -105,7 +105,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
if(!iscultist(user))
user << "You can't mouth the arcane scratchings without fumbling over them."
return
if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
if(user.is_muzzled())
user << "You are unable to speak the words of the rune."
return
if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
+4 -4
View File
@@ -162,8 +162,8 @@ var/list/sacrificed = list()
target.adjustBrainLoss(rand(1,5))
initial_message = 1
if (target.species && (target.species.flags & NO_PAIN))
target.visible_message("<span class='warning'>The markings below [target] glow a bloody red.</span>")
if (!target.can_feel_pain())
target.visible_message("<span class='warning'>The markings below \the [target] glow a bloody red.</span>")
else
target.visible_message("<span class='warning'>[target] writhes in pain as the markings below \him glow a bloody red.</span>", "<span class='danger'>AAAAAAHHHH!</span>", "<span class='warning'>You hear an anguished scream.</span>")
@@ -631,8 +631,8 @@ var/list/sacrificed = list()
if(!(iscultist(V)))
victims += V//Checks for cult status and mob type
for(var/obj/item/I in src.loc)//Checks for MMIs/brains/Intellicards
if(istype(I,/obj/item/organ/brain))
var/obj/item/organ/brain/B = I
if(istype(I,/obj/item/organ/internal/brain))
var/obj/item/organ/internal/brain/B = I
victims += B.brainmob
else if(istype(I,/obj/item/device/mmi))
var/obj/item/device/mmi/B = I
+1 -1
View File
@@ -10,7 +10,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
required_players = 15
required_players_secret = 15
required_enemies = 4
round_description = "An unidentified bluespace signature has slipped past the Icarus and is approaching the station!"
round_description = "An unidentified bluespace signature is approaching the station!"
end_on_antag_death = 0
antag_tags = list(MODE_RAIDER)
+1 -1
View File
@@ -406,7 +406,7 @@ datum/objective/harm
if(!found)
return 1
var/obj/item/organ/external/head/head = H.get_organ("head")
var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD)
if(head.disfigured)
return 1
return 0
+1 -1
View File
@@ -40,7 +40,7 @@
supervisors = "your laws and the AI" //Nodrak
selection_color = "#ddffdd"
minimal_player_age = 1
alt_titles = list("Android", "Robot")
alt_titles = list("Robot", "Drone")
account_allowed = 0
economic_modifier = 0
+2 -2
View File
@@ -399,9 +399,9 @@
for(var/obj/item/organ/i in occ["internal_organs"])
var/mech = ""
if(i.robotic == 1)
if(i.status & ORGAN_ASSISTED)
mech = "Assisted:"
if(i.robotic == 2)
if(i.status & ORGAN_ROBOT)
mech = "Mechanical:"
var/infection = "None"
+11
View File
@@ -107,6 +107,11 @@
path = /obj/item/device/radio/off
category = "General"
/datum/autolathe/recipe/suit_cooler
name = "suit cooling unit"
path = /obj/item/device/suit_cooling_unit
category = "General"
/datum/autolathe/recipe/weldermask
name = "welding mask"
path = /obj/item/clothing/head/welding
@@ -413,3 +418,9 @@
path = /obj/item/weapon/handcuffs
hidden = 1
category = "General"
/datum/autolathe/recipe/knuckledusters
name = "knuckle dusters"
path = /obj/item/weapon/material/knuckledusters
hidden = 1
category = "Arms and Ammunition"
+7 -7
View File
@@ -16,11 +16,11 @@
var/stored_matter = 200
var/loaded_dna //Blood sample for DNA hashing.
var/list/products = list(
"heart" = list(/obj/item/organ/heart, 50),
"lungs" = list(/obj/item/organ/lungs, 40),
"kidneys" = list(/obj/item/organ/kidneys,20),
"eyes" = list(/obj/item/organ/eyes, 30),
"liver" = list(/obj/item/organ/liver, 50)
O_HEART = list(/obj/item/organ/internal/heart, 50),
O_LUNGS = list(/obj/item/organ/internal/lungs, 40),
O_KIDNEYS = list(/obj/item/organ/internal/kidneys,20),
O_EYES = list(/obj/item/organ/internal/eyes, 30),
O_LIVER = list(/obj/item/organ/internal/liver, 50)
)
/obj/machinery/bioprinter/prosthetics
@@ -41,7 +41,7 @@
var/obj/item/organ/O = new new_organ(get_turf(src))
if(prints_prosthetics)
O.robotic = 2
O.robotize()
else if(loaded_dna)
visible_message("<span class='notice'>The printer injects the stored DNA into the biomass.</span>.")
O.transplant_data = list()
@@ -80,5 +80,5 @@
user << "<span class='info'>\The [src] processes \the [W]. Levels of stored matter now: [stored_matter]</span>"
qdel(W)
return
return..()
+6 -6
View File
@@ -722,12 +722,12 @@
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
var/damage = rand(5,15)
H.apply_damage(2*damage, BRUTE, "head")
H.apply_damage(2*damage, BRUTE, "chest")
H.apply_damage(0.5*damage, BRUTE, "l_leg")
H.apply_damage(0.5*damage, BRUTE, "r_leg")
H.apply_damage(0.5*damage, BRUTE, "l_arm")
H.apply_damage(0.5*damage, BRUTE, "r_arm")
H.apply_damage(2*damage, BRUTE, BP_HEAD)
H.apply_damage(2*damage, BRUTE, BP_TORSO)
H.apply_damage(0.5*damage, BRUTE, BP_L_LEG)
H.apply_damage(0.5*damage, BRUTE, BP_R_LEG)
H.apply_damage(0.5*damage, BRUTE, BP_L_ARM)
H.apply_damage(0.5*damage, BRUTE, BP_R_ARM)
blood_splatter(src,H,1)
bloodiness += 4
+1 -1
View File
@@ -16,7 +16,7 @@
//They need a brain!
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.has_organ["brain"] && !H.has_brain())
if(!H.has_brain())
continue
if(M.ckey == find_key)
selected = M
+5 -1
View File
@@ -353,11 +353,15 @@
if (!subject.has_brain())
if(istype(subject, /mob/living/carbon/human))
var/mob/living/carbon/human/H = subject
if(H.species.has_organ["brain"])
if(H.should_have_organ("brain"))
scantemp = "Error: No signs of intelligence detected."
else
scantemp = "Error: No signs of intelligence detected."
return
if(subject.isSynthetic())
scantemp = "Error: Subject is not organic."
return
if (subject.suiciding == 1)
scantemp = "Error: Subject's brain is not responding to scanning stimuli."
return
+1 -19
View File
@@ -645,24 +645,6 @@ About the new airlock wires panel:
if(src.shock(user, 100))
return
// No. -- cib
/**
if(ishuman(user) && prob(40) && src.density)
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60)
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
if(!istype(H.head, /obj/item/clothing/head/helmet))
visible_message("<span class='warning'>[user] headbutts the airlock.</span>")
var/obj/item/organ/external/affecting = H.get_organ("head")
H.Stun(8)
H.Weaken(5)
if(affecting.take_damage(10, 0))
H.UpdateDamageIcon()
else
visible_message("<span class='warning'>[user] headbutts the airlock. Good thing they're wearing a helmet.</span>")
return
**/
if(src.p_open)
user.set_machine(src)
wires.Interact(user)
@@ -943,7 +925,7 @@ About the new airlock wires panel:
/mob/living/carbon/airlock_crush(var/crush_damage)
. = ..()
if (!(species && (species.flags & NO_PAIN)))
if(can_feel_pain())
emote("scream")
/mob/living/silicon/robot/airlock_crush(var/crush_damage)
+1 -1
View File
@@ -73,7 +73,7 @@
if(!H.eyecheck() <= 0)
continue
flash_time *= H.species.flash_mod
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(!E)
return
if(E.is_bruised() && prob(E.damage + 50))
+2 -2
View File
@@ -106,7 +106,7 @@
if(NOCLONE in T.mutations)
return
if(T.species.flags & NO_BLOOD)
if(!T.should_have_organ(O_HEART))
return
// If the human is losing too much blood, beep.
@@ -165,4 +165,4 @@
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through.
return 1
return ..()
return ..()
+9 -8
View File
@@ -172,8 +172,9 @@
if(!src.occupant)
visible_message("<span class='danger'>You hear a loud metallic grinding sound.</span>")
return
use_power(1000)
visible_message("<span class='danger'>You hear a loud squelchy grinding sound.</span>")
visible_message("<span class='danger'>You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.</span>")
src.operating = 1
update_icon()
@@ -192,7 +193,7 @@
else if(istype(src.occupant,/mob/living/carbon/human))
var/mob/living/carbon/human/H = occupant
slab_name = src.occupant.real_name
slab_type = H.species.meat_type
slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
// Small mobs don't give as much nutrition.
if(issmall(src.occupant))
@@ -200,12 +201,12 @@
slab_nutrition /= slab_count
for(var/i=1 to slab_count)
var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src)
new_meat.name = "[slab_name] [new_meat.name]"
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
if(src.occupant.reagents)
src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
if(istype(new_meat))
new_meat.name = "[slab_name] [new_meat.name]"
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
if(src.occupant.reagents)
src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by <b>[user]/[user.ckey]</b>" //One shall not simply gib a mob unnoticed!
user.attack_log += "\[[time_stamp()]\] Gibbed <b>[src.occupant]/[src.occupant.ckey]</b>"
+2 -2
View File
@@ -627,9 +627,9 @@ var/list/turret_icons
var/def_zone
var/obj/item/weapon/grab/G = locate() in target
if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people.
def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg")
def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
else
def_zone = pick("chest", "groin")
def_zone = pick(BP_TORSO, BP_GROIN)
//Shooting Code:
A.launch(target, def_zone)
+42 -12
View File
@@ -104,6 +104,22 @@
if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE))
R.adjustFireLoss(-wire_rate)
else if(istype(occupant, /mob/living/carbon/human))
var/mob/living/carbon/human/H = occupant
// In case they somehow end up with positive values for otherwise unobtainable damage...
if(H.getToxLoss()>0) H.adjustToxLoss(-(rand(1,3)))
if(H.getOxyLoss()>0) H.adjustOxyLoss(-(rand(1,3)))
if(H.getCloneLoss()>0) H.adjustCloneLoss(-(rand(1,3)))
if(H.getBrainLoss()>0) H.adjustBrainLoss(-(rand(1,3)))
// Also recharge their internal battery.
if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450)
H.nutrition = min(H.nutrition+10, 450)
cell.use(7000/450*10)
/obj/machinery/recharge_station/examine(mob/user)
..(user)
user << "The charge meter reads: [round(chargepercentage())]%"
@@ -200,22 +216,36 @@
go_in(R)
/obj/machinery/recharge_station/proc/go_in(var/mob/living/silicon/robot/R)
if(!istype(R))
return
if(occupant)
return
if(R.incapacitated())
return
if(!R.cell)
return
if(istype(R, /mob/living/silicon/robot))
add_fingerprint(R)
R.reset_view(src)
R.forceMove(src)
occupant = R
update_icon()
return 1
if(R.incapacitated())
return
if(!R.cell)
return
add_fingerprint(R)
R.reset_view(src)
R.forceMove(src)
occupant = R
update_icon()
return 1
else if(istype(R, /mob/living/carbon/human))
var/mob/living/carbon/human/H = R
if(!isnull(H.internal_organs_by_name["cell"]))
add_fingerprint(H)
H.reset_view(src)
H.forceMove(src)
occupant = H
update_icon()
return 1
else
return
/obj/machinery/recharge_station/proc/go_out()
if(!occupant)
+3 -5
View File
@@ -331,18 +331,16 @@
sleep(50)
if(src.OCCUPANT)
OCCUPANT.apply_effect(50, IRRADIATE)
var/obj/item/organ/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
if (!rad_organ)
if (OCCUPANT.can_feel_pain())
OCCUPANT.emote("scream")
if(src.issuperUV)
var/burndamage = rand(28,35)
OCCUPANT.take_organ_damage(0,burndamage)
if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN)))
OCCUPANT.emote("scream")
else
var/burndamage = rand(6,10)
OCCUPANT.take_organ_damage(0,burndamage)
if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN)))
OCCUPANT.emote("scream")
if(i==3) //End of the cycle
if(!src.issuperUV)
if(src.HELMET)
+4 -4
View File
@@ -266,15 +266,15 @@
else
A = new /obj/item/projectile/energy/electrode( loc )
use_power(200)
//Turrets aim for the center of mass by default.
//If the target is grabbing someone then the turret smartly aims for extremities
var/obj/item/weapon/grab/G = locate() in target
if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people.
A.def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg")
A.def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
else
A.def_zone = pick("chest", "groin")
A.def_zone = pick(BP_TORSO, BP_GROIN)
A.current = T
A.starting = T
A.yo = U.y - T.y
+1 -1
View File
@@ -41,7 +41,7 @@
var/mob/living/carbon/human/H = target
// if (M.health <= 0) return
var/obj/item/organ/external/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
var/obj/item/organ/external/temp = H.get_organ(pick(BP_TORSO, BP_TORSO, BP_TORSO, BP_HEAD))
if(temp)
var/update = 0
switch(damtype)
+2 -2
View File
@@ -104,7 +104,7 @@
// Aliens can get straight through these.
if(istype(usr,/mob/living/carbon))
var/mob/living/carbon/M = usr
if(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs)
if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
for(var/mob/O in oviewers(src))
O.show_message("<span class='warning'>[usr] strokes the [name] and it melts away!</span>", 1)
health = 0
@@ -349,7 +349,7 @@ Alien plants should do something if theres a lot of poison
/obj/effect/alien/egg/attack_hand(user as mob)
var/mob/living/carbon/M = user
if(!istype(M) || !(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs))
if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs))
return attack_hand(user)
switch(status)
@@ -64,6 +64,12 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
color = basecolor
if(basecolor == SYNTH_BLOOD_COLOUR)
name = "oil"
desc = "It's black and greasy."
else
name = initial(name)
desc = initial(desc)
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
if (!istype(perp))
@@ -102,10 +102,10 @@
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
var/list/viruses = list()
Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
..()
/obj/effect/decal/cleanable/vomit/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
return ..()
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"
@@ -3,7 +3,7 @@
desc = "It's a useless heap of junk... <i>or is it?</i>"
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
basecolor="#030303"
basecolor = SYNTH_BLOOD_COLOUR
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
@@ -38,9 +38,7 @@
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4
/obj/effect/decal/cleanable/blood/oil
name = "motor oil"
desc = "It's black and greasy. Looks like Beepsky made another mess."
basecolor="#030303"
basecolor = SYNTH_BLOOD_COLOUR
/obj/effect/decal/cleanable/blood/oil/dry()
return
+2 -2
View File
@@ -220,9 +220,9 @@
src.loc = O.owner ? O.owner.loc : O.loc
src.visible_message("<span class='warning'>\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!</span>")
if(O.owner)
O.owner.apply_damage(1, BRUTE, O.limb_name)
O.owner.apply_damage(1, BRUTE, O.organ_tag)
else if(prob(1))
O.owner.apply_damage(1, TOX, O.limb_name)
O.owner.apply_damage(1, TOX, O.organ_tag)
if(world.time > last_itch + 30 SECONDS)
last_itch = world.time
O.owner << "<span class='notice'>Your [O.name] itches...</span>"
+3 -3
View File
@@ -449,7 +449,7 @@ var/list/global/slot_flags_enumeration = list(
if(istype(H))
var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"]
var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name[O_EYES]
if(H != user)
for(var/mob/O in (viewers(M) - user - M))
@@ -465,7 +465,7 @@ var/list/global/slot_flags_enumeration = list(
eyes.damage += rand(3,4)
if(eyes.damage >= eyes.min_bruised_damage)
if(M.stat != 2)
if(eyes.robotic <= 1) //robot eyes bleeding might be a bit silly
if(!(eyes.status & ORGAN_ROBOT)) //robot eyes bleeding might be a bit silly
M << "<span class='danger'>Your eyes start to bleed profusely!</span>"
if(prob(50))
if(M.stat != 2)
@@ -477,7 +477,7 @@ var/list/global/slot_flags_enumeration = list(
if (eyes.damage >= eyes.min_broken_damage)
if(M.stat != 2)
M << "<span class='warning'>You go blind!</span>"
var/obj/item/organ/external/affecting = H.get_organ("head")
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
if(affecting.take_damage(7))
M:UpdateDamageIcon()
else
@@ -38,7 +38,7 @@
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
add_fingerprint(user)
if(on && user.zone_sel.selecting == "eyes")
if(on && user.zone_sel.selecting == O_EYES)
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
+16 -13
View File
@@ -12,21 +12,25 @@
throwforce = 10.0
throw_speed = 1
throw_range = 4
action_button_name = "Toggle Heatsink"
matter = list("steel" = 15000, "glass" = 3500)
origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2)
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
var/obj/item/weapon/cell/cell
var/max_cooling = 12 //in degrees per second - probably don't need to mess with heat capacity here
var/charge_consumption = 16.6 //charge per second at max_cooling
var/max_cooling = 12 // in degrees per second - probably don't need to mess with heat capacity here
var/charge_consumption = 3 // charge per second at max_cooling
var/thermostat = T20C
//TODO: make it heat up the surroundings when not in space
/obj/item/device/suit_cooling_unit/ui_action_click()
toggle(usr)
/obj/item/device/suit_cooling_unit/New()
processing_objects |= src
cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
cell.loc = src
@@ -56,7 +60,7 @@
cell.use(charge_usage)
if(cell.charge <= 0)
turn_off()
turn_off(1)
/obj/item/device/suit_cooling_unit/proc/get_environment_temperature()
if (ishuman(loc))
@@ -97,14 +101,12 @@
on = 1
updateicon()
/obj/item/device/suit_cooling_unit/proc/turn_off()
if (ismob(src.loc))
var/mob/M = src.loc
M.show_message("\The [src] clicks and whines as it powers down.", 2) //let them know in case it's run out of power.
/obj/item/device/suit_cooling_unit/proc/turn_off(var/failed)
if(failed) visible_message("\The [src] clicks and whines as it powers down.")
on = 0
updateicon()
/obj/item/device/suit_cooling_unit/attack_self(mob/user as mob)
/obj/item/device/suit_cooling_unit/attack_self(var/mob/user)
if(cover_open && cell)
if(ishuman(user))
user.put_in_hands(cell)
@@ -114,18 +116,19 @@
cell.add_fingerprint(user)
cell.update_icon()
user << "You remove the [src.cell]."
user << "You remove \the [src.cell]."
src.cell = null
updateicon()
return
//TODO use a UI like the air tanks
toggle(user)
/obj/item/device/suit_cooling_unit/proc/toggle(var/mob/user)
if(on)
turn_off()
else
turn_on()
if (on)
user << "You switch on the [src]."
user << "<span class='notice'>You switch \the [src] [on ? "on" : "off"].</span>"
/obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/screwdriver))
+7 -7
View File
@@ -30,35 +30,35 @@
name = "left arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_arm"
part = list("l_arm","l_hand")
part = list(BP_L_ARM, BP_L_HAND)
model_info = 1
/obj/item/robot_parts/r_arm
name = "right arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_arm"
part = list("r_arm","r_hand")
part = list(BP_R_ARM, BP_R_HAND)
model_info = 1
/obj/item/robot_parts/l_leg
name = "left leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_leg"
part = list("l_leg","l_foot")
part = list(BP_L_LEG, BP_L_FOOT)
model_info = 1
/obj/item/robot_parts/r_leg
name = "right leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_leg"
part = list("r_leg","r_foot")
part = list(BP_R_LEG, BP_R_FOOT)
model_info = 1
/obj/item/robot_parts/chest
name = "torso"
name = "chest"
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
icon_state = "chest"
part = list("groin","chest")
part = list(BP_GROIN,BP_TORSO)
var/wires = 0.0
var/obj/item/weapon/cell/cell = null
@@ -66,7 +66,7 @@
name = "head"
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
icon_state = "head"
part = list("head")
part = list(BP_HEAD)
var/obj/item/device/flash/flash1 = null
var/obj/item/device/flash/flash2 = null
+3 -3
View File
@@ -24,7 +24,7 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.name == "head")
if(affecting.organ_tag == BP_HEAD)
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
user << "<span class='warning'>You can't apply [src] through [H.head]!</span>"
return 1
@@ -217,7 +217,7 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.name
if(!(affecting.limb_name in list("l_arm","r_arm","l_leg","r_leg")))
if(!(affecting.organ_tag in list("l_arm","r_arm","l_leg","r_leg")))
user << "<span class='danger'>You can't apply a splint there!</span>"
return
if(affecting.status & ORGAN_SPLINTED)
@@ -226,7 +226,7 @@
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.limb_name == "r_arm") || (user.hand && affecting.limb_name == "l_arm"))
if((!user.hand && affecting.organ_tag == "r_arm") || (user.hand && affecting.organ_tag == "l_arm"))
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>")
+1 -1
View File
@@ -794,7 +794,7 @@
/obj/structure/plushie/drone
name = "plush drone"
desc = "A plushie of a happy drone! It appears to be smiling, and has a small tag which reads \"N.D.V. Icarus Gift Shop\"."
desc = "A plushie of a happy drone! It appears to be smiling."
icon_state = "droneplushie"
phrase = "Beep boop!"
@@ -478,7 +478,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
M.IgniteMob()
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == "mouth" && lit)
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
if(M == user)
cig.attackby(src, user)
@@ -39,7 +39,7 @@
return
/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == "mouth" )
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == O_MOUTH)
user.visible_message("<span class='danger'>\The [user] washes \the [target]'s mouth out with soap!</span>")
return
..()
@@ -6,6 +6,7 @@
w_class = 2.0
force = 2.0
det_time = null
var/stage = 0
var/state = 0
var/path = 0
@@ -84,7 +84,7 @@
//This really should be in mob not every check
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if (E && E.damage >= E.min_bruised_damage)
M << "<span class='danger'>Your eyes start to burn badly!</span>"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
@@ -8,7 +8,8 @@
throw_speed = 4
throw_range = 20
flags = CONDUCT
slot_flags = SLOT_BELT
slot_flags = SLOT_MASK|SLOT_BELT
var/active = 0
var/det_time = 50
@@ -9,27 +9,25 @@
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
// Prime now just handles the two loops that query for people in lockers and people who can see it.
/obj/item/weapon/grenade/spawnergrenade/prime()
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(T, null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(T, null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
x.loc = T
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(x, pick(NORTH,SOUTH,EAST,WEST))
// Spawn some hostile syndicate critters
qdel(src)
return
// Spawn some hostile syndicate critters
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type(T)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(x, pick(NORTH,SOUTH,EAST,WEST))
qdel(src)
return
/obj/item/weapon/grenade/spawnergrenade/manhacks
name = "manhack delivery grenade"
+2 -2
View File
@@ -94,11 +94,11 @@ var/last_chew = 0
var/mob/living/carbon/human/H = A
if (!H.handcuffed) return
if (H.a_intent != I_HURT) return
if (H.zone_sel.selecting != "mouth") return
if (H.zone_sel.selecting != O_MOUTH) return
if (H.wear_mask) return
if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return
var/obj/item/organ/external/O = H.organs_by_name[H.hand?"l_hand":"r_hand"]
var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)]
if (!O) return
var/s = "<span class='warning'>[H.name] chews on \his [O.name]!</span>"
@@ -0,0 +1,40 @@
/obj/item/weapon/material/twohanded/baseballbat/foam/New(var/newloc)
..(newloc,"foam")
/obj/item/weapon/material/sword/foam
attack_verb = list("bonked","whacked")
force_divisor = 0
unbreakable = 1
/obj/item/weapon/material/twohanded/baseballbat/foam
attack_verb = list("bonked","whacked")
force_wielded = 0
force_divisor = 0
unbreakable = 1
/obj/item/weapon/material/sword/foam/New(var/newloc)
..(newloc,"foam")
/obj/item/weapon/material/twohanded/spear/foam
attack_verb = list("bonked","whacked")
force_wielded = 0
force_divisor = 0
applies_material_colour = 1
base_icon = "spear_mask"
icon_state = "spear_mask0"
unbreakable = 1
/obj/item/weapon/material/twohanded/spear/foam/New(var/newloc)
..(newloc,"foam")
/obj/item/weapon/material/twohanded/fireaxe/foam
attack_verb = list("bonked","whacked")
force_wielded = 0
force_divisor = 0
applies_material_colour = 1
base_icon = "fireaxe_mask"
icon_state = "fireaxe_mask0"
unbreakable = 1
/obj/item/weapon/material/twohanded/fireaxe/foam/New(var/newloc)
..(newloc,"foam")
@@ -27,7 +27,7 @@
return ..()
if(user.a_intent != I_HELP)
if(user.zone_sel.selecting == "head" || user.zone_sel.selecting == "eyes")
if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == O_EYES)
if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
@@ -8,6 +8,16 @@
force_divisor = 0.3 // 18 with hardness 60 (steel)
attack_verb = list("jabbed","stabbed","ripped")
/obj/item/weapon/material/knuckledusters
name = "knuckle dusters"
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
icon_state = "knuckledusters"
gender = PLURAL
w_class = 2.0
force_divisor = 0.63
attack_verb = list("punched", "beaten", "struck")
applies_material_colour = 0
/obj/item/weapon/material/hatchet
name = "hatchet"
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
@@ -64,10 +64,10 @@
..()
if(isliving(AM))
var/mob/M = AM
if(M.buckled) //wheelchairs, office chairs, rollerbeds
return
M << "<span class='danger'>You step on \the [src]!</span>"
playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds
if(ishuman(M))
@@ -78,7 +78,7 @@
if( H.shoes || ( H.wear_suit && (H.wear_suit.body_parts_covered & FEET) ) )
return
var/list/check = list("l_foot", "r_foot")
while(check.len)
var/picked = pick(check)
@@ -89,7 +89,7 @@
if(affecting.take_damage(5, 0))
H.UpdateDamageIcon()
H.updatehealth()
if(!(H.species.flags & NO_PAIN))
if(affecting.can_feel_pain())
H.Weaken(3)
return
check -= picked
@@ -194,3 +194,4 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
default_material = "glass"
applies_material_colour = 0
@@ -159,7 +159,7 @@
if(!istype(M, /mob))
return
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
user.equip_to_slot_if_possible(W, slot_wear_mask)
@@ -252,7 +252,7 @@
if(!istype(M, /mob))
return
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user)
reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
user.equip_to_slot_if_possible(W, slot_wear_mask)
@@ -30,7 +30,7 @@
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
H.apply_damage(2*force, BRUTE, BP_HEAD)
else
user.take_organ_damage(2*force)
return
@@ -123,7 +123,7 @@
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
H.apply_damage(2*force, BRUTE, BP_HEAD)
else
user.take_organ_damage(2*force)
return
+7 -6
View File
@@ -7,9 +7,9 @@
/obj/item/weapon/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user)
if(istype(H))
if(user.zone_sel.selecting == "eyes")
if(user.zone_sel.selecting == O_EYES)
if(!H.organs_by_name["head"])
if(!H.organs_by_name[BP_HEAD])
user << "<span class='warning'>\The [H] doesn't have a head.</span>"
return
if(!H.has_eyes())
@@ -27,14 +27,14 @@
return
// Repeat failure checks.
if(!H || !src || !H.organs_by_name["head"] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
return
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s eyes!</span>")
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
else if(user.zone_sel.selecting == "mouth" || user.zone_sel.selecting == "head")
if(!H.organs_by_name["head"])
else if(user.zone_sel.selecting == O_MOUTH || user.zone_sel.selecting == BP_HEAD)
if(!H.organs_by_name[BP_HEAD])
user << "<span class='warning'>\The [H] doesn't have a head.</span>"
return
if(!H.check_has_mouth())
@@ -52,10 +52,11 @@
return
// Repeat failure checks.
if(!H || !src || !H.organs_by_name["head"] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
return
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask)
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
+9 -6
View File
@@ -83,7 +83,7 @@
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M) || user.a_intent == "help")
return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
if(user.zone_sel.selecting != O_EYES && user.zone_sel.selecting != BP_HEAD)
return ..()
if((CLUMSY in user.mutations) && prob(50))
M = user
@@ -333,7 +333,7 @@
var/safety = user:eyecheck()
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(!E)
return
switch(safety)
@@ -422,14 +422,18 @@
icon_state = "red_crowbar"
item_state = "crowbar_red"
/obj/item/weapon/weldingtool/attack(var/atom/A, var/mob/living/user, var/def_zone)
if(ishuman(A) && user.a_intent == I_HELP)
return
return ..()
/obj/item/weapon/weldingtool/afterattack(var/mob/M, var/mob/user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
if (!S) return
if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP)
if(!S || !(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP)
return ..()
if(S.brute_dam)
@@ -438,10 +442,9 @@
user.visible_message("<span class='notice'>\The [user] patches some dents on \the [M]'s [S.name] with \the [src].</span>")
else if(S.open != 2)
user << "<span class='danger'>The damage is far too severe to patch over externally.</span>"
return 1
else if(S.open != 2)
user << "<span class='notice'>Nothing to fix!</span>"
return
else
return ..()
+2 -2
View File
@@ -45,7 +45,7 @@
var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later.
if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes
if(!(user.zone_sel.selecting == (O_EYES || BP_HEAD))) //////////////hitting anything else other than the eyes
if(prob(33))
src.add_blood(H)
var/turf/location = H.loc
@@ -79,7 +79,7 @@
if(istype(protection) && (protection.body_parts_covered & FACE))
protected = 1
break
if(protected)
M << "<span class='warning'>You get slammed in the face with the tray, against your mask!</span>"
if(prob(33))
+5 -5
View File
@@ -140,15 +140,15 @@
switch(pick(list("ankle","wrist","head","knee","elbow")))
if("ankle")
affecting = H.get_organ(pick("l_foot", "r_foot"))
affecting = H.get_organ(pick(BP_L_FOOT, BP_R_FOOT))
if("knee")
affecting = H.get_organ(pick("l_leg", "r_leg"))
affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG))
if("wrist")
affecting = H.get_organ(pick("l_hand", "r_hand"))
affecting = H.get_organ(pick(BP_L_HAND, BP_R_HAND))
if("elbow")
affecting = H.get_organ(pick("l_arm", "r_arm"))
affecting = H.get_organ(pick(BP_L_ARM, BP_R_ARM))
if("head")
affecting = H.get_organ("head")
affecting = H.get_organ(BP_HEAD)
if(affecting)
M << "<span class='danger'>You land heavily on your [affecting.name]!</span>"
@@ -70,7 +70,7 @@
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
switch(pick("blue", "green", "purple"))
switch(pick("blue", "green", "purple", "black"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -80,7 +80,10 @@
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
switch(pick("blue", "green", "purple"))
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
switch(pick("blue", "green", "purple", "black"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -90,13 +93,16 @@
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
new /obj/item/clothing/suit/storage/toggle/fr_jacket(src)
new /obj/item/clothing/shoes/white(src)
// new /obj/item/weapon/cartridge/medical(src)
new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/device/radio/headset/headset_med/alt(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
@@ -125,7 +131,7 @@
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/shoes/white(src)
switch(pick("blue", "green", "purple"))
switch(pick("blue", "green", "purple", "black"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -135,6 +141,9 @@
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
+1 -1
View File
@@ -324,7 +324,7 @@
M.emote("scream")
else
var/mob/living/carbon/C = M
if (!(C.species && (C.species.flags & NO_PAIN)))
if (C.can_feel_pain())
C.emote("scream")
//Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out.
@@ -48,10 +48,10 @@
var/mob/living/carbon/xenos = user
var/mob/living/carbon/victim = M
if(istype(victim) && locate(/obj/item/organ/xenos/hivenode) in victim.internal_organs)
if(istype(victim) && locate(/obj/item/organ/internal/xenos/hivenode) in victim.internal_organs)
return
if(istype(xenos) && !(locate(/obj/item/organ/xenos/hivenode) in xenos.internal_organs))
if(istype(xenos) && !(locate(/obj/item/organ/internal/xenos/hivenode) in xenos.internal_organs))
return
if(M == usr)
+5 -2
View File
@@ -880,12 +880,15 @@ var/list/admin_verbs_mentor = list(
if(new_fstyle)
M.f_style = new_fstyle
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neuter")
if (new_gender)
if(new_gender == "Male")
M.gender = MALE
else
else if (new_gender == "Female")
M.gender = FEMALE
else
M.gender = NEUTER
M.update_hair()
M.update_body()
M.check_dna(M)
+2 -2
View File
@@ -278,8 +278,8 @@ Ccomp's first proc.
G.can_reenter_corpse = 1
G:show_message(text("\blue <B>You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.</B>"), 1)
log_admin("[key_name(usr)] allowed [key_name(G)] to bypass the 30 minute respawn limit")
message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(G)] to bypass the 30 minute respawn limit", 1)
log_admin("[key_name(usr)] allowed [key_name(G)] to bypass the 15 minute respawn limit")
message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(G)] to bypass the 15 minute respawn limit", 1)
/client/proc/toggle_antagHUD_use()
@@ -1,7 +1,7 @@
/datum/category_item/player_setup_item/general/basic
name = "Basic"
sort_order = 1
var/list/valid_player_genders = list(MALE, FEMALE)
var/list/valid_player_genders = list(MALE, FEMALE, NEUTER, PLURAL)
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
S["real_name"] >> pref.real_name
@@ -75,8 +75,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
pref.update_preview_icon()
if(pref.preview_icon_front && pref.preview_icon_side)
user << browse_rsc(pref.preview_icon_front, "previewicon.png")
user << browse_rsc(pref.preview_icon_side, "previewicon2.png")
user << browse_rsc(pref.preview_icon_front, "preview_icon.png")
user << browse_rsc(pref.preview_icon_side, "preview_icon2.png")
var/mob_species = all_species[pref.species]
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
@@ -87,7 +87,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(has_flag(mob_species, HAS_SKIN_TONE))
. += "Skin Tone: <a href='?src=\ref[src];skin_tone=1'>[-pref.s_tone + 35]/220</a><br>"
. += "Needs Glasses: <a href='?src=\ref[src];disabilities=[NEARSIGHTED]'><b>[pref.disabilities & NEARSIGHTED ? "Yes" : "No"]</b></a><br>"
. += "Limbs: <a href='?src=\ref[src];limbs=1'>Adjust</a><br>"
. += "Limbs: <a href='?src=\ref[src];limbs=1'>Adjust</a> <a href='?src=\ref[src];reset_limbs=1'>Reset</a><br>"
. += "Internal Organs: <a href='?src=\ref[src];organs=1'>Adjust</a><br>"
//display limbs below
@@ -96,26 +96,35 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/status = pref.organ_data[name]
var/organ_name = null
switch(name)
if("l_arm")
if(BP_TORSO)
organ_name = "torso"
if(BP_GROIN)
organ_name = "groin"
if(BP_HEAD)
organ_name = "head"
if(BP_L_ARM)
organ_name = "left arm"
if("r_arm")
if(BP_R_ARM)
organ_name = "right arm"
if("l_leg")
if(BP_L_LEG)
organ_name = "left leg"
if("r_leg")
if(BP_R_LEG)
organ_name = "right leg"
if("l_foot")
if(BP_L_FOOT)
organ_name = "left foot"
if("r_foot")
if(BP_R_FOOT)
organ_name = "right foot"
if("l_hand")
if(BP_L_HAND)
organ_name = "left hand"
if("r_hand")
if(BP_R_HAND)
organ_name = "right hand"
if("heart")
if(O_HEART)
organ_name = "heart"
if("eyes")
if(O_EYES)
organ_name = "eyes"
if(O_BRAIN)
organ_name = "brain"
if(status == "cyborg")
++ind
@@ -136,7 +145,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
++ind
if(ind > 1)
. += ", "
. += "\tMechanical [organ_name]"
. += "\tSynthetic [organ_name]"
else if(status == "assisted")
++ind
if(ind > 1)
@@ -148,6 +157,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "\tSurgically altered [organ_name]"
if("eyes")
. += "\tRetinal overlayed [organ_name]"
if("brain")
. += "\tAssisted-interface [organ_name]"
else
. += "\tMechanically assisted [organ_name]"
if(!ind)
@@ -155,7 +166,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else
. += "<br><br>"
. += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64>"
. += "</td><td><b>Preview</b><br><img src=preview_icon.png height=64 width=64><img src=preview_icon2.png height=64 width=64>"
. += "</td></tr></table>"
. += "<b>Hair</b><br>"
@@ -252,6 +263,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.b_hair = 0//hex2num(copytext(new_hair, 6, 8))
pref.s_tone = 0
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
return TOPIC_REFRESH
else if(href_list["hair_color"])
@@ -334,50 +346,78 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.f_style = new_f_style
return TOPIC_REFRESH
else if(href_list["reset_limbs"])
reset_limbs()
return TOPIC_REFRESH
else if(href_list["limbs"])
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
if(!limb_name && !CanUseTopic(user)) return TOPIC_NOACTION
var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body")
// Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy.
var/datum/species/current_species = all_species[pref.species]
if(!current_species.has_organ["brain"])
limb_selection_list -= "Full Body"
var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list
if(!organ_tag && !CanUseTopic(user)) return TOPIC_NOACTION
var/limb = null
var/second_limb = null // if you try to change the arm, the hand should also change
var/third_limb = null // if you try to unchange the hand, the arm should also change
switch(limb_name)
if("Left Leg")
limb = "l_leg"
second_limb = "l_foot"
if("Right Leg")
limb = "r_leg"
second_limb = "r_foot"
if("Left Arm")
limb = "l_arm"
second_limb = "l_hand"
if("Right Arm")
limb = "r_arm"
second_limb = "r_hand"
if("Left Foot")
limb = "l_foot"
third_limb = "l_leg"
if("Right Foot")
limb = "r_foot"
third_limb = "r_leg"
if("Left Hand")
limb = "l_hand"
third_limb = "l_arm"
if("Right Hand")
limb = "r_hand"
third_limb = "r_arm"
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis")
// Do not let them amputate their entire body, ty.
var/list/choice_options = list("Normal","Amputated","Prothesis")
switch(organ_tag)
if("Left Leg")
limb = BP_L_LEG
second_limb = BP_L_FOOT
if("Right Leg")
limb = BP_R_LEG
second_limb = BP_R_FOOT
if("Left Arm")
limb = BP_L_ARM
second_limb = BP_L_HAND
if("Right Arm")
limb = BP_R_ARM
second_limb = BP_R_HAND
if("Left Foot")
limb = BP_L_FOOT
third_limb = BP_L_LEG
if("Right Foot")
limb = BP_R_FOOT
third_limb = BP_R_LEG
if("Left Hand")
limb = BP_L_HAND
third_limb = BP_L_ARM
if("Right Hand")
limb = BP_R_HAND
third_limb = BP_R_ARM
if("Full Body")
limb = BP_TORSO
third_limb = BP_GROIN
choice_options = list("Normal","Prothesis")
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options
if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION
switch(new_state)
if("Normal")
if(limb == BP_TORSO)
for(var/other_limb in BP_ALL - BP_TORSO)
pref.organ_data[other_limb] = null
pref.rlimb_data[other_limb] = null
pref.organ_data[limb] = null
pref.rlimb_data[limb] = null
if(third_limb)
pref.organ_data[third_limb] = null
pref.rlimb_data[third_limb] = null
if("Amputated")
if(limb == BP_TORSO)
return
pref.organ_data[limb] = "amputated"
pref.rlimb_data[limb] = null
if(second_limb)
@@ -397,27 +437,51 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in usable_manufacturers
if(!choice)
return
pref.rlimb_data[limb] = choice
pref.organ_data[limb] = "cyborg"
if(second_limb)
pref.rlimb_data[second_limb] = choice
pref.organ_data[second_limb] = "cyborg"
if(third_limb && pref.organ_data[third_limb] == "amputated")
pref.organ_data[third_limb] = null
if(limb == BP_TORSO)
for(var/other_limb in BP_ALL - BP_TORSO)
if(pref.organ_data[other_limb])
continue
pref.organ_data[other_limb] = "cyborg"
pref.rlimb_data[other_limb] = choice
if(!pref.organ_data[O_BRAIN])
pref.organ_data[O_BRAIN] = "assisted"
for(var/internal_organ in list(O_HEART,O_EYES))
pref.organ_data[internal_organ] = "mechanical"
return TOPIC_REFRESH
else if(href_list["organs"])
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes")
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes", "Brain")
if(!organ_name) return
var/organ = null
switch(organ_name)
if("Heart")
organ = "heart"
organ = O_HEART
if("Eyes")
organ = "eyes"
organ = O_EYES
if("Brain")
if(pref.organ_data[BP_HEAD] != "cyborg")
user << "<span class='warning'>You may only select an assisted or synthetic brain if you have a full prosthetic body.</span>"
return
organ = "brain"
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical")
var/list/organ_choices = list("Normal","Assisted","Mechanical")
if(pref.organ_data[BP_TORSO] == "cyborg")
organ_choices -= "Normal"
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
if(!new_state) return
switch(new_state)
@@ -436,6 +500,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return ..()
/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
for(var/organ in pref.organ_data)
pref.organ_data[organ] = null
while(null in pref.organ_data)
pref.organ_data -= null
for(var/organ in pref.rlimb_data)
pref.rlimb_data[organ] = null
while(null in pref.rlimb_data)
pref.rlimb_data -= null
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
if(!pref.species_preview || !(pref.species_preview in all_species))
pref.species_preview = "Human"
@@ -455,10 +531,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
dat += "</br><b>Often present on human stations.</b>"
if(current_species.spawn_flags & IS_WHITELISTED)
dat += "</br><b>Whitelist restricted.</b>"
if(current_species.flags & NO_BLOOD)
dat += "</br><b>Does not have blood.</b>"
if(current_species.flags & NO_BREATHE)
dat += "</br><b>Does not breathe.</b>"
if(!current_species.has_organ[O_HEART])
dat += "</br><b>Does not have a circulatory system.</b>"
if(!current_species.has_organ[O_LUNGS])
dat += "</br><b>Does not have a respiratory system.</b>"
if(current_species.flags & NO_SCAN)
dat += "</br><b>Does not have DNA.</b>"
if(current_species.flags & NO_PAIN)
@@ -24,6 +24,9 @@
/datum/category_item/player_setup_item/player_global/pai/content(var/mob/user)
. += "<b>pAI:</b><br>"
if(!candidate)
log_debug("[user] pAI prefs have a null candidate var.")
return .
. += "Name: <a href='?src=\ref[src];option=name'>[candidate.name ? candidate.name : "None Set"]</a><br>"
. += "Description: <a href='?src=\ref[src];option=desc'>[candidate.description ? TextPreview(candidate.description, 40) : "None Set"]</a><br>"
. += "Role: <a href='?src=\ref[src];option=role'>[candidate.role ? TextPreview(candidate.role, 40) : "None Set"]</a><br>"
+15 -26
View File
@@ -304,50 +304,39 @@ datum/preferences
character.skills = skills
character.used_skillpoints = used_skillpoints
// Destroy/cyborgize organs
for(var/name in organ_data)
// Destroy/cyborgize organs and limbs.
for(var/name in BP_ALL)
var/status = organ_data[name]
var/obj/item/organ/external/O = character.organs_by_name[name]
if(O)
O.status = 0
if(status == "amputated")
character.organs_by_name[O.limb_name] = null
character.organs -= O
if(O.children) // This might need to become recursive.
for(var/obj/item/organ/external/child in O.children)
character.organs_by_name[child.limb_name] = null
character.organs -= child
O.remove_rejuv()
else if(status == "cyborg")
if(rlimb_data[name])
O.robotize(rlimb_data[name])
else
O.robotize()
else
var/obj/item/organ/I = character.internal_organs_by_name[name]
if(I)
if(status == "assisted")
I.mechassist()
else if(status == "mechanical")
I.robotize()
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
var/status = organ_data[name]
if(!status)
continue
var/obj/item/organ/I = character.internal_organs_by_name[name]
if(I)
if(status == "assisted")
I.mechassist()
else if(status == "mechanical")
I.robotize()
character.underwear = underwear
character.undershirt = undershirt
character.socks = socks
if(backbag > 4 || backbag < 1)
backbag = 1 //Same as above
character.backbag = backbag
//Debugging report to track down a bug, which randomly assigned the plural gender to people.
if(character.gender in list(PLURAL, NEUTER))
if(isliving(src)) //Ghosts get neuter by default
message_admins("[character] ([character.ckey]) has spawned with their gender as plural or neuter. Please notify coders.")
character.gender = MALE
character.update_body()
/datum/preferences/proc/open_load_dialog(mob/user)
var/dat = "<body>"
+4
View File
@@ -120,3 +120,7 @@
/obj/item/clothing/head/surgery/green
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is dark green."
icon_state = "surgcap_green"
/obj/item/clothing/head/surgery/black
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black."
icon_state = "surgcap_black"
+1 -1
View File
@@ -93,7 +93,7 @@
var/obj/item/projectile/P = damage_source
var/reflectchance = 40 - round(damage/3)
if(!(def_zone in list("chest", "groin")))
if(!(def_zone in list(BP_TORSO, BP_GROIN)))
reflectchance /= 2
if(P.starting && prob(reflectchance))
visible_message("<span class='danger'>\The [user]'s [src.name] reflects [attack_text]!</span>")
@@ -99,33 +99,31 @@
var/sound = "heartbeat"
var/sound_strength = "cannot hear"
var/heartbeat = 0
if(M.species && M.species.has_organ["heart"])
var/obj/item/organ/heart/heart = M.internal_organs_by_name["heart"]
if(heart && !heart.robotic)
heartbeat = 1
var/obj/item/organ/internal/heart/heart = M.internal_organs_by_name[O_HEART]
if(heart && !(heart.status & ORGAN_ROBOT))
heartbeat = 1
if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
sound_strength = "cannot hear"
sound = "anything"
else
switch(body_part)
if("chest")
if(BP_TORSO)
sound_strength = "hear"
sound = "no heartbeat"
if(heartbeat)
var/obj/item/organ/heart/heart = M.internal_organs_by_name["heart"]
if(heart.is_bruised() || M.getOxyLoss() > 50)
sound = "[pick("odd noises in","weak")] heartbeat"
else
sound = "healthy heartbeat"
var/obj/item/organ/heart/L = M.internal_organs_by_name["lungs"]
var/obj/item/organ/internal/heart/L = M.internal_organs_by_name[O_LUNGS]
if(!L || M.losebreath)
sound += " and no respiration"
else if(M.is_lung_ruptured() || M.getOxyLoss() > 50)
sound += " and [pick("wheezing","gurgling")] sounds"
else
sound += " and healthy respiration"
if("eyes","mouth")
if(O_EYES,O_MOUTH)
sound_strength = "cannot hear"
sound = "anything"
else
+8 -1
View File
@@ -600,4 +600,11 @@
desc = "A red shirt that has had the top cut low."
icon_state = "cuttop_red"
item_state = "r_suit"
worn_state = "cuttop_red"
worn_state = "cuttop_red"
/obj/item/clothing/under/harness
name = "gear harness"
desc = "How... minimalist."
icon_state = "gear_harness"
worn_state = "gear_harness"
body_parts_covered = 0
+1 -1
View File
@@ -111,7 +111,7 @@
user.do_attack_animation(src)
M.IgniteMob()
else if(reagents.total_volume)
if(user.zone_sel.selecting == "mouth")
if(user.zone_sel.selecting == O_MOUTH)
user.do_attack_animation(src)
user.visible_message(
"<span class='danger'>\The [user] smothers [target] with [src]!</span>",
+5 -5
View File
@@ -32,8 +32,8 @@
user.visible_message("<span class='danger'>\The [user] tries to take a swab sample from \the [H], but they move away.</span>")
return
if(user.zone_sel.selecting == "mouth")
if(!H.organs_by_name["head"])
if(user.zone_sel.selecting == O_MOUTH)
if(!H.organs_by_name[BP_HEAD])
user << "<span class='warning'>They don't have a head.</span>"
return
if(!H.check_has_mouth())
@@ -43,13 +43,13 @@
dna = list(H.dna.unique_enzymes)
sample_type = "DNA"
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
else if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND)
var/has_hand
var/obj/item/organ/external/O = H.organs_by_name["r_hand"]
var/obj/item/organ/external/O = H.organs_by_name[BP_R_HAND]
if(istype(O) && !O.is_stump())
has_hand = 1
else
O = H.organs_by_name["l_hand"]
O = H.organs_by_name[BP_L_HAND]
if(istype(O) && !O.is_stump())
has_hand = 1
if(!has_hand)
@@ -41,14 +41,6 @@ var/list/weighted_mundaneevent_locations = list()
[pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. [company_name] is expected to announce a co-exploitation deal within the fortnight."
return null
/datum/trade_destination/icarus
name = "NDV Icarus"
description = "Corvette assigned to patrol local space."
distance = 0.1
willing_to_buy = list()
willing_to_sell = list()
viable_random_events = list(SECURITY_BREACH, AI_LIBERATION, PIRATES)
/datum/trade_destination/redolant
name = "OAV Redolant"
description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti."
+2 -1
View File
@@ -8,7 +8,8 @@
/datum/event/brand_intelligence/announce()
command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert")
command_announcement.Announce("An ongoing mass upload of malware for vendors has been detected onboard [station_name()], which appears to transmit \
to other nearby vendors. The original infected machine is believed to be \a [originMachine.name].", "Vendor Service Alert")
/datum/event/brand_intelligence/start()
+2 -2
View File
@@ -3,13 +3,13 @@
endWhen = 30
/datum/event/dust/announce()
command_announcement.Announce("The station is now passing through a belt of space dust.", "Dust Alert")
command_announcement.Announce("Debris resulting from activity on another nearby asteroid is approaching your colony.", "Dust Alert")
/datum/event/dust/start()
dust_swarm(get_severity())
/datum/event/dust/end()
command_announcement.Announce("The station has now passed through the belt of space dust.", "Dust Notice")
command_announcement.Announce("The colony is no longer in danger of impact from space debris.", "Dust Notice")
/datum/event/dust/proc/get_severity()
switch(severity)
+1 -1
View File
@@ -4,7 +4,7 @@
/datum/event/electrical_storm/announce()
command_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
command_announcement.Announce("An electrical issue has been detected in your area, please repair potential electronic overloads.", "Electrical Alert")
/datum/event/electrical_storm/start()
-2
View File
@@ -160,7 +160,6 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 30, list(ASSIGNMENT_ENGINEER = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)),
)
@@ -174,7 +173,6 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station,0,list(ASSIGNMENT_ANY = 5)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 0, list(ASSIGNMENT_ENGINEER = 15), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
)
-1
View File
@@ -76,7 +76,6 @@ var/list/event_last_fired = list()
if(active_with_role["Medical"] > 0)
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 10
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 10
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 10
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
if(active_with_role["Security"] > 0)
+2 -1
View File
@@ -5,7 +5,8 @@
endWhen = rand(15, 60)
/datum/event/gravity/announce()
command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes.", "Gravity Failure")
command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system \
reinitializes. Please stand by while the gravity system reinitializes.", "Gravity Failure")
/datum/event/gravity/start()
gravity_is_on = 0
+8 -13
View File
@@ -1,13 +1,12 @@
#define LOC_KITCHEN 0
#define LOC_ATMOS 1
#define LOC_INCIN 2
#define LOC_CHAPEL 3
#define LOC_LIBRARY 4
#define LOC_HYDRO 5
#define LOC_VAULT 6
#define LOC_CONSTR 7
#define LOC_TECH 8
#define LOC_TACTICAL 9
#define LOC_CHAPEL 2
#define LOC_LIBRARY 3
#define LOC_HYDRO 4
#define LOC_VAULT 5
#define LOC_CONSTR 6
#define LOC_TECH 7
#define LOC_TACTICAL 8
#define VERM_MICE 0
#define VERM_LIZARDS 1
@@ -23,7 +22,7 @@
/datum/event/infestation/start()
location = rand(0,9)
location = rand(0,8)
var/list/turf/simulated/floor/turfs = list()
var/spawn_area_type
switch(location)
@@ -33,9 +32,6 @@
if(LOC_ATMOS)
spawn_area_type = /area/engineering/atmos
locstring = "atmospherics"
if(LOC_INCIN)
spawn_area_type = /area/maintenance/incinerator
locstring = "the incinerator"
if(LOC_CHAPEL)
spawn_area_type = /area/chapel/main
locstring = "the chapel"
@@ -101,7 +97,6 @@
#undef LOC_KITCHEN
#undef LOC_ATMOS
#undef LOC_INCIN
#undef LOC_CHAPEL
#undef LOC_LIBRARY
#undef LOC_HYDRO
+4 -4
View File
@@ -13,9 +13,9 @@
/datum/event/meteor_wave/announce()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
command_announcement.Announce("Meteors have been detected on collision course with the colony.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
else
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
command_announcement.Announce("The colony is now in a meteor shower.", "Meteor Alert")
/datum/event/meteor_wave/tick()
if(waves && activeFor >= next_meteor)
@@ -32,9 +32,9 @@
/datum/event/meteor_wave/end()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
command_announcement.Announce("The colony has cleared the meteor storm.", "Meteor Alert")
else
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
command_announcement.Announce("The colony has cleared the meteor shower", "Meteor Alert")
/datum/event/meteor_wave/proc/get_meteors()
switch(severity)
+1 -1
View File
@@ -17,7 +17,7 @@
T.amount = winner_sum
T.date = current_date_string
T.time = worldtime2text()
T.source_terminal = "Biesel TCD Terminal #[rand(111,333)]"
T.source_terminal = "Sif TCD Terminal #[rand(111,333)]"
D.transaction_log.Add(T)
deposit_success = 1

Some files were not shown because too many files have changed in this diff Show More