diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index c630fd0b2f..3338fc1cda 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -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 \ No newline at end of file +#define CALTROP_IGNORE_WALKERS 2 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index edd77ecf6b..1b64ce7e6c 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -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) diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm index a570ab43ba..e082be7d1f 100644 --- a/code/__HELPERS/radiation.dm +++ b/code/__HELPERS/radiation.dm @@ -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 \ No newline at end of file + return TRUE diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 0760b81927..835a733752 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -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, + ), )) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 39f2eaf08b..a1fd15b806 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -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)), diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm index ccd3d30463..c93be4dae3 100644 --- a/code/datums/components/footstep.dm +++ b/code/datums/components/footstep.dm @@ -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, diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm index f435a21f49..2e6f8f79f6 100644 --- a/code/datums/components/mirage_border.dm +++ b/code/datums/components/mirage_border.dm @@ -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]\]") diff --git a/code/datums/components/rad_insulation.dm b/code/datums/components/rad_insulation.dm index 1ffc141a60..73d8c29440 100644 --- a/code/datums/components/rad_insulation.dm +++ b/code/datums/components/rad_insulation.dm @@ -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) \ No newline at end of file + 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 diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 6fa1e2a476..5fb777f9c5 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -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) \ No newline at end of file + thing.AddComponent(/datum/component/radioactive, rad_strength, source) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index b05e00d35c..8e067fc47e 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -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 = "You feel your fears manifest themselfs." + lose_text = "You feel your fears fade away." + 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) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 2af31607ea..48596a0b6d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -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 - \ No newline at end of file diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index cc50492818..3a6cf2b922 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -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() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 948a62de61..7188fbc50e 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -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) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 1d77dfcf8b..c0e81a7949 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -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) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 5878b569c3..d52ec81a05 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -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) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index b319aab537..cd87075258 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -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) . = ..() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 93ce26e0ae..6fac5da2a5 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -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) . = ..() diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index c5c8dd3c68..609384cdda 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -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) \ No newline at end of file + addtimer(CALLBACK(src, .proc/cooldown), 5) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index c3316f2568..3c9b70e967 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -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" diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 56b43a289b..84add2f65f 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -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" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 3dcf91ae8f..a26d57e3e1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -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() \ No newline at end of file + update_icon() diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 578232fba0..2165dbd8db 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -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() . = ..() diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index c667714273..d52a3bcc23 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -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 ..() \ No newline at end of file + return ..() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index c233ce414d..1748813f56 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -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 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c3e0cf2b85..bcd9642662 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -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" diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index aae4324e65..053373c05a 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -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 diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index a905a3baa9..2c7eaf09ba 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -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 \ No newline at end of file diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index fb6e9eb6fe..69b1bcaab4 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -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) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 209a8118fc..63f7a7e414 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -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) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 84b949014c..7bc0e281c5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -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) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 124fd622d7..b22498670a 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1f68431771..79ea11682d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -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) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 0e69db8f51..d0e3fc8b1c 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 97dede3d2f..899e901827 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 1784405f30..c60dae6a35 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -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 \ No newline at end of file +#undef MEDAL_PREFIX diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 2c5d004054..c491b3e78d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -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) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index fac14eeb0e..b1694a6172 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -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) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 99d13cab24..293e3e21fd 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -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. diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 2710d58a67..5bfabe376e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -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() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 6af5174ec5..43bc2c26f8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index f74f9a436c..23f08ab234 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -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("[src] grabs hold of [L]!") - 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) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 73356658a3..cf4401c68a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -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" . = ..() - - - - diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 4fe77def51..3b9c3a549b 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -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 \ No newline at end of file +#undef RAD_COLLECTOR_OUTPUT diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index fd98c54b81..871fd32b16 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -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) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index 2c0a6aa646..726149ce24 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -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 diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index d7a2d5f820..7655988c8f 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -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 diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index bc073d5e32..6c269e44be 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -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() diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index d8918b609f..1841ac52b5 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -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() diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index c08e6e5673..1f0fa00632 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -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 diff --git a/config/title_screens/README.txt b/config/title_screens/README.txt index 6e7bf166f8..759a8aa61b 100644 --- a/config/title_screens/README.txt +++ b/config/title_screens/README.txt @@ -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" \ No newline at end of file +An example of a rare title name is "rare+explosion" diff --git a/html/changelogs/AutoChangeLog-pr-7550.yml b/html/changelogs/AutoChangeLog-pr-7550.yml new file mode 100644 index 0000000000..2bef8d3854 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7550.yml @@ -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." diff --git a/html/changelogs/AutoChangeLog-pr-7596.yml b/html/changelogs/AutoChangeLog-pr-7596.yml new file mode 100644 index 0000000000..a0dfbfe151 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7596.yml @@ -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." diff --git a/html/changelogs/AutoChangeLog-pr-7598.yml b/html/changelogs/AutoChangeLog-pr-7598.yml new file mode 100644 index 0000000000..5c15f79f98 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7598.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - tweak: "Footsteps now sound mostly the same as they did before the hard sync" diff --git a/html/changelogs/AutoChangeLog-pr-7604.yml b/html/changelogs/AutoChangeLog-pr-7604.yml new file mode 100644 index 0000000000..3dcc7c542c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7604.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Jukeboxes now properly remove themselves from the active jukebox list when destroyed" diff --git a/html/changelogs/AutoChangeLog-pr-7611.yml b/html/changelogs/AutoChangeLog-pr-7611.yml new file mode 100644 index 0000000000..a76e79cf39 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7611.yml @@ -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" diff --git a/html/changelogs/AutoChangeLog-pr-7612.yml b/html/changelogs/AutoChangeLog-pr-7612.yml new file mode 100644 index 0000000000..2e429013ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7612.yml @@ -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." diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 5f01bb5749..39726a6ece 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index fa10f9538a..4bc07f86f5 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 10e45387e5..a9d1398c20 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index f01f7cac77..3737ee694e 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index 217eb9d749..9921e4ed47 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -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 diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi index 1a95d6a3bd..5d9f0ad235 100644 Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ diff --git a/strings/phobia.json b/strings/phobia.json index 379dd1829a..3be9794bf9 100644 --- a/strings/phobia.json +++ b/strings/phobia.json @@ -71,6 +71,17 @@ "slipping" ], + "mimes": [ + "mime", + "silence", + "mimic", + "invisible", + "french", + "oui", + "pretending", + "nothing" + ], + "greytide": [ "assistant", "grey",