Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into NukeOpsStart
@@ -69,6 +69,7 @@
|
||||
#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" //from base of datum/radiation_wave/radiate(): (strength)
|
||||
#define COMPONENT_BLOCK_CONTAMINATION 1
|
||||
#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" //from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
|
||||
#define COMPONENT_RAD_WAVE_HANDLED 1
|
||||
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
|
||||
#define COMPONENT_BLOCK_REACH 1
|
||||
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
|
||||
@@ -257,4 +258,4 @@
|
||||
|
||||
//Ouch my toes!
|
||||
#define CALTROP_BYPASS_SHOES 1
|
||||
#define CALTROP_IGNORE_WALKERS 2
|
||||
#define CALTROP_IGNORE_WALKERS 2
|
||||
|
||||
@@ -63,6 +63,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
#define ACID_PROOF (1<<5) //acid stuck on it doesn't melt it.
|
||||
#define INDESTRUCTIBLE (1<<6) //doesn't take damage
|
||||
#define FREEZE_PROOF (1<<7) //can't be frozen
|
||||
#define GOLIATH_RESISTANCE (1<<8) //CIT CHANGE
|
||||
#define GOLIATH_WEAKNESS (1<<9) //CIT CHANGE
|
||||
|
||||
//tesla_zap
|
||||
#define TESLA_MACHINE_EXPLOSIVE (1<<0)
|
||||
@@ -78,3 +80,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
#define EMP_PROTECT_SELF (1<<0)
|
||||
#define EMP_PROTECT_CONTENTS (1<<1)
|
||||
#define EMP_PROTECT_WIRES (1<<2)
|
||||
|
||||
// radiation
|
||||
#define RAD_PROTECT_CONTENTS (1<<0)
|
||||
#define RAD_NO_CONTAMINATE (1<<1)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(ignored_things[thing.type])
|
||||
continue
|
||||
. += thing
|
||||
if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_PROBE) & COMPONENT_BLOCK_RADIATION)
|
||||
if((thing.rad_flags & RAD_PROTECT_CONTENTS) || (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_PROBE) & COMPONENT_BLOCK_RADIATION))
|
||||
continue
|
||||
processing_list += thing.contents
|
||||
|
||||
@@ -42,4 +42,4 @@
|
||||
if(log)
|
||||
var/turf/_source_T = isturf(source) ? source : get_turf(source)
|
||||
log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)] ")
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
@@ -111,7 +111,9 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"UNACIDABLE" = UNACIDABLE,
|
||||
"ACID_PROOF" = ACID_PROOF,
|
||||
"INDESTRUCTIBLE" = INDESTRUCTIBLE,
|
||||
"FREEZE_PROOF" = FREEZE_PROOF
|
||||
"FREEZE_PROOF" = FREEZE_PROOF,
|
||||
"GOLIATH_RESISTANCE" = GOLIATH_RESISTANCE,
|
||||
"GOLIATH_WEAKNESS" = GOLIATH_WEAKNESS
|
||||
),
|
||||
"reagents_holder_flags" = list(
|
||||
"REAGENT_NOREACT" = REAGENT_NOREACT
|
||||
@@ -167,4 +169,8 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"car_traits" = list(
|
||||
"CAN_KIDNAP" = CAN_KIDNAP,
|
||||
),
|
||||
"rad_flags" = list(
|
||||
"RAD_PROTECT_CONTENTS" = RAD_PROTECT_CONTENTS,
|
||||
"RAD_NO_CONTAMINATE" = RAD_NO_CONTAMINATE,
|
||||
),
|
||||
))
|
||||
|
||||
@@ -14,7 +14,8 @@ SUBSYSTEM_DEF(traumas)
|
||||
//phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only
|
||||
phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
|
||||
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
|
||||
"aliens", "strangers", "birds", "falling", "anime")
|
||||
"aliens", "strangers", "birds", "falling", "anime", "mimes"
|
||||
)
|
||||
|
||||
phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"),
|
||||
"space" = strings(PHOBIA_FILE, "space"),
|
||||
@@ -33,8 +34,9 @@ SUBSYSTEM_DEF(traumas)
|
||||
"conspiracies" = strings(PHOBIA_FILE, "conspiracies"),
|
||||
"birds" = strings(PHOBIA_FILE, "birds"),
|
||||
"falling" = strings(PHOBIA_FILE, "falling"),
|
||||
"anime" = strings(PHOBIA_FILE, "anime")
|
||||
)
|
||||
"anime" = strings(PHOBIA_FILE, "anime"),
|
||||
"mimes" = strings(PHOBIA_FILE, "mimes")
|
||||
)
|
||||
|
||||
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
|
||||
"security" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209)),
|
||||
@@ -42,7 +44,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
"skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)),
|
||||
"snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)),
|
||||
"robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai,
|
||||
/mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)),
|
||||
/mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer, /mob/living/simple_animal/bot/honkbot)),
|
||||
"doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)),
|
||||
"the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct,
|
||||
/mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
|
||||
@@ -55,29 +57,30 @@ SUBSYSTEM_DEF(traumas)
|
||||
"anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian))
|
||||
)
|
||||
|
||||
|
||||
phobia_objs = list("snakes" = typecacheof(list(/obj/item/rod_of_asclepius)),
|
||||
|
||||
"spiders" = typecacheof(list(/obj/structure/spider)),
|
||||
"spiders" = typecacheof(list(/obj/structure/spider)),
|
||||
|
||||
"security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
|
||||
"security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det,
|
||||
/obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs,
|
||||
/obj/machinery/door/airlock/security)),
|
||||
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
/obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn,
|
||||
/obj/item/pda/clown, /obj/item/grown/bananapeel)),
|
||||
|
||||
"greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
|
||||
"greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
|
||||
/obj/item/twohanded/spear, /obj/item/clothing/mask/gas)),
|
||||
|
||||
"lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail,
|
||||
"lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail,
|
||||
/obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)),
|
||||
|
||||
"skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
|
||||
"skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
|
||||
/obj/effect/decal/remains/human)),
|
||||
"conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
|
||||
"conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
|
||||
/obj/item/clothing/under/rank/chief_engineer, /obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/clothing/under/rank/head_of_personnel, /obj/item/clothing/under/rank/research_director,
|
||||
/obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt,
|
||||
@@ -90,10 +93,10 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/engi, /obj/item/clothing/suit/space/hardsuit/ert/med,
|
||||
/obj/item/clothing/suit/space/hardsuit/deathsquad, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad,
|
||||
/obj/machinery/door/airlock/centcom)),
|
||||
"robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
|
||||
"robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
|
||||
/obj/item/aicard, /obj/item/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)),
|
||||
|
||||
"doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
|
||||
"doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
|
||||
/obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
|
||||
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer,
|
||||
@@ -102,14 +105,14 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
|
||||
|
||||
"authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
|
||||
"authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
|
||||
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/chief_engineer,
|
||||
/obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander,
|
||||
/obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold,
|
||||
/obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)),
|
||||
|
||||
"the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
|
||||
"the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
|
||||
/obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, /obj/item/restraints/legcuffs/bola/cult,
|
||||
/obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/hardsuit/cult,
|
||||
/obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
|
||||
@@ -123,7 +126,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/gun/magic/staff, /obj/item/gun/magic/wand,
|
||||
/obj/item/nullrod, /obj/item/clothing/under/rank/chaplain)),
|
||||
|
||||
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
|
||||
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
|
||||
/obj/structure/alien, /obj/item/toy/toy_xeno,
|
||||
/obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien,
|
||||
/obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
|
||||
@@ -132,19 +135,26 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
|
||||
/obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor,
|
||||
/obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor)),
|
||||
|
||||
"birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
|
||||
|
||||
"birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
|
||||
/obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken,
|
||||
/obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/owl, /obj/item/clothing/mask/gas/owl_mask,
|
||||
/obj/item/clothing/under/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin,
|
||||
/obj/item/clothing/head/helmet/space/freedom, /obj/item/clothing/suit/space/freedom)),
|
||||
|
||||
"anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
|
||||
|
||||
"anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/head/kitty/genuine, /obj/item/clothing/suit/space/space_ninja,
|
||||
/obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/twohanded/vibro_weapon,
|
||||
/obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe))
|
||||
/obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)),
|
||||
|
||||
"mimes" = typecacheof(list(/obj/item/pda/mime, /obj/item/clothing/under/rank/mime, /obj/item/clothing/mask/gas/mime,
|
||||
/obj/item/clothing/head/frenchberet, /obj/item/clothing/suit/suspenders, /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing,
|
||||
/obj/item/storage/backpack/mime, /obj/item/reagent_containers/food/snacks/grown/banana/mime,
|
||||
/obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
|
||||
/obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime,
|
||||
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence))
|
||||
)
|
||||
|
||||
|
||||
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
|
||||
"the supernatural" = typecacheof(list(/turf/open/floor/clockwork, /turf/closed/wall/clockwork,
|
||||
/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)),
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
v /= 2
|
||||
e -= 5
|
||||
steps++
|
||||
if(steps >= 6)
|
||||
if(steps >= 3)
|
||||
steps = 0
|
||||
if(steps % 2)
|
||||
else
|
||||
return
|
||||
if(!LM.has_gravity(T) && steps != 0) // don't need to step as often when you hop around
|
||||
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
|
||||
return
|
||||
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
||||
GLOB.footstep[T.footstep][2] * v,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/datum/component/mirage_border/Initialize(turf/target, direction, range=world.view)
|
||||
if(!isturf(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
if(!target || !istype(target) || !direction)
|
||||
if(!target || !direction)
|
||||
. = COMPONENT_INCOMPATIBLE
|
||||
CRASH("[type] improperly instanced with the following args: target=\[[target]\], direction=\[[direction]\], range=\[[range]\]")
|
||||
|
||||
|
||||
@@ -21,4 +21,5 @@
|
||||
return COMPONENT_BLOCK_CONTAMINATION
|
||||
|
||||
/datum/component/rad_insulation/proc/rad_pass(datum/source, datum/radiation_wave/wave, width)
|
||||
wave.intensity = wave.intensity*(1-((1-amount)/width)) // The further out the rad wave goes the less it's affected by insulation (larger width)
|
||||
wave.intensity = wave.intensity*(1-((1-amount)/width)) // The further out the rad wave goes the less it's affected by insulation (larger width)
|
||||
return COMPONENT_RAD_WAVE_HANDLED
|
||||
|
||||
@@ -81,7 +81,10 @@
|
||||
var/atom/thing = atoms[k]
|
||||
if(!thing)
|
||||
continue
|
||||
SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src, width)
|
||||
if (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src, width) & COMPONENT_RAD_WAVE_HANDLED)
|
||||
continue
|
||||
if (thing.rad_insulation != RAD_NO_INSULATION)
|
||||
intensity *= (1-((1-thing.rad_insulation)/width))
|
||||
|
||||
/datum/radiation_wave/proc/radiate(list/atoms, strength)
|
||||
var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier))
|
||||
@@ -92,7 +95,7 @@
|
||||
thing.rad_act(strength)
|
||||
|
||||
// This list should only be for types which don't get contaminated but you want to look in their contents
|
||||
// If you don't want to look in their contents and you don't want to rad_act them:
|
||||
// If you don't want to look in their contents and you don't want to rad_act them:
|
||||
// modify the ignored_things list in __HELPERS/radiation.dm instead
|
||||
var/static/list/blacklisted = typecacheof(list(
|
||||
/turf,
|
||||
@@ -109,4 +112,4 @@
|
||||
if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
|
||||
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
|
||||
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
|
||||
|
||||
@@ -254,3 +254,17 @@
|
||||
dumb_thing = FALSE //only once per life
|
||||
if(prob(1))
|
||||
new/obj/item/reagent_containers/food/snacks/pastatomato(get_turf(H)) //now that's what I call spaghetti code
|
||||
|
||||
/datum/quirk/phobia
|
||||
name = "Phobia"
|
||||
desc = "You've had a traumatic past, that has scared you for life while dealing with your greatest fear."
|
||||
value = -2 // It can hardstun you. You can be a job that your phobia targets...
|
||||
gain_text = "<span class='danger'>You feel your fears manifest themselfs.</span>"
|
||||
lose_text = "<span class='notice'>You feel your fears fade away.</span>"
|
||||
medical_record_text = "Patient has an extreme or irrational fear of or aversion to something."
|
||||
var/datum/brain_trauma/mild/phobia/phobia
|
||||
|
||||
/datum/quirk/phobia/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
phobia = new
|
||||
H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY)
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
|
||||
var/list/filter_data //For handling persistent filters
|
||||
|
||||
var/rad_flags = NONE // Will move to flags_1 when i can be arsed to
|
||||
var/rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/atom/New(loc, ...)
|
||||
//atom creation method that preloads variables at creation
|
||||
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
|
||||
@@ -697,10 +700,9 @@ Proc for attack log creation, because really why not
|
||||
/atom/movable/proc/get_filter(name)
|
||||
if(filter_data && filter_data[name])
|
||||
return filters[filter_data.Find(name)]
|
||||
|
||||
|
||||
/atom/movable/proc/remove_filter(name)
|
||||
if(filter_data[name])
|
||||
filter_data -= name
|
||||
update_filters()
|
||||
return TRUE
|
||||
|
||||
@@ -406,6 +406,8 @@
|
||||
lying_prev = 0
|
||||
|
||||
/obj/machinery/jukebox/proc/dance_over()
|
||||
SSjukeboxes.removejukebox(SSjukeboxes.findjukeboxindex(src))
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
for(var/mob/living/L in rangers)
|
||||
if(!L || !L.client)
|
||||
continue
|
||||
@@ -420,8 +422,6 @@
|
||||
/obj/machinery/jukebox/process()
|
||||
if(active && world.time >= stop)
|
||||
active = FALSE
|
||||
SSjukeboxes.removejukebox(SSjukeboxes.findjukeboxindex(src))
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
dance_over()
|
||||
playsound(src,'sound/machines/terminal_off.ogg',50,1)
|
||||
update_icon()
|
||||
|
||||
@@ -95,6 +95,9 @@
|
||||
var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close
|
||||
var/prying_so_hard = FALSE
|
||||
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
var/static/list/airlock_overlays = list()
|
||||
|
||||
/obj/machinery/door/airlock/Initialize()
|
||||
@@ -152,7 +155,6 @@
|
||||
/obj/machinery/door/airlock/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/ntnet_interface)
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
|
||||
/obj/machinery/door/airlock/proc/update_other_id()
|
||||
for(var/obj/machinery/door/airlock/A in GLOB.airlocks)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
return 0
|
||||
|
||||
L.Knockdown(stunforce)
|
||||
L.adjustStaminaLoss(stunforce*0.1)//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.adjustStaminaLoss(stunforce*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.apply_effect(EFFECT_STUTTER, stunforce)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
if(user)
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
smooth = SMOOTH_TRUE
|
||||
can_be_unanchored = FALSE
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
var/mineral = /obj/item/stack/sheet/metal
|
||||
var/mineral_amount = 2
|
||||
var/walltype = /turf/closed/wall
|
||||
@@ -34,10 +36,6 @@
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/falsewall/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
|
||||
/obj/structure/falsewall/ratvar_act()
|
||||
new /obj/structure/falsewall/brass(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
|
||||
var/can_displace = TRUE //If the girder can be moved around by wrenching it
|
||||
max_integrity = 200
|
||||
|
||||
/obj/structure/girder/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/girder/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -16,10 +16,7 @@
|
||||
var/rods_broken = TRUE
|
||||
var/grille_type = null
|
||||
var/broken_type = /obj/structure/grille/broken
|
||||
|
||||
/obj/structure/grille/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
. = ..()
|
||||
|
||||
@@ -63,10 +63,8 @@
|
||||
|
||||
/obj/structure/holosign/barrier/engineering
|
||||
icon_state = "holosign_engi"
|
||||
|
||||
/obj/structure/holosign/barrier/engineering/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_LIGHT_INSULATION)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/holosign/barrier/atmos
|
||||
name = "holo firelock"
|
||||
@@ -168,4 +166,4 @@
|
||||
var/mob/living/M = AM
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = TRUE
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
|
||||
@@ -21,15 +21,14 @@
|
||||
var/openSound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/Initialize()
|
||||
. = ..()
|
||||
initial_state = icon_state
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/mineral_door/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
|
||||
/obj/structure/mineral_door/Move()
|
||||
var/turf/T = loc
|
||||
. = ..()
|
||||
@@ -150,17 +149,13 @@
|
||||
icon_state = "silver"
|
||||
sheetType = /obj/item/stack/sheet/mineral/silver
|
||||
max_integrity = 300
|
||||
|
||||
/obj/structure/mineral_door/silver/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/gold
|
||||
name = "gold door"
|
||||
icon_state = "gold"
|
||||
sheetType = /obj/item/stack/sheet/mineral/gold
|
||||
|
||||
/obj/structure/mineral_door/gold/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/uranium
|
||||
name = "uranium door"
|
||||
@@ -180,9 +175,7 @@
|
||||
|
||||
/obj/structure/mineral_door/transparent
|
||||
opacity = FALSE
|
||||
|
||||
/obj/structure/mineral_door/transparent/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/transparent/Close()
|
||||
..()
|
||||
@@ -218,9 +211,7 @@
|
||||
icon_state = "diamond"
|
||||
sheetType = /obj/item/stack/sheet/mineral/diamond
|
||||
max_integrity = 1000
|
||||
|
||||
/obj/structure/mineral_door/transparent/diamond/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION)
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/wood
|
||||
name = "wood door"
|
||||
@@ -230,9 +221,7 @@
|
||||
sheetType = /obj/item/stack/sheet/mineral/wood
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 200
|
||||
|
||||
/obj/structure/mineral_door/wood/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/paperframe
|
||||
name = "paper frame door"
|
||||
|
||||
@@ -7,10 +7,7 @@
|
||||
max_integrity = 100
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
var/buildable_sign = 1 //unwrenchable and modifiable
|
||||
|
||||
/obj/structure/sign/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) // Since this is on a wall if it becomes irradiated it will smuggle the radiation past the wall
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/structure/sign/basic
|
||||
name = "blank sign"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
var/real_explosion_block //ignore this, just use explosion_block
|
||||
var/breaksound = "shatter"
|
||||
var/hitsound = 'sound/effects/Glasshit.ogg'
|
||||
var/rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
rad_flags = RAD_PROTECT_CONTENTS
|
||||
|
||||
/obj/structure/window/examine(mob/user)
|
||||
..()
|
||||
@@ -63,7 +64,6 @@
|
||||
|
||||
/obj/structure/window/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, rad_insulation, TRUE, FALSE)
|
||||
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation))
|
||||
|
||||
/obj/structure/window/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
@@ -735,4 +735,4 @@
|
||||
update_icon()
|
||||
return
|
||||
..()
|
||||
update_icon()
|
||||
update_icon()
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
opacity = 1
|
||||
density = TRUE
|
||||
blocks_air = 1
|
||||
|
||||
/turf/closed/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
/turf/closed/AfterChange()
|
||||
. = ..()
|
||||
|
||||
@@ -12,10 +12,7 @@
|
||||
sheet_amount = 1
|
||||
girder_type = /obj/structure/girder/reinforced
|
||||
explosion_block = 2
|
||||
|
||||
/turf/closed/wall/r_wall/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
|
||||
switch(d_state)
|
||||
@@ -229,4 +226,4 @@
|
||||
|
||||
/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
if(the_rcd.canRturf)
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -126,10 +126,7 @@
|
||||
equip_delay_other = 60
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/head/radiation/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
|
||||
rad_flags = RAD_PROTECT_CONTENTS
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
name = "radiation suit"
|
||||
@@ -148,9 +145,4 @@
|
||||
equip_delay_other = 60
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/suit/radiation/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
|
||||
// Just don't want things to be irradiated inside this
|
||||
// Except things on the mob aren't even inside the suit so ehhhhhh
|
||||
rad_flags = RAD_PROTECT_CONTENTS
|
||||
|
||||
@@ -466,6 +466,7 @@
|
||||
item_color = "black_tango"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/under/stripeddress
|
||||
name = "striped dress"
|
||||
|
||||
@@ -93,6 +93,7 @@ Shaft Miner
|
||||
/obj/item/storage/bag/ore=1,\
|
||||
/obj/item/kitchen/knife/combat/survival=1,\
|
||||
/obj/item/mining_voucher=1,\
|
||||
/obj/item/suit_voucher=1,\
|
||||
/obj/item/stack/marker_beacon/ten=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/explorer
|
||||
|
||||
@@ -114,3 +114,63 @@
|
||||
var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', "hostile_env_glass")
|
||||
M.appearance_flags = RESET_COLOR
|
||||
. += M
|
||||
|
||||
|
||||
// CITADEL ADDITIONS BELOW
|
||||
|
||||
/****************SEVA Suit and Mask****************/
|
||||
|
||||
/obj/item/clothing/suit/hooded/seva
|
||||
name = "SEVA suit"
|
||||
desc = "A fire-proof suit for exploring hot environments."
|
||||
icon_state = "seva"
|
||||
item_state = "seva"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
hoodtype = /obj/item/clothing/head/hooded/seva
|
||||
armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
|
||||
resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
|
||||
|
||||
/obj/item/clothing/head/hooded/seva
|
||||
name = "SEVA hood"
|
||||
desc = "A fire-proof hood for exploring hot environments."
|
||||
icon_state = "seva"
|
||||
item_state = "seva"
|
||||
body_parts_covered = HEAD
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
|
||||
resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
|
||||
|
||||
/****************Exo-Suit and Mask****************/
|
||||
|
||||
/obj/item/clothing/suit/hooded/exo
|
||||
name = "Exo-suit"
|
||||
desc = "A robust suit for exploring dangerous environments."
|
||||
icon_state = "exo"
|
||||
item_state = "exo"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
cold_protection = CHEST|GROIN|LEGS|ARMS
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
hoodtype = /obj/item/clothing/head/hooded/exo
|
||||
armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
|
||||
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
|
||||
|
||||
/obj/item/clothing/head/hooded/exo
|
||||
name = "Exo-hood"
|
||||
desc = "A robust helmet for exploring dangerous environments."
|
||||
icon_state = "exo"
|
||||
item_state = "exo"
|
||||
body_parts_covered = HEAD
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
|
||||
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
|
||||
@@ -15,8 +15,8 @@
|
||||
force_wielded = 20
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
light_range = 5
|
||||
light_power = 1
|
||||
light_range = 7
|
||||
light_power = 2
|
||||
armour_penetration = 10
|
||||
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
@@ -117,7 +117,7 @@
|
||||
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
|
||||
|
||||
if(user && lavaland_equipment_pressure_check(get_turf(user))) //CIT CHANGE - makes sure below only happens in low pressure environments
|
||||
user.adjustStaminaLoss(-13)//CIT CHANGE - makes crushers heal stamina
|
||||
user.adjustStaminaLoss(-30)//CIT CHANGE - makes crushers heal stamina
|
||||
|
||||
/obj/item/twohanded/required/kinetic_crusher/proc/Recharge()
|
||||
if(!charged)
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
if(istype(I, /obj/item/mining_voucher))
|
||||
RedeemVoucher(I, user)
|
||||
return
|
||||
if(istype(I, /obj/item/suit_voucher))
|
||||
RedeemSVoucher(I, user)
|
||||
return
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/C = usr.get_active_held_item()
|
||||
if(istype(C) && !istype(inserted_id))
|
||||
@@ -231,6 +234,13 @@
|
||||
icon_state = "mining_voucher"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/suit_voucher
|
||||
name = "suit voucher"
|
||||
desc = "A token to redeem a new suit. Use it on a mining equipment vendor."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "mining_voucher"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/**********************Mining Point Card**********************/
|
||||
|
||||
/obj/item/card/mining_point_card
|
||||
@@ -284,3 +294,22 @@
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/card/mining_access_card(src)
|
||||
|
||||
|
||||
//CITADEL ADDITIONS BELOW
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
|
||||
var/items = list("Exo-suit", "SEVA suit")
|
||||
|
||||
var/selection = input(redeemer, "Pick your suit.", "Suit Voucher Redemption") as null|anything in items
|
||||
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
||||
return
|
||||
var/drop_location = drop_location()
|
||||
switch(selection)
|
||||
if("Exo-suit")
|
||||
new /obj/item/clothing/suit/hooded/exo(drop_location)
|
||||
if("SEVA suit")
|
||||
new /obj/item/clothing/suit/hooded/seva(drop_location)
|
||||
|
||||
SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection)
|
||||
qdel(voucher)
|
||||
@@ -20,7 +20,7 @@
|
||||
GLOB.carbon_list -= src
|
||||
|
||||
/mob/living/carbon/initialize_footstep()
|
||||
AddComponent(/datum/component/footstep, 1, 2)
|
||||
AddComponent(/datum/component/footstep, 0.6, 2)
|
||||
|
||||
/mob/living/carbon/relaymove(mob/user, direction)
|
||||
if(user in src.stomach_contents)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE)
|
||||
var/hit_percent = (100-blocked)/100
|
||||
if(!damage || hit_percent <= 0)
|
||||
if(hit_percent <= 0)
|
||||
return 0
|
||||
|
||||
var/obj/item/bodypart/BP = null
|
||||
@@ -18,13 +18,13 @@
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
if(BP)
|
||||
if(BP.receive_damage(damage * hit_percent, 0))
|
||||
if(damage > 0 ? BP.receive_damage(damage * hit_percent, 0) : BP.heal_damage(abs(damage * hit_percent), 0))
|
||||
update_damage_overlays()
|
||||
else //no bodypart, we deal damage with a more general method.
|
||||
adjustBruteLoss(damage * hit_percent)
|
||||
if(BURN)
|
||||
if(BP)
|
||||
if(BP.receive_damage(0, damage * hit_percent))
|
||||
if(damage > 0 ? BP.receive_damage(0, damage * hit_percent) : BP.heal_damage(0, abs(damage * hit_percent)))
|
||||
update_damage_overlays()
|
||||
else
|
||||
adjustFireLoss(damage * hit_percent)
|
||||
@@ -36,7 +36,7 @@
|
||||
adjustCloneLoss(damage * hit_percent)
|
||||
if(STAMINA)
|
||||
if(BP)
|
||||
if(BP.receive_damage(0, 0, damage * hit_percent))
|
||||
if(damage > 0 ? BP.receive_damage(0, 0, damage * hit_percent) : BP.heal_damage(0, 0, abs(damage * hit_percent)))
|
||||
update_damage_overlays()
|
||||
else
|
||||
adjustStaminaLoss(damage * hit_percent)
|
||||
|
||||
@@ -1600,7 +1600,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H)
|
||||
var/hit_percent = (100-(blocked+armor))/100
|
||||
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
|
||||
if(!damage || hit_percent <= 0)
|
||||
if(hit_percent <= 0)
|
||||
return 0
|
||||
|
||||
var/obj/item/bodypart/BP = null
|
||||
@@ -1617,14 +1617,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(BRUTE)
|
||||
H.damageoverlaytemp = 20
|
||||
if(BP)
|
||||
if(BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0))
|
||||
if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0))
|
||||
H.update_damage_overlays()
|
||||
else//no bodypart, we deal damage with a more general method.
|
||||
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
|
||||
if(BURN)
|
||||
H.damageoverlaytemp = 20
|
||||
if(BP)
|
||||
if(BP.receive_damage(0, damage * hit_percent * burnmod * H.physiology.burn_mod))
|
||||
if(damage > 0 ? BP.receive_damage(0, damage * hit_percent * burnmod * H.physiology.burn_mod) : BP.heal_damage(0, abs(damage * hit_percent * burnmod * H.physiology.burn_mod)))
|
||||
H.update_damage_overlays()
|
||||
else
|
||||
H.adjustFireLoss(damage * hit_percent * burnmod * H.physiology.burn_mod)
|
||||
@@ -1636,7 +1636,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.adjustCloneLoss(damage * hit_percent * H.physiology.clone_mod)
|
||||
if(STAMINA)
|
||||
if(BP)
|
||||
if(BP.receive_damage(0, 0, damage * hit_percent * H.physiology.stamina_mod))
|
||||
if(damage > 0 ? BP.receive_damage(0, 0, damage * hit_percent * H.physiology.stamina_mod) : BP.heal_damage(0, 0, abs(damage * hit_percent * H.physiology.stamina_mod)))
|
||||
H.update_stamina()
|
||||
else
|
||||
H.adjustStaminaLoss(damage * hit_percent * H.physiology.stamina_mod)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
weather_immunities = list("ash")
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
|
||||
mob_biotypes = list(MOB_ROBOTIC)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
|
||||
var/last_lawchange_announce = 0
|
||||
@@ -52,10 +53,6 @@
|
||||
diag_hud_set_status()
|
||||
diag_hud_set_health()
|
||||
|
||||
/mob/living/silicon/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, TRUE)
|
||||
|
||||
/mob/living/silicon/med_hud_set_health()
|
||||
return //we use a different hud
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ Difficulty: Medium
|
||||
movement_type = GROUND
|
||||
speak_emote = list("roars")
|
||||
speed = 1
|
||||
move_to_delay = 3
|
||||
move_to_delay = 2
|
||||
projectiletype = /obj/item/projectile/kinetic/miner
|
||||
projectilesound = 'sound/weapons/kenetic_accel.ogg'
|
||||
ranged = 1
|
||||
|
||||
@@ -41,6 +41,7 @@ Difficulty: Hard
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 10
|
||||
ranged_cooldown_time = 10
|
||||
ranged = 1
|
||||
pixel_x = -32
|
||||
del_on_death = 1
|
||||
@@ -62,7 +63,7 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/Life()
|
||||
..()
|
||||
move_to_delay = CLAMP(round((health/maxHealth) * 10), 5, 10)
|
||||
move_to_delay = CLAMP(round((health/maxHealth) * 10), 3, 10)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire()
|
||||
anger_modifier = CLAMP(((maxHealth - health)/50),0,20)
|
||||
@@ -235,4 +236,4 @@ Difficulty: Hard
|
||||
return 1
|
||||
return 0
|
||||
|
||||
#undef MEDAL_PREFIX
|
||||
#undef MEDAL_PREFIX
|
||||
|
||||
@@ -79,14 +79,14 @@ Difficulty: Very Hard
|
||||
INVOKE_ASYNC(src, .proc/spiral_shoot, pick(TRUE, FALSE))
|
||||
|
||||
else if(prob(20))
|
||||
ranged_cooldown = world.time + 30
|
||||
ranged_cooldown = world.time + 2
|
||||
random_shots()
|
||||
else
|
||||
if(prob(70))
|
||||
ranged_cooldown = world.time + 20
|
||||
ranged_cooldown = world.time + 10
|
||||
blast()
|
||||
else
|
||||
ranged_cooldown = world.time + 40
|
||||
ranged_cooldown = world.time + 20
|
||||
INVOKE_ASYNC(src, .proc/alternating_dir_shots)
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ Difficulty: Medium
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 10
|
||||
move_to_delay = 5
|
||||
ranged = 1
|
||||
pixel_x = -16
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
|
||||
|
||||
@@ -65,9 +65,9 @@ Difficulty: Hard
|
||||
|
||||
var/burst_range = 3 //range on burst aoe
|
||||
var/beam_range = 5 //range on cross blast beams
|
||||
var/chaser_speed = 3 //how fast chasers are currently
|
||||
var/chaser_cooldown = 101 //base cooldown/cooldown var between spawning chasers
|
||||
var/major_attack_cooldown = 60 //base cooldown for major attacks
|
||||
var/chaser_speed = 2 //how fast chasers are currently
|
||||
var/chaser_cooldown = 50 //base cooldown/cooldown var between spawning chasers
|
||||
var/major_attack_cooldown = 40 //base cooldown for major attacks
|
||||
var/arena_cooldown = 200 //base cooldown/cooldown var for creating an arena
|
||||
var/blinking = FALSE //if we're doing something that requires us to stand still and not attack
|
||||
var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to
|
||||
@@ -204,7 +204,7 @@ Difficulty: Hard
|
||||
return
|
||||
target_slowness += L.movement_delay()
|
||||
target_slowness = max(target_slowness, 1)
|
||||
chaser_speed = max(1, (3 - anger_modifier * 0.04) + ((target_slowness - 1) * 0.5))
|
||||
chaser_speed = max(1, (2 - anger_modifier * 0.04) + ((target_slowness - 1) * 0.5))
|
||||
|
||||
arena_trap(target)
|
||||
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75) //scale cooldown lower with high anger.
|
||||
|
||||
@@ -31,12 +31,13 @@ Difficulty: Medium
|
||||
armour_penetration = 50
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
speed = 2
|
||||
speed = 1
|
||||
move_to_delay = 2
|
||||
ranged = 1
|
||||
del_on_death = 1
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
ranged_cooldown_time = 20
|
||||
ranged_cooldown_time = 10
|
||||
var/size = 5
|
||||
var/charging = 0
|
||||
medal_type = BOSS_MEDAL_LEGION
|
||||
@@ -44,7 +45,7 @@ Difficulty: Medium
|
||||
pixel_y = -90
|
||||
pixel_x = -75
|
||||
loot = list(/obj/item/stack/sheet/bone = 3)
|
||||
vision_range = 13
|
||||
vision_range = 10
|
||||
wander = FALSE
|
||||
elimination = 1
|
||||
appearance_flags = 0
|
||||
@@ -87,6 +88,7 @@ Difficulty: Medium
|
||||
retreat_distance = 0
|
||||
minimum_distance = 0
|
||||
speed = 0
|
||||
move_to_delay = 1
|
||||
charging = 1
|
||||
addtimer(CALLBACK(src, .proc/reset_charge), 50)
|
||||
|
||||
@@ -94,7 +96,8 @@ Difficulty: Medium
|
||||
ranged = 1
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
speed = 2
|
||||
speed = 1
|
||||
move_to_delay = 2
|
||||
charging = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/death()
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
vision_range = 5
|
||||
aggro_vision_range = 18
|
||||
vision_range = 4
|
||||
aggro_vision_range = 15
|
||||
anchored = TRUE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
|
||||
|
||||
@@ -10,24 +10,23 @@
|
||||
icon_gib = "syndicate_gib"
|
||||
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
move_to_delay = 40
|
||||
move_to_delay = 10
|
||||
ranged = 1
|
||||
ranged_cooldown_time = 120
|
||||
ranged_cooldown_time = 60
|
||||
friendly = "wails at"
|
||||
speak_emote = list("bellows")
|
||||
vision_range = 4
|
||||
speed = 3
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
harm_intent_damage = 0
|
||||
obj_damage = 100
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
melee_damage_lower = 18
|
||||
melee_damage_upper = 18
|
||||
attacktext = "pulverizes"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
throw_message = "does nothing to the rocky hide of the"
|
||||
vision_range = 5
|
||||
aggro_vision_range = 9
|
||||
vision_range = 4
|
||||
aggro_vision_range = 7
|
||||
anchored = TRUE //Stays anchored until death as to be unpullable
|
||||
var/pre_attack = 0
|
||||
var/pre_attack_icon = "Goliath_preattack"
|
||||
@@ -67,7 +66,7 @@
|
||||
pre_attack = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
ranged_cooldown -= 10
|
||||
ranged_cooldown -= 5
|
||||
handle_preattack()
|
||||
. = ..()
|
||||
|
||||
@@ -111,6 +110,7 @@
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
speed = 4
|
||||
ranged_cooldown_time = 80
|
||||
pre_attack_icon = "Goliath_preattack"
|
||||
throw_message = "does nothing to the rocky hide of the"
|
||||
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days
|
||||
@@ -184,7 +184,14 @@
|
||||
if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
|
||||
continue
|
||||
visible_message("<span class='danger'>[src] grabs hold of [L]!</span>")
|
||||
L.Stun(100)
|
||||
var/mob/living/carbon/C = L
|
||||
var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
|
||||
if(S && S.resistance_flags & GOLIATH_RESISTANCE)
|
||||
L.Stun(75)
|
||||
else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
|
||||
L.Stun(125)
|
||||
else
|
||||
L.Stun(100)
|
||||
L.adjustBruteLoss(rand(10,15))
|
||||
latched = TRUE
|
||||
if(!latched)
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
move_to_delay = 14
|
||||
ranged = 1
|
||||
vision_range = 5
|
||||
aggro_vision_range = 9
|
||||
vision_range = 4
|
||||
aggro_vision_range = 7
|
||||
speed = 3
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
@@ -24,7 +24,7 @@
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
ranged_cooldown = 0
|
||||
ranged_cooldown_time = 20
|
||||
ranged_cooldown_time = 15
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
retreat_distance = 3
|
||||
@@ -131,6 +131,7 @@
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
speed = 2 //faster!
|
||||
move_to_delay = 10 //actually faster!
|
||||
crusher_drop_mod = 20
|
||||
dwarf_mob = TRUE
|
||||
|
||||
@@ -289,7 +290,7 @@
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
mask = /obj/item/clothing/mask/gas/explorer
|
||||
if(prob(20))
|
||||
suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/cloak/goliath = 2))
|
||||
suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 6, /obj/item/clothing/suit/hooded/cloak/goliath = 2, /obj/item/clothing/suit/hooded/exo = 6, /obj/item/clothing/suit/hooded/seva = 6))
|
||||
if(prob(30))
|
||||
r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ))
|
||||
if(prob(10))
|
||||
@@ -377,7 +378,3 @@
|
||||
id = /obj/item/card/id/knight //END OF CIT CHANGE
|
||||
id_job = "Knight"
|
||||
. = ..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,14 +26,11 @@
|
||||
|
||||
var/bitcoinproduction_drain = 0.15
|
||||
var/bitcoinmining = FALSE
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/machinery/power/rad_collector/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/power/rad_collector/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION, FALSE, FALSE)
|
||||
|
||||
/obj/machinery/power/rad_collector/Destroy()
|
||||
return ..()
|
||||
|
||||
@@ -234,4 +231,4 @@
|
||||
#undef RAD_COLLECTOR_COEFFICIENT
|
||||
#undef RAD_COLLECTOR_STORED_OUT
|
||||
#undef RAD_COLLECTOR_MINING_CONVERSION_RATE
|
||||
#undef RAD_COLLECTOR_OUTPUT
|
||||
#undef RAD_COLLECTOR_OUTPUT
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
|
||||
obj_flags = CAN_BE_HIT | USES_TGUI
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
var/datum/gas_mixture/air_contents // internal reservoir
|
||||
var/full_pressure = FALSE
|
||||
var/pressure_charging = TRUE
|
||||
@@ -42,10 +43,6 @@
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD //we need turfs to have air
|
||||
|
||||
/obj/machinery/disposal/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/machinery/disposal/proc/trunk_check()
|
||||
trunk = locate() in loc
|
||||
if(!trunk)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
dir = NONE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
var/datum/gas_mixture/gas // gas used to flush, will appear at exit point
|
||||
var/active = FALSE // true if the holder is moving, otherwise inactive
|
||||
var/count = 1000 // can travel 1000 steps before going inactive (in case of loops)
|
||||
@@ -14,10 +15,6 @@
|
||||
var/tomail = FALSE // contains wrapped package
|
||||
var/hasmob = FALSE // contains a mob
|
||||
|
||||
/obj/structure/disposalholder/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/structure/disposalholder/Destroy()
|
||||
QDEL_NULL(gas)
|
||||
active = FALSE
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_state = "outlet"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
var/active = FALSE
|
||||
var/turf/target // this will be where the output objects are 'thrown' to.
|
||||
var/obj/structure/disposalpipe/trunk/trunk // the attached pipe trunk
|
||||
@@ -28,10 +29,6 @@
|
||||
if(trunk)
|
||||
trunk.linked = src // link the pipe trunk to self
|
||||
|
||||
/obj/structure/disposaloutlet/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/structure/disposaloutlet/Destroy()
|
||||
if(trunk)
|
||||
trunk.linked = null
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
|
||||
layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
var/dpdir = NONE // bitmask of pipe directions
|
||||
var/initialize_dirs = NONE // bitflags of pipe directions added on init, see \code\_DEFINES\pipe_construction.dm
|
||||
var/flip_type // If set, the pipe is flippable and becomes this type when flipped
|
||||
@@ -42,10 +43,6 @@
|
||||
dpdir |= turn(dir, 180)
|
||||
update()
|
||||
|
||||
/obj/structure/disposalpipe/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
// pipe is deleted
|
||||
// ensure if holder is present, it is expelled
|
||||
/obj/structure/disposalpipe/Destroy()
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/stamina_dam = 0
|
||||
var/max_stamina_damage = 0
|
||||
var/max_damage = 0
|
||||
var/stam_heal_tick = 3 //per Life().
|
||||
var/stam_heal_tick = 0 //per Life(). Defaults to 0 due to citadel changes
|
||||
|
||||
var/brute_reduction = 0 //Subtracted to brute damage taken
|
||||
var/burn_reduction = 0 //Subtracted to burn damage taken
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
//Return TRUE to get whatever mob this is in to update health.
|
||||
/obj/item/bodypart/proc/on_life()
|
||||
if(stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
|
||||
if(stam_heal_tick && stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
|
||||
if(heal_damage(brute = 0, burn = 0, stamina = stam_heal_tick, only_robotic = FALSE, only_organic = FALSE, updating_health = FALSE))
|
||||
. |= BODYPART_LIFE_UPDATE_HEALTH
|
||||
|
||||
@@ -441,7 +441,7 @@
|
||||
px_x = 0
|
||||
px_y = 0
|
||||
stam_damage_coeff = 1
|
||||
max_stamina_damage = 100
|
||||
max_stamina_damage = 200
|
||||
var/obj/item/cavity_item
|
||||
|
||||
/obj/item/bodypart/chest/Destroy()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
px_x = 0
|
||||
px_y = -8
|
||||
stam_damage_coeff = 1
|
||||
max_stamina_damage = 100
|
||||
max_stamina_damage = 0 //Setting this to 0 since this has the same exact effects as the chest when disabled
|
||||
|
||||
var/mob/living/brain/brainmob = null //The current occupant.
|
||||
var/obj/item/organ/brain/brain = null //The brain organ
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
The enclosed images folder holds the image files used as the title screen for the game. All common formats such as PNG, JPG, and GIF are supported.
|
||||
Byond's DMI format is also supported, but if you use a DMI only include one image per file and do not give it an icon_state (the text label below the image).
|
||||
|
||||
Keep in mind that the area a title screen fills is a 480px square so you should scale/crop source images to these dimensions first.
|
||||
Keep in mind that the area a title screen fills is a 672x480px rectangle, so you should scale/crop source images to these dimensions first.
|
||||
The game won't scale these images for you, so smaller images will not fill the screen and larger ones will be cut off.
|
||||
|
||||
Using unnecessarily huge images can cause client side lag and should be avoided. Extremely large GIFs should preferentially be converted to DMIs.
|
||||
@@ -47,4 +47,4 @@ Rare Titles:
|
||||
Rare titles are a just for fun feature where they will only have a 1% chance of appear in in the title screen pool of a given round.
|
||||
Add the phrase "rare+" to the beginning of the name. Again note there are no spaces. A title cannot be rare title and a map title at the same time.
|
||||
|
||||
An example of a rare title name is "rare+explosion"
|
||||
An example of a rare title name is "rare+explosion"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
author: "deathride58"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Most of Lavaland's mobs are now on crack."
|
||||
- balance: "Blood drunk miners now move once every two ticks, rather than once every three ticks."
|
||||
- balance: "Bubblegum now has a maximum movement speed of once every three ticks. Buffed from the original value of once per 5 ticks."
|
||||
- balance: "The minimum time for the Colossus to attack again after firing a random shot is two deciseconds, Sped up from the original value of three seconds. The minimum time for the Colossus to attack again after performing a blast is now one second, with the original value being two seconds. The minimum time for it to attack again after performing its alternating shot pattern is now two seconds, original value being four seconds."
|
||||
- balance: "Ashdrakes now move once every five ticks, rather than once every ten ticks."
|
||||
- balance: "Heirophant chasers now move once every two ticks rather than three ticks by default, and the chaser cooldown has been reduced from 10 seconds to 5 seconds. The cooldown for the Heirophant's major attacks has also been sped up to 4 seconds from the original value of 6 seconds."
|
||||
- balance: "The Legion (megafauna) now moves at two ticks per second rather than three ticks. It additionally now actually moves faster while charging. The cooldown timer for it's special attacks has been reduced from 2 seconds to 1 second. Additionally, The Legion's view range has been decreased from 13 tiles to 10 tiles."
|
||||
- balance: "All megafauna now have a default view range of 4 tiles, decreased from the original of 5 tiles, and an aggro'd view range of 15 tiles, decreased from the original of 18"
|
||||
- balance: "Goliaths now move once every ten ticks, sped up from the original value of 40(!!!) ticks. Additionally, their cooldown for their tentacles has been reduced from 12 seconds to 6 seconds. To compensate, their cooldown now only decreases by 5 deciseconds every time they're attacked, rather than 10 deciseconds, their melee damage has been reduced to 18 per hit from 25 per hit, and their vision range has been decreased from 5 tiles unaggroed, 9 tiles when aggroed, to 4 tiles and 7 tiles respectively. Ancient goliaths have a default attack cooldown of 8 seconds, sped up from the original value of 12 seconds."
|
||||
- balance: "Legion (the common mob) now has a cooldown of 1.5 seconds on their skull attack, sped up from the original value of 2 seconds. Additionally, their view range has been decreased from 5 tiles, 9 tiles when aggroed, to 4 tiles, 7 tiles when aggroed."
|
||||
@@ -0,0 +1,9 @@
|
||||
author: "deathride58"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Stamina no longer regenerates at hyper speeds."
|
||||
- tweak: "To accommodate for upstream's stamina changes, knockdown() now applies staminaloss only to the chest."
|
||||
- tweak: "adjuststaminaloss() now has a new argument that allows you to specify a zone to apply staminaloss to. This defaults to the chest"
|
||||
- tweak: "apply_damage() is now capable of healing carbon mobs and human mobs."
|
||||
- tweak: "Since the head has the same exact effects as the chest when disabled, and doesn't really make much sense to be affected by stamina, the head no longer has stamina."
|
||||
- tweak: "The chest now has a stamina cap of 200 stamina due to the above."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "deathride58"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Footsteps now sound mostly the same as they did before the hard sync"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "deathride58"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Jukeboxes now properly remove themselves from the active jukebox list when destroyed"
|
||||
@@ -0,0 +1,8 @@
|
||||
author: "nicc"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Exo-suit"
|
||||
- rscadd: "SEVA suit"
|
||||
- rscadd: "Flags for Goliath resistance and weakness"
|
||||
- rscadd: "suit voucher"
|
||||
- rscadd: "temp suit sprites"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Naksu"
|
||||
delete-after: True
|
||||
changes:
|
||||
- code_imp: "default radiation insulation is now handled by atom vars rather than a component, components can still be used."
|
||||
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 330 KiB After Width: | Height: | Size: 332 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 115 KiB |
@@ -9,12 +9,8 @@
|
||||
if(updating_stamina)
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/carbon/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/carbon/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE, affected_zone = BODY_ZONE_CHEST)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
if(amount > 0)
|
||||
amount = CLAMP(amount, 0, 200 - getStaminaLoss())
|
||||
take_overall_damage(0, 0, amount, updating_health)
|
||||
else
|
||||
heal_overall_damage(0, 0, abs(amount), FALSE, FALSE, updating_health)
|
||||
apply_damage(amount, STAMINA, affected_zone)
|
||||
return amount
|
||||
|
||||
|
Before Width: | Height: | Size: 258 KiB After Width: | Height: | Size: 258 KiB |
@@ -71,6 +71,17 @@
|
||||
"slipping"
|
||||
],
|
||||
|
||||
"mimes": [
|
||||
"mime",
|
||||
"silence",
|
||||
"mimic",
|
||||
"invisible",
|
||||
"french",
|
||||
"oui",
|
||||
"pretending",
|
||||
"nothing"
|
||||
],
|
||||
|
||||
"greytide": [
|
||||
"assistant",
|
||||
"grey",
|
||||
|
||||