From e46675991372e17f180e202befb987abaab1c20e Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:38:44 +0300 Subject: [PATCH 01/10] Reorgs `xeno_structures.dm`, tunnels now use minimap to choose exit. (#35) * tunnel * reorg * Update tunnel.dm --- code/__HELPERS/ai.dm | 19 + code/modules/xenomorph/_xeno_structure.dm | 59 + code/modules/xenomorph/acidwell.dm | 192 +++ code/modules/xenomorph/jellypod.dm | 67 + code/modules/xenomorph/nest.dm | 63 + code/modules/xenomorph/plant.dm | 255 +++ code/modules/xenomorph/silo.dm | 159 ++ code/modules/xenomorph/spawner.dm | 112 ++ code/modules/xenomorph/trap.dm | 211 +++ code/modules/xenomorph/tunnel.dm | 181 +++ code/modules/xenomorph/turret.dm | 272 ++++ code/modules/xenomorph/xeno_structures.dm | 1731 --------------------- code/modules/xenomorph/xeno_towers.dm | 117 ++ tgmc.dme | 11 +- 14 files changed, 1717 insertions(+), 1732 deletions(-) create mode 100644 code/modules/xenomorph/_xeno_structure.dm create mode 100644 code/modules/xenomorph/acidwell.dm create mode 100644 code/modules/xenomorph/jellypod.dm create mode 100644 code/modules/xenomorph/nest.dm create mode 100644 code/modules/xenomorph/plant.dm create mode 100644 code/modules/xenomorph/silo.dm create mode 100644 code/modules/xenomorph/spawner.dm create mode 100644 code/modules/xenomorph/trap.dm create mode 100644 code/modules/xenomorph/tunnel.dm create mode 100644 code/modules/xenomorph/turret.dm delete mode 100644 code/modules/xenomorph/xeno_structures.dm create mode 100644 code/modules/xenomorph/xeno_towers.dm diff --git a/code/__HELPERS/ai.dm b/code/__HELPERS/ai.dm index 3b371ce8a67..f7357fe9c9a 100644 --- a/code/__HELPERS/ai.dm +++ b/code/__HELPERS/ai.dm @@ -103,3 +103,22 @@ continue nearest_target = nearby_vehicle return nearest_target + +/** + * This proc attempts to get an instance of an atom type within distance, with center as the center. + * Arguments + * * center - The center of the search + * * type - The type of atom we're looking for + * * distance - The distance we should search + * * list_to_search - The list to look through for the type + */ +/proc/cheap_get_atom(atom/center, type, distance, list/list_to_search) + var/turf/turf_center = get_turf(center) + if(!turf_center) + return + for(var/atom/near AS in list_to_search) + if(!istype(near, type)) + continue + if(get_dist(turf_center, near) > distance) + continue + return near diff --git a/code/modules/xenomorph/_xeno_structure.dm b/code/modules/xenomorph/_xeno_structure.dm new file mode 100644 index 00000000000..cddad162cd9 --- /dev/null +++ b/code/modules/xenomorph/_xeno_structure.dm @@ -0,0 +1,59 @@ +/obj/structure/xeno + hit_sound = "alien_resin_break" + layer = RESIN_STRUCTURE_LAYER + resistance_flags = UNACIDABLE + ///Bitflags specific to xeno structures + var/xeno_structure_flags + ///Which hive(number) do we belong to? + var/hivenumber = XENO_HIVE_NORMAL + +/obj/structure/xeno/Initialize(mapload, _hivenumber) + . = ..() + if(!(xeno_structure_flags & IGNORE_WEED_REMOVAL)) + RegisterSignal(loc, COMSIG_TURF_WEED_REMOVED, PROC_REF(weed_removed)) + if(_hivenumber) ///because admins can spawn them + hivenumber = _hivenumber + LAZYADDASSOC(GLOB.xeno_structures_by_hive, hivenumber, src) + if(xeno_structure_flags & CRITICAL_STRUCTURE) + LAZYADDASSOC(GLOB.xeno_critical_structures_by_hive, hivenumber, src) + +/obj/structure/xeno/Destroy() + if(!locate(src) in GLOB.xeno_structures_by_hive[hivenumber]+GLOB.xeno_critical_structures_by_hive[hivenumber]) //The rest of the proc is pointless to look through if its not in the lists + stack_trace("[src] not found in the list of (potentially critical) xeno structures!") //We dont want to CRASH because that'd block deletion completely. Just trace it and continue. + return ..() + GLOB.xeno_structures_by_hive[hivenumber] -= src + if(xeno_structure_flags & CRITICAL_STRUCTURE) + GLOB.xeno_critical_structures_by_hive[hivenumber] -= src + return ..() + +/obj/structure/xeno/ex_act(severity) + take_damage(severity * 0.8, BRUTE, BOMB) + +/obj/structure/xeno/attack_hand(mob/living/user) + balloon_alert(user, "You only scrape at it") + return TRUE + +/obj/structure/xeno/flamer_fire_act(burnlevel) + take_damage(burnlevel / 3, BURN, FIRE) + +/obj/structure/xeno/fire_act() + take_damage(10, BURN, FIRE) + +/// Destroy the xeno structure when the weed it was on is destroyed +/obj/structure/xeno/proc/weed_removed() + SIGNAL_HANDLER + var/obj/alien/weeds/found_weed = locate(/obj/alien/weeds) in loc + if(found_weed.obj_integrity <= 0) + obj_destruction(damage_flag = MELEE) + else + obj_destruction() + +/obj/structure/xeno/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) + if(!(HAS_TRAIT(xeno_attacker, TRAIT_VALHALLA_XENO) && xeno_attacker.a_intent == INTENT_HARM && (tgui_alert(xeno_attacker, "Are you sure you want to tear down [src]?", "Tear down [src]?", list("Yes","No"))) == "Yes")) + return ..() + if(!do_after(xeno_attacker, 3 SECONDS, NONE, src)) + return + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + balloon_alert_to_viewers("\The [xeno_attacker] tears down \the [src]!", "We tear down \the [src].") + playsound(src, "alien_resin_break", 25) + take_damage(max_integrity) // Ensure its destroyed diff --git a/code/modules/xenomorph/acidwell.dm b/code/modules/xenomorph/acidwell.dm new file mode 100644 index 00000000000..3461ab16f41 --- /dev/null +++ b/code/modules/xenomorph/acidwell.dm @@ -0,0 +1,192 @@ +/obj/structure/xeno/acidwell + name = "acid well" + desc = "An acid well. It stores acid to put out fires." + icon = 'icons/Xeno/acid_pool.dmi' + plane = FLOOR_PLANE + icon_state = "well" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 5 + + hit_sound = "alien_resin_move" + destroy_sound = "alien_resin_move" + ///How many charges of acid this well contains + var/charges = 1 + ///If a xeno is charging this well + var/charging = FALSE + ///What xeno created this well + var/mob/living/carbon/xenomorph/creator = null + +/obj/structure/xeno/acidwell/Initialize(mapload, _creator) + . = ..() + creator = _creator + RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(clear_creator)) + update_icon() + var/static/list/connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_cross), + ) + AddElement(/datum/element/connect_loc, connections) + +/obj/structure/xeno/acidwell/Destroy() + creator = null + return ..() + +///Signal handler for creator destruction to clear reference +/obj/structure/xeno/acidwell/proc/clear_creator() + SIGNAL_HANDLER + creator = null + +/obj/structure/xeno/acidwell/obj_destruction(damage_amount, damage_type, damage_flag) + if(!QDELETED(creator) && creator.stat == CONSCIOUS && creator.z == z) + var/area/A = get_area(src) + if(A) + to_chat(creator, span_xenoannounce("You sense your acid well at [A.name] has been destroyed!") ) + + if(damage_amount || damage_flag) //Spawn the gas only if we actually get destroyed by damage + var/datum/effect_system/smoke_spread/xeno/acid/A = new(get_turf(src)) + A.set_up(clamp(CEILING(charges*0.5, 1),0,3),src) //smoke scales with charges + A.start() + return ..() + +/obj/structure/xeno/acidwell/examine(mob/user) + . = ..() + if(!isxeno(user) && !isobserver(user)) + return + . += span_xenonotice("An acid well made by [creator]. It currently has [charges]/[XENO_ACID_WELL_MAX_CHARGES] charges.") + +/obj/structure/xeno/acidwell/deconstruct(disassembled = TRUE) + visible_message(span_danger("[src] suddenly collapses!") ) + return ..() + +/obj/structure/xeno/acidwell/update_icon() + . = ..() + set_light(charges , charges / 2, LIGHT_COLOR_GREEN) + +/obj/structure/xeno/acidwell/update_overlays() + . = ..() + if(!charges) + return + . += mutable_appearance(icon, "[charges]", alpha = src.alpha) + . += emissive_appearance(icon, "[charges]", alpha = src.alpha) + +/obj/structure/xeno/acidwell/flamer_fire_act(burnlevel) //Removes a charge of acid, but fire is extinguished + acid_well_fire_interaction() + +/obj/structure/xeno/acidwell/fire_act() //Removes a charge of acid, but fire is extinguished + acid_well_fire_interaction() + +///Handles fire based interactions with the acid well. Depletes 1 charge if there are any to extinguish all fires in the turf while producing acid smoke. +/obj/structure/xeno/acidwell/proc/acid_well_fire_interaction() + if(!charges) + take_damage(50, BURN, FIRE) + return + + charges-- + update_icon() + var/turf/T = get_turf(src) + var/datum/effect_system/smoke_spread/xeno/acid/extuingishing/acid_smoke = new(T) //spawn acid smoke when charges are actually used + acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity + acid_smoke.start() + + for(var/obj/flamer_fire/F in T) //Extinguish all flames in turf + qdel(F) + +/obj/structure/xeno/acidwell/attackby(obj/item/I, mob/user, params) + if(!isxeno(user)) + return ..() + attack_alien(user) + +/obj/structure/xeno/acidwell/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if(xeno_attacker.a_intent == INTENT_HARM && (CHECK_BITFIELD(xeno_attacker.xeno_caste.caste_flags, CASTE_IS_BUILDER) || xeno_attacker == creator) ) //If we're a builder caste or the creator and we're on harm intent, deconstruct it. + balloon_alert(xeno_attacker, "Removing...") + if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) + balloon_alert(xeno_attacker, "Stopped removing") + return + playsound(src, "alien_resin_break", 25) + deconstruct(TRUE, xeno_attacker) + return + + if(charges >= 5) + balloon_alert(xeno_attacker, "Already full") + return + if(charging) + balloon_alert(xeno_attacker, "Already being filled") + return + + if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) //You need to have enough plasma to attempt to fill the well + balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") + return + + charging = TRUE + + balloon_alert(xeno_attacker, "Refilling...") + if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + charging = FALSE + balloon_alert(xeno_attacker, "Aborted refilling") + return + + if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) + charging = FALSE + balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") + return + + xeno_attacker.plasma_stored -= XENO_ACID_WELL_FILL_COST + charges++ + charging = FALSE + update_icon() + balloon_alert(xeno_attacker, "Now has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges") + to_chat(xeno_attacker,span_xenonotice("We add acid to [src]. It is currently has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges.") ) + +/obj/structure/xeno/acidwell/proc/on_cross(datum/source, atom/movable/A, oldloc, oldlocs) + SIGNAL_HANDLER + if(CHECK_MULTIPLE_BITFIELDS(A.allow_pass_flags, HOVERING)) + return + if(iscarbon(A)) + HasProximity(A) + +/obj/structure/xeno/acidwell/HasProximity(atom/movable/AM) + if(!charges) + return + if(!isliving(AM)) + return + var/mob/living/stepper = AM + if(stepper.stat == DEAD) + return + + var/charges_used = 0 + + for(var/obj/item/explosive/grenade/sticky/sticky_bomb in stepper.contents) + if(charges_used >= charges) + break + if(sticky_bomb.stuck_to == stepper) + sticky_bomb.clean_refs() + sticky_bomb.forceMove(loc) // i'm not sure if this is even needed, but just to prevent possible bugs + visible_message(span_danger("[src] sizzles as [sticky_bomb] melts down in the acid.")) + qdel(sticky_bomb) + charges_used ++ + + if(stepper.on_fire && (charges_used < charges)) + stepper.ExtinguishMob() + charges_used ++ + + if(!isxeno(stepper)) + stepper.next_move_slowdown += charges * 2 //Acid spray has slow down so this should too; scales with charges, Min 2 slowdown, Max 10 + stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_L_FOOT, ACID, penetration = 33) + stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_R_FOOT, ACID, penetration = 33) + stepper.visible_message(span_danger("[stepper] is immersed in [src]'s acid!") , \ + span_danger("We are immersed in [src]'s acid!") , null, 5) + playsound(stepper, "sound/bullets/acid_impact1.ogg", 10 * charges) + new /obj/effect/temp_visual/acid_bath(get_turf(stepper)) + charges_used = charges //humans stepping on it empties it out + + if(!charges_used) + return + + var/datum/effect_system/smoke_spread/xeno/acid/extuingishing/acid_smoke + acid_smoke = new(get_turf(stepper)) //spawn acid smoke when charges are actually used + acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity + acid_smoke.start() + + charges -= charges_used + update_icon() diff --git a/code/modules/xenomorph/jellypod.dm b/code/modules/xenomorph/jellypod.dm new file mode 100644 index 00000000000..96c34be0088 --- /dev/null +++ b/code/modules/xenomorph/jellypod.dm @@ -0,0 +1,67 @@ +/obj/structure/xeno/resin_jelly_pod + name = "Resin jelly pod" + desc = "A large resin pod. Inside is a thick, viscous fluid that looks like it doesnt burn easily." + icon = 'icons/Xeno/resinpod.dmi' + icon_state = "resinpod" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 250 + layer = RESIN_STRUCTURE_LAYER + pixel_x = -16 + pixel_y = -16 + xeno_structure_flags = IGNORE_WEED_REMOVAL + + hit_sound = "alien_resin_move" + destroy_sound = "alien_resin_move" + ///How many actual jellies the pod has stored + var/chargesleft = 0 + ///Max amount of jellies the pod can hold + var/maxcharges = 10 + ///Every 5 times this number seconds we will create a jelly + var/recharge_rate = 10 + ///Countdown to the next time we generate a jelly + var/nextjelly = 0 + +/obj/structure/xeno/resin_jelly_pod/Initialize(mapload, _hivenumber) + . = ..() + add_overlay(image(icon, "resinpod_inside", layer + 0.01, dir)) + START_PROCESSING(SSslowprocess, src) + +/obj/structure/xeno/resin_jelly_pod/Destroy() + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/resin_jelly_pod/examine(mob/user, distance, infix, suffix) + . = ..() + if(isxeno(user)) + . += "It has [chargesleft] jelly globules remaining[datum_flags & DF_ISPROCESSING ? ", and will create a new jelly in [(recharge_rate-nextjelly)*5] seconds": " and seems latent"]." + +/obj/structure/xeno/resin_jelly_pod/process() + if(nextjelly <= recharge_rate) + nextjelly++ + return + nextjelly = 0 + chargesleft++ + if(chargesleft >= maxcharges) + return PROCESS_KILL + +/obj/structure/xeno/resin_jelly_pod/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) + return FALSE + + if((xeno_attacker.a_intent == INTENT_HARM && isxenohivelord(xeno_attacker)) || xeno_attacker.hivenumber != hivenumber) + balloon_alert(xeno_attacker, "Destroying...") + if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + deconstruct(FALSE) + return + + if(!chargesleft) + balloon_alert(xeno_attacker, "No jelly remaining") + to_chat(xeno_attacker, span_xenonotice("We reach into \the [src], but only find dregs of resin. We should wait some more.") ) + return + balloon_alert(xeno_attacker, "Retrieved jelly") + new /obj/item/resin_jelly(loc) + chargesleft-- + if(!(datum_flags & DF_ISPROCESSING) && (chargesleft < maxcharges)) + START_PROCESSING(SSslowprocess, src) diff --git a/code/modules/xenomorph/nest.dm b/code/modules/xenomorph/nest.dm new file mode 100644 index 00000000000..52b388d1b02 --- /dev/null +++ b/code/modules/xenomorph/nest.dm @@ -0,0 +1,63 @@ +/obj/structure/bed/nest + var/force_nest = FALSE + +/obj/structure/bed/nest/structure + name = "thick alien nest" + desc = "A very thick nest, oozing with a thick sticky substance." + force_nest = TRUE + var/obj/structure/xeno/thick_nest/linked_structure + +/obj/structure/bed/nest/structure/Initialize(mapload, hive, obj/structure/xeno/thick_nest/to_link) + . = ..() + if(to_link) + linked_structure = to_link + max_integrity = linked_structure.max_integrity + +/obj/structure/bed/nest/structure/Destroy() + . = ..() + if(linked_structure) + linked_structure.pred_nest = null + QDEL_NULL(linked_structure) + +/obj/structure/bed/nest/structure/attack_hand(mob/user) + if(!isxeno(user)) + to_chat(user, span_notice("The sticky resin is too strong for you to do anything to this nest")) + return FALSE + . = ..() + +/obj/structure/xeno/thick_nest + name = "thick resin nest" + desc = "A very thick nest, oozing with a thick sticky substance." + pixel_x = -8 + pixel_y = -8 + max_integrity = 400 + mouse_opacity = MOUSE_OPACITY_ICON + icon = 'icons/Xeno/nest.dmi' + icon_state = "reinforced_nest" + layer = 2.5 + var/obj/structure/bed/nest/structure/pred_nest + +/obj/structure/xeno/thick_nest/examine(mob/user) + . = ..() + if((isxeno(user) || isobserver(user)) && hivenumber) + . += "Used to secure formidable hosts." + +/obj/structure/xeno/thick_nest/Initialize(mapload, new_hivenumber) + . = ..() + if(new_hivenumber) + hivenumber = new_hivenumber + + var/datum/hive_status/hive_ref = GLOB.hive_datums[hivenumber] + if(hive_ref) + hive_ref.thick_nests += src + + pred_nest = new /obj/structure/bed/nest/structure(loc, hive_ref, src) // Nest cannot be destroyed unless the structure itself is destroyed + +/obj/structure/xeno/thick_nest/Destroy() + . = ..() + + if(hivenumber) + GLOB.hive_datums[hivenumber].thick_nests -= src + + pred_nest?.linked_structure = null + QDEL_NULL(pred_nest) diff --git a/code/modules/xenomorph/plant.dm b/code/modules/xenomorph/plant.dm new file mode 100644 index 00000000000..48e4da15369 --- /dev/null +++ b/code/modules/xenomorph/plant.dm @@ -0,0 +1,255 @@ +/obj/structure/xeno/plant + name = "Xeno Plant" + max_integrity = 5 + icon = 'icons/Xeno/plants.dmi' + interaction_flags = INTERACT_CHECK_INCAPACITATED + ///The plant's icon once it's fully grown + var/mature_icon_state + ///Is the plant ready to be used ? + var/mature = FALSE + ///How long does it take for the plant to be useable + var/maturation_time = 2 MINUTES + +/obj/structure/xeno/plant/Initialize(mapload, _hivenumber) + . = ..() + addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "[mature_icon_state]")) + +/obj/structure/xeno/plant/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(!mature && isxeno(user)) + balloon_alert(user, "Not fully grown") + return FALSE + +/obj/structure/xeno/plant/update_icon_state() + . = ..() + icon_state = (mature) ? mature_icon_state : initial(icon_state) + +///Called whenever someone uses the plant, xeno or marine +/obj/structure/xeno/plant/proc/on_use(mob/user) + mature = FALSE + update_icon() + addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) + return TRUE + +///Called when the plant reaches maturity +/obj/structure/xeno/plant/proc/on_mature(mob/user) + playsound(src, "alien_resin_build", 25) + mature = TRUE + update_icon() + +/obj/structure/xeno/plant/attack_hand(mob/living/user) + if(!can_interact(user)) + return ..() + return on_use(user) + +/obj/structure/xeno/plant/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if((xeno_attacker.status_flags & INCORPOREAL)) + return FALSE + + if(xeno_attacker.a_intent == INTENT_HARM && isxenodrone(xeno_attacker)) + balloon_alert(xeno_attacker, "Uprooted the plant") + xeno_attacker.do_attack_animation(src) + deconstruct(FALSE) + return FALSE + if(can_interact(xeno_attacker)) + return on_use(xeno_attacker) + return TRUE + +/obj/structure/xeno/plant/heal_fruit + name = "life fruit" + desc = "It would almost be appetizing wasn't it for the green colour and the shifting fluids inside..." + icon_state = "heal_fruit_immature" + mature_icon_state = "heal_fruit" + ///Minimum amount of health recovered + var/healing_amount_min = 125 + ///Maximum amount of health recovered, depends on the xeno's max health + var/healing_amount_max_health_scaling = 0.5 + +/obj/structure/xeno/plant/heal_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + var/datum/effect_system/smoke_spread/xeno/acid/plant_explosion = new(get_turf(src)) + plant_explosion.set_up(3,src) + plant_explosion.start() + visible_message(span_danger("[src] bursts, releasing toxic gas!")) + qdel(src) + return TRUE + + var/mob/living/carbon/xenomorph/X = user + var/heal_amount = max(healing_amount_min, healing_amount_max_health_scaling * X.xeno_caste.max_health) + HEAL_XENO_DAMAGE(X, heal_amount, FALSE) + playsound(user, "alien_drool", 25) + balloon_alert(X, "Health restored") + to_chat(X, span_xenowarning("We feel a sudden soothing chill as [src] tends to our wounds.")) + + return ..() + +/obj/structure/xeno/plant/armor_fruit + name = "hard fruit" + desc = "The contents of this fruit are protected by a tough outer shell." + icon_state = "armor_fruit_immature" + mature_icon_state = "armor_fruit" + ///How much total sunder should we remove + var/sunder_removal = 30 + +/obj/structure/xeno/plant/armor_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + var/turf/far_away_lands = get_turf(user) + for(var/x in 1 to 20) + var/turf/next_turf = get_step(far_away_lands, REVERSE_DIR(user.dir)) + if(!next_turf) + break + far_away_lands = next_turf + + user.throw_at(far_away_lands, 20, spin = TRUE) + to_chat(user, span_warning("[src] bursts, releasing a strong gust of pressurised gas!")) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.adjust_stagger(3 SECONDS) + H.apply_damage(30, BRUTE, "chest", BOMB) + qdel(src) + return TRUE + + balloon_alert(user, "Armor restored") + to_chat(user, span_xenowarning("We shed our shattered scales as new ones grow to replace them!")) + var/mob/living/carbon/xenomorph/X = user + X.adjust_sunder(-sunder_removal) + playsound(user, "alien_drool", 25) + return ..() + +/obj/structure/xeno/plant/plasma_fruit + name = "power fruit" + desc = "A cyan fruit, beating like a creature's heart" + icon_state = "plasma_fruit_immature" + mature_icon_state = "plasma_fruit" + ///How much bonus plasma should we restore during the duration, 1 being 100% from base regen + var/bonus_regen = 1 + ///How long should the buff last + var/duration = 1 MINUTES + +/obj/structure/xeno/plant/plasma_fruit/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(!isxeno(user)) + return + var/mob/living/carbon/xenomorph/X = user + if(X.has_status_effect(STATUS_EFFECT_PLASMA_SURGE)) + balloon_alert(X, "Already increased plasma regen") + return FALSE + +/obj/structure/xeno/plant/plasma_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + visible_message(span_warning("[src] releases a sticky substance before spontaneously bursting into flames!")) + flame_radius(3, get_turf(src), colour = "green") + qdel(src) + return TRUE + + var/mob/living/carbon/xenomorph/X = user + if(!(X.xeno_caste.can_flags & CASTE_CAN_BE_GIVEN_PLASMA)) + to_chat(X, span_xenowarning("But our body rejects the fruit, we do not share the same plasma type!")) + return FALSE + X.apply_status_effect(/datum/status_effect/plasma_surge, X.xeno_caste.plasma_max, bonus_regen, duration) + balloon_alert(X, "Plasma restored") + to_chat(X, span_xenowarning("[src] Restores our plasma reserves, our organism is on overdrive!")) + playsound(user, "alien_drool", 25) + return ..() + +/obj/structure/xeno/plant/stealth_plant + name = "night shade" + desc = "A beautiful flower, what purpose it could serve to the alien hive is beyond you however..." + icon_state = "stealth_plant_immature" + mature_icon_state = "stealth_plant" + maturation_time = 4 MINUTES + ///The radius of the passive structure camouflage, requires line of sight + var/camouflage_range = 7 + ///The range of the active stealth ability, does not require line of sight + var/active_camouflage_pulse_range = 10 + ///How long should veil last + var/active_camouflage_duration = 20 SECONDS + ///How long until the plant can be activated again + var/cooldown = 2 MINUTES + ///Is the active ability veil on cooldown ? + var/on_cooldown = FALSE + ///The list of passively camouflaged structures + var/list/obj/structure/xeno/camouflaged_structures = list() + ////The list of actively camouflaged xenos by veil + var/list/mob/living/carbon/xenomorph/camouflaged_xenos = list() + +/obj/structure/xeno/plant/stealth_plant/on_mature(mob/user) + . = ..() + START_PROCESSING(SSslowprocess, src) + +/obj/structure/xeno/plant/stealth_plant/Destroy() + for(var/obj/structure/xeno/xeno_struct AS in camouflaged_structures) + xeno_struct.alpha = initial(xeno_struct.alpha) + unveil() + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/plant/stealth_plant/process() + for(var/turf/tile AS in RANGE_TURFS(camouflage_range, loc)) + for(var/obj/structure/xeno/xeno_struct in tile) + if(istype(xeno_struct, /obj/structure/xeno/plant) || !line_of_sight(src, xeno_struct)) //We don't hide plants + continue + camouflaged_structures.Add(xeno_struct) + xeno_struct.alpha = STEALTH_PLANT_PASSIVE_CAMOUFLAGE_ALPHA + +/obj/structure/xeno/plant/stealth_plant/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(ishuman(user)) + balloon_alert(user, "Nothing happens") + to_chat(user, span_notice("You caress [src]'s petals, nothing happens.")) + return FALSE + if(on_cooldown) + balloon_alert(user, "Not ready yet") + to_chat(user, span_xenowarning("[src] soft light shimmers, we should give it more time to recover!")) + return FALSE + +/obj/structure/xeno/plant/stealth_plant/on_use(mob/user) + balloon_alert(user, "Shaking...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + visible_message(span_danger("[src] releases a burst of glowing pollen!")) + veil() + return TRUE + +///Hides all nearby xenos +/obj/structure/xeno/plant/stealth_plant/proc/veil() + for(var/turf/tile in RANGE_TURFS(camouflage_range, loc)) + for(var/mob/living/carbon/xenomorph/X in tile) + if(X.stat == DEAD || isxenohunter(X) || X.alpha != 255) //We don't mess with xenos capable of going stealth by themselves + continue + X.alpha = HUNTER_STEALTH_RUN_ALPHA + new /obj/effect/temp_visual/alien_fruit_eaten(get_turf(X)) + balloon_alert(X, "We now blend in") + to_chat(X, span_xenowarning("The pollen from [src] reacts with our scales, we are blending with our surroundings!")) + camouflaged_xenos.Add(X) + on_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(unveil)), active_camouflage_duration) + addtimer(CALLBACK(src, PROC_REF(ready)), cooldown) + +///Called when veil() can be used once again +/obj/structure/xeno/plant/stealth_plant/proc/ready() + visible_message(span_danger("[src] petals shift in hue, it is ready to release more pollen.")) + on_cooldown = FALSE + +///Reveals all xenos hidden by veil() +/obj/structure/xeno/plant/stealth_plant/proc/unveil() + for(var/mob/living/carbon/xenomorph/X AS in camouflaged_xenos) + X.alpha = initial(X.alpha) + balloon_alert(X, "Effect wears off") + to_chat(X, span_xenowarning("The effect of [src] wears off!")) diff --git a/code/modules/xenomorph/silo.dm b/code/modules/xenomorph/silo.dm new file mode 100644 index 00000000000..ef3e9ac28ff --- /dev/null +++ b/code/modules/xenomorph/silo.dm @@ -0,0 +1,159 @@ +/obj/structure/xeno/silo + name = "Resin silo" + icon = 'icons/Xeno/resin_silo.dmi' + icon_state = "weed_silo" + desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." + bound_width = 96 + bound_height = 96 + max_integrity = 1000 + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL|CRITICAL_STRUCTURE + plane = FLOOR_PLANE + ///How many larva points one silo produce in one minute + var/larva_spawn_rate = 0.5 + var/turf/center_turf + var/number_silo + ///For minimap icon change if silo takes damage or nearby hostile + var/warning + COOLDOWN_DECLARE(silo_damage_alert_cooldown) + COOLDOWN_DECLARE(silo_proxy_alert_cooldown) + +/obj/structure/xeno/silo/Initialize(mapload, _hivenumber) + . = ..() + center_turf = get_step(src, NORTHEAST) + if(!istype(center_turf)) + center_turf = loc + + if(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN) + for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) + RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(resin_silo_proxy_alert)) + + if(SSticker.mode?.flags_round_type & MODE_SILOS_SPAWN_MINIONS) + SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, null) + SSspawning.spawnerdata[src].required_increment = 2 * max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait + SSspawning.spawnerdata[src].max_allowed_mobs = max(1, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count * 0.5) + update_minimap_icon() + + return INITIALIZE_HINT_LATELOAD + +/obj/structure/xeno/silo/LateInitialize() + . = ..() + var/siloprefix = GLOB.hive_datums[hivenumber].name + number_silo = length(GLOB.xeno_resin_silos_by_hive[hivenumber]) + 1 + name = "[siloprefix == "Normal" ? "" : "[siloprefix] "][name] [number_silo]" + LAZYADDASSOC(GLOB.xeno_resin_silos_by_hive, hivenumber, src) + + if(!locate(/obj/alien/weeds) in center_turf) + new /obj/alien/weeds/node(center_turf) + if(GLOB.hive_datums[hivenumber]) + RegisterSignals(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK), PROC_REF(is_burrowed_larva_host)) + if(length(GLOB.xeno_resin_silos_by_hive[hivenumber]) == 1) + GLOB.hive_datums[hivenumber].give_larva_to_next_in_queue() + var/turf/tunnel_turf = get_step(center_turf, NORTH) + if(tunnel_turf.can_dig_xeno_tunnel()) + var/obj/structure/xeno/tunnel/newt = new(tunnel_turf, hivenumber) + newt.tunnel_desc = "[AREACOORD_NO_Z(newt)]" + newt.name += " [name]" + if(GLOB.hive_datums[hivenumber]) + SSticker.mode.update_silo_death_timer(GLOB.hive_datums[hivenumber]) + +/obj/structure/xeno/silo/obj_destruction(damage_amount, damage_type, damage_flag) + if(GLOB.hive_datums[hivenumber]) + INVOKE_NEXT_TICK(SSticker.mode, TYPE_PROC_REF(/datum/game_mode, update_silo_death_timer), GLOB.hive_datums[hivenumber]) // checks all silos next tick after this one is gone + UnregisterSignal(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK)) + GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien_help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) + notify_ghosts("\ A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", source = get_turf(src), action = NOTIFY_JUMP) + playsound(loc,'sound/effects/alien_egg_burst.ogg', 75) + return ..() + +/obj/structure/xeno/silo/Destroy() + GLOB.xeno_resin_silos_by_hive[hivenumber] -= src + + for(var/i in contents) + var/atom/movable/AM = i + AM.forceMove(get_step(center_turf, pick(CARDINAL_ALL_DIRS))) + center_turf = null + + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/silo/examine(mob/user) + . = ..() + var/current_integrity = (obj_integrity / max_integrity) * 100 + switch(current_integrity) + if(0 to 20) + . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") + if(20 to 40) + . += span_warning("It looks severely damaged, its movements slow.") + if(40 to 60) + . += span_warning("It's quite beat up, but it seems alive.") + if(60 to 80) + . += span_warning("It's slightly damaged, but still seems healthy.") + if(80 to 100) + . += span_info("It appears in good shape, pulsating healthily.") + +/obj/structure/xeno/silo/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) + . = ..() + + //We took damage, so it's time to start regenerating if we're not already processing + if(!CHECK_BITFIELD(datum_flags, DF_ISPROCESSING)) + START_PROCESSING(SSslowprocess, src) + + resin_silo_damage_alert() + +/obj/structure/xeno/silo/proc/resin_silo_damage_alert() + if(!COOLDOWN_CHECK(src, silo_damage_alert_cooldown)) + return + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + COOLDOWN_START(src, silo_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_HEALTH_ALERT_COOLDOWN) //clear warning + +///Alerts the Hive when hostiles get too close to their resin silo +/obj/structure/xeno/silo/proc/resin_silo_proxy_alert(datum/source, atom/movable/hostile, direction) + SIGNAL_HANDLER + + if(!COOLDOWN_CHECK(src, silo_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort + return + + if(!isliving(hostile)) + return + + var/mob/living/living_triggerer = hostile + if(living_triggerer.stat == DEAD) //We don't care about the dead + return + + if(isxeno(hostile)) + var/mob/living/carbon/xenomorph/X = hostile + if(X.hive == GLOB.hive_datums[hivenumber]) //Trigger proxy alert only for hostile xenos + return + + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + COOLDOWN_START(src, silo_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Clears the warning for minimap if its warning for hostiles +/obj/structure/xeno/silo/proc/clear_warning() + warning = FALSE + update_minimap_icon() + +/obj/structure/xeno/silo/process() + //Regenerate if we're at less than max integrity + if(obj_integrity < max_integrity) + obj_integrity = min(obj_integrity + 25, max_integrity) //Regen 5 HP per sec + +/obj/structure/xeno/silo/proc/is_burrowed_larva_host(datum/source, list/mothers, list/silos) + SIGNAL_HANDLER + if(GLOB.hive_datums[hivenumber]) + silos += src + +///Change minimap icon if silo is under attack or not +/obj/structure/xeno/silo/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "silo[warning ? "_warn" : "_passive"]", VERY_HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips + +/obj/structure/xeno/silo/crash + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE | INDESTRUCTIBLE diff --git a/code/modules/xenomorph/spawner.dm b/code/modules/xenomorph/spawner.dm new file mode 100644 index 00000000000..441780081b0 --- /dev/null +++ b/code/modules/xenomorph/spawner.dm @@ -0,0 +1,112 @@ +/obj/structure/xeno/spawner + icon = 'icons/Xeno/2x2building.dmi.dmi' + bound_width = 64 + bound_height = 64 + plane = FLOOR_PLANE + name = "spawner" + desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." + icon_state = "spawner" + max_integrity = 500 + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE + ///For minimap icon change if silo takes damage or nearby hostile + var/warning + COOLDOWN_DECLARE(spawner_damage_alert_cooldown) + COOLDOWN_DECLARE(spawner_proxy_alert_cooldown) + var/linked_minions = list() + +/obj/structure/xeno/spawner/Initialize(mapload, _hivenumber) + . = ..() + LAZYADDASSOC(GLOB.xeno_spawners_by_hive, hivenumber, src) + SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, CALLBACK(src, PROC_REF(on_spawn))) + SSspawning.spawnerdata[src].required_increment = max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait + SSspawning.spawnerdata[src].max_allowed_mobs = max(2, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count) + set_light(2, 2, LIGHT_COLOR_GREEN) + for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) + RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(spawner_proxy_alert)) + update_minimap_icon() + +/obj/structure/xeno/spawner/examine(mob/user) + . = ..() + var/current_integrity = (obj_integrity / max_integrity) * 100 + switch(current_integrity) + if(0 to 20) + . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") + if(20 to 40) + . += span_warning("It looks severely damaged, its movements slow.") + if(40 to 60) + . += span_warning("It's quite beat up, but it seems alive.") + if(60 to 80) + . += span_warning("It's slightly damaged, but still seems healthy.") + if(80 to 100) + . += span_info("It appears in good shape, pulsating healthily.") + + +/obj/structure/xeno/spawner/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) + . = ..() + spawner_damage_alert() + +///Alert if spawner is receiving damage +/obj/structure/xeno/spawner/proc/spawner_damage_alert() + if(!COOLDOWN_CHECK(src, spawner_damage_alert_cooldown)) + warning = FALSE + return + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + COOLDOWN_START(src, spawner_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Alerts the Hive when hostiles get too close to their spawner +/obj/structure/xeno/spawner/proc/spawner_proxy_alert(datum/source, atom/movable/hostile, direction) + SIGNAL_HANDLER + + if(!COOLDOWN_CHECK(src, spawner_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort + warning = FALSE + return + + if(!isliving(hostile)) + return + + var/mob/living/living_triggerer = hostile + if(living_triggerer.stat == DEAD) //We don't care about the dead + return + + if(isxeno(hostile)) + var/mob/living/carbon/xenomorph/X = hostile + if(X.hivenumber == hivenumber) //Trigger proxy alert only for hostile xenos + return + + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + COOLDOWN_START(src, spawner_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Clears the warning for minimap if its warning for hostiles +/obj/structure/xeno/spawner/proc/clear_warning() + warning = FALSE + update_minimap_icon() + +/obj/structure/xeno/spawner/Destroy() + GLOB.xeno_spawners_by_hive[hivenumber] -= src + return ..() + +///Change minimap icon if spawner is under attack or not +/obj/structure/xeno/spawner/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "spawner[warning ? "_warn" : "_passive"]", , ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips + +/obj/structure/xeno/spawner/proc/on_spawn(list/squad) + if(!isxeno(squad[length(squad)])) + CRASH("Xeno spawner somehow tried to spawn a non xeno (tried to spawn [squad[length(squad)]])") + var/mob/living/carbon/xenomorph/X = squad[length(squad)] + X.transfer_to_hive(hivenumber) + linked_minions = squad + if(hivenumber == XENO_HIVE_FALLEN) //snowflake so valhalla isnt filled with minions after you're done + RegisterSignal(src, COMSIG_QDELETING, PROC_REF(kill_linked_minions)) + +/obj/structure/xeno/spawner/proc/kill_linked_minions() + for(var/mob/living/carbon/xenomorph/linked in linked_minions) + linked.death(TRUE) + UnregisterSignal(src, COMSIG_QDELETING) diff --git a/code/modules/xenomorph/trap.dm b/code/modules/xenomorph/trap.dm new file mode 100644 index 00000000000..f6180ad44ae --- /dev/null +++ b/code/modules/xenomorph/trap.dm @@ -0,0 +1,211 @@ +/obj/structure/xeno/trap + desc = "It looks like a hiding hole." + name = "resin hole" + icon = 'icons/Xeno/Effects.dmi' + icon_state = "trap" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 5 + layer = RESIN_STRUCTURE_LAYER + destroy_sound = "alien_resin_break" + ///defines for trap type to trigger on activation + var/trap_type + ///The hugger inside our trap + var/obj/item/clothing/mask/facehugger/hugger = null + ///smoke effect to create when the trap is triggered + var/datum/effect_system/smoke_spread/smoke + ///connection list for huggers + var/static/list/listen_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(trigger_trap), + ) + +/obj/structure/xeno/trap/Initialize(mapload, _hivenumber) + . = ..() + AddElement(/datum/element/connect_loc, listen_connections) + +/obj/structure/xeno/trap/ex_act(severity) + take_damage(severity, BRUTE, BOMB) + +/obj/structure/xeno/trap/update_icon_state() + . = ..() + switch(trap_type) + if(TRAP_HUGGER) + icon_state = "traphugger" + if(TRAP_SMOKE_NEURO) + icon_state = "trapneurogas" + if(TRAP_SMOKE_ACID) + icon_state = "trapacidgas" + if(TRAP_ACID_WEAK) + icon_state = "trapacidweak" + if(TRAP_ACID_NORMAL) + icon_state = "trapacid" + if(TRAP_ACID_STRONG) + icon_state = "trapacidstrong" + else + icon_state = "trap" + +/obj/structure/xeno/trap/obj_destruction(damage_amount, damage_type, damage_flag) + if((damage_amount || damage_flag) && hugger && loc) + trigger_trap() + return ..() + +/obj/structure/xeno/trap/proc/set_trap_type(new_trap_type) + if(new_trap_type == trap_type) + return + trap_type = new_trap_type + update_icon() + +/obj/structure/xeno/trap/examine(mob/user) + . = ..() + if(!isxeno(user)) + return + . += "A hole for a little one to hide in ambush for or for spewing acid." + switch(trap_type) + if(TRAP_HUGGER) + . += "There's a little one inside." + if(TRAP_SMOKE_NEURO) + . += "There's pressurized neurotoxin inside." + if(TRAP_SMOKE_ACID) + . += "There's pressurized acid gas inside." + if(TRAP_ACID_WEAK) + . += "There's pressurized weak acid inside." + if(TRAP_ACID_NORMAL) + . += "There's pressurized normal acid inside." + if(TRAP_ACID_STRONG) + . += "There's strong pressurized acid inside." + else + . += "It's empty." + +/obj/structure/xeno/trap/flamer_fire_act(burnlevel) + hugger?.kill_hugger() + trigger_trap() + set_trap_type(null) + +/obj/structure/xeno/trap/fire_act() + hugger?.kill_hugger() + trigger_trap() + set_trap_type(null) + +///Triggers the hugger trap +/obj/structure/xeno/trap/proc/trigger_trap(datum/source, atom/movable/AM, oldloc, oldlocs) + SIGNAL_HANDLER + if(!trap_type) + return + if(AM && (hivenumber == AM.get_xeno_hivenumber())) + return + playsound(src, "alien_resin_break", 25) + if(iscarbon(AM)) + var/mob/living/carbon/crosser = AM + crosser.visible_message(span_warning("[crosser] trips on [src]!"), span_danger("You trip on [src]!")) + crosser.ParalyzeNoChain(4 SECONDS) + switch(trap_type) + if(TRAP_HUGGER) + if(!AM) + drop_hugger() + return + if(!iscarbon(AM)) + return + var/mob/living/carbon/crosser = AM + if(!crosser.can_be_facehugged(hugger)) + return + drop_hugger() + if(TRAP_SMOKE_NEURO, TRAP_SMOKE_ACID) + smoke.start() + if(TRAP_ACID_WEAK) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray/weak(acided, 8 SECONDS, XENO_WEAK_ACID_PUDDLE_DAMAGE) + if(TRAP_ACID_NORMAL) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray(acided, 10 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) + if(TRAP_ACID_STRONG) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray/strong(acided, 12 SECONDS, XENO_HIGH_ACID_PUDDLE_DAMAGE) + xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) + set_trap_type(null) + +/// Move the hugger out of the trap +/obj/structure/xeno/trap/proc/drop_hugger() + hugger.forceMove(loc) + hugger.go_active(TRUE, TRUE) //Removes stasis + visible_message(span_warning("[hugger] gets out of [src]!") ) + hugger = null + set_trap_type(null) + +/obj/structure/xeno/trap/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) + return FALSE + + if(xeno_attacker.a_intent == INTENT_HARM) + return ..() + if(trap_type == TRAP_HUGGER) + if(!(xeno_attacker.xeno_caste.can_flags & CASTE_CAN_HOLD_FACEHUGGERS)) + return + if(!hugger) + balloon_alert(xeno_attacker, "It is empty") + return + xeno_attacker.put_in_active_hand(hugger) + hugger.go_active(TRUE) + hugger = null + set_trap_type(null) + balloon_alert(xeno_attacker, "Removed facehugger") + return + var/datum/action/ability/activable/xeno/corrosive_acid/acid_action = locate(/datum/action/ability/activable/xeno/corrosive_acid) in xeno_attacker.actions + if(istype(xeno_attacker.ammo, /datum/ammo/xeno/boiler_gas)) + var/datum/ammo/xeno/boiler_gas/boiler_glob = xeno_attacker.ammo + if(!boiler_glob.enhance_trap(src, xeno_attacker)) + return + else if(acid_action) + if(!do_after(xeno_attacker, 2 SECONDS, NONE, src)) + return + switch(acid_action.acid_type) + if(/obj/effect/xenomorph/acid/weak) + set_trap_type(TRAP_ACID_WEAK) + if(/obj/effect/xenomorph/acid) + set_trap_type(TRAP_ACID_NORMAL) + if(/obj/effect/xenomorph/acid/strong) + set_trap_type(TRAP_ACID_STRONG) + else + return // nothing happened! + playsound(xeno_attacker.loc, 'sound/effects/refill.ogg', 25, 1) + balloon_alert(xeno_attacker, "Filled with [trap_type]") + +/obj/structure/xeno/trap/attackby(obj/item/I, mob/user, params) + . = ..() + + if(!istype(I, /obj/item/clothing/mask/facehugger) || !isxeno(user)) + return + var/obj/item/clothing/mask/facehugger/FH = I + if(trap_type) + balloon_alert(user, "Already occupied") + return + + if(FH.stat == DEAD) + balloon_alert(user, "Cannot insert facehugger") + return + + user.transferItemToLoc(FH, src) + FH.go_idle(TRUE) + hugger = FH + set_trap_type(TRAP_HUGGER) + balloon_alert(user, "Inserted facehugger") + +//Sentient facehugger can get in the trap +/obj/structure/xeno/trap/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, isrightclick = FALSE) + . = ..() + if(tgui_alert(F, "Do you want to get into the trap?", "Get inside the trap", list("Yes", "No")) != "Yes") + return + + if(trap_type) + F.balloon_alert(F, "The trap is occupied") + return + + var/obj/item/clothing/mask/facehugger/FH = new(src) + FH.go_idle(TRUE) + hugger = FH + set_trap_type(TRAP_HUGGER) + + F.visible_message(span_xenowarning("[F] slides back into [src]."),span_xenonotice("You slides back into [src].")) + F.ghostize() + F.death(deathmessage = "get inside the trap", silent = TRUE) + qdel(F) diff --git a/code/modules/xenomorph/tunnel.dm b/code/modules/xenomorph/tunnel.dm new file mode 100644 index 00000000000..0eeaee13180 --- /dev/null +++ b/code/modules/xenomorph/tunnel.dm @@ -0,0 +1,181 @@ +/obj/structure/xeno/tunnel + name = "tunnel" + desc = "A tunnel entrance. Looks like it was dug by some kind of clawed beast." + icon = 'icons/Xeno/Effects.dmi' + icon_state = "hole" + + density = FALSE + opacity = FALSE + anchored = TRUE + resistance_flags = UNACIDABLE|BANISH_IMMUNE + layer = RESIN_STRUCTURE_LAYER + + max_integrity = 140 + + xeno_structure_flags = IGNORE_WEED_REMOVAL + ///Description added by the hivelord. + var/tunnel_desc = "" + ///What hivelord created that tunnel. Can be null + var/mob/living/carbon/xenomorph/hivelord/creator = null + +/obj/structure/xeno/tunnel/Initialize(mapload, _hivenumber) + . = ..() + LAZYADDASSOC(GLOB.xeno_tunnels_by_hive, hivenumber, src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xenotunnel", HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips + +/obj/structure/xeno/tunnel/Destroy() + var/turf/drop_loc = get_turf(src) + for(var/atom/movable/thing AS in contents) //Empty the tunnel of contents + thing.forceMove(drop_loc) + + if(!QDELETED(creator)) + to_chat(creator, span_xenoannounce("You sense your [name] at [tunnel_desc] has been destroyed!") ) //Alert creator + + xeno_message("Hive tunnel [name] at [tunnel_desc] has been destroyed!", "xenoannounce", 5, hivenumber) //Also alert hive because tunnels matter. + + LAZYREMOVE(GLOB.xeno_tunnels_by_hive[hivenumber], src) + if(creator) + creator.tunnels -= src + creator = null + + for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //HUD clean up + xeno_tac_hud.remove_from_hud(src) + SSminimaps.remove_marker(src) + + return ..() + +///Signal handler for creator destruction to clear reference +/obj/structure/xeno/tunnel/proc/clear_creator() + SIGNAL_HANDLER + creator = null + +/obj/structure/xeno/tunnel/examine(mob/user) + . = ..() + if(!isxeno(user) && !isobserver(user)) + return + if(tunnel_desc) + . += span_info("The Hivelord scent reads: \'[tunnel_desc]\'") + +/obj/structure/xeno/tunnel/deconstruct(disassembled = TRUE) + visible_message(span_danger("[src] suddenly collapses!") ) + return ..() + +/obj/structure/xeno/tunnel/attackby(obj/item/I, mob/user, params) + if(!isxeno(user)) + return ..() + attack_alien(user) + +/obj/structure/xeno/tunnel/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if(!istype(xeno_attacker) || xeno_attacker.stat || xeno_attacker.lying_angle || xeno_attacker.status_flags & INCORPOREAL) + return + + if(xeno_attacker.a_intent == INTENT_HARM && xeno_attacker == creator) + balloon_alert(xeno_attacker, "Filling in tunnel...") + if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + deconstruct(FALSE) + return + + if(xeno_attacker.anchored) + balloon_alert(xeno_attacker, "Cannot enter while immobile") + return FALSE + + if(length(GLOB.xeno_tunnels_by_hive[hivenumber]) < 2) + balloon_alert(xeno_attacker, "No exit tunnel") + return FALSE + + pick_a_tunnel(xeno_attacker) + +/obj/structure/xeno/tunnel/attack_larva(mob/living/carbon/xenomorph/larva/L) //So larvas can actually use tunnels + attack_alien(L) + +/obj/structure/xeno/tunnel/attack_ghost(mob/dead/observer/user) + . = ..() + + var/list/obj/destinations = GLOB.xeno_tunnels_by_hive[hivenumber] + var/obj/structure/xeno/tunnel/targettunnel + if(LAZYLEN(destinations) > 2) + var/list/tunnel_assoc = list() + for(var/obj/D in destinations) + tunnel_assoc["X:[D.x], Y:[D.y] - \[[get_area(D)]\]"] = D + destinations = list() + for(var/d in tunnel_assoc) + destinations += d + var/input = tgui_input_list(user ,"Choose a tunnel to teleport to:" ,"Ghost Tunnel teleport" ,destinations ,null, 0) + if(!input) + return + targettunnel = tunnel_assoc[input] + if(!input) + return + else + //There are only 2 tunnels. Pick the other one. + for(var/P in destinations) + if(P != src) + targettunnel = P + if(!targettunnel || QDELETED(targettunnel) || !targettunnel.loc) + return + user.forceMove(get_turf(targettunnel)) + +///Here we pick a tunnel to go to, then travel to that tunnel and peep out, confirming whether or not we want to emerge or go to another tunnel. +/obj/structure/xeno/tunnel/proc/pick_a_tunnel(mob/living/carbon/xenomorph/M) + to_chat(M, span_notice("Select a tunnel to go to.")) + + var/atom/movable/screen/minimap/map = SSminimaps.fetch_minimap_object(z, MINIMAP_FLAG_XENO) + M.client.screen += map + var/list/polled_coords = map.get_coords_from_click(M) + M.client.screen -= map + if(!polled_coords) + return + var/turf/clicked_turf = locate(polled_coords[1], polled_coords[2], z) + + ///We find the tunnel, looking within 10 tiles of where the user clicked, excluding src + var/obj/structure/xeno/tunnel/targettunnel = cheap_get_atom(clicked_turf, /obj/structure/xeno/tunnel, 10, GLOB.xeno_tunnels_by_hive[hivenumber] - src) + if(QDELETED(src)) //Make sure we still exist in the event the player keeps the interface open + return + if(!M.Adjacent(src) && M.loc != src) //Make sure we're close enough to our tunnel; either adjacent to or in one + return + if(QDELETED(targettunnel)) //Make sure our target destination still exists in the event the player keeps the interface open + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + if(targettunnel == src) + balloon_alert(M, "We're already here") + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + if(targettunnel.z != z) + balloon_alert(M, "Tunnel not connected") + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + var/distance = get_dist(get_turf(src), get_turf(targettunnel)) + var/tunnel_time = clamp(distance, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_SMALL_MAX_TRAVEL_TIME) + + if(M.mob_size == MOB_SIZE_BIG) //Big xenos take longer + tunnel_time = clamp(distance * 1.5, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_LARGE_MAX_TRAVEL_TIME) + M.visible_message(span_xenonotice("[M] begins heaving their huge bulk down into \the [src].") , \ + span_xenonotice("We begin heaving our monstrous bulk into \the [src] to [targettunnel.tunnel_desc].") ) + else + M.visible_message(span_xenonotice("\The [M] begins crawling down into \the [src].") , \ + span_xenonotice("We begin crawling down into \the [src] to [targettunnel.tunnel_desc].") ) + + if(isxenolarva(M)) //Larva can zip through near-instantly, they are wormlike after all + tunnel_time = 5 + + if(!do_after(M, tunnel_time, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + balloon_alert(M, "Crawling interrupted") + return + if(!targettunnel || !isturf(targettunnel.loc)) //Make sure the end tunnel is still there + balloon_alert(M, "Tunnel ended unexpectedly") + return + M.forceMove(targettunnel) + var/double_check = tgui_alert(M, "Emerge here?", "Tunnel: [targettunnel]", list("Yes","Pick another tunnel"), 0) + if(M.loc != targettunnel) //double check that we're still in the tunnel in the event it gets destroyed while we still have the interface open + return + if(double_check == "Pick another tunnel") + return targettunnel.pick_a_tunnel(M) + M.forceMove(targettunnel.loc) + M.visible_message(span_xenonotice("\The [M] pops out of \the [src].") , \ + span_xenonotice("We pop out through the other side!") ) + +/obj/structure/xeno/tunnel/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, isrightclick = FALSE) + attack_alien(F) diff --git a/code/modules/xenomorph/turret.dm b/code/modules/xenomorph/turret.dm new file mode 100644 index 00000000000..11a6905b9a4 --- /dev/null +++ b/code/modules/xenomorph/turret.dm @@ -0,0 +1,272 @@ +/obj/structure/xeno/xeno_turret + icon = 'icons/Xeno/acidturret.dmi' + icon_state = XENO_TURRET_ACID_ICONSTATE + name = "acid turret" + desc = "A menacing looking construct of resin, it seems to be alive. It fires acid against intruders." + bound_width = 32 + bound_height = 32 + obj_integrity = 600 + max_integrity = 1500 + layer = ABOVE_MOB_LAYER + density = TRUE + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE |PORTAL_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL|HAS_OVERLAY + allow_pass_flags = PASS_AIR|PASS_THROW + ///What kind of spit it uses + var/datum/ammo/ammo = /datum/ammo/xeno/acid/heavy/turret + ///Range of the turret + var/range = 7 + ///Target of the turret + var/atom/hostile + ///Last target of the turret + var/atom/last_hostile + ///Potential list of targets found by scan + var/list/atom/potential_hostiles + ///Fire rate of the target in ticks + var/firerate = 5 + ///The last time the sentry did a scan + var/last_scan_time + ///light color that gets set in initialize + var/light_initial_color = LIGHT_COLOR_GREEN + ///For minimap icon change if sentry is firing + var/firing + +///Change minimap icon if its firing or not firing +/obj/structure/xeno/xeno_turret/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xeno_turret[firing ? "_firing" : "_passive"]")) // RU TGMC edit - map blips + +/obj/structure/xeno/xeno_turret/Initialize(mapload, _hivenumber) + . = ..() + ammo = GLOB.ammo_list[ammo] + potential_hostiles = list() + LAZYADDASSOC(GLOB.xeno_resin_turrets_by_hive, hivenumber, src) + START_PROCESSING(SSobj, src) + AddComponent(/datum/component/automatedfire/xeno_turret_autofire, firerate) + RegisterSignal(src, COMSIG_AUTOMATIC_SHOOTER_SHOOT, PROC_REF(shoot)) + RegisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_HIJACKED, PROC_REF(destroy_on_hijack)) + if(light_initial_color) + set_light(2, 2, light_initial_color) + update_minimap_icon() + update_icon() + +///Signal handler to delete the turret when the alamo is hijacked +/obj/structure/xeno/xeno_turret/proc/destroy_on_hijack() + SIGNAL_HANDLER + qdel(src) + +/obj/structure/xeno/xeno_turret/obj_destruction(damage_amount, damage_type, damage_flag) + if(damage_amount) //Spawn effects only if we actually get destroyed by damage + on_destruction() + return ..() + +/obj/structure/xeno/xeno_turret/proc/on_destruction() + var/datum/effect_system/smoke_spread/xeno/smoke = new /datum/effect_system/smoke_spread/xeno/acid(src) + smoke.set_up(1, get_turf(src)) + smoke.start() + +/obj/structure/xeno/xeno_turret/Destroy() + GLOB.xeno_resin_turrets_by_hive[hivenumber] -= src + set_hostile(null) + set_last_hostile(null) + STOP_PROCESSING(SSobj, src) + playsound(loc,'sound/effects/xeno_turret_death.ogg', 70) + return ..() + +/obj/structure/xeno/xeno_turret/ex_act(severity) + take_damage(severity * 5, BRUTE, BOMB) + +/obj/structure/xeno/xeno_turret/flamer_fire_act(burnlevel) + take_damage(burnlevel * 2, BURN, FIRE) + ENABLE_BITFIELD(resistance_flags, ON_FIRE) + +/obj/structure/xeno/xeno_turret/fire_act() + take_damage(60, BURN, FIRE) + ENABLE_BITFIELD(resistance_flags, ON_FIRE) + +/obj/structure/xeno/xeno_turret/update_overlays() + . = ..() + if(!(xeno_structure_flags & HAS_OVERLAY)) + return + if(obj_integrity <= max_integrity / 2) + . += image('icons/Xeno/acidturret.dmi', src, "+turret_damage") + if(CHECK_BITFIELD(resistance_flags, ON_FIRE)) + . += image('icons/Xeno/acidturret.dmi', src, "+turret_on_fire") + +/obj/structure/xeno/xeno_turret/process() + //Turrets regen some HP, every 2 sec + if(obj_integrity < max_integrity) + obj_integrity = min(obj_integrity + TURRET_HEALTH_REGEN, max_integrity) + update_icon() + DISABLE_BITFIELD(resistance_flags, ON_FIRE) + if(world.time > last_scan_time + TURRET_SCAN_FREQUENCY) + scan() + last_scan_time = world.time + if(!length(potential_hostiles)) + return + set_hostile(get_target()) + if (!hostile) + if(last_hostile) + set_last_hostile(null) + return + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_XENO_TURRETS_ALERT)) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) + TIMER_COOLDOWN_START(src, COOLDOWN_XENO_TURRETS_ALERT, 20 SECONDS) + if(hostile != last_hostile) + set_last_hostile(hostile) + SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_START_SHOOTING_AT) + +/obj/structure/xeno/xeno_turret/attackby(obj/item/I, mob/living/user, params) + if(I.flags_item & NOBLUDGEON || !isliving(user)) + return attack_hand(user) + + user.changeNext_move(I.attack_speed) + user.do_attack_animation(src, used_item = I) + + var/damage = I.force + var/multiplier = 1 + if(I.damtype == BURN) //Burn damage deals extra vs resin structures (mostly welders). + multiplier += 1 + + if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) + var/obj/item/tool/pickaxe/plasmacutter/P = I + if(P.start_cut(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) + multiplier += PLASMACUTTER_RESIN_MULTIPLIER + P.cut_apart(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD) + + damage *= max(0, multiplier) + take_damage(damage, BRUTE, MELEE) + playsound(src, "alien_resin_break", 25) + +///Signal handler for hard del of hostile +/obj/structure/xeno/xeno_turret/proc/unset_hostile() + SIGNAL_HANDLER + hostile = null + +///Signal handler for hard del of last_hostile +/obj/structure/xeno/xeno_turret/proc/unset_last_hostile() + SIGNAL_HANDLER + last_hostile = null + +///Setter for hostile with hard del in mind +/obj/structure/xeno/xeno_turret/proc/set_hostile(_hostile) + if(hostile != _hostile) + hostile = _hostile + RegisterSignal(hostile, COMSIG_QDELETING, PROC_REF(unset_hostile)) + +///Setter for last_hostile with hard del in mind +/obj/structure/xeno/xeno_turret/proc/set_last_hostile(_last_hostile) + if(last_hostile) + UnregisterSignal(last_hostile, COMSIG_QDELETING) + last_hostile = _last_hostile + +///Look for the closest human in range and in light of sight. If no human is in range, will look for xenos of other hives +/obj/structure/xeno/xeno_turret/proc/get_target() + var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system + var/buffer_distance + var/list/turf/path = list() + for (var/atom/nearby_hostile AS in potential_hostiles) + if(isliving(nearby_hostile)) + var/mob/living/nearby_living_hostile = nearby_hostile + if(nearby_living_hostile.stat == DEAD) + continue + if(HAS_TRAIT(nearby_hostile, TRAIT_TURRET_HIDDEN)) + continue + buffer_distance = get_dist(nearby_hostile, src) + if (distance <= buffer_distance) //If we already found a target that's closer + continue + path = getline(src, nearby_hostile) + path -= get_turf(src) + if(!length(path)) //Can't shoot if it's on the same turf + continue + var/blocked = FALSE + for(var/turf/T AS in path) + if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + + for(var/obj/machinery/MA in T) + if(MA.opacity || MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + + for(var/obj/structure/S in T) + if(S.opacity || S.density && !(S.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + if(!blocked) + distance = buffer_distance + . = nearby_hostile + +///Return TRUE if a possible target is near +/obj/structure/xeno/xeno_turret/proc/scan() + potential_hostiles.Cut() + for (var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, TURRET_SCAN_RANGE)) + if(nearby_human.stat == DEAD) + continue + if(nearby_human.get_xeno_hivenumber() == hivenumber) + continue + potential_hostiles += nearby_human + for (var/mob/living/carbon/xenomorph/nearby_xeno AS in cheap_get_xenos_near(src, range)) + if(GLOB.hive_datums[hivenumber] == nearby_xeno.hive) + continue + if(nearby_xeno.stat == DEAD) + continue + potential_hostiles += nearby_xeno + for(var/obj/vehicle/unmanned/vehicle AS in GLOB.unmanned_vehicles) + if(vehicle.z == z && get_dist(vehicle, src) <= range) + potential_hostiles += vehicle + for(var/obj/vehicle/sealed/mecha/mech AS in GLOB.mechas_list) + if(mech.z == z && get_dist(mech, src) <= range) + potential_hostiles += mech + +///Signal handler to make the turret shoot at its target +/obj/structure/xeno/xeno_turret/proc/shoot() + SIGNAL_HANDLER + if(!hostile) + SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_STOP_SHOOTING_AT) + firing = FALSE + update_minimap_icon() + return + face_atom(hostile) + var/obj/projectile/newshot = new(loc) + newshot.generate_bullet(ammo) + newshot.def_zone = pick(GLOB.base_miss_chance) + newshot.fire_at(hostile, src, null, ammo.max_range, ammo.shell_speed) + if(istype(ammo, /datum/ammo/xeno/hugger)) + var/datum/ammo/xeno/hugger/hugger_ammo = ammo + newshot.color = initial(hugger_ammo.hugger_type.color) + hugger_ammo.hivenumber = hivenumber + firing = TRUE + update_minimap_icon() + +/obj/structure/xeno/xeno_turret/sticky + name = "Sticky resin turret" + icon = 'icons/Xeno/acidturret.dmi' + icon_state = XENO_TURRET_STICKY_ICONSTATE + desc = "A menacing looking construct of resin, it seems to be alive. It fires resin against intruders." + light_initial_color = LIGHT_COLOR_PURPLE + ammo = /datum/ammo/xeno/sticky/turret + firerate = 5 + +/obj/structure/xeno/xeno_turret/sticky/on_destruction() + for(var/i = 1 to 20) // maybe a bit laggy + var/obj/projectile/new_proj = new(src) + new_proj.generate_bullet(ammo) + new_proj.fire_at(null, src, range = rand(1, 4), angle = rand(1, 360), recursivity = TRUE) + +/obj/structure/xeno/xeno_turret/hugger_turret + name = "hugger turret" + icon_state = "hugger_turret" + desc = "A menacing looking construct of resin, it seems to be alive. It fires huggers against intruders." + obj_integrity = 400 + max_integrity = 400 + light_initial_color = LIGHT_COLOR_BROWN + ammo = /datum/ammo/xeno/hugger + firerate = 5 SECONDS + +/obj/structure/xeno/xeno_turret/hugger_turret/on_destruction() + for(var/i = 1 to 5) + var/obj/projectile/new_proj = new(src) + new_proj.generate_bullet(ammo) + new_proj.fire_at(null, src, range = rand(1, 3), angle = rand(1, 360), recursivity = TRUE) diff --git a/code/modules/xenomorph/xeno_structures.dm b/code/modules/xenomorph/xeno_structures.dm deleted file mode 100644 index 51991c3b656..00000000000 --- a/code/modules/xenomorph/xeno_structures.dm +++ /dev/null @@ -1,1731 +0,0 @@ -/obj/structure/xeno - hit_sound = "alien_resin_break" - layer = RESIN_STRUCTURE_LAYER - resistance_flags = UNACIDABLE - ///Bitflags specific to xeno structures - var/xeno_structure_flags - ///Which hive(number) do we belong to? - var/hivenumber = XENO_HIVE_NORMAL - -/obj/structure/xeno/Initialize(mapload, _hivenumber) - . = ..() - if(!(xeno_structure_flags & IGNORE_WEED_REMOVAL)) - RegisterSignal(loc, COMSIG_TURF_WEED_REMOVED, PROC_REF(weed_removed)) - if(_hivenumber) ///because admins can spawn them - hivenumber = _hivenumber - LAZYADDASSOC(GLOB.xeno_structures_by_hive, hivenumber, src) - if(xeno_structure_flags & CRITICAL_STRUCTURE) - LAZYADDASSOC(GLOB.xeno_critical_structures_by_hive, hivenumber, src) - -/obj/structure/xeno/Destroy() - if(!locate(src) in GLOB.xeno_structures_by_hive[hivenumber]+GLOB.xeno_critical_structures_by_hive[hivenumber]) //The rest of the proc is pointless to look through if its not in the lists - stack_trace("[src] not found in the list of (potentially critical) xeno structures!") //We dont want to CRASH because that'd block deletion completely. Just trace it and continue. - return ..() - GLOB.xeno_structures_by_hive[hivenumber] -= src - if(xeno_structure_flags & CRITICAL_STRUCTURE) - GLOB.xeno_critical_structures_by_hive[hivenumber] -= src - return ..() - -/obj/structure/xeno/ex_act(severity) - take_damage(severity * 0.8, BRUTE, BOMB) - -/obj/structure/xeno/attack_hand(mob/living/user) - balloon_alert(user, "You only scrape at it") - return TRUE - -/obj/structure/xeno/flamer_fire_act(burnlevel) - take_damage(burnlevel / 3, BURN, FIRE) - -/obj/structure/xeno/fire_act() - take_damage(10, BURN, FIRE) - -/// Destroy the xeno structure when the weed it was on is destroyed -/obj/structure/xeno/proc/weed_removed() - SIGNAL_HANDLER - var/obj/alien/weeds/found_weed = locate(/obj/alien/weeds) in loc - if(found_weed.obj_integrity <= 0) - obj_destruction(damage_flag = MELEE) - else - obj_destruction() - -/obj/structure/xeno/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - if(!(HAS_TRAIT(xeno_attacker, TRAIT_VALHALLA_XENO) && xeno_attacker.a_intent == INTENT_HARM && (tgui_alert(xeno_attacker, "Are you sure you want to tear down [src]?", "Tear down [src]?", list("Yes","No"))) == "Yes")) - return ..() - if(!do_after(xeno_attacker, 3 SECONDS, NONE, src)) - return - xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) - balloon_alert_to_viewers("\The [xeno_attacker] tears down \the [src]!", "We tear down \the [src].") - playsound(src, "alien_resin_break", 25) - take_damage(max_integrity) // Ensure its destroyed - -//Carrier trap -/obj/structure/xeno/trap - desc = "It looks like a hiding hole." - name = "resin hole" - icon = 'icons/Xeno/Effects.dmi' - icon_state = "trap" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 5 - layer = RESIN_STRUCTURE_LAYER - destroy_sound = "alien_resin_break" - ///defines for trap type to trigger on activation - var/trap_type - ///The hugger inside our trap - var/obj/item/clothing/mask/facehugger/hugger = null - ///smoke effect to create when the trap is triggered - var/datum/effect_system/smoke_spread/smoke - ///connection list for huggers - var/static/list/listen_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(trigger_trap), - ) - -/obj/structure/xeno/trap/Initialize(mapload, _hivenumber) - . = ..() - RegisterSignal(src, COMSIG_MOVABLE_SHUTTLE_CRUSH, PROC_REF(shuttle_crush)) - AddElement(/datum/element/connect_loc, listen_connections) - -/obj/structure/xeno/trap/ex_act(severity) - take_damage(severity, BRUTE, BOMB) - -/obj/structure/xeno/trap/update_icon_state() - . = ..() - switch(trap_type) - if(TRAP_HUGGER) - icon_state = "traphugger" - if(TRAP_SMOKE_NEURO) - icon_state = "trapneurogas" - if(TRAP_SMOKE_ACID) - icon_state = "trapacidgas" - if(TRAP_ACID_WEAK) - icon_state = "trapacidweak" - if(TRAP_ACID_NORMAL) - icon_state = "trapacid" - if(TRAP_ACID_STRONG) - icon_state = "trapacidstrong" - else - icon_state = "trap" - -/obj/structure/xeno/trap/obj_destruction(damage_amount, damage_type, damage_flag) - if((damage_amount || damage_flag) && hugger && loc) - trigger_trap() - return ..() - -/obj/structure/xeno/trap/proc/set_trap_type(new_trap_type) - if(new_trap_type == trap_type) - return - trap_type = new_trap_type - update_icon() - -///Ensures that no huggies will be released when the trap is crushed by a shuttle; no more trapping shuttles with huggies -/obj/structure/xeno/trap/proc/shuttle_crush() - SIGNAL_HANDLER - qdel(src) - -/obj/structure/xeno/trap/examine(mob/user) - . = ..() - if(!isxeno(user)) - return - . += "A hole for a little one to hide in ambush for or for spewing acid." - switch(trap_type) - if(TRAP_HUGGER) - . += "There's a little one inside." - if(TRAP_SMOKE_NEURO) - . += "There's pressurized neurotoxin inside." - if(TRAP_SMOKE_ACID) - . += "There's pressurized acid gas inside." - if(TRAP_ACID_WEAK) - . += "There's pressurized weak acid inside." - if(TRAP_ACID_NORMAL) - . += "There's pressurized normal acid inside." - if(TRAP_ACID_STRONG) - . += "There's strong pressurized acid inside." - else - . += "It's empty." - -/obj/structure/xeno/trap/flamer_fire_act(burnlevel) - hugger?.kill_hugger() - trigger_trap() - set_trap_type(null) - -/obj/structure/xeno/trap/fire_act() - hugger?.kill_hugger() - trigger_trap() - set_trap_type(null) - -///Triggers the hugger trap -/obj/structure/xeno/trap/proc/trigger_trap(datum/source, atom/movable/AM, oldloc, oldlocs) - SIGNAL_HANDLER - if(!trap_type) - return - if(AM && (hivenumber == AM.get_xeno_hivenumber())) - return - playsound(src, "alien_resin_break", 25) - if(iscarbon(AM)) - var/mob/living/carbon/crosser = AM - crosser.visible_message(span_warning("[crosser] trips on [src]!"), span_danger("You trip on [src]!")) - crosser.ParalyzeNoChain(4 SECONDS) - switch(trap_type) - if(TRAP_HUGGER) - if(!AM) - drop_hugger() - return - if(!iscarbon(AM)) - return - var/mob/living/carbon/crosser = AM - if(!crosser.can_be_facehugged(hugger)) - return - drop_hugger() - if(TRAP_SMOKE_NEURO, TRAP_SMOKE_ACID) - smoke.start() - if(TRAP_ACID_WEAK) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray/weak(acided, 8 SECONDS, XENO_WEAK_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_NORMAL) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray(acided, 10 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_STRONG) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray/strong(acided, 12 SECONDS, XENO_HIGH_ACID_PUDDLE_DAMAGE) - xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) - set_trap_type(null) - -/// Move the hugger out of the trap -/obj/structure/xeno/trap/proc/drop_hugger() - hugger.forceMove(loc) - hugger.go_active(TRUE, TRUE) //Removes stasis - visible_message(span_warning("[hugger] gets out of [src]!") ) - hugger = null - set_trap_type(null) - -/obj/structure/xeno/trap/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(xeno_attacker.status_flags & INCORPOREAL) - return FALSE - - if(xeno_attacker.a_intent == INTENT_HARM) - return ..() - if(trap_type == TRAP_HUGGER) - if(!(xeno_attacker.xeno_caste.can_flags & CASTE_CAN_HOLD_FACEHUGGERS)) - return - if(!hugger) - balloon_alert(xeno_attacker, "It is empty") - return - xeno_attacker.put_in_active_hand(hugger) - hugger.go_active(TRUE) - hugger = null - set_trap_type(null) - balloon_alert(xeno_attacker, "Removed facehugger") - return - var/datum/action/ability/activable/xeno/corrosive_acid/acid_action = locate(/datum/action/ability/activable/xeno/corrosive_acid) in xeno_attacker.actions - if(istype(xeno_attacker.ammo, /datum/ammo/xeno/boiler_gas)) - var/datum/ammo/xeno/boiler_gas/boiler_glob = xeno_attacker.ammo - if(!boiler_glob.enhance_trap(src, xeno_attacker)) - return - else if(acid_action) - if(!do_after(xeno_attacker, 2 SECONDS, NONE, src)) - return - switch(acid_action.acid_type) - if(/obj/effect/xenomorph/acid/weak) - set_trap_type(TRAP_ACID_WEAK) - if(/obj/effect/xenomorph/acid) - set_trap_type(TRAP_ACID_NORMAL) - if(/obj/effect/xenomorph/acid/strong) - set_trap_type(TRAP_ACID_STRONG) - else - return // nothing happened! - playsound(xeno_attacker.loc, 'sound/effects/refill.ogg', 25, 1) - balloon_alert(xeno_attacker, "Filled with [trap_type]") - -/obj/structure/xeno/trap/attackby(obj/item/I, mob/user, params) - . = ..() - - if(!istype(I, /obj/item/clothing/mask/facehugger) || !isxeno(user)) - return - var/obj/item/clothing/mask/facehugger/FH = I - if(trap_type) - balloon_alert(user, "Already occupied") - return - - if(FH.stat == DEAD) - balloon_alert(user, "Cannot insert facehugger") - return - - user.transferItemToLoc(FH, src) - FH.go_idle(TRUE) - hugger = FH - set_trap_type(TRAP_HUGGER) - balloon_alert(user, "Inserted facehugger") - -//Sentient facehugger can get in the trap -/obj/structure/xeno/trap/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, isrightclick = FALSE) - . = ..() - if(tgui_alert(F, "Do you want to get into the trap?", "Get inside the trap", list("Yes", "No")) != "Yes") - return - - if(trap_type) - F.balloon_alert(F, "The trap is occupied") - return - - var/obj/item/clothing/mask/facehugger/FH = new(src) - FH.go_idle(TRUE) - hugger = FH - set_trap_type(TRAP_HUGGER) - - F.visible_message(span_xenowarning("[F] slides back into [src]."),span_xenonotice("You slides back into [src].")) - F.ghostize() - F.death(deathmessage = "get inside the trap", silent = TRUE) - qdel(F) - -/* -TUNNEL -*/ -/obj/structure/xeno/tunnel - name = "tunnel" - desc = "A tunnel entrance. Looks like it was dug by some kind of clawed beast." - icon = 'icons/Xeno/Effects.dmi' - icon_state = "hole" - - density = FALSE - opacity = FALSE - anchored = TRUE - resistance_flags = UNACIDABLE|BANISH_IMMUNE - layer = RESIN_STRUCTURE_LAYER - - max_integrity = 140 - - hud_possible = list(XENO_TACTICAL_HUD) - xeno_structure_flags = IGNORE_WEED_REMOVAL - ///Description added by the hivelord. - var/tunnel_desc = "" - ///What hivelord created that tunnel. Can be null - var/mob/living/carbon/xenomorph/hivelord/creator = null - -/obj/structure/xeno/tunnel/Initialize(mapload, _hivenumber) - . = ..() - LAZYADDASSOC(GLOB.xeno_tunnels_by_hive, hivenumber, src) - prepare_huds() - for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //Add to the xeno tachud - xeno_tac_hud.add_to_hud(src) - hud_set_xeno_tunnel() - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xenotunnel", HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/tunnel/Destroy() - var/turf/drop_loc = get_turf(src) - for(var/atom/movable/thing AS in contents) //Empty the tunnel of contents - thing.forceMove(drop_loc) - - if(!QDELETED(creator)) - to_chat(creator, span_xenoannounce("You sense your [name] at [tunnel_desc] has been destroyed!") ) //Alert creator - - xeno_message("Hive tunnel [name] at [tunnel_desc] has been destroyed!", "xenoannounce", 5, hivenumber) //Also alert hive because tunnels matter. - - LAZYREMOVE(GLOB.xeno_tunnels_by_hive[hivenumber], src) - if(creator) - creator.tunnels -= src - creator = null - - for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //HUD clean up - xeno_tac_hud.remove_from_hud(src) - SSminimaps.remove_marker(src) - - return ..() - -///Signal handler for creator destruction to clear reference -/obj/structure/xeno/tunnel/proc/clear_creator() - SIGNAL_HANDLER - creator = null - -/obj/structure/xeno/tunnel/examine(mob/user) - . = ..() - if(!isxeno(user) && !isobserver(user)) - return - if(tunnel_desc) - . += span_info("The Hivelord scent reads: \'[tunnel_desc]\'") - -/obj/structure/xeno/tunnel/deconstruct(disassembled = TRUE) - visible_message(span_danger("[src] suddenly collapses!") ) - return ..() - -/obj/structure/xeno/tunnel/attackby(obj/item/I, mob/user, params) - if(!isxeno(user)) - return ..() - attack_alien(user) - -/obj/structure/xeno/tunnel/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(!istype(xeno_attacker) || xeno_attacker.stat || xeno_attacker.lying_angle || xeno_attacker.status_flags & INCORPOREAL) - return - - if(xeno_attacker.a_intent == INTENT_HARM && xeno_attacker == creator) - balloon_alert(xeno_attacker, "Filling in tunnel...") - if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - deconstruct(FALSE) - return - - if(xeno_attacker.anchored) - balloon_alert(xeno_attacker, "Cannot enter while immobile") - return FALSE - - if(length(GLOB.xeno_tunnels_by_hive[hivenumber]) < 2) - balloon_alert(xeno_attacker, "No exit tunnel") - return FALSE - - pick_a_tunnel(xeno_attacker) - -/obj/structure/xeno/tunnel/attack_larva(mob/living/carbon/xenomorph/larva/L) //So larvas can actually use tunnels - attack_alien(L) - -/obj/structure/xeno/tunnel/attack_ghost(mob/dead/observer/user) - . = ..() - - var/list/obj/destinations = GLOB.xeno_tunnels_by_hive[hivenumber] - var/obj/structure/xeno/tunnel/targettunnel - if(LAZYLEN(destinations) > 2) - var/list/tunnel_assoc = list() - for(var/obj/D in destinations) - tunnel_assoc["X:[D.x], Y:[D.y] - \[[get_area(D)]\]"] = D - destinations = list() - for(var/d in tunnel_assoc) - destinations += d - var/input = tgui_input_list(user ,"Choose a tunnel to teleport to:" ,"Ghost Tunnel teleport" ,destinations ,null, 0) - if(!input) - return - targettunnel = tunnel_assoc[input] - if(!input) - return - else - //There are only 2 tunnels. Pick the other one. - for(var/P in destinations) - if(P != src) - targettunnel = P - if(!targettunnel || QDELETED(targettunnel) || !targettunnel.loc) - return - user.forceMove(get_turf(targettunnel)) - -///Here we pick a tunnel to go to, then travel to that tunnel and peep out, confirming whether or not we want to emerge or go to another tunnel. -/obj/structure/xeno/tunnel/proc/pick_a_tunnel(mob/living/carbon/xenomorph/M) - var/obj/structure/xeno/tunnel/targettunnel = tgui_input_list(M, "Choose a tunnel to crawl to", "Tunnel", GLOB.xeno_tunnels_by_hive[hivenumber]) - if(QDELETED(src)) //Make sure we still exist in the event the player keeps the interface open - return - if(!M.Adjacent(src) && M.loc != src) //Make sure we're close enough to our tunnel; either adjacent to or in one - return - if(QDELETED(targettunnel)) //Make sure our target destination still exists in the event the player keeps the interface open - balloon_alert(M, "Tunnel no longer exists") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - if(targettunnel == src) - balloon_alert(M, "We're already here") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - if(targettunnel.z != z) - balloon_alert(M, "Tunnel not connected") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - var/distance = get_dist(get_turf(src), get_turf(targettunnel)) - var/tunnel_time = clamp(distance, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_SMALL_MAX_TRAVEL_TIME) - - if(M.mob_size == MOB_SIZE_BIG) //Big xenos take longer - tunnel_time = clamp(distance * 1.5, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_LARGE_MAX_TRAVEL_TIME) - M.visible_message(span_xenonotice("[M] begins heaving their huge bulk down into \the [src].") , \ - span_xenonotice("We begin heaving our monstrous bulk into \the [src] to [targettunnel.tunnel_desc].") ) - else - M.visible_message(span_xenonotice("\The [M] begins crawling down into \the [src].") , \ - span_xenonotice("We begin crawling down into \the [src] to [targettunnel.tunnel_desc].") ) - - if(isxenolarva(M)) //Larva can zip through near-instantly, they are wormlike after all - tunnel_time = 5 - - if(!do_after(M, tunnel_time, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) - balloon_alert(M, "Crawling interrupted") - return - if(!targettunnel || !isturf(targettunnel.loc)) //Make sure the end tunnel is still there - balloon_alert(M, "Tunnel ended unexpectedly") - return - M.forceMove(targettunnel) - var/double_check = tgui_alert(M, "Emerge here?", "Tunnel: [targettunnel]", list("Yes","Pick another tunnel"), 0) - if(M.loc != targettunnel) //double check that we're still in the tunnel in the event it gets destroyed while we still have the interface open - return - if(double_check == "Pick another tunnel") - return targettunnel.pick_a_tunnel(M) - M.forceMove(targettunnel.loc) - M.visible_message(span_xenonotice("\The [M] pops out of \the [src].") , \ - span_xenonotice("We pop out through the other side!") ) - -///Makes sure the tunnel is visible to other xenos even through obscuration. -/obj/structure/xeno/tunnel/proc/hud_set_xeno_tunnel() - var/image/holder = hud_list[XENO_TACTICAL_HUD] - if(!holder) - return - holder.icon = 'icons/mob/hud.dmi' - holder.icon_state = "hudtraitor" - hud_list[XENO_TACTICAL_HUD] = holder - -/obj/structure/xeno/tunnel/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, isrightclick = FALSE) - attack_alien(F) - -//Resin Water Well -/obj/structure/xeno/acidwell - name = "acid well" - desc = "An acid well. It stores acid to put out fires." - icon = 'icons/Xeno/acid_pool.dmi' - plane = FLOOR_PLANE - icon_state = "well" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 5 - - hit_sound = "alien_resin_move" - destroy_sound = "alien_resin_move" - ///How many charges of acid this well contains - var/charges = 1 - ///If a xeno is charging this well - var/charging = FALSE - ///What xeno created this well - var/mob/living/carbon/xenomorph/creator = null - -/obj/structure/xeno/acidwell/Initialize(mapload, _creator) - . = ..() - creator = _creator - RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(clear_creator)) - update_icon() - var/static/list/connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_cross), - ) - AddElement(/datum/element/connect_loc, connections) - -/obj/structure/xeno/acidwell/Destroy() - creator = null - return ..() - -///Signal handler for creator destruction to clear reference -/obj/structure/xeno/acidwell/proc/clear_creator() - SIGNAL_HANDLER - creator = null - -///Ensures that no acid gas will be released when the well is crushed by a shuttle -/obj/structure/xeno/acidwell/proc/shuttle_crush() - SIGNAL_HANDLER - qdel(src) - - -/obj/structure/xeno/acidwell/obj_destruction(damage_amount, damage_type, damage_flag) - if(!QDELETED(creator) && creator.stat == CONSCIOUS && creator.z == z) - var/area/A = get_area(src) - if(A) - to_chat(creator, span_xenoannounce("You sense your acid well at [A.name] has been destroyed!") ) - - if(damage_amount || damage_flag) //Spawn the gas only if we actually get destroyed by damage - var/datum/effect_system/smoke_spread/xeno/acid/A = new(get_turf(src)) - A.set_up(clamp(CEILING(charges*0.5, 1),0,3),src) //smoke scales with charges - A.start() - return ..() - -/obj/structure/xeno/acidwell/examine(mob/user) - . = ..() - if(!isxeno(user) && !isobserver(user)) - return - . += span_xenonotice("An acid well made by [creator]. It currently has [charges]/[XENO_ACID_WELL_MAX_CHARGES] charges.") - -/obj/structure/xeno/acidwell/deconstruct(disassembled = TRUE) - visible_message(span_danger("[src] suddenly collapses!") ) - return ..() - -/obj/structure/xeno/acidwell/update_icon() - . = ..() - set_light(charges , charges / 2, LIGHT_COLOR_GREEN) - -/obj/structure/xeno/acidwell/update_overlays() - . = ..() - if(!charges) - return - . += mutable_appearance(icon, "[charges]", alpha = src.alpha) - . += emissive_appearance(icon, "[charges]", alpha = src.alpha) - -/obj/structure/xeno/acidwell/flamer_fire_act(burnlevel) //Removes a charge of acid, but fire is extinguished - acid_well_fire_interaction() - -/obj/structure/xeno/acidwell/fire_act() //Removes a charge of acid, but fire is extinguished - acid_well_fire_interaction() - -///Handles fire based interactions with the acid well. Depletes 1 charge if there are any to extinguish all fires in the turf while producing acid smoke. -/obj/structure/xeno/acidwell/proc/acid_well_fire_interaction() - if(!charges) - take_damage(50, BURN, FIRE) - return - - charges-- - update_icon() - var/turf/T = get_turf(src) - var/datum/effect_system/smoke_spread/xeno/acid/extuingishing/acid_smoke = new(T) //spawn acid smoke when charges are actually used - acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity - acid_smoke.start() - - for(var/obj/flamer_fire/F in T) //Extinguish all flames in turf - qdel(F) - -/obj/structure/xeno/acidwell/attackby(obj/item/I, mob/user, params) - if(!isxeno(user)) - return ..() - attack_alien(user) - -/obj/structure/xeno/acidwell/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(xeno_attacker.a_intent == INTENT_HARM && (CHECK_BITFIELD(xeno_attacker.xeno_caste.caste_flags, CASTE_IS_BUILDER) || xeno_attacker == creator) ) //If we're a builder caste or the creator and we're on harm intent, deconstruct it. - balloon_alert(xeno_attacker, "Removing...") - if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) - balloon_alert(xeno_attacker, "Stopped removing") - return - playsound(src, "alien_resin_break", 25) - deconstruct(TRUE, xeno_attacker) - return - - if(charges >= 5) - balloon_alert(xeno_attacker, "Already full") - return - if(charging) - balloon_alert(xeno_attacker, "Already being filled") - return - - if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) //You need to have enough plasma to attempt to fill the well - balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") - return - - charging = TRUE - - balloon_alert(xeno_attacker, "Refilling...") - if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - charging = FALSE - balloon_alert(xeno_attacker, "Aborted refilling") - return - - if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) - charging = FALSE - balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") - return - - xeno_attacker.plasma_stored -= XENO_ACID_WELL_FILL_COST - charges++ - charging = FALSE - update_icon() - balloon_alert(xeno_attacker, "Now has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges") - to_chat(xeno_attacker,span_xenonotice("We add acid to [src]. It is currently has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges.") ) - -/obj/structure/xeno/acidwell/proc/on_cross(datum/source, atom/movable/A, oldloc, oldlocs) - SIGNAL_HANDLER - if(CHECK_MULTIPLE_BITFIELDS(A.allow_pass_flags, HOVERING)) - return - if(iscarbon(A)) - HasProximity(A) - -/obj/structure/xeno/acidwell/HasProximity(atom/movable/AM) - if(!charges) - return - if(!isliving(AM)) - return - var/mob/living/stepper = AM - if(stepper.stat == DEAD) - return - - var/charges_used = 0 - - for(var/obj/item/explosive/grenade/sticky/sticky_bomb in stepper.contents) - if(charges_used >= charges) - break - if(sticky_bomb.stuck_to == stepper) - sticky_bomb.clean_refs() - sticky_bomb.forceMove(loc) // i'm not sure if this is even needed, but just to prevent possible bugs - visible_message(span_danger("[src] sizzles as [sticky_bomb] melts down in the acid.")) - qdel(sticky_bomb) - charges_used ++ - - if(stepper.on_fire && (charges_used < charges)) - stepper.ExtinguishMob() - charges_used ++ - - if(!isxeno(stepper)) - stepper.next_move_slowdown += charges * 2 //Acid spray has slow down so this should too; scales with charges, Min 2 slowdown, Max 10 - stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_L_FOOT, ACID, penetration = 33) - stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_R_FOOT, ACID, penetration = 33) - stepper.visible_message(span_danger("[stepper] is immersed in [src]'s acid!") , \ - span_danger("We are immersed in [src]'s acid!") , null, 5) - playsound(stepper, "sound/bullets/acid_impact1.ogg", 10 * charges) - new /obj/effect/temp_visual/acid_bath(get_turf(stepper)) - charges_used = charges //humans stepping on it empties it out - - if(!charges_used) - return - - var/datum/effect_system/smoke_spread/xeno/acid/extuingishing/acid_smoke - acid_smoke = new(get_turf(stepper)) //spawn acid smoke when charges are actually used - acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity - acid_smoke.start() - - charges -= charges_used - update_icon() - -/obj/structure/xeno/resin_jelly_pod - name = "Resin jelly pod" - desc = "A large resin pod. Inside is a thick, viscous fluid that looks like it doesnt burn easily." - icon = 'icons/Xeno/resinpod.dmi' - icon_state = "resinpod" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 250 - layer = RESIN_STRUCTURE_LAYER - pixel_x = -16 - pixel_y = -16 - xeno_structure_flags = IGNORE_WEED_REMOVAL - - hit_sound = "alien_resin_move" - destroy_sound = "alien_resin_move" - ///How many actual jellies the pod has stored - var/chargesleft = 0 - ///Max amount of jellies the pod can hold - var/maxcharges = 10 - ///Every 5 times this number seconds we will create a jelly - var/recharge_rate = 10 - ///Countdown to the next time we generate a jelly - var/nextjelly = 0 - -/obj/structure/xeno/resin_jelly_pod/Initialize(mapload, _hivenumber) - . = ..() - add_overlay(image(icon, "resinpod_inside", layer + 0.01, dir)) - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/resin_jelly_pod/Destroy() - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/resin_jelly_pod/examine(mob/user, distance, infix, suffix) - . = ..() - if(isxeno(user)) - . += "It has [chargesleft] jelly globules remaining[datum_flags & DF_ISPROCESSING ? ", and will create a new jelly in [(recharge_rate-nextjelly)*5] seconds": " and seems latent"]." - -/obj/structure/xeno/resin_jelly_pod/process() - if(nextjelly <= recharge_rate) - nextjelly++ - return - nextjelly = 0 - chargesleft++ - if(chargesleft >= maxcharges) - return PROCESS_KILL - -/obj/structure/xeno/resin_jelly_pod/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(xeno_attacker.status_flags & INCORPOREAL) - return FALSE - - if((xeno_attacker.a_intent == INTENT_HARM && isxenohivelord(xeno_attacker)) || xeno_attacker.hivenumber != hivenumber) - balloon_alert(xeno_attacker, "Destroying...") - if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - deconstruct(FALSE) - return - - if(!chargesleft) - balloon_alert(xeno_attacker, "No jelly remaining") - to_chat(xeno_attacker, span_xenonotice("We reach into \the [src], but only find dregs of resin. We should wait some more.") ) - return - balloon_alert(xeno_attacker, "Retrieved jelly") - new /obj/item/resin_jelly(loc) - chargesleft-- - if(!(datum_flags & DF_ISPROCESSING) && (chargesleft < maxcharges)) - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/silo - name = "Resin silo" - icon = 'icons/Xeno/resin_silo.dmi' - icon_state = "weed_silo" - desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." - bound_width = 96 - bound_height = 96 - max_integrity = 1000 - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL|CRITICAL_STRUCTURE - plane = FLOOR_PLANE - ///How many larva points one silo produce in one minute - var/larva_spawn_rate = 0.5 - var/turf/center_turf - var/number_silo - ///For minimap icon change if silo takes damage or nearby hostile - var/warning - COOLDOWN_DECLARE(silo_damage_alert_cooldown) - COOLDOWN_DECLARE(silo_proxy_alert_cooldown) - -/obj/structure/xeno/silo/Initialize(mapload, _hivenumber) - . = ..() - center_turf = get_step(src, NORTHEAST) - if(!istype(center_turf)) - center_turf = loc - - if(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN) - for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) - RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(resin_silo_proxy_alert)) - - if(SSticker.mode?.flags_round_type & MODE_SILOS_SPAWN_MINIONS) - SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, null) - SSspawning.spawnerdata[src].required_increment = 2 * max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait - SSspawning.spawnerdata[src].max_allowed_mobs = max(1, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count * 0.5) - update_minimap_icon() - - return INITIALIZE_HINT_LATELOAD - - -/obj/structure/xeno/silo/LateInitialize() - . = ..() - var/siloprefix = GLOB.hive_datums[hivenumber].name - number_silo = length(GLOB.xeno_resin_silos_by_hive[hivenumber]) + 1 - name = "[siloprefix == "Normal" ? "" : "[siloprefix] "][name] [number_silo]" - LAZYADDASSOC(GLOB.xeno_resin_silos_by_hive, hivenumber, src) - - if(!locate(/obj/alien/weeds) in center_turf) - new /obj/alien/weeds/node(center_turf) - if(GLOB.hive_datums[hivenumber]) - RegisterSignals(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK), PROC_REF(is_burrowed_larva_host)) - if(length(GLOB.xeno_resin_silos_by_hive[hivenumber]) == 1) - GLOB.hive_datums[hivenumber].give_larva_to_next_in_queue() - var/turf/tunnel_turf = get_step(center_turf, NORTH) - if(tunnel_turf.can_dig_xeno_tunnel()) - var/obj/structure/xeno/tunnel/newt = new(tunnel_turf, hivenumber) - newt.tunnel_desc = "[AREACOORD_NO_Z(newt)]" - newt.name += " [name]" - if(GLOB.hive_datums[hivenumber]) - SSticker.mode.update_silo_death_timer(GLOB.hive_datums[hivenumber]) - -/obj/structure/xeno/silo/obj_destruction(damage_amount, damage_type, damage_flag) - if(GLOB.hive_datums[hivenumber]) - INVOKE_NEXT_TICK(SSticker.mode, TYPE_PROC_REF(/datum/game_mode, update_silo_death_timer), GLOB.hive_datums[hivenumber]) // checks all silos next tick after this one is gone - UnregisterSignal(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK)) - GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien_help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) - notify_ghosts("\ A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", source = get_turf(src), action = NOTIFY_JUMP) - playsound(loc,'sound/effects/alien_egg_burst.ogg', 75) - return ..() - -/obj/structure/xeno/silo/Destroy() - GLOB.xeno_resin_silos_by_hive[hivenumber] -= src - - for(var/i in contents) - var/atom/movable/AM = i - AM.forceMove(get_step(center_turf, pick(CARDINAL_ALL_DIRS))) - center_turf = null - - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/silo/examine(mob/user) - . = ..() - var/current_integrity = (obj_integrity / max_integrity) * 100 - switch(current_integrity) - if(0 to 20) - . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") - if(20 to 40) - . += span_warning("It looks severely damaged, its movements slow.") - if(40 to 60) - . += span_warning("It's quite beat up, but it seems alive.") - if(60 to 80) - . += span_warning("It's slightly damaged, but still seems healthy.") - if(80 to 100) - . += span_info("It appears in good shape, pulsating healthily.") - - -/obj/structure/xeno/silo/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) - . = ..() - - //We took damage, so it's time to start regenerating if we're not already processing - if(!CHECK_BITFIELD(datum_flags, DF_ISPROCESSING)) - START_PROCESSING(SSslowprocess, src) - - resin_silo_damage_alert() - -/obj/structure/xeno/silo/proc/resin_silo_damage_alert() - if(!COOLDOWN_CHECK(src, silo_damage_alert_cooldown)) - return - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) - COOLDOWN_START(src, silo_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_HEALTH_ALERT_COOLDOWN) //clear warning - -///Alerts the Hive when hostiles get too close to their resin silo -/obj/structure/xeno/silo/proc/resin_silo_proxy_alert(datum/source, atom/movable/hostile, direction) - SIGNAL_HANDLER - - if(!COOLDOWN_CHECK(src, silo_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort - return - - if(!isliving(hostile)) - return - - var/mob/living/living_triggerer = hostile - if(living_triggerer.stat == DEAD) //We don't care about the dead - return - - if(isxeno(hostile)) - var/mob/living/carbon/xenomorph/X = hostile - if(X.hive == GLOB.hive_datums[hivenumber]) //Trigger proxy alert only for hostile xenos - return - - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) - COOLDOWN_START(src, silo_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Clears the warning for minimap if its warning for hostiles -/obj/structure/xeno/silo/proc/clear_warning() - warning = FALSE - update_minimap_icon() - -/obj/structure/xeno/silo/process() - //Regenerate if we're at less than max integrity - if(obj_integrity < max_integrity) - obj_integrity = min(obj_integrity + 25, max_integrity) //Regen 5 HP per sec - -/obj/structure/xeno/silo/proc/is_burrowed_larva_host(datum/source, list/mothers, list/silos) - SIGNAL_HANDLER - if(GLOB.hive_datums[hivenumber]) - silos += src - -///Change minimap icon if silo is under attack or not -/obj/structure/xeno/silo/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "silo[warning ? "_warn" : "_passive"]", VERY_HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/silo/crash - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE | INDESTRUCTIBLE - -/obj/structure/xeno/xeno_turret - icon = 'icons/Xeno/acidturret.dmi' - icon_state = XENO_TURRET_ACID_ICONSTATE - name = "acid turret" - desc = "A menacing looking construct of resin, it seems to be alive. It fires acid against intruders." - bound_width = 32 - bound_height = 32 - obj_integrity = 600 - max_integrity = 1500 - layer = ABOVE_MOB_LAYER - density = TRUE - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE |PORTAL_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL|HAS_OVERLAY - allow_pass_flags = PASS_AIR|PASS_THROW - ///What kind of spit it uses - var/datum/ammo/ammo = /datum/ammo/xeno/acid/heavy/turret - ///Range of the turret - var/range = 7 - ///Target of the turret - var/atom/hostile - ///Last target of the turret - var/atom/last_hostile - ///Potential list of targets found by scan - var/list/atom/potential_hostiles - ///Fire rate of the target in ticks - var/firerate = 5 - ///The last time the sentry did a scan - var/last_scan_time - ///light color that gets set in initialize - var/light_initial_color = LIGHT_COLOR_GREEN - ///For minimap icon change if sentry is firing - var/firing - -///Change minimap icon if its firing or not firing -/obj/structure/xeno/xeno_turret/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xeno_turret[firing ? "_firing" : "_passive"]")) // RU TGMC edit - map blips - -/obj/structure/xeno/xeno_turret/Initialize(mapload, _hivenumber) - . = ..() - ammo = GLOB.ammo_list[ammo] - potential_hostiles = list() - LAZYADDASSOC(GLOB.xeno_resin_turrets_by_hive, hivenumber, src) - START_PROCESSING(SSobj, src) - AddComponent(/datum/component/automatedfire/xeno_turret_autofire, firerate) - RegisterSignal(src, COMSIG_AUTOMATIC_SHOOTER_SHOOT, PROC_REF(shoot)) - RegisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_HIJACKED, PROC_REF(destroy_on_hijack)) - if(light_initial_color) - set_light(2, 2, light_initial_color) - update_minimap_icon() - update_icon() - -///Signal handler to delete the turret when the alamo is hijacked -/obj/structure/xeno/xeno_turret/proc/destroy_on_hijack() - SIGNAL_HANDLER - qdel(src) - -/obj/structure/xeno/xeno_turret/obj_destruction(damage_amount, damage_type, damage_flag) - if(damage_amount) //Spawn effects only if we actually get destroyed by damage - on_destruction() - return ..() - -/obj/structure/xeno/xeno_turret/proc/on_destruction() - var/datum/effect_system/smoke_spread/xeno/smoke = new /datum/effect_system/smoke_spread/xeno/acid(src) - smoke.set_up(1, get_turf(src)) - smoke.start() - -/obj/structure/xeno/xeno_turret/Destroy() - GLOB.xeno_resin_turrets_by_hive[hivenumber] -= src - set_hostile(null) - set_last_hostile(null) - STOP_PROCESSING(SSobj, src) - playsound(loc,'sound/effects/xeno_turret_death.ogg', 70) - return ..() - -/obj/structure/xeno/xeno_turret/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(1500, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(750, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(300, BRUTE, BOMB) - -/obj/structure/xeno/xeno_turret/flamer_fire_act(burnlevel) - take_damage(burnlevel * 2, BURN, FIRE) - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - -/obj/structure/xeno/xeno_turret/fire_act() - take_damage(60, BURN, FIRE) - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - -/obj/structure/xeno/xeno_turret/update_overlays() - . = ..() - if(!(xeno_structure_flags & HAS_OVERLAY)) - return - if(obj_integrity <= max_integrity / 2) - . += image('icons/Xeno/acidturret.dmi', src, "+turret_damage") - if(CHECK_BITFIELD(resistance_flags, ON_FIRE)) - . += image('icons/Xeno/acidturret.dmi', src, "+turret_on_fire") - -/obj/structure/xeno/xeno_turret/process() - //Turrets regen some HP, every 2 sec - if(obj_integrity < max_integrity) - obj_integrity = min(obj_integrity + TURRET_HEALTH_REGEN, max_integrity) - update_icon() - DISABLE_BITFIELD(resistance_flags, ON_FIRE) - if(world.time > last_scan_time + TURRET_SCAN_FREQUENCY) - scan() - last_scan_time = world.time - if(!length(potential_hostiles)) - return - set_hostile(get_target()) - if (!hostile) - if(last_hostile) - set_last_hostile(null) - return - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_XENO_TURRETS_ALERT)) - GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) - TIMER_COOLDOWN_START(src, COOLDOWN_XENO_TURRETS_ALERT, 20 SECONDS) - if(hostile != last_hostile) - set_last_hostile(hostile) - SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_START_SHOOTING_AT) - -/obj/structure/xeno/xeno_turret/attackby(obj/item/I, mob/living/user, params) - if(I.flags_item & NOBLUDGEON || !isliving(user)) - return attack_hand(user) - - user.changeNext_move(I.attack_speed) - user.do_attack_animation(src, used_item = I) - - var/damage = I.force - var/multiplier = 1 - if(I.damtype == BURN) //Burn damage deals extra vs resin structures (mostly welders). - multiplier += 1 - - if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) - var/obj/item/tool/pickaxe/plasmacutter/P = I - if(P.start_cut(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) - multiplier += PLASMACUTTER_RESIN_MULTIPLIER - P.cut_apart(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD) - - damage *= max(0, multiplier) - take_damage(damage, BRUTE, MELEE) - playsound(src, "alien_resin_break", 25) - -///Signal handler for hard del of hostile -/obj/structure/xeno/xeno_turret/proc/unset_hostile() - SIGNAL_HANDLER - hostile = null - -///Signal handler for hard del of last_hostile -/obj/structure/xeno/xeno_turret/proc/unset_last_hostile() - SIGNAL_HANDLER - last_hostile = null - -///Setter for hostile with hard del in mind -/obj/structure/xeno/xeno_turret/proc/set_hostile(_hostile) - if(hostile != _hostile) - hostile = _hostile - RegisterSignal(hostile, COMSIG_QDELETING, PROC_REF(unset_hostile)) - -///Setter for last_hostile with hard del in mind -/obj/structure/xeno/xeno_turret/proc/set_last_hostile(_last_hostile) - if(last_hostile) - UnregisterSignal(last_hostile, COMSIG_QDELETING) - last_hostile = _last_hostile - -///Look for the closest human in range and in light of sight. If no human is in range, will look for xenos of other hives -/obj/structure/xeno/xeno_turret/proc/get_target() - var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system - var/buffer_distance - var/list/turf/path = list() - for (var/atom/nearby_hostile AS in potential_hostiles) - if(isliving(nearby_hostile)) - var/mob/living/nearby_living_hostile = nearby_hostile - if(nearby_living_hostile.stat == DEAD) - continue - if(HAS_TRAIT(nearby_hostile, TRAIT_TURRET_HIDDEN)) - continue - buffer_distance = get_dist(nearby_hostile, src) - if (distance <= buffer_distance) //If we already found a target that's closer - continue - path = getline(src, nearby_hostile) - path -= get_turf(src) - if(!length(path)) //Can't shoot if it's on the same turf - continue - var/blocked = FALSE - for(var/turf/T AS in path) - if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - - for(var/obj/machinery/MA in T) - if(MA.opacity || MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - - for(var/obj/structure/S in T) - if(S.opacity || S.density && !(S.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - if(!blocked) - distance = buffer_distance - . = nearby_hostile - -///Return TRUE if a possible target is near -/obj/structure/xeno/xeno_turret/proc/scan() - potential_hostiles.Cut() - for (var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, TURRET_SCAN_RANGE)) - if(nearby_human.stat == DEAD) - continue - if(nearby_human.get_xeno_hivenumber() == hivenumber) - continue - potential_hostiles += nearby_human - for (var/mob/living/carbon/xenomorph/nearby_xeno AS in cheap_get_xenos_near(src, range)) - if(GLOB.hive_datums[hivenumber] == nearby_xeno.hive) - continue - if(nearby_xeno.stat == DEAD) - continue - potential_hostiles += nearby_xeno - for(var/obj/vehicle/unmanned/vehicle AS in GLOB.unmanned_vehicles) - if(vehicle.z == z && get_dist(vehicle, src) <= range) - potential_hostiles += vehicle - for(var/obj/vehicle/sealed/mecha/mech AS in GLOB.mechas_list) - if(mech.z == z && get_dist(mech, src) <= range) - potential_hostiles += mech - -///Signal handler to make the turret shoot at its target -/obj/structure/xeno/xeno_turret/proc/shoot() - SIGNAL_HANDLER - if(!hostile) - SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_STOP_SHOOTING_AT) - firing = FALSE - update_minimap_icon() - return - face_atom(hostile) - var/obj/projectile/newshot = new(loc) - newshot.generate_bullet(ammo) - newshot.def_zone = pick(GLOB.base_miss_chance) - newshot.fire_at(hostile, src, null, ammo.max_range, ammo.shell_speed) - if(istype(ammo, /datum/ammo/xeno/hugger)) - var/datum/ammo/xeno/hugger/hugger_ammo = ammo - newshot.color = initial(hugger_ammo.hugger_type.color) - hugger_ammo.hivenumber = hivenumber - firing = TRUE - update_minimap_icon() - -/obj/structure/xeno/xeno_turret/sticky - name = "Sticky resin turret" - icon = 'icons/Xeno/acidturret.dmi' - icon_state = XENO_TURRET_STICKY_ICONSTATE - desc = "A menacing looking construct of resin, it seems to be alive. It fires resin against intruders." - light_initial_color = LIGHT_COLOR_PURPLE - ammo = /datum/ammo/xeno/sticky/turret - firerate = 5 - -/obj/structure/xeno/xeno_turret/sticky/on_destruction() - for(var/i = 1 to 20) // maybe a bit laggy - var/obj/projectile/new_proj = new(src) - new_proj.generate_bullet(ammo) - new_proj.fire_at(null, src, range = rand(1, 4), angle = rand(1, 360), recursivity = TRUE) - -/obj/structure/xeno/xeno_turret/hugger_turret - name = "hugger turret" - icon_state = "hugger_turret" - desc = "A menacing looking construct of resin, it seems to be alive. It fires huggers against intruders." - obj_integrity = 400 - max_integrity = 400 - light_initial_color = LIGHT_COLOR_BROWN - ammo = /datum/ammo/xeno/hugger - firerate = 5 SECONDS - -/obj/structure/xeno/xeno_turret/hugger_turret/on_destruction() - for(var/i = 1 to 5) - var/obj/projectile/new_proj = new(src) - new_proj.generate_bullet(ammo) - new_proj.fire_at(null, src, range = rand(1, 3), angle = rand(1, 360), recursivity = TRUE) - -/obj/structure/xeno/evotower - name = "evolution tower" - desc = "A sickly outcrop from the ground. It seems to ooze a strange chemical that shimmers and warps the ground around it." - icon = 'icons/Xeno/2x2building.dmi' - icon_state = "evotower" - bound_width = 64 - bound_height = 64 - obj_integrity = 600 - max_integrity = 600 - xeno_structure_flags = CRITICAL_STRUCTURE - ///boost amt to be added per tower per cycle - var/boost_amount = 0.2 - -/obj/structure/xeno/evotower/Initialize(mapload, _hivenumber) - . = ..() - GLOB.hive_datums[hivenumber].evotowers += src - set_light(2, 2, LIGHT_COLOR_GREEN) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "tower")) - -/obj/structure/xeno/evotower/Destroy() - GLOB.hive_datums[hivenumber].evotowers -= src - return ..() - -/obj/structure/xeno/evotower/ex_act(severity) - take_damage(severity * 2.5, BRUTE, BOMB) - -/obj/structure/xeno/psychictower - name = "Psychic Relay" - desc = "A sickly outcrop from the ground. It seems to allow for more advanced growth of the Xenomorphs." - icon = 'icons/Xeno/2x2building.dmi' - icon_state = "maturitytower" - bound_width = 64 - bound_height = 64 - obj_integrity = 400 - max_integrity = 400 - xeno_structure_flags = CRITICAL_STRUCTURE - -/obj/structure/xeno/psychictower/Initialize(mapload, _hivenumber) - . = ..() - GLOB.hive_datums[hivenumber].psychictowers += src - set_light(2, 2, LIGHT_COLOR_GREEN) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "tower")) - -/obj/structure/xeno/psychictower/Destroy() - GLOB.hive_datums[hivenumber].psychictowers -= src - return ..() - -/obj/structure/xeno/psychictower/ex_act(severity) - take_damage(severity * 2.5, BRUTE, BOMB) - -/obj/structure/xeno/pherotower - name = "Pheromone tower" - desc = "A resin formation that looks like a small pillar. A faint, weird smell can be perceived from it." - icon = 'icons/Xeno/1x1building.dmi' - icon_state = "recoverytower" - bound_width = 32 - bound_height = 32 - obj_integrity = 400 - max_integrity = 400 - xeno_structure_flags = CRITICAL_STRUCTURE - ///The type of pheromone currently being emitted. - var/datum/aura_bearer/current_aura - ///Strength of pheromones given by this tower. - var/aura_strength = 5 - ///Radius (in tiles) of the pheromones given by this tower. - var/aura_radius = 32 - -/obj/structure/xeno/pherotower/Initialize(mapload, _hivenumber) - . = ..() - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "phero", ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips - GLOB.hive_datums[hivenumber].pherotowers += src - -//Pheromone towers start off with recovery. - current_aura = SSaura.add_emitter(src, AURA_XENO_RECOVERY, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) - playsound(src, "alien_drool", 25) - update_icon() - -/obj/structure/xeno/pherotower/ex_act(severity) - take_damage(severity * 2.5, BRUTE, BOMB) - -/obj/structure/xeno/pherotower/Destroy() - GLOB.hive_datums[hivenumber].pherotowers -= src - return ..() - -// Clicking on the tower brings up a radial menu that allows you to select the type of pheromone that this tower will emit. -/obj/structure/xeno/pherotower/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - var/phero_choice = show_radial_menu(xeno_attacker, src, GLOB.pheromone_images_list, radius = 35, require_near = TRUE) - - if(!phero_choice) - return - - QDEL_NULL(current_aura) - current_aura = SSaura.add_emitter(src, phero_choice, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) - balloon_alert(xeno_attacker, "[phero_choice]") - playsound(src, "alien_drool", 25) - update_icon() - -/obj/structure/xeno/pherotower/update_icon_state() - . = ..() - switch(current_aura.aura_types[1]) - if(AURA_XENO_RECOVERY) - icon_state = "recoverytower" - set_light(2, 2, LIGHT_COLOR_BLUE) - if(AURA_XENO_WARDING) - icon_state = "wardingtower" - set_light(2, 2, LIGHT_COLOR_GREEN) - if(AURA_XENO_FRENZY) - icon_state = "frenzytower" - set_light(2, 2, LIGHT_COLOR_RED) - -/obj/structure/xeno/pherotower/crash - name = "Recovery tower" - resistance_flags = RESIST_ALL - xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE - -/obj/structure/xeno/pherotower/crash/attack_alien(isrightclick = FALSE) - return - -/obj/structure/xeno/spawner - icon = 'icons/Xeno/2x2building.dmi.dmi' - bound_width = 64 - bound_height = 64 - plane = FLOOR_PLANE - name = "spawner" - desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." - icon_state = "spawner" - max_integrity = 500 - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE - ///For minimap icon change if silo takes damage or nearby hostile - var/warning - COOLDOWN_DECLARE(spawner_damage_alert_cooldown) - COOLDOWN_DECLARE(spawner_proxy_alert_cooldown) - var/linked_minions = list() - -/obj/structure/xeno/spawner/Initialize(mapload, _hivenumber) - . = ..() - LAZYADDASSOC(GLOB.xeno_spawners_by_hive, hivenumber, src) - SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, CALLBACK(src, PROC_REF(on_spawn))) - SSspawning.spawnerdata[src].required_increment = max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait - SSspawning.spawnerdata[src].max_allowed_mobs = max(2, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count) - set_light(2, 2, LIGHT_COLOR_GREEN) - for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) - RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(spawner_proxy_alert)) - update_minimap_icon() - -/obj/structure/xeno/spawner/examine(mob/user) - . = ..() - var/current_integrity = (obj_integrity / max_integrity) * 100 - switch(current_integrity) - if(0 to 20) - . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") - if(20 to 40) - . += span_warning("It looks severely damaged, its movements slow.") - if(40 to 60) - . += span_warning("It's quite beat up, but it seems alive.") - if(60 to 80) - . += span_warning("It's slightly damaged, but still seems healthy.") - if(80 to 100) - . += span_info("It appears in good shape, pulsating healthily.") - - -/obj/structure/xeno/spawner/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) - . = ..() - spawner_damage_alert() - -///Alert if spawner is receiving damage -/obj/structure/xeno/spawner/proc/spawner_damage_alert() - if(!COOLDOWN_CHECK(src, spawner_damage_alert_cooldown)) - warning = FALSE - return - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) - COOLDOWN_START(src, spawner_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Alerts the Hive when hostiles get too close to their spawner -/obj/structure/xeno/spawner/proc/spawner_proxy_alert(datum/source, atom/movable/hostile, direction) - SIGNAL_HANDLER - - if(!COOLDOWN_CHECK(src, spawner_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort - warning = FALSE - return - - if(!isliving(hostile)) - return - - var/mob/living/living_triggerer = hostile - if(living_triggerer.stat == DEAD) //We don't care about the dead - return - - if(isxeno(hostile)) - var/mob/living/carbon/xenomorph/X = hostile - if(X.hivenumber == hivenumber) //Trigger proxy alert only for hostile xenos - return - - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) - COOLDOWN_START(src, spawner_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Clears the warning for minimap if its warning for hostiles -/obj/structure/xeno/spawner/proc/clear_warning() - warning = FALSE - update_minimap_icon() - -/obj/structure/xeno/spawner/Destroy() - GLOB.xeno_spawners_by_hive[hivenumber] -= src - return ..() - -///Change minimap icon if spawner is under attack or not -/obj/structure/xeno/spawner/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "spawner[warning ? "_warn" : "_passive"]", , ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/spawner/proc/on_spawn(list/squad) - if(!isxeno(squad[length(squad)])) - CRASH("Xeno spawner somehow tried to spawn a non xeno (tried to spawn [squad[length(squad)]])") - var/mob/living/carbon/xenomorph/X = squad[length(squad)] - X.transfer_to_hive(hivenumber) - linked_minions = squad - if(hivenumber == XENO_HIVE_FALLEN) //snowflake so valhalla isnt filled with minions after you're done - RegisterSignal(src, COMSIG_QDELETING, PROC_REF(kill_linked_minions)) - -/obj/structure/xeno/spawner/proc/kill_linked_minions() - for(var/mob/living/carbon/xenomorph/linked in linked_minions) - linked.death(TRUE) - UnregisterSignal(src, COMSIG_QDELETING) - -///Those structures need time to grow and are supposed to be extremely weak healh-wise -/obj/structure/xeno/plant - name = "Xeno Plant" - max_integrity = 5 - icon = 'icons/Xeno/plants.dmi' - interaction_flags = INTERACT_CHECK_INCAPACITATED - ///The plant's icon once it's fully grown - var/mature_icon_state - ///Is the plant ready to be used ? - var/mature = FALSE - ///How long does it take for the plant to be useable - var/maturation_time = 2 MINUTES - -/obj/structure/xeno/plant/Initialize(mapload, _hivenumber) - . = ..() - addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "[mature_icon_state]")) - -/obj/structure/xeno/plant/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(!mature && isxeno(user)) - balloon_alert(user, "Not fully grown") - return FALSE - -/obj/structure/xeno/plant/update_icon_state() - . = ..() - icon_state = (mature) ? mature_icon_state : initial(icon_state) - -///Called whenever someone uses the plant, xeno or marine -/obj/structure/xeno/plant/proc/on_use(mob/user) - mature = FALSE - update_icon() - addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) - return TRUE - -///Called when the plant reaches maturity -/obj/structure/xeno/plant/proc/on_mature(mob/user) - playsound(src, "alien_resin_build", 25) - mature = TRUE - update_icon() - -/obj/structure/xeno/plant/attack_hand(mob/living/user) - if(!can_interact(user)) - return ..() - return on_use(user) - -/obj/structure/xeno/plant/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if((xeno_attacker.status_flags & INCORPOREAL)) - return FALSE - - if(xeno_attacker.a_intent == INTENT_HARM && isxenodrone(xeno_attacker)) - balloon_alert(xeno_attacker, "Uprooted the plant") - xeno_attacker.do_attack_animation(src) - deconstruct(FALSE) - return FALSE - if(can_interact(xeno_attacker)) - return on_use(xeno_attacker) - return TRUE - -/obj/structure/xeno/plant/heal_fruit - name = "life fruit" - desc = "It would almost be appetizing wasn't it for the green colour and the shifting fluids inside..." - icon_state = "heal_fruit_immature" - mature_icon_state = "heal_fruit" - ///Minimum amount of health recovered - var/healing_amount_min = 125 - ///Maximum amount of health recovered, depends on the xeno's max health - var/healing_amount_max_health_scaling = 0.5 - -/obj/structure/xeno/plant/heal_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - var/datum/effect_system/smoke_spread/xeno/acid/plant_explosion = new(get_turf(src)) - plant_explosion.set_up(3,src) - plant_explosion.start() - visible_message(span_danger("[src] bursts, releasing toxic gas!")) - qdel(src) - return TRUE - - var/mob/living/carbon/xenomorph/X = user - var/heal_amount = max(healing_amount_min, healing_amount_max_health_scaling * X.xeno_caste.max_health) - HEAL_XENO_DAMAGE(X, heal_amount, FALSE) - playsound(user, "alien_drool", 25) - balloon_alert(X, "Health restored") - to_chat(X, span_xenowarning("We feel a sudden soothing chill as [src] tends to our wounds.")) - - return ..() - -/obj/structure/xeno/plant/armor_fruit - name = "hard fruit" - desc = "The contents of this fruit are protected by a tough outer shell." - icon_state = "armor_fruit_immature" - mature_icon_state = "armor_fruit" - ///How much total sunder should we remove - var/sunder_removal = 30 - -/obj/structure/xeno/plant/armor_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - var/turf/far_away_lands = get_turf(user) - for(var/x in 1 to 20) - var/turf/next_turf = get_step(far_away_lands, REVERSE_DIR(user.dir)) - if(!next_turf) - break - far_away_lands = next_turf - - user.throw_at(far_away_lands, 20, spin = TRUE) - to_chat(user, span_warning("[src] bursts, releasing a strong gust of pressurised gas!")) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.adjust_stagger(3 SECONDS) - H.apply_damage(30, BRUTE, "chest", BOMB) - qdel(src) - return TRUE - - balloon_alert(user, "Armor restored") - to_chat(user, span_xenowarning("We shed our shattered scales as new ones grow to replace them!")) - var/mob/living/carbon/xenomorph/X = user - X.adjust_sunder(-sunder_removal) - playsound(user, "alien_drool", 25) - return ..() - -/obj/structure/xeno/plant/plasma_fruit - name = "power fruit" - desc = "A cyan fruit, beating like a creature's heart" - icon_state = "plasma_fruit_immature" - mature_icon_state = "plasma_fruit" - ///How much bonus plasma should we restore during the duration, 1 being 100% from base regen - var/bonus_regen = 1 - ///How long should the buff last - var/duration = 1 MINUTES - -/obj/structure/xeno/plant/plasma_fruit/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(!isxeno(user)) - return - var/mob/living/carbon/xenomorph/X = user - if(X.has_status_effect(STATUS_EFFECT_PLASMA_SURGE)) - balloon_alert(X, "Already increased plasma regen") - return FALSE - -/obj/structure/xeno/plant/plasma_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - visible_message(span_warning("[src] releases a sticky substance before spontaneously bursting into flames!")) - flame_radius(3, get_turf(src), colour = "green") - qdel(src) - return TRUE - - var/mob/living/carbon/xenomorph/X = user - if(!(X.xeno_caste.can_flags & CASTE_CAN_BE_GIVEN_PLASMA)) - to_chat(X, span_xenowarning("But our body rejects the fruit, we do not share the same plasma type!")) - return FALSE - X.apply_status_effect(/datum/status_effect/plasma_surge, X.xeno_caste.plasma_max, bonus_regen, duration) - balloon_alert(X, "Plasma restored") - to_chat(X, span_xenowarning("[src] Restores our plasma reserves, our organism is on overdrive!")) - playsound(user, "alien_drool", 25) - return ..() - -/obj/structure/xeno/plant/stealth_plant - name = "night shade" - desc = "A beautiful flower, what purpose it could serve to the alien hive is beyond you however..." - icon_state = "stealth_plant_immature" - mature_icon_state = "stealth_plant" - maturation_time = 4 MINUTES - ///The radius of the passive structure camouflage, requires line of sight - var/camouflage_range = 7 - ///The range of the active stealth ability, does not require line of sight - var/active_camouflage_pulse_range = 10 - ///How long should veil last - var/active_camouflage_duration = 20 SECONDS - ///How long until the plant can be activated again - var/cooldown = 2 MINUTES - ///Is the active ability veil on cooldown ? - var/on_cooldown = FALSE - ///The list of passively camouflaged structures - var/list/obj/structure/xeno/camouflaged_structures = list() - ////The list of actively camouflaged xenos by veil - var/list/mob/living/carbon/xenomorph/camouflaged_xenos = list() - -/obj/structure/xeno/plant/stealth_plant/on_mature(mob/user) - . = ..() - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/plant/stealth_plant/Destroy() - for(var/obj/structure/xeno/xeno_struct AS in camouflaged_structures) - xeno_struct.alpha = initial(xeno_struct.alpha) - unveil() - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/plant/stealth_plant/process() - for(var/turf/tile AS in RANGE_TURFS(camouflage_range, loc)) - for(var/obj/structure/xeno/xeno_struct in tile) - if(istype(xeno_struct, /obj/structure/xeno/plant) || !line_of_sight(src, xeno_struct)) //We don't hide plants - continue - camouflaged_structures.Add(xeno_struct) - xeno_struct.alpha = STEALTH_PLANT_PASSIVE_CAMOUFLAGE_ALPHA - -/obj/structure/xeno/plant/stealth_plant/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(ishuman(user)) - balloon_alert(user, "Nothing happens") - to_chat(user, span_notice("You caress [src]'s petals, nothing happens.")) - return FALSE - if(on_cooldown) - balloon_alert(user, "Not ready yet") - to_chat(user, span_xenowarning("[src] soft light shimmers, we should give it more time to recover!")) - return FALSE - -/obj/structure/xeno/plant/stealth_plant/on_use(mob/user) - balloon_alert(user, "Shaking...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - visible_message(span_danger("[src] releases a burst of glowing pollen!")) - veil() - return TRUE - -///Hides all nearby xenos -/obj/structure/xeno/plant/stealth_plant/proc/veil() - for(var/turf/tile in RANGE_TURFS(camouflage_range, loc)) - for(var/mob/living/carbon/xenomorph/X in tile) - if(X.stat == DEAD || isxenohunter(X) || X.alpha != 255) //We don't mess with xenos capable of going stealth by themselves - continue - X.alpha = HUNTER_STEALTH_RUN_ALPHA - new /obj/effect/temp_visual/alien_fruit_eaten(get_turf(X)) - balloon_alert(X, "We now blend in") - to_chat(X, span_xenowarning("The pollen from [src] reacts with our scales, we are blending with our surroundings!")) - camouflaged_xenos.Add(X) - on_cooldown = TRUE - addtimer(CALLBACK(src, PROC_REF(unveil)), active_camouflage_duration) - addtimer(CALLBACK(src, PROC_REF(ready)), cooldown) - -///Called when veil() can be used once again -/obj/structure/xeno/plant/stealth_plant/proc/ready() - visible_message(span_danger("[src] petals shift in hue, it is ready to release more pollen.")) - on_cooldown = FALSE - -///Reveals all xenos hidden by veil() -/obj/structure/xeno/plant/stealth_plant/proc/unveil() - for(var/mob/living/carbon/xenomorph/X AS in camouflaged_xenos) - X.alpha = initial(X.alpha) - balloon_alert(X, "Effect wears off") - to_chat(X, span_xenowarning("The effect of [src] wears off!")) - -/obj/structure/xeno/thick_nest - name = "thick resin nest" - desc = "A very thick nest, oozing with a thick sticky substance." - pixel_x = -8 - pixel_y = -8 - max_integrity = 400 - mouse_opacity = MOUSE_OPACITY_ICON - - icon = 'icons/Xeno/nest.dmi' - icon_state = "reinforced_nest" - layer = 2.5 - - var/obj/structure/bed/nest/structure/pred_nest - -/obj/structure/xeno/thick_nest/examine(mob/user) - . = ..() - if((isxeno(user) || isobserver(user)) && hivenumber) - . += "Used to secure formidable hosts." - -/obj/structure/xeno/thick_nest/Initialize(mapload, new_hivenumber) - . = ..() - if(new_hivenumber) - hivenumber = new_hivenumber - - var/datum/hive_status/hive_ref = GLOB.hive_datums[hivenumber] - if(hive_ref) - hive_ref.thick_nests += src - - pred_nest = new /obj/structure/bed/nest/structure(loc, hive_ref, src) // Nest cannot be destroyed unless the structure itself is destroyed - - -/obj/structure/xeno/thick_nest/Destroy() - . = ..() - - if(hivenumber) - GLOB.hive_datums[hivenumber].thick_nests -= src - - pred_nest?.linked_structure = null - QDEL_NULL(pred_nest) - -/obj/structure/bed/nest - var/force_nest = FALSE - -/obj/structure/bed/nest/structure - name = "thick alien nest" - desc = "A very thick nest, oozing with a thick sticky substance." - force_nest = TRUE - var/obj/structure/xeno/thick_nest/linked_structure - -/obj/structure/bed/nest/structure/Initialize(mapload, hive, obj/structure/xeno/thick_nest/to_link) - . = ..() - if(to_link) - linked_structure = to_link - max_integrity = linked_structure.max_integrity - -/obj/structure/bed/nest/structure/Destroy() - . = ..() - if(linked_structure) - linked_structure.pred_nest = null - QDEL_NULL(linked_structure) - -/obj/structure/bed/nest/structure/attack_hand(mob/user) - if(!isxeno(user)) - to_chat(user, span_notice("The sticky resin is too strong for you to do anything to this nest")) - return FALSE - . = ..() diff --git a/code/modules/xenomorph/xeno_towers.dm b/code/modules/xenomorph/xeno_towers.dm new file mode 100644 index 00000000000..79bddc688df --- /dev/null +++ b/code/modules/xenomorph/xeno_towers.dm @@ -0,0 +1,117 @@ +/obj/structure/xeno/evotower + name = "evolution tower" + desc = "A sickly outcrop from the ground. It seems to ooze a strange chemical that shimmers and warps the ground around it." + icon = 'icons/Xeno/2x2building.dmi' + icon_state = "evotower" + bound_width = 64 + bound_height = 64 + obj_integrity = 600 + max_integrity = 600 + xeno_structure_flags = CRITICAL_STRUCTURE + ///boost amt to be added per tower per cycle + var/boost_amount = 0.2 + +/obj/structure/xeno/evotower/Initialize(mapload, _hivenumber) + . = ..() + GLOB.hive_datums[hivenumber].evotowers += src + set_light(2, 2, LIGHT_COLOR_GREEN) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "tower")) + +/obj/structure/xeno/evotower/Destroy() + GLOB.hive_datums[hivenumber].evotowers -= src + return ..() + +/obj/structure/xeno/evotower/ex_act(severity) + take_damage(severity * 2.5, BRUTE, BOMB) + +/obj/structure/xeno/psychictower + name = "Psychic Relay" + desc = "A sickly outcrop from the ground. It seems to allow for more advanced growth of the Xenomorphs." + icon = 'icons/Xeno/2x2building.dmi' + icon_state = "maturitytower" + bound_width = 64 + bound_height = 64 + obj_integrity = 400 + max_integrity = 400 + xeno_structure_flags = CRITICAL_STRUCTURE + +/obj/structure/xeno/psychictower/Initialize(mapload, _hivenumber) + . = ..() + GLOB.hive_datums[hivenumber].psychictowers += src + set_light(2, 2, LIGHT_COLOR_GREEN) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "tower")) + +/obj/structure/xeno/psychictower/Destroy() + GLOB.hive_datums[hivenumber].psychictowers -= src + return ..() + +/obj/structure/xeno/psychictower/ex_act(severity) + take_damage(severity * 2.5, BRUTE, BOMB) + +/obj/structure/xeno/pherotower + name = "Pheromone tower" + desc = "A resin formation that looks like a small pillar. A faint, weird smell can be perceived from it." + icon = 'icons/Xeno/1x1building.dmi' + icon_state = "recoverytower" + bound_width = 32 + bound_height = 32 + obj_integrity = 400 + max_integrity = 400 + xeno_structure_flags = CRITICAL_STRUCTURE + ///The type of pheromone currently being emitted. + var/datum/aura_bearer/current_aura + ///Strength of pheromones given by this tower. + var/aura_strength = 5 + ///Radius (in tiles) of the pheromones given by this tower. + var/aura_radius = 32 + +/obj/structure/xeno/pherotower/Initialize(mapload, _hivenumber) + . = ..() + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "phero", ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips + GLOB.hive_datums[hivenumber].pherotowers += src + +//Pheromone towers start off with recovery. + current_aura = SSaura.add_emitter(src, AURA_XENO_RECOVERY, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) + playsound(src, "alien_drool", 25) + update_icon() + +/obj/structure/xeno/pherotower/ex_act(severity) + take_damage(severity * 2.5, BRUTE, BOMB) + +/obj/structure/xeno/pherotower/Destroy() + GLOB.hive_datums[hivenumber].pherotowers -= src + return ..() + +// Clicking on the tower brings up a radial menu that allows you to select the type of pheromone that this tower will emit. +/obj/structure/xeno/pherotower/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + var/phero_choice = show_radial_menu(xeno_attacker, src, GLOB.pheromone_images_list, radius = 35, require_near = TRUE) + + if(!phero_choice) + return + + QDEL_NULL(current_aura) + current_aura = SSaura.add_emitter(src, phero_choice, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) + balloon_alert(xeno_attacker, "[phero_choice]") + playsound(src, "alien_drool", 25) + update_icon() + +/obj/structure/xeno/pherotower/update_icon_state() + . = ..() + switch(current_aura.aura_types[1]) + if(AURA_XENO_RECOVERY) + icon_state = "recoverytower" + set_light(2, 2, LIGHT_COLOR_BLUE) + if(AURA_XENO_WARDING) + icon_state = "wardingtower" + set_light(2, 2, LIGHT_COLOR_GREEN) + if(AURA_XENO_FRENZY) + icon_state = "frenzytower" + set_light(2, 2, LIGHT_COLOR_RED) + +/obj/structure/xeno/pherotower/crash + name = "Recovery tower" + resistance_flags = RESIST_ALL + xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE + +/obj/structure/xeno/pherotower/crash/attack_alien(isrightclick = FALSE) + return diff --git a/tgmc.dme b/tgmc.dme index 000182fbbc5..d27df1bceab 100644 --- a/tgmc.dme +++ b/tgmc.dme @@ -2084,7 +2084,16 @@ #include "code\modules\vehicles\unmanned\unmanned_turrets.dm" #include "code\modules\vehicles\unmanned\unmanned_vehicle.dm" #include "code\modules\vehicles\unmanned\unmanned_vehicle_remote.dm" -#include "code\modules\xenomorph\xeno_structures.dm" +#include "code\modules\xenomorph\_xeno_structure.dm" +#include "code\modules\xenomorph\acidwell.dm" +#include "code\modules\xenomorph\jellypod.dm" +#include "code\modules\xenomorph\nest.dm" +#include "code\modules\xenomorph\plant.dm" +#include "code\modules\xenomorph\silo.dm" +#include "code\modules\xenomorph\trap.dm" +#include "code\modules\xenomorph\tunnel.dm" +#include "code\modules\xenomorph\turret.dm" +#include "code\modules\xenomorph\xeno_towers.dm" #include "code\ze_genesis_call\genesis_call.dm" #include "interface\interface.dm" #include "interface\menu.dm" From 0936eba463cfe0071c6f1572f61e1c68fc836661 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 06:39:00 +0000 Subject: [PATCH 02/10] Automatic changelog for PR #35 [ci skip] --- html/changelogs/AutoChangeLog-pr-35.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-35.yml diff --git a/html/changelogs/AutoChangeLog-pr-35.yml b/html/changelogs/AutoChangeLog-pr-35.yml new file mode 100644 index 00000000000..5d98e85f8e2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-35.yml @@ -0,0 +1,4 @@ +author: "Helg2" +delete-after: True +changes: + - rscadd: "Туннели теперь используют миникарту для выбора места выхода." \ No newline at end of file From a821932d989209a8e51c5ac79d8b224c0e7017ad Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:40:01 +0300 Subject: [PATCH 03/10] Deletes mech duplicate files. (#37) * cleaning * Update mecha_wreckage.dm --- _maps/map_files/BigRed_v2/BigRed_v2.dmm | 4 +- .../jungle_outpost/jungle_outpost.dmm | 2 +- .../map_files/Ice_Colony_v2/Ice_Colony_v2.dmm | 2 +- _maps/map_files/LV624/LV624.dmm | 2 +- .../Lawanka_Outpost/LawankaOutpost.dmm | 8 +- _maps/map_files/slumbridge/slumbridge.dmm | 20 +- .../modularmaps/big_red/bigredofficevar1.dmm | 2 +- .../big_red/bigredsecornervar6.dmm | 2 +- _maps/modularmaps/lv624/newcavevar2.dmm | 2 +- code/game/mecha/mech_bay.dm | 15 -- code/game/mecha/mecha_parts.dm | 193 ------------------ code/game/mecha/mecha_wreckage.dm | 68 ------ code/modules/vehicles/mecha/mech_bay.dm | 1 - code/modules/vehicles/mecha/mecha_parts.dm | 70 +++---- code/modules/vehicles/mecha/mecha_wreckage.dm | 15 +- tgmc.dme | 3 - 16 files changed, 66 insertions(+), 343 deletions(-) delete mode 100644 code/game/mecha/mech_bay.dm delete mode 100644 code/game/mecha/mecha_parts.dm delete mode 100644 code/game/mecha/mecha_wreckage.dm diff --git a/_maps/map_files/BigRed_v2/BigRed_v2.dmm b/_maps/map_files/BigRed_v2/BigRed_v2.dmm index e871b0ea946..97bec5fc0f9 100644 --- a/_maps/map_files/BigRed_v2/BigRed_v2.dmm +++ b/_maps/map_files/BigRed_v2/BigRed_v2.dmm @@ -11576,7 +11576,7 @@ /turf/open/floor/freezer, /area/bigredv2/caves/lambda_lab) "kuf" = ( -/obj/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/cargo) @@ -14405,7 +14405,7 @@ /turf/open/floor, /area/bigredv2/outside/engineering) "rlw" = ( -/obj/mecha_wreckage/seraph, +/obj/structure/mecha_wreckage/seraph, /turf/open/floor/tile/dark, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) "rlA" = ( diff --git a/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm b/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm index 5801f153312..5613659a4d0 100644 --- a/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm +++ b/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm @@ -8809,7 +8809,7 @@ /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) "Mc" = ( -/obj/mecha_wreckage/durand, +/obj/structure/mecha_wreckage/durand, /turf/open/floor/tile/purple/whitepurple{ dir = 1 }, diff --git a/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 75f42e19bdb..97711c78dfc 100644 --- a/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -32238,7 +32238,7 @@ }, /area/ice_colony/underground/medical/lobby/garbledradio) "woG" = ( -/obj/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/open/floor/plating/ground/snow/layer0, /area/ice_colony/exterior/surface/valley/south) "woW" = ( diff --git a/_maps/map_files/LV624/LV624.dmm b/_maps/map_files/LV624/LV624.dmm index c1525df8876..e9dc0feca5f 100644 --- a/_maps/map_files/LV624/LV624.dmm +++ b/_maps/map_files/LV624/LV624.dmm @@ -8878,7 +8878,7 @@ }, /area/lv624/lazarus/hydroponics/aux) "iud" = ( -/obj/mecha_wreckage/ripley/lv624, +/obj/structure/mecha_wreckage/ripley/lv624, /turf/open/floor/plating/ground/dirt, /area/lv624/ground/sand4) "iuM" = ( diff --git a/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm b/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm index 6103aed710f..2c9bab5c93e 100644 --- a/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm +++ b/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm @@ -14953,7 +14953,7 @@ }, /area/shuttle/drop1/lz1) "mMn" = ( -/obj/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/open/floor/mech_bay_recharge_floor, /area/lawankaoutpost/colony/cargo) "mMH" = ( @@ -25824,7 +25824,7 @@ /turf/open/floor/tile/red/whitered, /area/lawankaoutpost/colony/medbay) "vJJ" = ( -/obj/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/open/floor/mech_bay_recharge_floor, /area/lawankaoutpost/colony/mining) "vJM" = ( @@ -26621,7 +26621,7 @@ }, /area/shuttle/drop1/lz1) "wns" = ( -/obj/mecha_wreckage/phazon, +/obj/structure/mecha_wreckage/phazon, /turf/open/floor/mech_bay_recharge_floor, /area/lawankaoutpost/colony/robotics) "wnM" = ( @@ -28029,7 +28029,7 @@ /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/south) "xxH" = ( -/obj/mecha_wreckage/seraph, +/obj/structure/mecha_wreckage/seraph, /turf/open/floor/tile/dark/yellow2{ dir = 1 }, diff --git a/_maps/map_files/slumbridge/slumbridge.dmm b/_maps/map_files/slumbridge/slumbridge.dmm index 76618408d74..15694d432f9 100644 --- a/_maps/map_files/slumbridge/slumbridge.dmm +++ b/_maps/map_files/slumbridge/slumbridge.dmm @@ -638,7 +638,7 @@ }, /area/slumbridge/inside/sombase/west) "aCj" = ( -/obj/mecha_wreckage/ripley/firefighter, +/obj/structure/mecha_wreckage/ripley/firefighter, /turf/open/floor/plating/ground/concrete, /area/slumbridge/outside/southwest) "aCG" = ( @@ -3645,7 +3645,7 @@ /turf/open/floor/plating, /area/slumbridge/inside/colony/pharmacy) "cIm" = ( -/obj/mecha_wreckage/ripley/lv624, +/obj/structure/mecha_wreckage/ripley/lv624, /turf/open/floor/plating/ground/concrete/edge, /area/slumbridge/outside/southwest) "cIK" = ( @@ -5080,7 +5080,7 @@ /turf/open/ground/grass/weedable, /area/slumbridge/outside/southeast) "dQp" = ( -/obj/mecha_wreckage/ripley/lv624, +/obj/structure/mecha_wreckage/ripley/lv624, /turf/open/floor/plating/ground/concrete, /area/slumbridge/outside/southwest) "dQz" = ( @@ -5358,7 +5358,7 @@ /turf/open/floor/tile/green, /area/slumbridge/inside/houses/recreational) "dYX" = ( -/obj/mecha_wreckage/seraph, +/obj/structure/mecha_wreckage/seraph, /turf/open/floor/plating/platebotc, /area/slumbridge/inside/engi/south) "dZj" = ( @@ -5623,7 +5623,7 @@ /turf/open/floor/plating/ground/mars/random/cave, /area/slumbridge/caves/mining) "emS" = ( -/obj/mecha_wreckage/durand, +/obj/structure/mecha_wreckage/durand, /turf/open/floor/plating/platebotc, /area/slumbridge/inside/engi/south) "enk" = ( @@ -6400,7 +6400,7 @@ }, /area/slumbridge/inside/zeta/south) "eVa" = ( -/obj/mecha_wreckage/mauler, +/obj/structure/mecha_wreckage/mauler, /turf/open/floor/plating/platebotc, /area/slumbridge/inside/engi/south) "eVd" = ( @@ -21882,7 +21882,7 @@ }, /area/slumbridge/inside/prison/outerringsouth) "qkn" = ( -/obj/mecha_wreckage/ripley/lv624, +/obj/structure/mecha_wreckage/ripley/lv624, /turf/open/floor/plating/ground/concrete/edge{ dir = 4 }, @@ -26508,7 +26508,7 @@ /turf/open/floor/plating, /area/slumbridge/inside/pmcdome) "tBA" = ( -/obj/mecha_wreckage/gygax, +/obj/structure/mecha_wreckage/gygax, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/platebotc, /area/slumbridge/inside/engi/south) @@ -31334,7 +31334,7 @@ /turf/open/floor/tile/showroom, /area/slumbridge/inside/engi/west) "xbI" = ( -/obj/mecha_wreckage/marauder, +/obj/structure/mecha_wreckage/marauder, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/platebotc, /area/slumbridge/inside/engi/south) @@ -32293,7 +32293,7 @@ /turf/open/floor/plating, /area/slumbridge/inside/colony/kitchen) "xQE" = ( -/obj/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/open/floor/tile/dark, /area/slumbridge/inside/colony/construction) "xQF" = ( diff --git a/_maps/modularmaps/big_red/bigredofficevar1.dmm b/_maps/modularmaps/big_red/bigredofficevar1.dmm index bf715e87322..31051a36a87 100644 --- a/_maps/modularmaps/big_red/bigredofficevar1.dmm +++ b/_maps/modularmaps/big_red/bigredofficevar1.dmm @@ -495,7 +495,7 @@ /turf/open/floor, /area/bigredv2/outside/office_complex) "vR" = ( -/obj/mecha_wreckage/ripley/firefighter, +/obj/structure/mecha_wreckage/ripley/firefighter, /turf/open/floor/mech_bay_recharge_floor, /area/bigredv2/outside/office_complex) "vU" = ( diff --git a/_maps/modularmaps/big_red/bigredsecornervar6.dmm b/_maps/modularmaps/big_red/bigredsecornervar6.dmm index e8804fc2a3c..797f79cfe98 100644 --- a/_maps/modularmaps/big_red/bigredsecornervar6.dmm +++ b/_maps/modularmaps/big_red/bigredsecornervar6.dmm @@ -388,7 +388,7 @@ /area/bigredv2/caves/secomplex) "wO" = ( /obj/effect/decal/cleanable/cobweb, -/obj/mecha_wreckage/ripley/lv624, +/obj/structure/mecha_wreckage/ripley/lv624, /turf/open/floor/tile/dark, /area/bigredv2/caves/secomplex) "xa" = ( diff --git a/_maps/modularmaps/lv624/newcavevar2.dmm b/_maps/modularmaps/lv624/newcavevar2.dmm index 73fdda5c6e4..e26c863b251 100644 --- a/_maps/modularmaps/lv624/newcavevar2.dmm +++ b/_maps/modularmaps/lv624/newcavevar2.dmm @@ -18,7 +18,7 @@ /area/lv624/ground/caves/central2) "cu" = ( /obj/item/mecha_parts/part/durand_head, -/obj/mecha_wreckage/durand, +/obj/structure/mecha_wreckage/durand, /turf/open/floor/plating/ground/dirt, /area/lv624/ground/caves/central2) "cQ" = ( diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm deleted file mode 100644 index 13f35958931..00000000000 --- a/code/game/mecha/mech_bay.dm +++ /dev/null @@ -1,15 +0,0 @@ - - -/obj/machinery/mech_bay_recharge_port - name = "Mech Bay Power Port" - density = TRUE - anchored = TRUE - icon = 'icons/mecha/mech_bay.dmi' - icon_state = "recharge_port" - -/obj/machinery/computer/mech_bay_power_console - name = "Mech Bay Power Control Console" - density = TRUE - anchored = TRUE - icon = 'icons/obj/machines/computer.dmi' - icon_state = "recharge_comp" diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm deleted file mode 100644 index c5758bdb004..00000000000 --- a/code/game/mecha/mecha_parts.dm +++ /dev/null @@ -1,193 +0,0 @@ -///////////////////////// -////// Mecha Parts ////// -///////////////////////// - -/obj/item/mecha_parts - name = "mecha part" - icon = 'icons/mecha/mech_construct.dmi' - icon_state = "blank" - w_class = WEIGHT_CLASS_HUGE - - -/obj/item/mecha_parts/chassis - name="Mecha Chassis" - icon_state = "backbone" - - -/////////// Ripley - -/obj/item/mecha_parts/chassis/ripley - name = "Ripley Chassis" - - -/obj/item/mecha_parts/part/ripley_torso - name="Ripley Torso" - desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." - icon_state = "ripley_harness" - -/obj/item/mecha_parts/part/ripley_left_arm - name="Ripley Left Arm" - desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_l_arm" - -/obj/item/mecha_parts/part/ripley_right_arm - name="Ripley Right Arm" - desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_r_arm" - -/obj/item/mecha_parts/part/ripley_left_leg - name="Ripley Left Leg" - desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_l_leg" - -/obj/item/mecha_parts/part/ripley_right_leg - name="Ripley Right Leg" - desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_r_leg" - -///////// Gygax - -/obj/item/mecha_parts/chassis/gygax - name = "Gygax Chassis" - -/obj/item/mecha_parts/part/gygax_torso - name="Gygax Torso" - desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." - icon_state = "gygax_harness" - -/obj/item/mecha_parts/part/gygax_head - name="Gygax Head" - desc="A Gygax head. Houses advanced surveilance and targeting sensors." - icon_state = "gygax_head" - -/obj/item/mecha_parts/part/gygax_left_arm - name="Gygax Left Arm" - desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_l_arm" - -/obj/item/mecha_parts/part/gygax_right_arm - name="Gygax Right Arm" - desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_r_arm" - -/obj/item/mecha_parts/part/gygax_left_leg - name="Gygax Left Leg" - icon_state = "gygax_l_leg" - -/obj/item/mecha_parts/part/gygax_right_leg - name="Gygax Right Leg" - icon_state = "gygax_r_leg" - -/obj/item/mecha_parts/part/gygax_armour - name="Gygax Armour Plates" - icon_state = "gygax_armour" - - -//////////// Durand - -/obj/item/mecha_parts/chassis/durand - name = "Durand Chassis" - - -/obj/item/mecha_parts/part/durand_torso - name="Durand Torso" - icon_state = "durand_harness" - -/obj/item/mecha_parts/part/durand_head - name="Durand Head" - icon_state = "durand_head" - -/obj/item/mecha_parts/part/durand_left_arm - name="Durand Left Arm" - icon_state = "durand_l_arm" - -/obj/item/mecha_parts/part/durand_right_arm - name="Durand Right Arm" - icon_state = "durand_r_arm" - -/obj/item/mecha_parts/part/durand_left_leg - name="Durand Left Leg" - icon_state = "durand_l_leg" - -/obj/item/mecha_parts/part/durand_right_leg - name="Durand Right Leg" - icon_state = "durand_r_leg" - -/obj/item/mecha_parts/part/durand_armour - name="Durand Armour Plates" - icon_state = "durand_armour" - - - -////////// Firefighter - -/obj/item/mecha_parts/chassis/firefighter - name = "Firefighter Chassis" - - -////////// Phazon - -/obj/item/mecha_parts/chassis/phazon - name = "Phazon Chassis" - -/obj/item/mecha_parts/part/phazon_torso - name="Phazon Torso" - icon_state = "phazon_harness" - -/obj/item/mecha_parts/part/phazon_head - name="Phazon Head" - icon_state = "phazon_head" - -/obj/item/mecha_parts/part/phazon_left_arm - name="Phazon Left Arm" - icon_state = "phazon_l_arm" - -/obj/item/mecha_parts/part/phazon_right_arm - name="Phazon Right Arm" - icon_state = "phazon_r_arm" - -/obj/item/mecha_parts/part/phazon_left_leg - name="Phazon Left Leg" - icon_state = "phazon_l_leg" - -/obj/item/mecha_parts/part/phazon_right_leg - name="Phazon Right Leg" - icon_state = "phazon_r_leg" - -///////// Odysseus - - -/obj/item/mecha_parts/chassis/odysseus - name = "Odysseus Chassis" - -/obj/item/mecha_parts/part/odysseus_head - name="Odysseus Head" - icon_state = "odysseus_head" - -/obj/item/mecha_parts/part/odysseus_torso - name="Odysseus Torso" - desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." - icon_state = "odysseus_torso" - -/obj/item/mecha_parts/part/odysseus_left_arm - name="Odysseus Left Arm" - desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_l_arm" - -/obj/item/mecha_parts/part/odysseus_right_arm - name="Odysseus Right Arm" - desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_r_arm" - -/obj/item/mecha_parts/part/odysseus_left_leg - name="Odysseus Left Leg" - desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_l_leg" - -/obj/item/mecha_parts/part/odysseus_right_leg - name="Odysseus Right Leg" - desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_r_leg" - - - diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm deleted file mode 100644 index 09d35c6119f..00000000000 --- a/code/game/mecha/mecha_wreckage.dm +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////// -//////// Mecha wreckage //////// -/////////////////////////////////// - - -/obj/mecha_wreckage - name = "Exosuit wreckage" - desc = "Remains of some unfortunate mecha. There is nothing left to Salvage." - icon = 'icons/mecha/mecha.dmi' - hit_sound = 'sound/effects/metal_crash.ogg' - density = TRUE - anchored = FALSE - opacity = FALSE - resistance_flags = XENO_DAMAGEABLE - - -/obj/mecha_wreckage/gygax - name = "Gygax wreckage" - icon_state = "gygax-broken" - -/obj/mecha_wreckage/gygax/dark - name = "Dark Gygax wreckage" - icon_state = "darkgygax-broken" - -/obj/mecha_wreckage/marauder - name = "Marauder wreckage" - icon_state = "marauder-broken" - -/obj/mecha_wreckage/mauler - name = "Mauler Wreckage" - icon_state = "mauler-broken" - desc = "The syndicate won't be very happy about this..." - -/obj/mecha_wreckage/seraph - name = "Seraph wreckage" - icon_state = "seraph-broken" - -/obj/mecha_wreckage/ripley - name = "Ripley wreckage" - icon_state = "ripley-broken" - -/obj/mecha_wreckage/ripley/lv624 - name = "MkIV Powerloader Wreckage" - anchored = TRUE - -/obj/mecha_wreckage/ripley/firefighter - name = "Firefighter wreckage" - icon_state = "firefighter-broken" - -/obj/mecha_wreckage/ripley/deathripley - name = "Death-Ripley wreckage" - icon_state = "deathripley-broken" - -/obj/mecha_wreckage/durand - name = "Durand wreckage" - icon_state = "durand-broken" - -/obj/mecha_wreckage/phazon - name = "Phazon wreckage" - icon_state = "phazon-broken" - - -/obj/mecha_wreckage/odysseus - name = "Odysseus wreckage" - -/obj/mecha_wreckage/hoverpod - name = "Hover pod wreckage" - icon_state = "engineering_pod-broken" diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index de5f7577e82..02171a40982 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -60,7 +60,6 @@ recharging_mech_ref = null recharge_console.update_icon() - /obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params) if(default_change_direction_wrench(user, I)) recharging_turf = get_step(loc, dir) diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index 147a69d6a65..cda318519dd 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -1,7 +1,3 @@ -///////////////////////// -////// Mecha Parts ////// -///////////////////////// - /obj/item/mecha_parts name = "mecha part" icon = 'icons/mecha/mech_construct.dmi' @@ -52,6 +48,11 @@ desc = "A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "ripley_r_leg" +////////// Firefighter + +/obj/item/mecha_parts/chassis/firefighter + name = "\improper Firefighter Chassis" + ///////// Odysseus /obj/item/mecha_parts/chassis/odysseus @@ -64,7 +65,7 @@ /obj/item/mecha_parts/part/odysseus_torso name = "\improper Odysseus torso" - desc="A torso part of Odysseus. Contains power unit, processing core and life support systems along with an attachment port for a mounted sleeper." + desc = "A torso part of Odysseus. Contains power unit, processing core and life support systems along with an attachment port for a mounted sleeper." icon_state = "odysseus_torso" /obj/item/mecha_parts/part/odysseus_left_arm @@ -128,7 +129,6 @@ desc = "A set of armor plates designed for the Gygax. Designed to effectively deflect damage with a lightweight construction." icon_state = "gygax_armor" - //////////// Durand /obj/item/mecha_parts/chassis/durand @@ -230,45 +230,44 @@ desc = "A H.O.N.K right leg. The foot appears just large enough to fully accommodate a clown shoe." icon_state = "honker_r_leg" - ////////// Phazon /obj/item/mecha_parts/chassis/phazon name = "\improper Phazon chassis" /obj/item/mecha_parts/part/phazon_torso - name="\improper Phazon torso" - desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." + name = "\improper Phazon torso" + desc = "A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." icon_state = "phazon_harness" /obj/item/mecha_parts/part/phazon_head - name="\improper Phazon head" - desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing." + name = "\improper Phazon head" + desc = "A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing." icon_state = "phazon_head" /obj/item/mecha_parts/part/phazon_left_arm - name="\improper Phazon left arm" - desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." + name = "\improper Phazon left arm" + desc = "A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_l_arm" /obj/item/mecha_parts/part/phazon_right_arm - name="\improper Phazon right arm" - desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." + name = "\improper Phazon right arm" + desc = "A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_r_arm" /obj/item/mecha_parts/part/phazon_left_leg - name="\improper Phazon left leg" - desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." + name = "\improper Phazon left leg" + desc = "A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_l_leg" /obj/item/mecha_parts/part/phazon_right_leg - name="\improper Phazon right leg" - desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." + name = "\improper Phazon right leg" + desc = "A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_r_leg" /obj/item/mecha_parts/part/phazon_armor - name="Phazon armor" - desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." + name = "Phazon armor" + desc = "Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." icon_state = "phazon_armor" // Savannah-Ivanov @@ -277,38 +276,38 @@ name = "\improper Savannah-Ivanov chassis" /obj/item/mecha_parts/part/savannah_ivanov_torso - name="\improper Savannah-Ivanov torso" - desc="A Savannah-Ivanov torso part. It's missing a huge chunk of space..." + name = "\improper Savannah-Ivanov torso" + desc = "A Savannah-Ivanov torso part. It's missing a huge chunk of space..." icon_state = "savannah_ivanov_harness" /obj/item/mecha_parts/part/savannah_ivanov_head - name="\improper Savannah-Ivanov head" - desc="A Savannah-Ivanov head. It's sensors have been adjusted to support graceful landings." + name = "\improper Savannah-Ivanov head" + desc = "A Savannah-Ivanov head. It's sensors have been adjusted to support graceful landings." icon_state = "savannah_ivanov_head" /obj/item/mecha_parts/part/savannah_ivanov_left_arm - name="\improper Savannah-Ivanov left arm" - desc="A Savannah-Ivanov left arm. Hidden rocket fabrication included in the wrists." + name = "\improper Savannah-Ivanov left arm" + desc = "A Savannah-Ivanov left arm. Hidden rocket fabrication included in the wrists." icon_state = "savannah_ivanov_l_arm" /obj/item/mecha_parts/part/savannah_ivanov_right_arm - name="\improper Savannah-Ivanov right arm" - desc="A Savannah-Ivanov left arm. Hidden rocket fabrication included in the wrists." + name = "\improper Savannah-Ivanov right arm" + desc = "A Savannah-Ivanov left arm. Hidden rocket fabrication included in the wrists." icon_state = "savannah_ivanov_r_arm" /obj/item/mecha_parts/part/savannah_ivanov_left_leg - name="\improper Savannah-Ivanov left leg" - desc="A Savannah-Ivanov left leg. In production they were designed to carry more than two passengers, so the leaping functionality was added as to not waste potential." + name = "\improper Savannah-Ivanov left leg" + desc = "A Savannah-Ivanov left leg. In production they were designed to carry more than two passengers, so the leaping functionality was added as to not waste potential." icon_state = "savannah_ivanov_l_leg" /obj/item/mecha_parts/part/savannah_ivanov_right_leg - name="\improper Savannah-Ivanov right leg" - desc="A Savannah-Ivanov left leg. In production they were designed to carry more than two passengers, so the leaping functionality was added as to not waste potential." + name = "\improper Savannah-Ivanov right leg" + desc = "A Savannah-Ivanov left leg. In production they were designed to carry more than two passengers, so the leaping functionality was added as to not waste potential." icon_state = "savannah_ivanov_r_leg" /obj/item/mecha_parts/part/savannah_ivanov_armor - name="Savannah-Ivanov armor" - desc="Savannah-Ivanov armor plates. They are uniquely shaped and reinforced to deal with the stresses of two pilots, grandiose leaps, and missiles." + name = "Savannah-Ivanov armor" + desc = "Savannah-Ivanov armor plates. They are uniquely shaped and reinforced to deal with the stresses of two pilots, grandiose leaps, and missiles." icon_state = "savannah_ivanov_armor" ///////// Circuitboards @@ -331,7 +330,6 @@ name = "Ripley Central Control module (Exosuit Board)" icon_state = "mainboard" - /obj/item/circuitboard/mecha/gygax/peripherals name = "Gygax Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm index 3f5c3ddd6b4..0895922dece 100644 --- a/code/modules/vehicles/mecha/mecha_wreckage.dm +++ b/code/modules/vehicles/mecha/mecha_wreckage.dm @@ -1,15 +1,12 @@ -/////////////////////////////////// -//////// Mecha wreckage //////// -/////////////////////////////////// - - /obj/structure/mecha_wreckage name = "exosuit wreckage" desc = "Remains of some unfortunate mecha. Completely irreparable, but perhaps something can be salvaged." icon = 'icons/mecha/mecha.dmi' + hit_sound = 'sound/effects/metal_crash.ogg' density = TRUE anchored = FALSE opacity = FALSE + resistance_flags = XENO_DAMAGEABLE ///list of welder-salvaged items that it can output var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel) /// times we can salvage this mech @@ -136,6 +133,14 @@ name = "\improper Ripley MK-II wreckage" icon_state = "ripleymkii-broken" +/obj/structure/mecha_wreckage/ripley/lv624 + name = "MkIV Powerloader Wreckage" + anchored = TRUE + +/obj/structure/mecha_wreckage/ripley/firefighter + name = "Firefighter wreckage" + icon_state = "firefighter-broken" + /obj/structure/mecha_wreckage/clarke name = "\improper Clarke wreckage" icon_state = "clarke-broken" diff --git a/tgmc.dme b/tgmc.dme index d27df1bceab..a344780b902 100644 --- a/tgmc.dme +++ b/tgmc.dme @@ -642,9 +642,6 @@ #include "code\game\atoms\_atom.dm" #include "code\game\atoms\atom_appearance.dm" #include "code\game\atoms\atom_movable.dm" -#include "code\game\mecha\mech_bay.dm" -#include "code\game\mecha\mecha_parts.dm" -#include "code\game\mecha\mecha_wreckage.dm" #include "code\game\objects\empulse.dm" #include "code\game\objects\explosion.dm" #include "code\game\objects\explosion_recursive.dm" From 2ca22856c8ab95296ccce06c6528d7f91cff7944 Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:40:51 +0300 Subject: [PATCH 04/10] Refactors and resprites robotic cradle. (#39) * 15143 * 15427 * 15473 * Update robotic_cradle.dm * fix --- code/game/objects/machinery/robotic_cradle.dm | 372 ++++++++---------- icons/obj/machines/robotic_cradle.dmi | Bin 0 -> 775 bytes tgmc.dme | 2 +- 3 files changed, 167 insertions(+), 207 deletions(-) create mode 100644 icons/obj/machines/robotic_cradle.dmi diff --git a/code/game/objects/machinery/robotic_cradle.dm b/code/game/objects/machinery/robotic_cradle.dm index 8aa08fa9b80..523efb63df9 100644 --- a/code/game/objects/machinery/robotic_cradle.dm +++ b/code/game/objects/machinery/robotic_cradle.dm @@ -1,63 +1,56 @@ #define CRADLE_NOTICE_SUCCESS 1 #define CRADLE_NOTICE_DEATH 2 -#define CRADLE_NOTICE_NO_RECORD 3 -#define CRADLE_NOTICE_NO_POWER 4 -#define CRADLE_NOTICE_XENO_FUCKERY 5 -#define CRADLE_NOTICE_IDIOT_EJECT 6 -#define CRADLE_NOTICE_FORCE_EJECT 7 +#define CRADLE_NOTICE_NO_POWER 3 +#define CRADLE_NOTICE_XENO_FUCKERY 4 +#define CRADLE_NOTICE_EARLY_EJECT 5 //Cradle /obj/machinery/robotic_cradle name = "robotic cradle" desc = "A highly experimental robotic maintenence machine using a bath of industrial nanomachines to quickly restore any robotic machine inserted." - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" + icon = 'icons/obj/machines/robotic_cradle.dmi' + icon_state = "robotic_cradle" density = TRUE max_integrity = 350 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 30, ACID = 30) - //This var is used to see if the machine is currently repairing or not. - var/repairing = FALSE - //This var is the reference used for the patient - var/mob/living/carbon/human/occupant - //It uses power use_power = ACTIVE_POWER_USE idle_power_usage = 15 active_power_usage = 10000 // It rebuilds you from nothing... - - //This var is in reference to the radio the cradle uses to speak to the craw. + ///This var is used to see if the machine is currently repairing or not. + var/repairing = FALSE + ///This var is the reference used for the patient + var/mob/living/carbon/human/occupant + ///This var is in reference to the radio the cradle uses to speak to the crew var/obj/item/radio/headset/mainship/doc/radio + ///This var is so we can call deltimer() it if we need to abort the operation early + var/operation_timer /obj/machinery/robotic_cradle/Initialize(mapload) . = ..() radio = new(src) /obj/machinery/robotic_cradle/Destroy() - do_eject(forceeject = TRUE) + if(occupant) + visible_message("\The [src] malfunctions as it is destroyed mid-repair, ejecting [occupant] with unfinished repair wounds and showering them in debris.") + occupant.take_limb_damage(rand(30, 50),rand(30, 50)) + remove_occupant() if(radio) QDEL_NULL(radio) return ..() /obj/machinery/robotic_cradle/update_icon_state() - . = ..() - if(machine_stat & NOPOWER) - icon_state = "borgcharger0" - return - if(repairing) - icon_state = "borgcharger1" - return - if(occupant) - icon_state = "borgcharger1" - return - icon_state = "borgcharger0" + if(occupant && !(machine_stat & NOPOWER)) + icon_state = "robotic_cradle_active" + return ..() + icon_state = "robotic_cradle" /obj/machinery/robotic_cradle/power_change() . = ..() if(is_operational() || !occupant) return visible_message("[src] engages the safety override, ejecting the occupant.") - repairing = FALSE - go_out(CRADLE_NOTICE_NO_POWER) + perform_eject(CRADLE_NOTICE_NO_POWER) /obj/machinery/robotic_cradle/process() if(!occupant) @@ -65,45 +58,22 @@ if(occupant.stat == DEAD) say("Patient has expired.") - repairing = FALSE - go_out(CRADLE_NOTICE_DEATH) + perform_eject(CRADLE_NOTICE_DEATH) return if(!repairing) return -//This proc handles the actual repair once the timer is up, ejection of the healed robot and radio message of ejection. -/obj/machinery/robotic_cradle/proc/repair_op() - if(QDELETED(occupant) || occupant.stat == DEAD) - if(!ishuman(occupant)) - stack_trace("Non-human occupant made its way into the autodoc: [occupant] | [occupant?.type].") - visible_message("[src] buzzes.") - go_out(CRADLE_NOTICE_DEATH) //kick them out too. - return - - occupant.revive() - visible_message("\The [src] clicks and opens up having finished the requested operations.") - repairing = FALSE - go_out(CRADLE_NOTICE_SUCCESS) - /obj/machinery/robotic_cradle/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) if(!occupant) to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) - playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(xeno_attacker, 2 SECONDS)) - return - playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) - go_out() + start_emergency_eject(xeno_attacker) -//This proc acts as a heads up to the doctors/engineers about the patient exiting the cradle for whatever reason. Does not warn if the patient itself exits the cradle. it also wipes the memory of who the patient was and readies the cradle for a new patient. -/obj/machinery/robotic_cradle/proc/go_out(notice_code = FALSE) - if(!occupant) - return - occupant.forceMove(drop_location()) +///This proc acts as a heads up to the doctors/engineers about the patient exiting the cradle for whatever reason. Takes CRADLE_NOTICE defines as arguments +/obj/machinery/robotic_cradle/proc/notify_about_eject(notice_code = FALSE) var/reason = "Reason for discharge: Procedural completion." switch(notice_code) if(CRADLE_NOTICE_SUCCESS) @@ -111,167 +81,168 @@ if(CRADLE_NOTICE_DEATH) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Patient has expired." - if(CRADLE_NOTICE_NO_RECORD) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Medical records not detected. Alerting security advised." if(CRADLE_NOTICE_NO_POWER) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Power failure." if(CRADLE_NOTICE_XENO_FUCKERY) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Unauthorized manual release. Alerting security advised." - if(CRADLE_NOTICE_IDIOT_EJECT) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Unauthorized manual release during repair. Alerting security advised." - if(CRADLE_NOTICE_FORCE_EJECT) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Destruction of linked CRADLE Engineering System. Alerting security advised." + if(CRADLE_NOTICE_EARLY_EJECT) + playsound(src,'sound/machines/buzz-two.ogg', 50,FALSE) + reason = "Reason for discharge: Operation manually terminated by end user." + if(!radio)//The radio shouldn't ever be deleted, but this is a sanity check just in case + return radio.talk_into(src, "Patient: [occupant] has been released from [src] at: [get_area(src)]. [reason]", RADIO_CHANNEL_MEDICAL) + +///Forces the occupant out of the cradle, leaves it empty for someone else to enter. +/obj/machinery/robotic_cradle/proc/remove_occupant() + if(!occupant) + return + occupant.forceMove(drop_location()) occupant = null update_icon() stop_processing() -//This proc is what a robot calls when they try to enter a cradle on their own. -/obj/machinery/robotic_cradle/proc/move_inside_wrapper(mob/living/dropped, mob/dragger) - if(dragger.incapacitated() || !ishuman(dragger) || !isrobot(dropped)) - return - +///Finishes ejecting the patient after the cradle is done. Takes CRADLE_NOTICE defines as arguments, used in notify_about_eject() +/obj/machinery/robotic_cradle/proc/perform_eject(notice_code = FALSE) + repairing = FALSE + if(operation_timer) + deltimer(operation_timer) + notify_about_eject(notice_code) + remove_occupant() + +///Handles any mob placing themselves or someone else into the cradle. target_mob is the mob being placed in, operating_mob is the person placing the mob in. Returns true if the mob got placed inside, false otherwise +/obj/machinery/robotic_cradle/proc/place_mob_inside(mob/living/target_mob, mob/operating_mob) + if(operating_mob.incapacitated()||!ishuman(operating_mob)||!ishuman(target_mob)) + return FALSE if(occupant) - to_chat(dragger, span_notice("[src] is already occupied!")) - return - + to_chat(operating_mob, span_notice("[src] is already occupied!")) + return FALSE + var/mob/living/carbon/human/patient = target_mob + if(!(patient.species.species_flags & ROBOTIC_LIMBS)) + visible_message(span_warning("[src] buzzes. Subject is biological, cannot repair.")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + return FALSE + if(patient.abiotic()) + visible_message(span_warning("[src] buzzes. Subject cannot wear abiotic items.")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + return FALSE if(machine_stat & (NOPOWER|BROKEN)) - to_chat(dragger, span_notice("[src] is non-functional!")) + to_chat(operating_mob, span_notice("[src] is non-functional!")) + return FALSE + + if(operating_mob == patient) + patient.visible_message(span_notice("[patient] starts climbing into \the [src]."), + span_notice("You start climbing into \the [src].")) + else + operating_mob.visible_message(span_notice("[operating_mob] starts placing [patient] \the [src]."), + span_notice("You start placing [patient] into \the [src].")) + + if(!do_after(operating_mob, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + return FALSE + if(occupant) //In case someone tried climbing in earlier than us, while the cradle was empty + to_chat(operating_mob, span_notice("[src] is already occupied!")) + return FALSE + patient.stop_pulling() + patient.forceMove(src) + occupant = patient + return TRUE +///Starts the repair operation of the cradle +/obj/machinery/robotic_cradle/proc/start_repair_operation() + if(!occupant) return - if(dragger.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - dropped.visible_message(span_notice("[dropped] fumbles around figuring out how to get into \the [src]."), - span_notice("You fumble around figuring out how to get into \the [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * dragger.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(dropped, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return - - dropped.visible_message(span_notice("[dropped] starts climbing into \the [src]."), - span_notice("You start climbing into \the [src].")) - if(!do_after(dropped, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + if(powered()) + use_power(active_power_usage) + playsound(loc, 'sound/machines/ping.ogg', 25, 1) + else + perform_eject(CRADLE_NOTICE_NO_POWER) return - if(occupant) - to_chat(dragger, span_notice("[src] is already occupied!")) - return - dropped.stop_pulling() - dropped.forceMove(src) - occupant = dropped - icon_state = "pod_0" - var/implants = list(/obj/item/implant/neurostim) - var/mob/living/carbon/human/H = occupant - var/doc_dat - med_scan(H, doc_dat, implants, TRUE) - start_processing() - say("Automatic mode engaged, initialising procedure.") - addtimer(CALLBACK(src, PROC_REF(auto_start)), 20 SECONDS) - -///Callback to start auto mode on someone entering -/obj/machinery/robotic_cradle/proc/auto_start() - if(repairing) + start_processing() + update_icon() + repairing = TRUE + say("Automatic mode engaged, initialising repair procedure.") + operation_timer = addtimer(CALLBACK(src, PROC_REF(handle_repair_operation)), 20 SECONDS,TIMER_STOPPABLE) + +///Callback to start repair on someone entering the cradle +/obj/machinery/robotic_cradle/proc/handle_repair_operation() + if(!occupant) //sanity check, in case we get teleported outside the cradle midrepair without calling perform_eject() + if(operation_timer) + deltimer(operation_timer) + repairing = FALSE + visible_message(span_warning("[src] buzzes. Occupant missing, procedures canceled.")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) return + say("Repair procedure complete.") + perform_repair() + +///This proc handles the actual repair once the timer is up and ejects the healed robot. +/obj/machinery/robotic_cradle/proc/perform_repair() if(!occupant) - say("Occupant missing, procedures canceled.") return - say("Beginning repair procedure.") - repair_op() + if(QDELETED(occupant) || occupant.stat == DEAD) + if(!ishuman(occupant)) + stack_trace("Non-human occupant made its way into the autodoc: [occupant] | [occupant?.type].") + visible_message(span_warning("[src] buzzes.")) + perform_eject(CRADLE_NOTICE_DEATH) + return + occupant.revive() + visible_message("\The [src] clicks and opens up having finished the requested operations.") + perform_eject(CRADLE_NOTICE_SUCCESS) -/obj/machinery/robotic_cradle/MouseDrop_T(mob/M, mob/user) +/obj/machinery/robotic_cradle/MouseDrop_T(mob/dropping, mob/user) . = ..() - move_inside_wrapper(M, user) + if(place_mob_inside(dropping, user)) + start_repair_operation() /obj/machinery/robotic_cradle/verb/move_inside() set name = "Enter Cradle" set category = "Object" set src in oview(1) - move_inside_wrapper(usr, usr) + if(place_mob_inside(usr, usr)) + start_repair_operation() -//This proc is called when someone has a robot grabbed either by hand or in a stasis bag. It is also lets docs/engineers use health analyzers on the cradle if they really want to. /obj/machinery/robotic_cradle/attackby(obj/item/I, mob/user, params) . = ..() - - if(!ishuman(user)) - return //no + if(.) + return if(istype(I, /obj/item/healthanalyzer) && occupant) //Allows us to use the analyzer on the occupant without taking him out. var/obj/item/healthanalyzer/J = I J.attack(occupant, user) return - if(!istype(I, /obj/item/grab)) +/obj/machinery/robotic_cradle/attack_hand(mob/living/user) + . = ..() + if(user.do_actions) //stops them from spamming if they're attempting to eject someone or otherwise busy return - - if(machine_stat & (NOPOWER|BROKEN)) - to_chat(user, span_notice("[src] is non-functional!")) + if(!occupant) return + start_emergency_eject(user) - if(occupant) - to_chat(user, span_notice("[src] is already occupied!")) +/obj/machinery/robotic_cradle/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) return + var/mob/grabbed_mob - var/obj/item/grab/G = I + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing - var/mob/M - if(ismob(G.grabbed_thing)) - M = G.grabbed_thing - else if(istype(G.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + else if(istype(grab.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) to_chat(user, span_warning("The stasis bag is empty!")) return - M = C.bodybag_occupant - C.open() - user.start_pulling(M) + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) - if(!M) - return - - if(!ishuman(M)) // No monkee or beano - to_chat(user, span_notice("[src] is compatible with humanoid anatomies only!")) - return - - if(M.abiotic()) - to_chat(user, span_warning("Subject cannot have abiotic items on.")) - return - - if(ishumanbasic(M)) - to_chat(user, span_warning("Subject is biological, cannot repair.")) - return - - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - user.visible_message(span_notice("[user] fumbles around figuring out how to put [M] into [src]."), - span_notice("You fumble around figuring out how to put [M] into [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * user.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(user, fumbling_time, NONE, M, BUSY_ICON_UNSKILLED) || QDELETED(src)) - return - - visible_message("[user] starts putting [M] into [src].", 3) - - if(!do_after(user, 10, IGNORE_HELD_ITEM, M, BUSY_ICON_GENERIC) || QDELETED(src)) - return - - if(occupant) - to_chat(user, span_notice("[src] is already occupied!")) - return - - if(!M || !G) - return - - M.forceMove(src) - occupant = M - icon_state = "pod_1" - var/implants = list(/obj/item/implant/neurostim) - var/mob/living/carbon/human/H = occupant - med_scan(H, null, implants, TRUE) - start_processing() - say("Automatic mode engaged, initialising procedure.") - addtimer(CALLBACK(src, PROC_REF(auto_start)), 20 SECONDS) + if(place_mob_inside(grabbed_mob,user)) + start_repair_operation() + return TRUE /obj/machinery/robotic_cradle/verb/eject() set name = "Eject cradle" @@ -279,45 +250,34 @@ set src in oview(1) if(usr.incapacitated()) return - do_eject() + start_emergency_eject(usr) -//This proc ejects whomever is inside the cradle, by force if needed depending if the cradle is destroyed or not. -/obj/machinery/robotic_cradle/proc/do_eject(forceeject) +///This proc ejects whomever is inside the cradle while it is presumably operating. mob_ejecting is the mob triggering the eject +/obj/machinery/robotic_cradle/proc/start_emergency_eject(mob/mob_ejecting) if(!occupant) return - if(forceeject) - if(!repairing) - visible_message("\The [src] is destroyed, ejecting [occupant] and showering them in debris.") - occupant.take_limb_damage(rand(10,20),rand(10,20)) - else - visible_message("\The [src] malfunctions as it is destroyed mid-repair, ejecting [occupant] with unfinished repair wounds and showering them in debris.") - occupant.take_limb_damage(rand(30,50),rand(30,50)) - go_out(CRADLE_NOTICE_FORCE_EJECT) - return - if(isxeno(usr) && !repairing) // let xenos eject people hiding inside; a xeno ejecting someone during repair does so like someone untrained - go_out(CRADLE_NOTICE_XENO_FUCKERY) + if(!repairing)//this shouldn't be possible unless you get var edited inside without triggering start_repair_operation(), in that case just get them out + remove_occupant() return - if(!ishuman(usr)) + if(!mob_ejecting) + perform_eject(CRADLE_NOTICE_EARLY_EJECT) return - if(usr == occupant) - if(repairing) - to_chat(usr, span_warning("There's no way you're getting out while this thing is operating on you!")) - return - else - visible_message("[usr] engages the internal release mechanism, and climbs out of \the [src].") - if(usr.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - usr.visible_message(span_notice("[usr] fumbles around figuring out how to use [src]."), - span_notice("You fumble around figuring out how to use [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * usr.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(usr, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED) || !occupant) + if(isxeno(mob_ejecting)) + mob_ejecting.visible_message(span_notice("[mob_ejecting] pries the cover of [src]"), + span_notice("You begin to pry at the cover of [src].")) + playsound(mob_ejecting,'sound/effects/metal_creaking.ogg', 25, 1) + if(!do_after(mob_ejecting, 2 SECONDS, NONE, src, BUSY_ICON_DANGER) || !occupant) return - if(repairing) - repairing = 0 - if(usr.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) //Untrained people will fail to terminate the repair properly. - visible_message("\The [src] malfunctions as [usr] aborts the rapair in progress.") - occupant.take_limb_damage(rand(30,50),rand(30,50)) - log_game("[key_name(usr)] ejected [key_name(occupant)] from the cradle during repair causing damage.") - message_admins("[ADMIN_TPMONTY(usr)] ejected [ADMIN_TPMONTY(occupant)] from the cradle during repair causing damage.") - go_out(CRADLE_NOTICE_IDIOT_EJECT) - return - go_out() + perform_eject(CRADLE_NOTICE_XENO_FUCKERY) + return + if(!ishuman(mob_ejecting)) + return + if(mob_ejecting == occupant) + to_chat(usr, span_warning("There's no way you're getting out while this thing is operating on you!")) + return + perform_eject(CRADLE_NOTICE_EARLY_EJECT) + +#undef CRADLE_NOTICE_SUCCESS +#undef CRADLE_NOTICE_DEATH +#undef CRADLE_NOTICE_NO_POWER +#undef CRADLE_NOTICE_EARLY_EJECT diff --git a/icons/obj/machines/robotic_cradle.dmi b/icons/obj/machines/robotic_cradle.dmi new file mode 100644 index 0000000000000000000000000000000000000000..47b9d94934762fb7f51c77d31c48fa196d5fe005 GIT binary patch literal 775 zcmV+i1Ni)jP)y>HWkX0*BO@)(JxDq_Ix?*)+js-Nh%-t| zRKUQ%elqo<00001bW%=J06^y0W&i*HiF#C6bVOxyV{&P5bZKvH004NLQ&wiFFDZeB$ zIX<~4F(oHeiHkEOv#1y-VaUaqR+N~V3Sr|=9-o+8l39jB7tqF()SSdhkg$P{A(yg( ztDg(ljR2vsGFltA)GPo10pv+UK~z|UotE2zgCGn<5e>9!_hSG5V>eif31B9>^9CoK zhKQYpaA;~28reL?IK^qM;stN{d5HU-DwyZ!=X=3CEmgee3@ly>h$vR^qBSu2UXbXV z5HC6di-))@lu0PlvP3`M3wXDR7oCB{13wf>=~k5zA9!l`{iEvM@N!EiC!tL0t`xqe zdsSK`-)~854bE>k_$v7-JJ@fDW$@zH1~Xrb@@R9GQ#uO}5ApFB4RNA|H$$wP3qA)& z;Jz#WdL2Ox@#OD|fVU;@hFJMg(ER3g2G=}L`2k}r8hGuH;?Hx4PsIcK@v?bLWrs9> zR%u>Jh6cgS0}bWpMd<&5Etvn%0Oh~Oz|4P#ft~*z12g}j0m^@mftmkEF#n-}ng6hV zl>g8G12P^a~S`FE Date: Fri, 26 Jul 2024 06:41:11 +0000 Subject: [PATCH 05/10] Automatic changelog for PR #39 [ci skip] --- html/changelogs/AutoChangeLog-pr-39.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-39.yml diff --git a/html/changelogs/AutoChangeLog-pr-39.yml b/html/changelogs/AutoChangeLog-pr-39.yml new file mode 100644 index 00000000000..ffaac51cf8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-39.yml @@ -0,0 +1,8 @@ +author: "Helg2" +delete-after: True +changes: + - refactor: "Ремонтная коробка для роботов была переделена по части кода." + - qol: "Теперь жертв коробки для роботов можно вытащить из неё одним кликом." + - balance: "У ремонтной коробки роботов удалены требования навыков." + - bugfix: "Синты теперь могут засунуть себя в ремонтную коробку для роботов." + - imageadd: "Ремонтная коробка для роботов теперь выглядит как зарядка для мод-сьютов с ТГ." \ No newline at end of file From 540a6ae2ffc52dec069f927404f406df8acc8f2c Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:41:49 +0300 Subject: [PATCH 06/10] Ports 14878, 15112, 15167 (#42) * 15167 * 14878 * 15112 --- code/__DEFINES/conflict.dm | 13 ------- code/__DEFINES/mobs.dm | 34 +++++++------------ code/game/data_huds.dm | 1 - .../mob/living/carbon/carbon_defines.dm | 4 +-- .../mob/living/carbon/human/update_icons.dm | 6 ---- .../mob/living/carbon/xenomorph/life.dm | 19 +++++------ .../living/carbon/xenomorph/update_icons.dm | 27 +++++++-------- .../living/carbon/xenomorph/xeno_defines.dm | 1 - .../mob/living/carbon/xenomorph/xenomorph.dm | 2 +- .../mob/living/carbon/xenomorph/xenoprocs.dm | 21 +++++++++--- .../modules/mob/living/living_health_procs.dm | 2 +- .../modules/predator/yautja/weapons/ranged.dm | 25 ++------------ code/modules/projectiles/guns/specialist.dm | 13 ++----- 13 files changed, 58 insertions(+), 110 deletions(-) diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm index e14f37260a9..c8fe6df2574 100644 --- a/code/__DEFINES/conflict.dm +++ b/code/__DEFINES/conflict.dm @@ -208,19 +208,6 @@ #define MAX_PARALYSE_AMOUNT_FOR_PARALYSE_RESISTANT 2 SECONDS -//Xeno Overlays Indexes////////// -#define X_PRED_LASER_LAYER 10 -#define X_LASER_LAYER 9 -#define X_WOUND_LAYER 8 -#define X_HEAD_LAYER 7 -#define X_SUIT_LAYER 6 -#define X_L_HAND_LAYER 5 -#define X_R_HAND_LAYER 4 -#define X_TARGETED_LAYER 3 -#define X_FIRE_LAYER 1 -#define X_TOTAL_LAYERS 10 -///////////////////////////////// - // No neighbors #define NEIGHBORS_NONE 0 // Cardinal neighborhood diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index f1fcf9ce960..f057d3b856b 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -407,13 +407,14 @@ GLOBAL_LIST_INIT(xenoupgradetiers, list(XENO_UPGRADE_BASETYPE, XENO_UPGRADE_INVA #define HUMAN_MAX_PALENESS 30 //this is added to human skin tone to get value of pale_max variable -// Human Overlay Indexes -/* RU TGMC EDIT -#define LASER_LAYER 29 //For sniper targeting laser -#define MOTH_WINGS_LAYER 28 -#define MUTATIONS_LAYER 27 -#define DAMAGE_LAYER 26 -RU TGMC EDIT */ +// Overlay Indexes +#define PRED_LASER_LAYER 32 +#define LASER_LAYER 31 +#define WOUND_LAYER 30 +#define MOTH_WINGS_LAYER 29 +#define MUTATIONS_LAYER 28 +#define DAMAGE_LAYER 27 +#define FLAY_LAYER 26 #define UNIFORM_LAYER 25 #define TAIL_LAYER 24 //bs12 specific. this hack is probably gonna come back to haunt me #define ID_LAYER 23 @@ -439,9 +440,9 @@ RU TGMC EDIT */ #define OVERHEALTH_SHIELD_LAYER 3 #define TARGETED_LAYER 2 //for target sprites when held at gun point, and holo cards. #define FIRE_LAYER 1 //If you're on fire -/* RU TGMC EDIT -#define TOTAL_LAYERS 29 -RU TGMC EDIT */ + +#define TOTAL_LAYERS 32 + #define MOTH_WINGS_BEHIND_LAYER 1 #define TOTAL_UNDERLAYS 1 @@ -486,7 +487,6 @@ RU TGMC EDIT */ #define XENO_SLOWDOWN_REGEN 0.4 #define XENO_DEADHUMAN_DRAG_SLOWDOWN 2 -//#define XENO_EXPLOSION_GIB_THRESHOLD 0.95 //if your effective bomb armour is less than 5, devestating explosions will gib xenos //RUTGMC REMOVAL - Explosions #define KING_SUMMON_TIMER_DURATION 5 MINUTES @@ -595,7 +595,7 @@ RU TGMC EDIT */ #define RAVAGER_ENDURE_DURATION 10 SECONDS #define RAVAGER_ENDURE_DURATION_WARNING 0.7 -#define RAVAGER_ENDURE_HP_LIMIT -125 //RUTGMC EDIT +#define RAVAGER_ENDURE_HP_LIMIT -125 #define RAVAGER_RAGE_DURATION 10 SECONDS #define RAVAGER_RAGE_WARNING 0.7 @@ -813,8 +813,6 @@ GLOBAL_LIST_INIT(human_body_parts, list(BODY_ZONE_HEAD, #define GRAB_PIXEL_SHIFT_NECK 16 #define HUMAN_CARRY_SLOWDOWN 0.35 -//#define HUMAN_EXPLOSION_GIB_THRESHOLD 0.1 //RUTGMC DELETION, explosions - // ============================= // Hallucinations - health hud screws for carbon mobs @@ -888,14 +886,6 @@ GLOBAL_LIST_INIT(human_body_parts, list(BODY_ZONE_HEAD, ///Default damage for slamming a mob against another mob #define BASE_MOB_SLAM_DAMAGE 8 -#define MOTH_WINGS_LAYER 28 -#define MUTATIONS_LAYER 27 -#define DAMAGE_LAYER 26 -#define FLAY_LAYER 25 -#define PRED_LASER_LAYER 1.9 -#define LASER_LAYER 1.8 -#define TOTAL_LAYERS 30 - // Yautja defines //Gear select defines diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 893b1c008fc..2a224b6e78e 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -114,7 +114,6 @@ return /mob/living/carbon/xenomorph/med_hud_set_status() - hud_set_plasma() hud_set_pheromone() /mob/living/carbon/human/med_hud_set_status() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index afb36e4cdf3..813f00e0791 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -15,9 +15,7 @@ var/fire_alert = FALSE var/pressure_alert = FALSE -//RUTGMC EDIT var/butchery_progress = 0 -//RUTGMC EDIT var/list/internal_organs = list() ///Overall drunkenness - check handle_status_effects() in life.dm for effects @@ -48,6 +46,8 @@ var/list/datum/action/ability/mob_abilities = list() ///Currently selected ability var/datum/action/ability/activable/selected_ability + ///carbon overlay layers + var/list/overlays_standing[TOTAL_LAYERS] /mob/living/carbon/proc/transfer_identity(mob/living/carbon/destination) if(!istype(destination)) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 32dc267677e..afea0de50f4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -61,14 +61,10 @@ There are several things that need to be remembered: #define ITEM_STATE_IF_SET(I) I.item_state ? I.item_state : I.icon_state - /mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] var/list/underlays_standing[TOTAL_UNDERLAYS] var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - - /mob/living/carbon/human/apply_overlay(cache_index) var/list/to_add = list() SEND_SIGNAL(src, COMSIG_HUMAN_APPLY_OVERLAY, cache_index, to_add) @@ -677,7 +673,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) /mob/living/carbon/human/update_burst() remove_overlay(BURST_LAYER) var/mutable_appearance/standing -//RUTGMC EDIT ADDITION BEGIN - Preds if(chestburst == 1) if(isyautja(src)) standing = mutable_appearance('icons/Xeno/Effects.dmi', "predburst_stand", -BURST_LAYER) @@ -688,7 +683,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) standing = mutable_appearance('icons/Xeno/Effects.dmi', "predbursted_stand", -BURST_LAYER) else standing = mutable_appearance('icons/Xeno/Effects.dmi', "bursted_stand", -BURST_LAYER) -//RUTGMC EDIT ADDITION END overlays_standing[BURST_LAYER] = standing apply_overlay(BURST_LAYER) diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 90baa08b845..ce5b0b59670 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -119,25 +119,23 @@ /mob/living/carbon/xenomorph/proc/handle_living_plasma_updates() var/turf/T = loc - if(!T || !istype(T)) + if(!istype(T)) //This means plasma doesn't update while you're in things like a vent, but since you don't have weeds in a vent or can actually take advantage of pheros, this is fine return - if(plasma_stored >= xeno_caste.plasma_max * xeno_caste.plasma_regen_limit) + + if(!current_aura && (plasma_stored >= xeno_caste.plasma_max * xeno_caste.plasma_regen_limit)) //no loss or gain return if(current_aura) if(plasma_stored < pheromone_cost) - use_plasma(plasma_stored) + use_plasma(plasma_stored, FALSE) QDEL_NULL(current_aura) src.balloon_alert(src, "Stop emitting, no plasma") else - use_plasma(pheromone_cost) - - if(HAS_TRAIT(src, TRAIT_NOPLASMAREGEN)) - hud_set_plasma() - return + use_plasma(pheromone_cost, FALSE) - if(!loc_weeds_type && !(xeno_caste.caste_flags & CASTE_INNATE_PLASMA_REGEN)) - hud_set_plasma() // since we used some plasma via the aura + if(HAS_TRAIT(src, TRAIT_NOPLASMAREGEN) || !loc_weeds_type && !(xeno_caste.caste_flags & CASTE_INNATE_PLASMA_REGEN)) + if(current_aura) //we only need to update if we actually used plasma from pheros + hud_set_plasma() return var/plasma_gain = xeno_caste.plasma_gain @@ -152,7 +150,6 @@ SEND_SIGNAL(src, COMSIG_XENOMORPH_PLASMA_REGEN, plasma_mod) gain_plasma(plasma_mod[1]) - hud_set_plasma() //update plasma amount on the plasma mob_hud /mob/living/carbon/xenomorph/can_receive_aura(aura_type, atom/source, datum/aura_bearer/bearer) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index 70508be1803..fd46532bbde 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -40,7 +40,6 @@ update_fire() //the fire overlay depends on the xeno's stance, so we must update it. update_wounds() - hud_set_plasma() med_hud_set_health() hud_set_sunder() hud_set_firestacks() @@ -53,35 +52,35 @@ update_icons() /mob/living/carbon/xenomorph/update_inv_r_hand() - remove_overlay(X_R_HAND_LAYER) + remove_overlay(R_HAND_LAYER) if(r_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.screen_loc = ui_rhand client.screen += r_hand - overlays_standing[X_R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = X_R_HAND_LAYER) - apply_overlay(X_R_HAND_LAYER) + overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = R_HAND_LAYER) + apply_overlay(R_HAND_LAYER) /mob/living/carbon/xenomorph/update_inv_l_hand() - remove_overlay(X_L_HAND_LAYER) + remove_overlay(L_HAND_LAYER) if(l_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.screen_loc = ui_lhand client.screen += l_hand - overlays_standing[X_L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = X_L_HAND_LAYER) - apply_overlay(X_L_HAND_LAYER) + overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = L_HAND_LAYER) + apply_overlay(L_HAND_LAYER) /mob/living/carbon/xenomorph/proc/create_shriekwave(color) var/image/shriekwave = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. if(color) shriekwave.color = color - overlays_standing[X_SUIT_LAYER] = shriekwave - apply_temp_overlay(X_SUIT_LAYER, 3 SECONDS) + overlays_standing[SUIT_LAYER] = shriekwave + apply_temp_overlay(SUIT_LAYER, 3 SECONDS) /mob/living/carbon/xenomorph/proc/create_stomp() - overlays_standing[X_SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "stomp") //Ehh, suit layer's not being used. - apply_temp_overlay(X_SUIT_LAYER, 1.2 SECONDS) + overlays_standing[SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "stomp") //Ehh, suit layer's not being used. + apply_temp_overlay(SUIT_LAYER, 1.2 SECONDS) /mob/living/carbon/xenomorph/update_fire() if(!fire_overlay) @@ -97,7 +96,7 @@ if(QDELETED(src)) return - remove_overlay(X_WOUND_LAYER) + remove_overlay(WOUND_LAYER) remove_filter("wounded_filter") var/health_thresholds @@ -136,8 +135,8 @@ if(xeno_caste.caste_flags & CASTE_HAS_WOUND_MASK) var/image/wounded_mask = image(icon, null, "alpha_[overlay_to_show]") wounded_mask.render_target = "*[REF(src)]" - overlays_standing[X_WOUND_LAYER] = wounded_mask - apply_overlay(X_WOUND_LAYER) + overlays_standing[WOUND_LAYER] = wounded_mask + apply_overlay(WOUND_LAYER) add_filter("wounded_filter", 1, alpha_mask_filter(0, 0, null, "*[REF(src)]", MASK_INVERSE)) wound_overlay.vis_flags &= ~VIS_HIDE // Show the overlay diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 827fe656bac..82f3f555a49 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -283,7 +283,6 @@ RU TGMC EDIT */ ///State tracking of hive status toggles var/status_toggle_flags = HIVE_STATUS_DEFAULTS - var/list/overlays_standing[X_TOTAL_LAYERS] var/atom/movable/vis_obj/xeno_wounds/wound_overlay var/atom/movable/vis_obj/xeno_wounds/fire_overlay/fire_overlay var/datum/xeno_caste/xeno_caste diff --git a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm index 40cdb6ce118..fa3e776d6d4 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm @@ -109,7 +109,7 @@ maxHealth = xeno_caste.max_health * GLOB.xeno_stat_multiplicator_buff if(restore_health_and_plasma) // xenos that manage plasma through special means shouldn't gain it for free on aging - plasma_stored = max(plasma_stored, xeno_caste.plasma_max * xeno_caste.plasma_regen_limit) + set_plasma(max(plasma_stored, xeno_caste.plasma_max * xeno_caste.plasma_regen_limit)) health = maxHealth setXenoCasteSpeed(xeno_caste.speed) diff --git a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm index f84dc8aa2df..31e79e28f98 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm @@ -135,6 +135,8 @@ . += "Sunder: [100-sunder]% armor left" + . += "Regeneration power: [max(regen_power * 100, 0)]%" + //Very weak <= 1.0, weak <= 2.0, no modifier 2-3, strong <= 3.5, very strong <= 4.5 var/msg_holder = "" if(frenzy_aura) @@ -191,16 +193,25 @@ return FALSE return TRUE -/mob/living/carbon/xenomorph/proc/use_plasma(value) +/mob/living/carbon/xenomorph/proc/set_plasma(value, update_plasma = TRUE) + plasma_stored = clamp(value, 0, xeno_caste.plasma_max) + if(!update_plasma) + return + hud_set_plasma() + +/mob/living/carbon/xenomorph/proc/use_plasma(value, update_plasma = TRUE) plasma_stored = max(plasma_stored - value, 0) update_action_button_icons() + if(!update_plasma) + return + hud_set_plasma() -/mob/living/carbon/xenomorph/proc/gain_plasma(value) +/mob/living/carbon/xenomorph/proc/gain_plasma(value, update_plasma = TRUE) plasma_stored = min(plasma_stored + value, xeno_caste.plasma_max) update_action_button_icons() - - - + if(!update_plasma) + return + hud_set_plasma() //Strip all inherent xeno verbs from your caste. Used in evolution. /mob/living/carbon/xenomorph/proc/remove_inherent_verbs() diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index 65895f2de02..afef8182f18 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -360,7 +360,7 @@ /mob/living/carbon/xenomorph/revive(admin_revive = FALSE) - plasma_stored = xeno_caste.plasma_max + set_plasma(xeno_caste.plasma_max) sunder = 0 if(stat == DEAD) hive?.on_xeno_revive(src) diff --git a/code/modules/predator/yautja/weapons/ranged.dm b/code/modules/predator/yautja/weapons/ranged.dm index abc86002c59..ed2d0304506 100644 --- a/code/modules/predator/yautja/weapons/ranged.dm +++ b/code/modules/predator/yautja/weapons/ranged.dm @@ -461,20 +461,15 @@ /atom/proc/can_apply_pred_laser() return FALSE -/mob/living/carbon/human/can_apply_pred_laser() +/mob/living/carbon/can_apply_pred_laser() if(!overlays_standing[PRED_LASER_LAYER]) return TRUE return FALSE -/mob/living/carbon/xenomorph/can_apply_pred_laser() - if(!overlays_standing[X_PRED_LASER_LAYER]) - return TRUE - return FALSE - /atom/proc/apply_pred_laser() return FALSE -/mob/living/carbon/human/apply_pred_laser() +/mob/living/carbon/apply_pred_laser() overlays_standing[PRED_LASER_LAYER] = image("icon" = 'icons/mob/hunter/pred_gear.dmi', "icon_state" = "locking-y", "layer" = -PRED_LASER_LAYER) apply_overlay(PRED_LASER_LAYER) spawn(2 SECONDS) @@ -484,27 +479,13 @@ apply_overlay(PRED_LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/apply_pred_laser() - overlays_standing[X_PRED_LASER_LAYER] = image("icon" = 'icons/mob/hunter/pred_gear.dmi', "icon_state" = "locking-y", "layer" = -X_PRED_LASER_LAYER) - apply_overlay(X_PRED_LASER_LAYER) - spawn(2 SECONDS) - if(overlays_standing[X_PRED_LASER_LAYER]) - remove_overlay(X_PRED_LASER_LAYER) - overlays_standing[X_PRED_LASER_LAYER] = image("icon" = 'icons/mob/hunter/pred_gear.dmi', "icon_state" = "locked-y", "layer" = -X_PRED_LASER_LAYER) - apply_overlay(X_PRED_LASER_LAYER) - return TRUE - /atom/proc/remove_pred_laser() return FALSE -/mob/living/carbon/human/remove_pred_laser() +/mob/living/carbon/remove_pred_laser() remove_overlay(PRED_LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/remove_pred_laser() - remove_overlay(X_PRED_LASER_LAYER) - return TRUE - /obj/item/weapon/gun/energy/yautja/plasma_caster/process() var/mob/living/user = loc if(!istype(user)) diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm index b3a268791ab..650b5752b5f 100644 --- a/code/modules/projectiles/guns/specialist.dm +++ b/code/modules/projectiles/guns/specialist.dm @@ -102,27 +102,18 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /atom/proc/apply_laser() return FALSE -/mob/living/carbon/human/apply_laser() +/mob/living/carbon/apply_laser() overlays_standing[LASER_LAYER] = image("icon" = 'icons/obj/items/projectiles.dmi',"icon_state" = "sniper_laser", "layer" =-LASER_LAYER) apply_overlay(LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/apply_laser() - overlays_standing[X_LASER_LAYER] = image("icon" = 'icons/obj/items/projectiles.dmi',"icon_state" = "sniper_laser", "layer" =-X_LASER_LAYER) - apply_overlay(X_LASER_LAYER) - return TRUE - /mob/living/carbon/proc/remove_laser() return FALSE -/mob/living/carbon/human/remove_laser() +/mob/living/carbon/remove_laser() remove_overlay(LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/remove_laser() - remove_overlay(X_LASER_LAYER) - return TRUE - /obj/item/weapon/gun/rifle/sniper/antimaterial/unique_action(mob/user) if(!targetmarker_primed && !targetmarker_on) return laser_on(user) From afdf84a21275954fdc5629454eeb02ae704a9c9b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 06:42:05 +0000 Subject: [PATCH 07/10] Automatic changelog for PR #42 [ci skip] --- html/changelogs/AutoChangeLog-pr-42.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-42.yml diff --git a/html/changelogs/AutoChangeLog-pr-42.yml b/html/changelogs/AutoChangeLog-pr-42.yml new file mode 100644 index 00000000000..fde5247274e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-42.yml @@ -0,0 +1,7 @@ +author: "Helg2" +delete-after: True +changes: + - qol: "Сила регенерации ксеносов теперь отображается в панели статуса.." + - bugfix: "Активные феромоны теперь тратят по 5 плазмы в тик как и положено." + - code_imp: "Оптимизирован код апдейта плазмы." + - code_imp: "Слои оверлеев ксеносов и хуманов объединены в один." \ No newline at end of file From 1a086d6d81b1cc35cf8bab0e5bba2e4acd103eeb Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:06:33 +0300 Subject: [PATCH 08/10] Reorgs sound folder a bit. (#38) * voice folder * b18 * predator * human male * human female * predalien * alien * larva * queen * oops * effect folder * behemoth * alien * explosions * behemoth2 * alien footsteps * Revert "alien footsteps" This reverts commit 73b313d707df830947ab08280dfe2c4044337ba3. * Reapply "alien footsteps" This reverts commit ee800cfa261041ebed2005bc073c0af147f00d3f. * hmmm * Update sound.dm * conflicts --- code/__DEFINES/footsteps.dm | 168 +++++++++--------- code/datums/cinematic.dm | 16 +- code/datums/components/suit_autodoc.dm | 2 +- code/datums/elements/limb_support.dm | 2 +- code/datums/status_effects/xeno_buffs.dm | 2 +- code/game/objects/explosion_recursive.dm | 2 +- code/game/objects/items/cocoon.dm | 2 +- code/game/objects/items/loot_box.dm | 2 +- code/game/objects/items/radio/headset.dm | 2 +- .../campaign_structures/destroy_objectives.dm | 2 +- code/game/sound.dm | 102 +++++------ code/game/turfs/closed.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 2 +- code/modules/flufftext/Hallucination.dm | 2 +- .../mob/living/carbon/human/emote-yautja.dm | 40 ++--- code/modules/mob/living/carbon/human/emote.dm | 34 ++-- .../mob/living/carbon/human/species.dm | 2 +- .../modules/mob/living/carbon/human/yautja.dm | 4 +- .../mob/living/carbon/xenomorph/abilities.dm | 8 +- .../castes/behemoth/abilities_behemoth.dm | 40 ++--- .../castes/carrier/abilities_carrier.dm | 6 +- .../castes/chimera/abilities_chimera.dm | 8 +- .../castes/crusher/abilities_crusher.dm | 4 +- .../castes/defender/abilities_defender.dm | 6 +- .../castes/defiler/abilities_defiler.dm | 14 +- .../castes/facehugger/abilities_facehugger.dm | 2 +- .../castes/hivelord/abilities_hivelord.dm | 2 +- .../xenomorph/castes/hivemind/hivemind.dm | 2 +- .../castes/hunter/abilities_hunter.dm | 12 +- .../xenomorph/castes/king/abilities_king.dm | 4 +- .../carbon/xenomorph/castes/king/king.dm | 4 +- .../castes/panther/abilities_panther.dm | 12 +- .../castes/praetorian/abilities_praetorian.dm | 2 +- .../castes/predalien/abilities_predalien.dm | 8 +- .../xenomorph/castes/queen/abilities_queen.dm | 8 +- .../carbon/xenomorph/castes/queen/queen.dm | 4 +- .../castes/ravager/abilities_ravager.dm | 18 +- .../castes/runner/abilities_runner.dm | 12 +- .../castes/sentinel/abilities_sentinel.dm | 12 +- .../castes/spitter/abilities_spitter.dm | 4 +- .../castes/warlock/abilities_warlock.dm | 2 +- .../castes/warrior/abilities_warrior.dm | 4 +- .../castes/wraith/abilities_wraith.dm | 6 +- .../living/carbon/xenomorph/damage_procs.dm | 2 +- .../mob/living/carbon/xenomorph/death.dm | 2 +- .../mob/living/carbon/xenomorph/egg.dm | 10 +- .../mob/living/carbon/xenomorph/embryo.dm | 4 +- .../mob/living/carbon/xenomorph/emote.dm | 50 +++--- .../living/carbon/xenomorph/facehuggers.dm | 4 +- .../mob/living/carbon/xenomorph/hive_datum.dm | 2 +- .../mob/living/carbon/xenomorph/xenoprocs.dm | 2 +- .../mob/living/silicon/ai/ai_notifications.dm | 4 +- .../mob/living/simple_animal/hostile/alien.dm | 2 +- code/modules/predator/yautja/bracers.dm | 2 +- .../vehicles/mecha/combat/savannah_ivanov.dm | 2 +- code/modules/xenomorph/silo.dm | 8 +- code/modules/xenomorph/spawner.dm | 4 +- code/modules/xenomorph/trap.dm | 2 +- code/modules/xenomorph/turret.dm | 4 +- .../behemoth/earth_pillar_destroyed.ogg | Bin .../behemoth/earth_pillar_eating.ogg | Bin .../behemoth/earth_pillar_hit_1.ogg | Bin .../behemoth/earth_pillar_hit_2.ogg | Bin .../behemoth/earth_pillar_hit_3.ogg | Bin .../behemoth/earth_pillar_hit_4.ogg | Bin .../behemoth/earth_pillar_hit_5.ogg | Bin .../behemoth/earth_pillar_hit_6.ogg | Bin .../behemoth/earth_pillar_rising.ogg | Bin .../behemoth/landslide_enhanced_charge.ogg | Bin .../behemoth/landslide_hit_mob.ogg | Bin .../{ => alien}/behemoth/landslide_roar.ogg | Bin .../behemoth/primal_wrath_roar.ogg | Bin .../behemoth/roll.ogg} | Bin .../behemoth/rumble.ogg} | Bin .../behemoth/seismic_fracture_explosion.ogg | Bin .../behemoth/stomp.ogg} | Bin .../egg_burst.ogg} | Bin .../egg_move.ogg} | Bin .../evolveready.ogg} | Bin .../{xeno_newlarva.ogg => alien/newlarva.ogg} | Bin .../recycler.ogg} | Bin .../resin_break1.ogg} | Bin .../resin_break2.ogg} | Bin .../resin_build1.ogg} | Bin .../resin_build2.ogg} | Bin .../resin_build3.ogg} | Bin .../resin_move1.ogg} | Bin .../resin_move2.ogg} | Bin .../tail_swipe1.ogg} | Bin .../tail_swipe2.ogg} | Bin .../tail_swipe3.ogg} | Bin .../turret_death.ogg} | Bin .../ventcrawl1.ogg} | Bin .../ventcrawl2.ogg} | Bin .../ventpass1.ogg} | Bin .../ventpass2.ogg} | Bin .../creak1.ogg} | Bin .../creak2.ogg} | Bin .../{explosionfar.ogg => explosion/far0.ogg} | Bin .../far1.ogg} | Bin .../far2.ogg} | Bin .../far3.ogg} | Bin .../far4.ogg} | Bin .../far5.ogg} | Bin .../incendiary1.ogg} | Bin .../incendiary2.ogg} | Bin .../incendiary3.ogg} | Bin .../large1.ogg} | Bin .../large2.ogg} | Bin .../large3.ogg} | Bin .../large4.ogg} | Bin .../large5.ogg} | Bin .../large6.ogg} | Bin .../medium1.ogg} | Bin .../medium2.ogg} | Bin .../medium3.ogg} | Bin .../medium4.ogg} | Bin .../medium5.ogg} | Bin .../medium6.ogg} | Bin .../micro1.ogg} | Bin .../micro2.ogg} | Bin .../micro3.ogg} | Bin .../small1.ogg} | Bin .../small2.ogg} | Bin .../small3.ogg} | Bin .../small4.ogg} | Bin .../small_far0.ogg} | Bin .../small_far1.ogg} | Bin .../small_far2.ogg} | Bin .../small_far3.ogg} | Bin .../small_far4.ogg} | Bin .../alien/charge1.ogg} | Bin .../alien/charge2.ogg} | Bin .../alien/charge3.ogg} | Bin .../alien/large1.ogg} | Bin .../alien/large2.ogg} | Bin .../alien/large3.ogg} | Bin .../alien/medium1.ogg} | Bin .../alien/medium2.ogg} | Bin .../alien/medium3.ogg} | Bin .../alien/resin_move1.ogg} | Bin .../alien/resin_move2.ogg} | Bin .../footstep/alien_footstep_large1.ogg | Bin 7555 -> 0 bytes .../footstep/alien_footstep_large2.ogg | Bin 7379 -> 0 bytes .../footstep/alien_footstep_large3.ogg | Bin 7054 -> 0 bytes .../footstep/alien_footstep_medium1.ogg | Bin 25788 -> 0 bytes .../footstep/alien_footstep_medium2.ogg | Bin 29640 -> 0 bytes .../footstep/alien_footstep_medium3.ogg | Bin 31168 -> 0 bytes .../{4_xeno_roars.ogg => alien/4_roars.ogg} | Bin .../chestburst.ogg} | Bin .../chestburst2.ogg} | Bin .../{alien_death.ogg => alien/death.ogg} | Bin .../{alien_death2.ogg => alien/death2.ogg} | Bin .../distantroar_3.ogg} | Bin .../{alien_drool1.ogg => alien/drool1.ogg} | Bin .../{alien_drool2.ogg => alien/drool2.ogg} | Bin .../facehugger_dies.ogg} | Bin .../{alien_growl1.ogg => alien/growl1.ogg} | Bin .../{alien_growl2.ogg => alien/growl2.ogg} | Bin .../{alien_growl3.ogg => alien/growl3.ogg} | Bin .../{alien_growl4.ogg => alien/growl4.ogg} | Bin .../{alien_help1.ogg => alien/help1.ogg} | Bin .../{alien_help2.ogg => alien/help2.ogg} | Bin .../{alien_hiss1.ogg => alien/hiss1.ogg} | Bin .../{alien_hiss2.ogg => alien/hiss2.ogg} | Bin .../{alien_hiss3.ogg => alien/hiss3.ogg} | Bin sound/voice/{hiss1.ogg => alien/hiss4.ogg} | Bin sound/voice/{hiss2.ogg => alien/hiss5.ogg} | Bin sound/voice/{hiss3.ogg => alien/hiss6.ogg} | Bin sound/voice/{hiss4.ogg => alien/hiss7.ogg} | Bin sound/voice/{hiss5.ogg => alien/hiss8.ogg} | Bin sound/voice/{hiss6.ogg => alien/hiss9.ogg} | Bin .../king_died.ogg} | Bin .../{ed209_20sec.ogg => alien/king_roar.ogg} | Bin .../larva/roar1.ogg} | Bin .../larva/roar2.ogg} | Bin .../larva/roar3.ogg} | Bin .../larva/roar4.ogg} | Bin .../larva/talk1.ogg} | Bin .../larva/talk2.ogg} | Bin .../larva/talk3.ogg} | Bin .../larva/talk4.ogg} | Bin .../{alien_pounce.ogg => alien/pounce.ogg} | Bin .../{alien_pounce2.ogg => alien/pounce2.ogg} | Bin .../predalien/click.ogg} | Bin .../predalien/click1.ogg} | Bin .../predalien/click2.ogg} | Bin .../predalien/click3.ogg} | Bin .../predalien/death.ogg} | Bin .../predalien/growl.ogg} | Bin .../predalien/hiss.ogg} | Bin .../predalien/pounce.ogg} | Bin .../predalien/roar.ogg} | Bin .../queen/breath1.ogg} | Bin .../queen/breath2.ogg} | Bin .../queen/command.ogg} | Bin .../queen/command2.ogg} | Bin .../queen/command3.ogg} | Bin .../queen/died.ogg} | Bin .../queen/screech.ogg} | Bin .../queen/screech_frenzy.ogg} | Bin .../queen/screech_heal.ogg} | Bin .../queen/screech_plasma.ogg} | Bin .../{alien_roar1.ogg => alien/roar1.ogg} | Bin .../{alien_roar10.ogg => alien/roar10.ogg} | Bin .../{alien_roar11.ogg => alien/roar11.ogg} | Bin .../{alien_roar12.ogg => alien/roar12.ogg} | Bin .../{alien_roar2.ogg => alien/roar2.ogg} | Bin .../{alien_roar3.ogg => alien/roar3.ogg} | Bin .../{alien_roar4.ogg => alien/roar4.ogg} | Bin .../{alien_roar5.ogg => alien/roar5.ogg} | Bin .../{alien_roar6.ogg => alien/roar6.ogg} | Bin .../{alien_roar7.ogg => alien/roar7.ogg} | Bin .../{alien_roar8.ogg => alien/roar8.ogg} | Bin .../{alien_roar9.ogg => alien/roar9.ogg} | Bin .../roar_warlock.ogg} | Bin .../spitacid.ogg} | Bin .../spitacid2.ogg} | Bin .../voice/{alien_talk.ogg => alien/talk.ogg} | Bin .../{alien_talk2.ogg => alien/talk2.ogg} | Bin .../{alien_talk3.ogg => alien/talk3.ogg} | Bin sound/voice/{ => alien}/xenos_roaring.ogg | Bin .../yell_alt.ogg} | Bin sound/voice/alien_cena.ogg | Bin 58020 -> 0 bytes sound/voice/alien_queen_xmas.ogg | Bin 34180 -> 0 bytes .../{b18_activate.ogg => b18/activate.ogg} | Bin .../{b18_antitoxin.ogg => b18/antitoxin.ogg} | Bin .../antitoxin2.ogg} | Bin sound/voice/{b18_brute.ogg => b18/brute.ogg} | Bin .../{b18_fracture.ogg => b18/fracture.ogg} | Bin sound/voice/{ => b18}/ib_detected.ogg | Bin .../pain_suppress.ogg} | Bin sound/voice/bcreep.ogg | Bin 4370 -> 0 bytes sound/voice/bcriminal.ogg | Bin 4416 -> 0 bytes sound/voice/bfreeze.ogg | Bin 4317 -> 0 bytes sound/voice/bgod.ogg | Bin 7389 -> 0 bytes sound/voice/biamthelaw.ogg | Bin 5897 -> 0 bytes sound/voice/binsult.ogg | Bin 24561 -> 0 bytes sound/voice/bjustice.ogg | Bin 4286 -> 0 bytes sound/voice/bradio.ogg | Bin 5430 -> 0 bytes sound/voice/bsecureday.ogg | Bin 4610 -> 0 bytes .../female/cough1.ogg} | Bin .../female/cough2.ogg} | Bin .../female/cry_1.ogg} | Bin .../female/facehugged1.ogg} | Bin .../female/facehugged2.ogg} | Bin .../female/gasp1.ogg} | Bin .../female/gasp2.ogg} | Bin .../female/giggle_1.ogg} | Bin .../female/gored_1.ogg} | Bin .../female/gored_2.ogg} | Bin .../female/grenadethrow_1.ogg} | Bin .../female/grenadethrow_2.ogg} | Bin .../female/grenadethrow_3.ogg} | Bin .../female/laugh_1.ogg} | Bin .../female/medic.ogg} | Bin .../female/moan_1.ogg} | Bin .../female/pain_1.ogg} | Bin .../female/pain_2.ogg} | Bin .../female/pain_3.ogg} | Bin .../female/preburst1.ogg} | Bin .../female/preburst2.ogg} | Bin .../female/preburst3.ogg} | Bin .../female/scream_1.ogg} | Bin .../female/scream_2.ogg} | Bin .../female/scream_3.ogg} | Bin .../female/scream_4.ogg} | Bin .../female/scream_5.ogg} | Bin .../female/sigh_1.ogg} | Bin .../female/warcry_1.ogg} | Bin .../female/warcry_10.ogg} | Bin .../female/warcry_11.ogg} | Bin .../female/warcry_12.ogg} | Bin .../female/warcry_13.ogg} | Bin .../female/warcry_14.ogg} | Bin .../female/warcry_15.ogg} | Bin .../female/warcry_16.ogg} | Bin .../female/warcry_17.ogg} | Bin .../female/warcry_18.ogg} | Bin .../female/warcry_19.ogg} | Bin .../female/warcry_2.ogg} | Bin .../female/warcry_3.ogg} | Bin .../female/warcry_4.ogg} | Bin .../female/warcry_5.ogg} | Bin .../female/warcry_6.ogg} | Bin .../female/warcry_7.ogg} | Bin .../female/warcry_8.ogg} | Bin .../female/warcry_9.ogg} | Bin .../female/yawn_1.ogg} | Bin .../male/cough1.ogg} | Bin .../male/cough2.ogg} | Bin .../male/cry_1.ogg} | Bin .../male/facehugged1.ogg} | Bin .../male/facehugged2.ogg} | Bin .../male/facehugged3.ogg} | Bin .../male/gasp1.ogg} | Bin .../male/gasp2.ogg} | Bin .../male/gasp3.ogg} | Bin .../male/giggle_1.ogg} | Bin .../male/gored3.ogg} | Bin .../male/gored_1.ogg} | Bin .../male/gored_2.ogg} | Bin .../male/grenadethrow_1.ogg} | Bin .../male/grenadethrow_2.ogg} | Bin .../male/grenadethrow_3.ogg} | Bin .../male/laugh_1.ogg} | Bin .../male/laugh_2.ogg} | Bin .../male/medic.ogg} | Bin .../male/medic2.ogg} | Bin .../male/moan_1.ogg} | Bin .../male/pain_1.ogg} | Bin .../male/pain_10.ogg} | Bin .../male/pain_11.ogg} | Bin .../male/pain_2.ogg} | Bin .../male/pain_3.ogg} | Bin .../male/pain_4.ogg} | Bin .../male/pain_5.ogg} | Bin .../male/pain_6.ogg} | Bin .../male/pain_7.ogg} | Bin .../male/pain_8.ogg} | Bin .../male/pain_9.ogg} | Bin .../male/preburst1.ogg} | Bin .../male/preburst10.ogg} | Bin .../male/preburst2.ogg} | Bin .../male/preburst3.ogg} | Bin .../male/preburst4.ogg} | Bin .../male/preburst5.ogg} | Bin .../male/preburst6.ogg} | Bin .../male/preburst7.ogg} | Bin .../male/preburst8.ogg} | Bin .../male/preburst9.ogg} | Bin .../male/scream_1.ogg} | Bin .../male/scream_2.ogg} | Bin .../male/scream_3.ogg} | Bin .../male/scream_4.ogg} | Bin .../male/scream_5.ogg} | Bin .../male/scream_6.ogg} | Bin .../male/scream_7.ogg} | Bin .../male/sigh_1.ogg} | Bin .../male/warcry_1.ogg} | Bin .../male/warcry_10.ogg} | Bin .../male/warcry_11.ogg} | Bin .../male/warcry_12.ogg} | Bin .../male/warcry_13.ogg} | Bin .../male/warcry_14.ogg} | Bin .../male/warcry_15.ogg} | Bin .../male/warcry_16.ogg} | Bin .../male/warcry_17.ogg} | Bin .../male/warcry_18.ogg} | Bin .../male/warcry_19.ogg} | Bin .../male/warcry_2.ogg} | Bin .../male/warcry_20.ogg} | Bin .../male/warcry_21.ogg} | Bin .../male/warcry_22.ogg} | Bin .../male/warcry_23.ogg} | Bin .../male/warcry_24.ogg} | Bin .../male/warcry_25.ogg} | Bin .../male/warcry_26.ogg} | Bin .../male/warcry_27.ogg} | Bin .../male/warcry_28.ogg} | Bin .../male/warcry_29.ogg} | Bin .../male/warcry_3.ogg} | Bin .../male/warcry_4.ogg} | Bin .../male/warcry_5.ogg} | Bin .../male/warcry_6.ogg} | Bin .../male/warcry_7.ogg} | Bin .../male/warcry_8.ogg} | Bin .../male/warcry_9.ogg} | Bin .../male/yawn_1.ogg} | Bin .../whistle1.ogg} | Bin sound/voice/liveagain.ogg | Bin 28143 -> 0 bytes .../anytime.ogg} | Bin .../{pred_click1.ogg => predator/click1.ogg} | Bin .../{pred_click2.ogg => predator/click2.ogg} | Bin .../{pred_click3.ogg => predator/click3.ogg} | Bin .../{pred_click4.ogg => predator/click4.ogg} | Bin .../{pred_click5.ogg => predator/click5.ogg} | Bin .../come_on_out.ogg} | Bin .../deathlaugh.ogg} | Bin .../facehugged.ogg} | Bin .../{pred_helpme.ogg => predator/helpme.ogg} | Bin .../itsatrap.ogg} | Bin .../{pred_laugh1.ogg => predator/laugh1.ogg} | Bin .../{pred_laugh2.ogg => predator/laugh2.ogg} | Bin .../{pred_laugh3.ogg => predator/laugh3.ogg} | Bin .../{pred_laugh4.ogg => predator/laugh4.ogg} | Bin .../over_there.ogg} | Bin .../overhere.ogg} | Bin .../{pred_pain1.ogg => predator/pain1.ogg} | Bin .../{pred_pain2.ogg => predator/pain2.ogg} | Bin .../{pred_pain3.ogg => predator/pain3.ogg} | Bin .../{pred_pain4.ogg => predator/pain4.ogg} | Bin .../{pred_pain5.ogg => predator/pain5.ogg} | Bin .../pain_rare1.ogg} | Bin .../{pred_roar1.ogg => predator/roar1.ogg} | Bin .../{pred_roar2.ogg => predator/roar2.ogg} | Bin .../{pred_roar3.ogg => predator/roar3.ogg} | Bin .../{pred_roar4.ogg => predator/roar4.ogg} | Bin .../{pred_roar5.ogg => predator/roar5.ogg} | Bin .../turnaround.ogg} | Bin .../ugly_freak.ogg} | Bin .../{pred_warcry.ogg => predator/warcry.ogg} | Bin 402 files changed, 348 insertions(+), 348 deletions(-) rename sound/effects/{ => alien}/behemoth/earth_pillar_destroyed.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_eating.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_1.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_2.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_3.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_4.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_5.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_hit_6.ogg (100%) rename sound/effects/{ => alien}/behemoth/earth_pillar_rising.ogg (100%) rename sound/effects/{ => alien}/behemoth/landslide_enhanced_charge.ogg (100%) rename sound/effects/{ => alien}/behemoth/landslide_hit_mob.ogg (100%) rename sound/effects/{ => alien}/behemoth/landslide_roar.ogg (100%) rename sound/effects/{ => alien}/behemoth/primal_wrath_roar.ogg (100%) rename sound/effects/{behemoth/behemoth_roll.ogg => alien/behemoth/roll.ogg} (100%) rename sound/effects/{behemoth/behemoth_rumble.ogg => alien/behemoth/rumble.ogg} (100%) rename sound/effects/{ => alien}/behemoth/seismic_fracture_explosion.ogg (100%) rename sound/effects/{behemoth/behemoth_stomp.ogg => alien/behemoth/stomp.ogg} (100%) rename sound/effects/{alien_egg_burst.ogg => alien/egg_burst.ogg} (100%) rename sound/effects/{alien_egg_move.ogg => alien/egg_move.ogg} (100%) rename sound/effects/{xeno_evolveready.ogg => alien/evolveready.ogg} (100%) rename sound/effects/{xeno_newlarva.ogg => alien/newlarva.ogg} (100%) rename sound/effects/{alien_recycler.ogg => alien/recycler.ogg} (100%) rename sound/effects/{alien_resin_break1.ogg => alien/resin_break1.ogg} (100%) rename sound/effects/{alien_resin_break2.ogg => alien/resin_break2.ogg} (100%) rename sound/effects/{alien_resin_build1.ogg => alien/resin_build1.ogg} (100%) rename sound/effects/{alien_resin_build2.ogg => alien/resin_build2.ogg} (100%) rename sound/effects/{alien_resin_build3.ogg => alien/resin_build3.ogg} (100%) rename sound/effects/{footstep/alien_resin_move1.ogg => alien/resin_move1.ogg} (100%) rename sound/effects/{footstep/alien_resin_move2.ogg => alien/resin_move2.ogg} (100%) rename sound/effects/{alien_tail_swipe1.ogg => alien/tail_swipe1.ogg} (100%) rename sound/effects/{alien_tail_swipe2.ogg => alien/tail_swipe2.ogg} (100%) rename sound/effects/{alien_tail_swipe3.ogg => alien/tail_swipe3.ogg} (100%) rename sound/effects/{xeno_turret_death.ogg => alien/turret_death.ogg} (100%) rename sound/effects/{alien_ventcrawl1.ogg => alien/ventcrawl1.ogg} (100%) rename sound/effects/{alien_ventcrawl2.ogg => alien/ventcrawl2.ogg} (100%) rename sound/effects/{alien_ventpass1.ogg => alien/ventpass1.ogg} (100%) rename sound/effects/{alien_ventpass2.ogg => alien/ventpass2.ogg} (100%) rename sound/effects/{explosioncreak1.ogg => explosion/creak1.ogg} (100%) rename sound/effects/{explosioncreak2.ogg => explosion/creak2.ogg} (100%) rename sound/effects/{explosionfar.ogg => explosion/far0.ogg} (100%) rename sound/effects/{explosion_far1.ogg => explosion/far1.ogg} (100%) rename sound/effects/{explosion_far2.ogg => explosion/far2.ogg} (100%) rename sound/effects/{explosion_far3.ogg => explosion/far3.ogg} (100%) rename sound/effects/{explosion_far4.ogg => explosion/far4.ogg} (100%) rename sound/effects/{explosion_far5.ogg => explosion/far5.ogg} (100%) rename sound/effects/{incendiary_explosion_1.ogg => explosion/incendiary1.ogg} (100%) rename sound/effects/{incendiary_explosion_2.ogg => explosion/incendiary2.ogg} (100%) rename sound/effects/{incendiary_explosion_3.ogg => explosion/incendiary3.ogg} (100%) rename sound/effects/{explosion_large1.ogg => explosion/large1.ogg} (100%) rename sound/effects/{explosion_large2.ogg => explosion/large2.ogg} (100%) rename sound/effects/{explosion_large3.ogg => explosion/large3.ogg} (100%) rename sound/effects/{explosion_large4.ogg => explosion/large4.ogg} (100%) rename sound/effects/{explosion_large5.ogg => explosion/large5.ogg} (100%) rename sound/effects/{explosion_large6.ogg => explosion/large6.ogg} (100%) rename sound/effects/{explosion_med1.ogg => explosion/medium1.ogg} (100%) rename sound/effects/{explosion_med2.ogg => explosion/medium2.ogg} (100%) rename sound/effects/{explosion_med3.ogg => explosion/medium3.ogg} (100%) rename sound/effects/{explosion_med4.ogg => explosion/medium4.ogg} (100%) rename sound/effects/{explosion_med5.ogg => explosion/medium5.ogg} (100%) rename sound/effects/{explosion_med6.ogg => explosion/medium6.ogg} (100%) rename sound/effects/{explosion_micro1.ogg => explosion/micro1.ogg} (100%) rename sound/effects/{explosion_micro2.ogg => explosion/micro2.ogg} (100%) rename sound/effects/{explosion_micro3.ogg => explosion/micro3.ogg} (100%) rename sound/effects/{explosion_small1.ogg => explosion/small1.ogg} (100%) rename sound/effects/{explosion_small2.ogg => explosion/small2.ogg} (100%) rename sound/effects/{explosion_small3.ogg => explosion/small3.ogg} (100%) rename sound/effects/{explosion_small4.ogg => explosion/small4.ogg} (100%) rename sound/effects/{explosionsmallfar.ogg => explosion/small_far0.ogg} (100%) rename sound/effects/{explosion_smallfar1.ogg => explosion/small_far1.ogg} (100%) rename sound/effects/{explosion_smallfar2.ogg => explosion/small_far2.ogg} (100%) rename sound/effects/{explosion_smallfar3.ogg => explosion/small_far3.ogg} (100%) rename sound/effects/{explosion_smallfar4.ogg => explosion/small_far4.ogg} (100%) rename sound/effects/{alien_footstep_charge1.ogg => footstep/alien/charge1.ogg} (100%) rename sound/effects/{alien_footstep_charge2.ogg => footstep/alien/charge2.ogg} (100%) rename sound/effects/{alien_footstep_charge3.ogg => footstep/alien/charge3.ogg} (100%) rename sound/effects/{alien_footstep_large1.ogg => footstep/alien/large1.ogg} (100%) rename sound/effects/{alien_footstep_large2.ogg => footstep/alien/large2.ogg} (100%) rename sound/effects/{alien_footstep_large3.ogg => footstep/alien/large3.ogg} (100%) rename sound/effects/{alien_footstep_medium1.ogg => footstep/alien/medium1.ogg} (100%) rename sound/effects/{alien_footstep_medium2.ogg => footstep/alien/medium2.ogg} (100%) rename sound/effects/{alien_footstep_medium3.ogg => footstep/alien/medium3.ogg} (100%) rename sound/effects/{alien_resin_move1.ogg => footstep/alien/resin_move1.ogg} (100%) rename sound/effects/{alien_resin_move2.ogg => footstep/alien/resin_move2.ogg} (100%) delete mode 100644 sound/effects/footstep/alien_footstep_large1.ogg delete mode 100644 sound/effects/footstep/alien_footstep_large2.ogg delete mode 100644 sound/effects/footstep/alien_footstep_large3.ogg delete mode 100644 sound/effects/footstep/alien_footstep_medium1.ogg delete mode 100644 sound/effects/footstep/alien_footstep_medium2.ogg delete mode 100644 sound/effects/footstep/alien_footstep_medium3.ogg rename sound/voice/{4_xeno_roars.ogg => alien/4_roars.ogg} (100%) rename sound/voice/{alien_chestburst.ogg => alien/chestburst.ogg} (100%) rename sound/voice/{alien_chestburst2.ogg => alien/chestburst2.ogg} (100%) rename sound/voice/{alien_death.ogg => alien/death.ogg} (100%) rename sound/voice/{alien_death2.ogg => alien/death2.ogg} (100%) rename sound/voice/{alien_distantroar_3.ogg => alien/distantroar_3.ogg} (100%) rename sound/voice/{alien_drool1.ogg => alien/drool1.ogg} (100%) rename sound/voice/{alien_drool2.ogg => alien/drool2.ogg} (100%) rename sound/voice/{alien_facehugger_dies.ogg => alien/facehugger_dies.ogg} (100%) rename sound/voice/{alien_growl1.ogg => alien/growl1.ogg} (100%) rename sound/voice/{alien_growl2.ogg => alien/growl2.ogg} (100%) rename sound/voice/{alien_growl3.ogg => alien/growl3.ogg} (100%) rename sound/voice/{alien_growl4.ogg => alien/growl4.ogg} (100%) rename sound/voice/{alien_help1.ogg => alien/help1.ogg} (100%) rename sound/voice/{alien_help2.ogg => alien/help2.ogg} (100%) rename sound/voice/{alien_hiss1.ogg => alien/hiss1.ogg} (100%) rename sound/voice/{alien_hiss2.ogg => alien/hiss2.ogg} (100%) rename sound/voice/{alien_hiss3.ogg => alien/hiss3.ogg} (100%) rename sound/voice/{hiss1.ogg => alien/hiss4.ogg} (100%) rename sound/voice/{hiss2.ogg => alien/hiss5.ogg} (100%) rename sound/voice/{hiss3.ogg => alien/hiss6.ogg} (100%) rename sound/voice/{hiss4.ogg => alien/hiss7.ogg} (100%) rename sound/voice/{hiss5.ogg => alien/hiss8.ogg} (100%) rename sound/voice/{hiss6.ogg => alien/hiss9.ogg} (100%) rename sound/voice/{alien_king_died.ogg => alien/king_died.ogg} (100%) rename sound/voice/{ed209_20sec.ogg => alien/king_roar.ogg} (100%) rename sound/voice/{alien_roar_larva1.ogg => alien/larva/roar1.ogg} (100%) rename sound/voice/{alien_roar_larva2.ogg => alien/larva/roar2.ogg} (100%) rename sound/voice/{alien_roar_larva3.ogg => alien/larva/roar3.ogg} (100%) rename sound/voice/{alien_roar_larva4.ogg => alien/larva/roar4.ogg} (100%) rename sound/voice/{larva_talk1.ogg => alien/larva/talk1.ogg} (100%) rename sound/voice/{larva_talk2.ogg => alien/larva/talk2.ogg} (100%) rename sound/voice/{larva_talk3.ogg => alien/larva/talk3.ogg} (100%) rename sound/voice/{larva_talk4.ogg => alien/larva/talk4.ogg} (100%) rename sound/voice/{alien_pounce.ogg => alien/pounce.ogg} (100%) rename sound/voice/{alien_pounce2.ogg => alien/pounce2.ogg} (100%) rename sound/voice/{predalien_click.ogg => alien/predalien/click.ogg} (100%) rename sound/voice/{predalien_click1.ogg => alien/predalien/click1.ogg} (100%) rename sound/voice/{predalien_click2.ogg => alien/predalien/click2.ogg} (100%) rename sound/voice/{predalien_click3.ogg => alien/predalien/click3.ogg} (100%) rename sound/voice/{predalien_death.ogg => alien/predalien/death.ogg} (100%) rename sound/voice/{predalien_growl.ogg => alien/predalien/growl.ogg} (100%) rename sound/voice/{predalien_hiss.ogg => alien/predalien/hiss.ogg} (100%) rename sound/voice/{predalien_pounce.ogg => alien/predalien/pounce.ogg} (100%) rename sound/voice/{predalien_roar.ogg => alien/predalien/roar.ogg} (100%) rename sound/voice/{alien_queen_breath1.ogg => alien/queen/breath1.ogg} (100%) rename sound/voice/{alien_queen_breath2.ogg => alien/queen/breath2.ogg} (100%) rename sound/voice/{alien_queen_command.ogg => alien/queen/command.ogg} (100%) rename sound/voice/{alien_queen_command2.ogg => alien/queen/command2.ogg} (100%) rename sound/voice/{alien_queen_command3.ogg => alien/queen/command3.ogg} (100%) rename sound/voice/{alien_queen_died.ogg => alien/queen/died.ogg} (100%) rename sound/voice/{alien_queen_screech.ogg => alien/queen/screech.ogg} (100%) rename sound/voice/{alien_frenzy_screech.ogg => alien/queen/screech_frenzy.ogg} (100%) rename sound/voice/{alien_heal_screech.ogg => alien/queen/screech_heal.ogg} (100%) rename sound/voice/{alien_plasma_screech.ogg => alien/queen/screech_plasma.ogg} (100%) rename sound/voice/{alien_roar1.ogg => alien/roar1.ogg} (100%) rename sound/voice/{alien_roar10.ogg => alien/roar10.ogg} (100%) rename sound/voice/{alien_roar11.ogg => alien/roar11.ogg} (100%) rename sound/voice/{alien_roar12.ogg => alien/roar12.ogg} (100%) rename sound/voice/{alien_roar2.ogg => alien/roar2.ogg} (100%) rename sound/voice/{alien_roar3.ogg => alien/roar3.ogg} (100%) rename sound/voice/{alien_roar4.ogg => alien/roar4.ogg} (100%) rename sound/voice/{alien_roar5.ogg => alien/roar5.ogg} (100%) rename sound/voice/{alien_roar6.ogg => alien/roar6.ogg} (100%) rename sound/voice/{alien_roar7.ogg => alien/roar7.ogg} (100%) rename sound/voice/{alien_roar8.ogg => alien/roar8.ogg} (100%) rename sound/voice/{alien_roar9.ogg => alien/roar9.ogg} (100%) rename sound/voice/{alien_roar_warlock.ogg => alien/roar_warlock.ogg} (100%) rename sound/voice/{alien_spitacid.ogg => alien/spitacid.ogg} (100%) rename sound/voice/{alien_spitacid2.ogg => alien/spitacid2.ogg} (100%) rename sound/voice/{alien_talk.ogg => alien/talk.ogg} (100%) rename sound/voice/{alien_talk2.ogg => alien/talk2.ogg} (100%) rename sound/voice/{alien_talk3.ogg => alien/talk3.ogg} (100%) rename sound/voice/{ => alien}/xenos_roaring.ogg (100%) rename sound/voice/{alien_yell_alt.ogg => alien/yell_alt.ogg} (100%) delete mode 100644 sound/voice/alien_cena.ogg delete mode 100644 sound/voice/alien_queen_xmas.ogg rename sound/voice/{b18_activate.ogg => b18/activate.ogg} (100%) rename sound/voice/{b18_antitoxin.ogg => b18/antitoxin.ogg} (100%) rename sound/voice/{b18_antitoxin2.ogg => b18/antitoxin2.ogg} (100%) rename sound/voice/{b18_brute.ogg => b18/brute.ogg} (100%) rename sound/voice/{b18_fracture.ogg => b18/fracture.ogg} (100%) rename sound/voice/{ => b18}/ib_detected.ogg (100%) rename sound/voice/{b18_pain_suppress.ogg => b18/pain_suppress.ogg} (100%) delete mode 100644 sound/voice/bcreep.ogg delete mode 100644 sound/voice/bcriminal.ogg delete mode 100644 sound/voice/bfreeze.ogg delete mode 100644 sound/voice/bgod.ogg delete mode 100644 sound/voice/biamthelaw.ogg delete mode 100644 sound/voice/binsult.ogg delete mode 100644 sound/voice/bjustice.ogg delete mode 100644 sound/voice/bradio.ogg delete mode 100644 sound/voice/bsecureday.ogg rename sound/voice/{human_female_cough1.ogg => human/female/cough1.ogg} (100%) rename sound/voice/{human_female_cough2.ogg => human/female/cough2.ogg} (100%) rename sound/voice/{human_female_cry_1.ogg => human/female/cry_1.ogg} (100%) rename sound/voice/{human_female_facehugged1.ogg => human/female/facehugged1.ogg} (100%) rename sound/voice/{human_female_facehugged2.ogg => human/female/facehugged2.ogg} (100%) rename sound/voice/{human_female_gasp1.ogg => human/female/gasp1.ogg} (100%) rename sound/voice/{human_female_gasp2.ogg => human/female/gasp2.ogg} (100%) rename sound/voice/{human_female_giggle_1.ogg => human/female/giggle_1.ogg} (100%) rename sound/voice/{human_female_gored_1.ogg => human/female/gored_1.ogg} (100%) rename sound/voice/{human_female_gored_2.ogg => human/female/gored_2.ogg} (100%) rename sound/voice/{human_female_grenadethrow_1.ogg => human/female/grenadethrow_1.ogg} (100%) rename sound/voice/{human_female_grenadethrow_2.ogg => human/female/grenadethrow_2.ogg} (100%) rename sound/voice/{human_female_grenadethrow_3.ogg => human/female/grenadethrow_3.ogg} (100%) rename sound/voice/{human_female_laugh_1.ogg => human/female/laugh_1.ogg} (100%) rename sound/voice/{human_female_medic.ogg => human/female/medic.ogg} (100%) rename sound/voice/{human_female_moan_1.ogg => human/female/moan_1.ogg} (100%) rename sound/voice/{human_female_pain_1.ogg => human/female/pain_1.ogg} (100%) rename sound/voice/{human_female_pain_2.ogg => human/female/pain_2.ogg} (100%) rename sound/voice/{human_female_pain_3.ogg => human/female/pain_3.ogg} (100%) rename sound/voice/{human_female_preburst1.ogg => human/female/preburst1.ogg} (100%) rename sound/voice/{human_female_preburst2.ogg => human/female/preburst2.ogg} (100%) rename sound/voice/{human_female_preburst3.ogg => human/female/preburst3.ogg} (100%) rename sound/voice/{human_female_scream_1.ogg => human/female/scream_1.ogg} (100%) rename sound/voice/{human_female_scream_2.ogg => human/female/scream_2.ogg} (100%) rename sound/voice/{human_female_scream_3.ogg => human/female/scream_3.ogg} (100%) rename sound/voice/{human_female_scream_4.ogg => human/female/scream_4.ogg} (100%) rename sound/voice/{human_female_scream_5.ogg => human/female/scream_5.ogg} (100%) rename sound/voice/{human_female_sigh_1.ogg => human/female/sigh_1.ogg} (100%) rename sound/voice/{human_female_warcry_1.ogg => human/female/warcry_1.ogg} (100%) rename sound/voice/{human_female_warcry_10.ogg => human/female/warcry_10.ogg} (100%) rename sound/voice/{human_female_warcry_11.ogg => human/female/warcry_11.ogg} (100%) rename sound/voice/{human_female_warcry_12.ogg => human/female/warcry_12.ogg} (100%) rename sound/voice/{human_female_warcry_13.ogg => human/female/warcry_13.ogg} (100%) rename sound/voice/{human_female_warcry_14.ogg => human/female/warcry_14.ogg} (100%) rename sound/voice/{human_female_warcry_15.ogg => human/female/warcry_15.ogg} (100%) rename sound/voice/{human_female_warcry_16.ogg => human/female/warcry_16.ogg} (100%) rename sound/voice/{human_female_warcry_17.ogg => human/female/warcry_17.ogg} (100%) rename sound/voice/{human_female_warcry_18.ogg => human/female/warcry_18.ogg} (100%) rename sound/voice/{human_female_warcry_19.ogg => human/female/warcry_19.ogg} (100%) rename sound/voice/{human_female_warcry_2.ogg => human/female/warcry_2.ogg} (100%) rename sound/voice/{human_female_warcry_3.ogg => human/female/warcry_3.ogg} (100%) rename sound/voice/{human_female_warcry_4.ogg => human/female/warcry_4.ogg} (100%) rename sound/voice/{human_female_warcry_5.ogg => human/female/warcry_5.ogg} (100%) rename sound/voice/{human_female_warcry_6.ogg => human/female/warcry_6.ogg} (100%) rename sound/voice/{human_female_warcry_7.ogg => human/female/warcry_7.ogg} (100%) rename sound/voice/{human_female_warcry_8.ogg => human/female/warcry_8.ogg} (100%) rename sound/voice/{human_female_warcry_9.ogg => human/female/warcry_9.ogg} (100%) rename sound/voice/{human_female_yawn_1.ogg => human/female/yawn_1.ogg} (100%) rename sound/voice/{human_male_cough1.ogg => human/male/cough1.ogg} (100%) rename sound/voice/{human_male_cough2.ogg => human/male/cough2.ogg} (100%) rename sound/voice/{human_male_cry_1.ogg => human/male/cry_1.ogg} (100%) rename sound/voice/{human_male_facehugged1.ogg => human/male/facehugged1.ogg} (100%) rename sound/voice/{human_male_facehugged2.ogg => human/male/facehugged2.ogg} (100%) rename sound/voice/{human_male_facehugged3.ogg => human/male/facehugged3.ogg} (100%) rename sound/voice/{human_male_gasp1.ogg => human/male/gasp1.ogg} (100%) rename sound/voice/{human_male_gasp2.ogg => human/male/gasp2.ogg} (100%) rename sound/voice/{human_male_gasp3.ogg => human/male/gasp3.ogg} (100%) rename sound/voice/{human_male_giggle_1.ogg => human/male/giggle_1.ogg} (100%) rename sound/voice/{human_male_gored3.ogg => human/male/gored3.ogg} (100%) rename sound/voice/{human_male_gored_1.ogg => human/male/gored_1.ogg} (100%) rename sound/voice/{human_male_gored_2.ogg => human/male/gored_2.ogg} (100%) rename sound/voice/{human_male_grenadethrow_1.ogg => human/male/grenadethrow_1.ogg} (100%) rename sound/voice/{human_male_grenadethrow_2.ogg => human/male/grenadethrow_2.ogg} (100%) rename sound/voice/{human_male_grenadethrow_3.ogg => human/male/grenadethrow_3.ogg} (100%) rename sound/voice/{human_male_laugh_1.ogg => human/male/laugh_1.ogg} (100%) rename sound/voice/{human_male_laugh_2.ogg => human/male/laugh_2.ogg} (100%) rename sound/voice/{human_male_medic.ogg => human/male/medic.ogg} (100%) rename sound/voice/{human_male_medic2.ogg => human/male/medic2.ogg} (100%) rename sound/voice/{human_male_moan_1.ogg => human/male/moan_1.ogg} (100%) rename sound/voice/{human_male_pain_1.ogg => human/male/pain_1.ogg} (100%) rename sound/voice/{human_male_pain_10.ogg => human/male/pain_10.ogg} (100%) rename sound/voice/{human_male_pain_11.ogg => human/male/pain_11.ogg} (100%) rename sound/voice/{human_male_pain_2.ogg => human/male/pain_2.ogg} (100%) rename sound/voice/{human_male_pain_3.ogg => human/male/pain_3.ogg} (100%) rename sound/voice/{human_male_pain_4.ogg => human/male/pain_4.ogg} (100%) rename sound/voice/{human_male_pain_5.ogg => human/male/pain_5.ogg} (100%) rename sound/voice/{human_male_pain_6.ogg => human/male/pain_6.ogg} (100%) rename sound/voice/{human_male_pain_7.ogg => human/male/pain_7.ogg} (100%) rename sound/voice/{human_male_pain_8.ogg => human/male/pain_8.ogg} (100%) rename sound/voice/{human_male_pain_9.ogg => human/male/pain_9.ogg} (100%) rename sound/voice/{human_male_preburst1.ogg => human/male/preburst1.ogg} (100%) rename sound/voice/{human_male_preburst10.ogg => human/male/preburst10.ogg} (100%) rename sound/voice/{human_male_preburst2.ogg => human/male/preburst2.ogg} (100%) rename sound/voice/{human_male_preburst3.ogg => human/male/preburst3.ogg} (100%) rename sound/voice/{human_male_preburst4.ogg => human/male/preburst4.ogg} (100%) rename sound/voice/{human_male_preburst5.ogg => human/male/preburst5.ogg} (100%) rename sound/voice/{human_male_preburst6.ogg => human/male/preburst6.ogg} (100%) rename sound/voice/{human_male_preburst7.ogg => human/male/preburst7.ogg} (100%) rename sound/voice/{human_male_preburst8.ogg => human/male/preburst8.ogg} (100%) rename sound/voice/{human_male_preburst9.ogg => human/male/preburst9.ogg} (100%) rename sound/voice/{human_male_scream_1.ogg => human/male/scream_1.ogg} (100%) rename sound/voice/{human_male_scream_2.ogg => human/male/scream_2.ogg} (100%) rename sound/voice/{human_male_scream_3.ogg => human/male/scream_3.ogg} (100%) rename sound/voice/{human_male_scream_4.ogg => human/male/scream_4.ogg} (100%) rename sound/voice/{human_male_scream_5.ogg => human/male/scream_5.ogg} (100%) rename sound/voice/{human_male_scream_6.ogg => human/male/scream_6.ogg} (100%) rename sound/voice/{human_male_scream_7.ogg => human/male/scream_7.ogg} (100%) rename sound/voice/{human_male_sigh_1.ogg => human/male/sigh_1.ogg} (100%) rename sound/voice/{human_male_warcry_1.ogg => human/male/warcry_1.ogg} (100%) rename sound/voice/{human_male_warcry_10.ogg => human/male/warcry_10.ogg} (100%) rename sound/voice/{human_male_warcry_11.ogg => human/male/warcry_11.ogg} (100%) rename sound/voice/{human_male_warcry_12.ogg => human/male/warcry_12.ogg} (100%) rename sound/voice/{human_male_warcry_13.ogg => human/male/warcry_13.ogg} (100%) rename sound/voice/{human_male_warcry_14.ogg => human/male/warcry_14.ogg} (100%) rename sound/voice/{human_male_warcry_15.ogg => human/male/warcry_15.ogg} (100%) rename sound/voice/{human_male_warcry_16.ogg => human/male/warcry_16.ogg} (100%) rename sound/voice/{human_male_warcry_17.ogg => human/male/warcry_17.ogg} (100%) rename sound/voice/{human_male_warcry_18.ogg => human/male/warcry_18.ogg} (100%) rename sound/voice/{human_male_warcry_19.ogg => human/male/warcry_19.ogg} (100%) rename sound/voice/{human_male_warcry_2.ogg => human/male/warcry_2.ogg} (100%) rename sound/voice/{human_male_warcry_20.ogg => human/male/warcry_20.ogg} (100%) rename sound/voice/{human_male_warcry_21.ogg => human/male/warcry_21.ogg} (100%) rename sound/voice/{human_male_warcry_22.ogg => human/male/warcry_22.ogg} (100%) rename sound/voice/{human_male_warcry_23.ogg => human/male/warcry_23.ogg} (100%) rename sound/voice/{human_male_warcry_24.ogg => human/male/warcry_24.ogg} (100%) rename sound/voice/{human_male_warcry_25.ogg => human/male/warcry_25.ogg} (100%) rename sound/voice/{human_male_warcry_26.ogg => human/male/warcry_26.ogg} (100%) rename sound/voice/{human_male_warcry_27.ogg => human/male/warcry_27.ogg} (100%) rename sound/voice/{human_male_warcry_28.ogg => human/male/warcry_28.ogg} (100%) rename sound/voice/{human_male_warcry_29.ogg => human/male/warcry_29.ogg} (100%) rename sound/voice/{human_male_warcry_3.ogg => human/male/warcry_3.ogg} (100%) rename sound/voice/{human_male_warcry_4.ogg => human/male/warcry_4.ogg} (100%) rename sound/voice/{human_male_warcry_5.ogg => human/male/warcry_5.ogg} (100%) rename sound/voice/{human_male_warcry_6.ogg => human/male/warcry_6.ogg} (100%) rename sound/voice/{human_male_warcry_7.ogg => human/male/warcry_7.ogg} (100%) rename sound/voice/{human_male_warcry_8.ogg => human/male/warcry_8.ogg} (100%) rename sound/voice/{human_male_warcry_9.ogg => human/male/warcry_9.ogg} (100%) rename sound/voice/{human_male_yawn_1.ogg => human/male/yawn_1.ogg} (100%) rename sound/voice/{sound_voice_human_whistle1.ogg => human/whistle1.ogg} (100%) delete mode 100644 sound/voice/liveagain.ogg rename sound/voice/{pred_anytime.ogg => predator/anytime.ogg} (100%) rename sound/voice/{pred_click1.ogg => predator/click1.ogg} (100%) rename sound/voice/{pred_click2.ogg => predator/click2.ogg} (100%) rename sound/voice/{pred_click3.ogg => predator/click3.ogg} (100%) rename sound/voice/{pred_click4.ogg => predator/click4.ogg} (100%) rename sound/voice/{pred_click5.ogg => predator/click5.ogg} (100%) rename sound/voice/{pred_come_on_out.ogg => predator/come_on_out.ogg} (100%) rename sound/voice/{pred_deathlaugh.ogg => predator/deathlaugh.ogg} (100%) rename sound/voice/{pred_facehugged.ogg => predator/facehugged.ogg} (100%) rename sound/voice/{pred_helpme.ogg => predator/helpme.ogg} (100%) rename sound/voice/{pred_itsatrap.ogg => predator/itsatrap.ogg} (100%) rename sound/voice/{pred_laugh1.ogg => predator/laugh1.ogg} (100%) rename sound/voice/{pred_laugh2.ogg => predator/laugh2.ogg} (100%) rename sound/voice/{pred_laugh3.ogg => predator/laugh3.ogg} (100%) rename sound/voice/{pred_laugh4.ogg => predator/laugh4.ogg} (100%) rename sound/voice/{pred_over_there.ogg => predator/over_there.ogg} (100%) rename sound/voice/{pred_overhere.ogg => predator/overhere.ogg} (100%) rename sound/voice/{pred_pain1.ogg => predator/pain1.ogg} (100%) rename sound/voice/{pred_pain2.ogg => predator/pain2.ogg} (100%) rename sound/voice/{pred_pain3.ogg => predator/pain3.ogg} (100%) rename sound/voice/{pred_pain4.ogg => predator/pain4.ogg} (100%) rename sound/voice/{pred_pain5.ogg => predator/pain5.ogg} (100%) rename sound/voice/{pred_pain_rare1.ogg => predator/pain_rare1.ogg} (100%) rename sound/voice/{pred_roar1.ogg => predator/roar1.ogg} (100%) rename sound/voice/{pred_roar2.ogg => predator/roar2.ogg} (100%) rename sound/voice/{pred_roar3.ogg => predator/roar3.ogg} (100%) rename sound/voice/{pred_roar4.ogg => predator/roar4.ogg} (100%) rename sound/voice/{pred_roar5.ogg => predator/roar5.ogg} (100%) rename sound/voice/{pred_turnaround.ogg => predator/turnaround.ogg} (100%) rename sound/voice/{pred_ugly_freak.ogg => predator/ugly_freak.ogg} (100%) rename sound/voice/{pred_warcry.ogg => predator/warcry.ogg} (100%) diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index 31d7b858e89..1d32f06317b 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -67,8 +67,8 @@ GLOBAL_LIST_INIT(shoefootstep, list( 'sound/effects/footstep/water3.ogg', 'sound/effects/footstep/water4.ogg'), 100, 1), FOOTSTEP_RESIN = list(list( - 'sound/effects/footstep/alien_resin_move1.ogg', - 'sound/effects/footstep/alien_resin_move2.ogg',), 50, 2), + 'sound/effects/footstep/alien/resin_move1.ogg', + 'sound/effects/footstep/alien/resin_move2.ogg',), 50, 2), FOOTSTEP_CATWALK = list(list( 'sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', @@ -156,8 +156,8 @@ GLOBAL_LIST_INIT(barefootstep, list( 'sound/effects/footstep/water3.ogg', 'sound/effects/footstep/water4.ogg'), 100, 1), FOOTSTEP_RESIN = list(list( - 'sound/effects/footstep/alien_resin_move1.ogg', - 'sound/effects/footstep/alien_resin_move2.ogg',), 70, 2), + 'sound/effects/footstep/alien/resin_move1.ogg', + 'sound/effects/footstep/alien/resin_move2.ogg',), 70, 2), FOOTSTEP_CATWALK = list(list( 'sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', @@ -246,8 +246,8 @@ GLOBAL_LIST_INIT(xenomediumstep, list( 'sound/effects/footstep/water3.ogg', 'sound/effects/footstep/water4.ogg'), 50, 1), FOOTSTEP_RESIN = list(list( - 'sound/effects/footstep/alien_resin_move1.ogg', - 'sound/effects/footstep/alien_resin_move2.ogg',), 15, -4), + 'sound/effects/footstep/alien/resin_move1.ogg', + 'sound/effects/footstep/alien/resin_move2.ogg',), 15, -4), FOOTSTEP_CATWALK = list(list( 'sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', @@ -360,120 +360,120 @@ GLOBAL_LIST_INIT(xenoheavystep, list( //claw footsteps lists GLOBAL_LIST_INIT(xenostompy, list( FOOTSTEP_WOOD = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 60, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 60, 1), FOOTSTEP_PLATING = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_FLOOR = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_HARD = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_CARPET = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 55, -1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 55, -1), FOOTSTEP_SAND = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 55, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 55, 1), FOOTSTEP_GRASS = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 65, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 65, 1), FOOTSTEP_WATER = list(list( 'sound/effects/footstep/water1.ogg', 'sound/effects/footstep/water2.ogg', 'sound/effects/footstep/water3.ogg', 'sound/effects/footstep/water4.ogg'), 50, 1), FOOTSTEP_CATWALK = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_SNOW = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_ICE = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 50, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 50, 1), FOOTSTEP_CONCRETE = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 70, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 70, 1), FOOTSTEP_GRAVEL = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 55, 1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 55, 1), FOOTSTEP_RESIN = list(list( - 'sound/effects/footstep/alien_footstep_large1.ogg', - 'sound/effects/footstep/alien_footstep_large2.ogg', - 'sound/effects/footstep/alien_footstep_large3.ogg'), 40, -1), + 'sound/effects/footstep/alien/large1.ogg', + 'sound/effects/footstep/alien/large2.ogg', + 'sound/effects/footstep/alien/large3.ogg'), 40, -1), )) GLOBAL_LIST_INIT(predalienstompy, list( FOOTSTEP_WOOD = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 60, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 60, 1), FOOTSTEP_PLATING = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_FLOOR = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_HARD = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_CARPET = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 55, -1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 55, -1), FOOTSTEP_SAND = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 55, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 55, 1), FOOTSTEP_GRASS = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 65, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 65, 1), FOOTSTEP_WATER = list(list( 'sound/effects/footstep/water1.ogg', 'sound/effects/footstep/water2.ogg', 'sound/effects/footstep/water3.ogg', 'sound/effects/footstep/water4.ogg'), 50, 1), FOOTSTEP_CATWALK = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_SNOW = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_ICE = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 50, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 50, 1), FOOTSTEP_CONCRETE = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 70, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 70, 1), FOOTSTEP_GRAVEL = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 55, 1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 55, 1), FOOTSTEP_RESIN = list(list( - 'sound/effects/footstep/alien_footstep_medium1.ogg', - 'sound/effects/footstep/alien_footstep_medium2.ogg', - 'sound/effects/footstep/alien_footstep_medium3.ogg'), 40, -1), + 'sound/effects/footstep/alien/medium1.ogg', + 'sound/effects/footstep/alien/medium2.ogg', + 'sound/effects/footstep/alien/medium3.ogg'), 40, -1), )) diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm index 3f77abe704d..004f93345bf 100644 --- a/code/datums/cinematic.dm +++ b/code/datums/cinematic.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(cinematics) flick("intro_nuke", screen) sleep(runtime) flick("station_explode_fade_red", screen) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "summary_nukewin" @@ -141,7 +141,7 @@ GLOBAL_LIST_EMPTY(cinematics) /datum/cinematic/nuke_miss/content() flick("intro_nuke", screen) sleep(runtime) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() flick("station_intact_fade_red", screen) screen.icon_state = "summary_nukefail" @@ -156,7 +156,7 @@ GLOBAL_LIST_EMPTY(cinematics) flick("intro_nuke", screen) sleep(runtime) flick("station_explode_fade_red", screen) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "summary_selfdes" @@ -169,7 +169,7 @@ GLOBAL_LIST_EMPTY(cinematics) /datum/cinematic/nuke_selfdestruct_miss/content() flick("intro_nuke", screen) sleep(runtime) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "station_intact" @@ -183,7 +183,7 @@ GLOBAL_LIST_EMPTY(cinematics) flick("intro_malf", screen) sleep(runtime) flick("station_explode_fade_red", screen) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "summary_malf" @@ -197,7 +197,7 @@ GLOBAL_LIST_EMPTY(cinematics) flick("intro_nuke", screen) sleep(runtime) flick("station_explode_fade_red", screen) - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "summary_totala" @@ -235,7 +235,7 @@ GLOBAL_LIST_EMPTY(cinematics) /datum/cinematic/nuke_far/content() - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() @@ -251,6 +251,6 @@ GLOBAL_LIST_EMPTY(cinematics) flick("intro_nuke", screen) // 3.5 seconds sleep(5.5 SECONDS) flick("planet_nuke", screen) // About 1.5 seconds length - cinematic_sound(sound('sound/effects/explosionfar.ogg', channel = CHANNEL_CINEMATIC)) + cinematic_sound(sound('sound/effects/explosion/far0.ogg', channel = CHANNEL_CINEMATIC)) special() screen.icon_state = "planet_end" diff --git a/code/datums/components/suit_autodoc.dm b/code/datums/components/suit_autodoc.dm index cac077d3328..737fcc6aeba 100644 --- a/code/datums/components/suit_autodoc.dm +++ b/code/datums/components/suit_autodoc.dm @@ -199,7 +199,7 @@ START_PROCESSING(SSobj, src) if(!silent) wearer.balloon_alert(wearer, "The automedical suite activates") - playsound(parent,'sound/voice/b18_activate.ogg', 15, 0, 1) + playsound(parent,'sound/voice/b18/activate.ogg', 15, 0, 1) /** diff --git a/code/datums/elements/limb_support.dm b/code/datums/elements/limb_support.dm index 057d25772f7..5d5feb41bdc 100644 --- a/code/datums/elements/limb_support.dm +++ b/code/datums/elements/limb_support.dm @@ -50,6 +50,6 @@ if(!dropped && ((limb.limb_status & LIMB_BROKEN) && !(limb.limb_status & LIMB_STABILIZED))) limb.limb_status |= LIMB_STABILIZED - playsound(worn_suit, 'sound/voice/b18_fracture.ogg', 15, 0, 1) + playsound(worn_suit, 'sound/voice/b18/fracture.ogg', 15, 0, 1) to_chat(injured_mob, span_notice("You feel [worn_suit] constrict about your [limb.display_name], stabilizing it.")) playsound(worn_suit, 'sound/machines/hydraulics_1.ogg', 15, 0, 1) diff --git a/code/datums/status_effects/xeno_buffs.dm b/code/datums/status_effects/xeno_buffs.dm index 45ee88b8ce2..f6deb2ea740 100644 --- a/code/datums/status_effects/xeno_buffs.dm +++ b/code/datums/status_effects/xeno_buffs.dm @@ -751,7 +751,7 @@ new /obj/effect/temp_visual/healing(get_turf(owner)) owner.balloon_alert(owner, "Regeneration is no longer accelerated") - owner.playsound_local(owner, 'sound/voice/hiss5.ogg', 25) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 25) return ..() diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index 15fbc4e3ccc..20fd7a2dbaa 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -55,7 +55,7 @@ explosion resistance exactly as much as their health msg_admin_ff("Explosion with Power: [power], Falloff: [falloff] in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]).", src.loc.x, src.loc.y, src.loc.z [ADMIN_JMP(epicenter)]) - playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power ^ 2, 1)) + playsound(epicenter, 'sound/effects/explosion/far0.ogg', 100, 1, round(power ^ 2, 1)) var/sound/explosion_sound = sound(get_sfx("explosion_large")) switch(power) if(0 to EXPLODE_LIGHT) diff --git a/code/game/objects/items/cocoon.dm b/code/game/objects/items/cocoon.dm index 22d0030e892..3456de75fd4 100644 --- a/code/game/objects/items/cocoon.dm +++ b/code/game/objects/items/cocoon.dm @@ -5,7 +5,7 @@ icon_state = "xeno_cocoon" density = FALSE layer = BELOW_OBJ_LAYER - hit_sound = 'sound/effects/alien_resin_break2.ogg' + hit_sound = 'sound/effects/alien/resin_break2.ogg' max_integrity = 400 anchored = TRUE obj_flags = CAN_BE_HIT diff --git a/code/game/objects/items/loot_box.dm b/code/game/objects/items/loot_box.dm index 2d2d5238a91..945d1b31605 100644 --- a/code/game/objects/items/loot_box.dm +++ b/code/game/objects/items/loot_box.dm @@ -173,7 +173,7 @@ if(picked) picked.mind.transfer_to(new_xeno, TRUE) to_chat(new_xeno, span_xenoannounce("The Queen Mother has hurled us through Bluespace, we live for the hive!")) - new_xeno << sound('sound/effects/xeno_newlarva.ogg') + new_xeno << sound('sound/effects/alien/newlarva.ogg') return INITIALIZE_HINT_QDEL //The actual drop sets diff --git a/code/game/objects/items/radio/headset.dm b/code/game/objects/items/radio/headset.dm index dd36d3b7f99..7e15c50ed3f 100644 --- a/code/game/objects/items/radio/headset.dm +++ b/code/game/objects/items/radio/headset.dm @@ -209,7 +209,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( ///Explodes the headset if you put on an enemy's headset /obj/item/radio/headset/mainship/proc/safety_protocol(mob/living/carbon/human/user) balloon_alert_to_viewers("Explodes") - playsound(user, 'sound/effects/explosion_micro1.ogg', 50, 1) + playsound(user, 'sound/effects/explosion/micro1.ogg', 50, 1) user.ex_act(EXPLODE_LIGHT) qdel(src) diff --git a/code/game/objects/structures/campaign_structures/destroy_objectives.dm b/code/game/objects/structures/campaign_structures/destroy_objectives.dm index c4c8e855d4b..1a3d91e0dcf 100644 --- a/code/game/objects/structures/campaign_structures/destroy_objectives.dm +++ b/code/game/objects/structures/campaign_structures/destroy_objectives.dm @@ -216,7 +216,7 @@ layer = ABOVE_MOB_LAYER /obj/structure/campaign_objective/destruction_objective/nt_pod/Destroy() - playsound(loc, 'sound/voice/predalien_death.ogg', 75, 0) + playsound(loc, 'sound/voice/alien/predalien/death.ogg', 75, 0) return ..() //teleporter core diff --git a/code/game/sound.dm b/code/game/sound.dm index 3c908ca82a0..310dd41601c 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -178,17 +178,17 @@ A good representation is: 'byond applies a volume reduction to the sound every X if("shatter") S = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') if("explosion_large") - S = pick('sound/effects/explosion_large1.ogg','sound/effects/explosion_large2.ogg','sound/effects/explosion_large3.ogg','sound/effects/explosion_large4.ogg','sound/effects/explosion_large5.ogg','sound/effects/explosion_large6.ogg') + S = pick('sound/effects/explosion/large1.ogg','sound/effects/explosion/large2.ogg','sound/effects/explosion/large3.ogg','sound/effects/explosion/large4.ogg','sound/effects/explosion/large5.ogg','sound/effects/explosion/large6.ogg') if("explosion_micro") - S = pick('sound/effects/explosion_micro1.ogg','sound/effects/explosion_micro2.ogg','sound/effects/explosion_micro3.ogg') + S = pick('sound/effects/explosion/micro1.ogg','sound/effects/explosion/micro2.ogg','sound/effects/explosion/micro3.ogg') if("explosion_small") - S = pick('sound/effects/explosion_small1.ogg','sound/effects/explosion_small2.ogg','sound/effects/explosion_small3.ogg','sound/effects/explosion_small4.ogg') + S = pick('sound/effects/explosion/small1.ogg','sound/effects/explosion/small2.ogg','sound/effects/explosion/small3.ogg','sound/effects/explosion/small4.ogg') if("explosion_med") - S = pick('sound/effects/explosion_med1.ogg','sound/effects/explosion_med2.ogg','sound/effects/explosion_med3.ogg','sound/effects/explosion_med4.ogg','sound/effects/explosion_med5.ogg','sound/effects/explosion_med6.ogg') + S = pick('sound/effects/explosion/medium1.ogg','sound/effects/explosion/medium2.ogg','sound/effects/explosion/medium3.ogg','sound/effects/explosion/medium4.ogg','sound/effects/explosion/medium5.ogg','sound/effects/explosion/medium6.ogg') if("explosion_small_distant") - S = pick('sound/effects/explosion_smallfar1.ogg','sound/effects/explosion_smallfar2.ogg','sound/effects/explosion_smallfar3.ogg','sound/effects/explosion_smallfar4.ogg') + S = pick('sound/effects/explosion/small_far1.ogg','sound/effects/explosion/small_far2.ogg','sound/effects/explosion/small_far3.ogg','sound/effects/explosion/small_far4.ogg') if("explosion_large_distant") - S = pick('sound/effects/explosion_far1.ogg','sound/effects/explosion_far2.ogg','sound/effects/explosion_far3.ogg','sound/effects/explosion_far4.ogg','sound/effects/explosion_far5.ogg') + S = pick('sound/effects/explosion/far1.ogg','sound/effects/explosion/far2.ogg','sound/effects/explosion/far3.ogg','sound/effects/explosion/far4.ogg','sound/effects/explosion/far5.ogg') if("explosion_creak") S = pick('sound/effects/creak1.ogg','sound/effects/creak2.ogg') if("sparks") @@ -214,7 +214,7 @@ A good representation is: 'byond applies a volume reduction to the sound every X if("vending") S = pick('sound/machines/vending_cans.ogg', 'sound/machines/vending_drop.ogg') if("incendiary_explosion") - S = pick('sound/effects/incendiary_explosion_1.ogg', 'sound/effects/incendiary_explosion_2.ogg', 'sound/effects/incendiary_explosion_3.ogg') + S = pick('sound/effects/explosion/incendiary1.ogg', 'sound/effects/explosion/incendiary2.ogg', 'sound/effects/explosion/incendiary3.ogg') if("molotov") S = pick('sound/effects/molotov_detonate_1.ogg', 'sound/effects/molotov_detonate_2.ogg', 'sound/effects/molotov_detonate_3.ogg') if("flashbang") @@ -279,83 +279,83 @@ A good representation is: 'byond applies a volume reduction to the sound every X if("alien_tail_attack") S = 'sound/weapons/alien_tail_attack.ogg' if("alien_footstep_large") - S = pick('sound/effects/alien_footstep_large1.ogg','sound/effects/alien_footstep_large2.ogg','sound/effects/alien_footstep_large3.ogg') + S = pick('sound/effects/footstep/alien/large1.ogg','sound/effects/footstep/alien/large2.ogg','sound/effects/footstep/alien/large3.ogg') if("alien_charge") - S = pick('sound/effects/alien_footstep_charge1.ogg','sound/effects/alien_footstep_charge2.ogg','sound/effects/alien_footstep_charge3.ogg') + S = pick('sound/effects/footstep/alien/charge1.ogg','sound/effects/footstep/alien/charge2.ogg','sound/effects/footstep/alien/charge3.ogg') if("alien_resin_build") - S = pick('sound/effects/alien_resin_build1.ogg','sound/effects/alien_resin_build2.ogg','sound/effects/alien_resin_build3.ogg') + S = pick('sound/effects/alien/resin_build1.ogg','sound/effects/alien/resin_build2.ogg','sound/effects/alien/resin_build3.ogg') if("alien_resin_break") - S = pick('sound/effects/alien_resin_break1.ogg','sound/effects/alien_resin_break2.ogg') - if("alien_resin_move") - S = pick('sound/effects/alien_resin_move1.ogg','sound/effects/alien_resin_move2.ogg') + S = pick('sound/effects/alien/resin_break1.ogg','sound/effects/alien/resin_break2.ogg') + if("alien_resin_move") // be aware, this isn't a footstep, footsteps are located elsewhere + S = pick('sound/effects/alien/resin_move1.ogg', 'sound/effects/alien/resin_move2.ogg') if("alien_talk") - S = pick('sound/voice/alien_talk.ogg','sound/voice/alien_talk2.ogg','sound/voice/alien_talk3.ogg') + S = pick('sound/voice/alien/talk.ogg','sound/voice/alien/talk2.ogg','sound/voice/alien/talk3.ogg') if("larva_talk") - S = pick('sound/voice/larva_talk1.ogg','sound/voice/larva_talk2.ogg','sound/voice/larva_talk3.ogg', 'sound/voice/larva_talk4.ogg') + S = pick('sound/voice/alien/larva/talk1.ogg','sound/voice/alien/larva/talk2.ogg','sound/voice/alien/larva/talk3.ogg', 'sound/voice/alien/larva/talk4.ogg') if("predalien_talk") - S = pick('sound/voice/predalien_click1.ogg','sound/voice/predalien_click2.ogg','sound/voice/predalien_click3.ogg') + S = pick('sound/voice/alien/predalien/click1.ogg','sound/voice/alien/predalien/click2.ogg','sound/voice/alien/predalien/click3.ogg') if("alien_growl") - S = pick('sound/voice/alien_growl1.ogg','sound/voice/alien_growl2.ogg','sound/voice/alien_growl3.ogg','sound/voice/alien_growl4.ogg') + S = pick('sound/voice/alien/growl1.ogg','sound/voice/alien/growl2.ogg','sound/voice/alien/growl3.ogg','sound/voice/alien/growl4.ogg') if("alien_hiss") - S = pick('sound/voice/alien_hiss1.ogg','sound/voice/alien_hiss2.ogg','sound/voice/alien_hiss3.ogg') + S = pick('sound/voice/alien/hiss1.ogg','sound/voice/alien/hiss2.ogg','sound/voice/alien/hiss3.ogg') if("alien_tail_swipe") - S = pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg') + S = pick('sound/effects/alien/tail_swipe1.ogg','sound/effects/alien/tail_swipe2.ogg','sound/effects/alien/tail_swipe3.ogg') if("alien_help") - S = pick('sound/voice/alien_help1.ogg','sound/voice/alien_help2.ogg') + S = pick('sound/voice/alien/help1.ogg','sound/voice/alien/help2.ogg') if("alien_drool") - S = pick('sound/voice/alien_drool1.ogg','sound/voice/alien_drool2.ogg') + S = pick('sound/voice/alien/drool1.ogg','sound/voice/alien/drool2.ogg') if("alien_roar") - S = pick('sound/voice/alien_roar1.ogg','sound/voice/alien_roar2.ogg','sound/voice/alien_roar3.ogg','sound/voice/alien_roar4.ogg','sound/voice/alien_roar5.ogg','sound/voice/alien_roar6.ogg','sound/voice/alien_roar7.ogg','sound/voice/alien_roar8.ogg','sound/voice/alien_roar9.ogg','sound/voice/alien_roar10.ogg','sound/voice/alien_roar11.ogg','sound/voice/alien_roar12.ogg') + S = pick('sound/voice/alien/roar1.ogg','sound/voice/alien/roar2.ogg','sound/voice/alien/roar3.ogg','sound/voice/alien/roar4.ogg','sound/voice/alien/roar5.ogg','sound/voice/alien/roar6.ogg','sound/voice/alien/roar7.ogg','sound/voice/alien/roar8.ogg','sound/voice/alien/roar9.ogg','sound/voice/alien/roar10.ogg','sound/voice/alien/roar11.ogg','sound/voice/alien/roar12.ogg') if("alien_roar_larva") - S = pick('sound/voice/alien_roar_larva1.ogg','sound/voice/alien_roar_larva2.ogg','sound/voice/alien_roar_larva3.ogg','sound/voice/alien_roar_larva4.ogg') + S = pick('sound/voice/alien/larva/roar1.ogg','sound/voice/alien/larva/roar2.ogg','sound/voice/alien/larva/roar3.ogg','sound/voice/alien/larva/roar4.ogg') if("queen") - S = pick('sound/voice/alien_queen_command.ogg','sound/voice/alien_queen_command2.ogg','sound/voice/alien_queen_command3.ogg') + S = pick('sound/voice/alien/queen/command.ogg','sound/voice/alien/queen/command2.ogg','sound/voice/alien/queen/command3.ogg') if("alien_ventpass") - S = pick('sound/effects/alien_ventpass1.ogg', 'sound/effects/alien_ventpass2.ogg') + S = pick('sound/effects/alien/ventpass1.ogg', 'sound/effects/alien/ventpass2.ogg') if("behemoth_step_sounds") - S = pick('sound/effects/alien_footstep_large1.ogg', 'sound/effects/alien_footstep_large2.ogg', 'sound/effects/alien_footstep_large3.ogg') + S = pick('sound/effects/footstep/alien/large1.ogg', 'sound/effects/footstep/alien/large2.ogg', 'sound/effects/footstep/alien/large3.ogg') if("behemoth_rolling") - S = 'sound/effects/behemoth/behemoth_roll.ogg' + S = 'sound/effects/alien/behemoth/roll.ogg' if("behemoth_earth_pillar_hit") - S = pick('sound/effects/behemoth/earth_pillar_hit_1.ogg', 'sound/effects/behemoth/earth_pillar_hit_2.ogg', 'sound/effects/behemoth/earth_pillar_hit_3.ogg', 'sound/effects/behemoth/earth_pillar_hit_4.ogg', 'sound/effects/behemoth/earth_pillar_hit_5.ogg', 'sound/effects/behemoth/earth_pillar_hit_6.ogg') + S = pick('sound/effects/alien/behemoth/earth_pillar_hit_1.ogg', 'sound/effects/alien/behemoth/earth_pillar_hit_2.ogg', 'sound/effects/alien/behemoth/earth_pillar_hit_3.ogg', 'sound/effects/alien/behemoth/earth_pillar_hit_4.ogg', 'sound/effects/alien/behemoth/earth_pillar_hit_5.ogg', 'sound/effects/alien/behemoth/earth_pillar_hit_6.ogg') // Human if("male_scream") - S = pick('sound/voice/human_male_scream_1.ogg','sound/voice/human_male_scream_2.ogg','sound/voice/human_male_scream_3.ogg','sound/voice/human_male_scream_4.ogg','sound/voice/human_male_scream_5.ogg','sound/voice/human_male_scream_6.ogg', 'sound/voice/human_male_scream_7.ogg') + S = pick('sound/voice/human/male/scream_1.ogg','sound/voice/human/male/scream_2.ogg','sound/voice/human/male/scream_3.ogg','sound/voice/human/male/scream_4.ogg','sound/voice/human/male/scream_5.ogg','sound/voice/human/male/scream_6.ogg', 'sound/voice/human/male/scream_7.ogg') if("male_pain") - S = pick('sound/voice/human_male_pain_1.ogg','sound/voice/human_male_pain_2.ogg','sound/voice/human_male_pain_3.ogg','sound/voice/human_male_pain_4.ogg','sound/voice/human_male_pain_5.ogg','sound/voice/human_male_pain_6.ogg','sound/voice/human_male_pain_7.ogg','sound/voice/human_male_pain_8.ogg', 'sound/voice/human_male_pain_9.ogg', 'sound/voice/human_male_pain_10.ogg', 'sound/voice/human_male_pain_11.ogg') + S = pick('sound/voice/human/male/pain_1.ogg','sound/voice/human/male/pain_2.ogg','sound/voice/human/male/pain_3.ogg','sound/voice/human/male/pain_4.ogg','sound/voice/human/male/pain_5.ogg','sound/voice/human/male/pain_6.ogg','sound/voice/human/male/pain_7.ogg','sound/voice/human/male/pain_8.ogg', 'sound/voice/human/male/pain_9.ogg', 'sound/voice/human/male/pain_10.ogg', 'sound/voice/human/male/pain_11.ogg') if("male_gored") - S = pick('sound/voice/human_male_gored_1.ogg','sound/voice/human_male_gored_2.ogg', 'sound/voice/human_male_gored3.ogg') + S = pick('sound/voice/human/male/gored_1.ogg','sound/voice/human/male/gored_2.ogg', 'sound/voice/human/male/gored3.ogg') if("male_fragout") - S = pick('sound/voice/human_male_grenadethrow_1.ogg', 'sound/voice/human_male_grenadethrow_2.ogg', 'sound/voice/human_male_grenadethrow_3.ogg') + S = pick('sound/voice/human/male/grenadethrow_1.ogg', 'sound/voice/human/male/grenadethrow_2.ogg', 'sound/voice/human/male/grenadethrow_3.ogg') if("male_warcry") - S = pick('sound/voice/human_male_warcry_1.ogg','sound/voice/human_male_warcry_2.ogg','sound/voice/human_male_warcry_3.ogg','sound/voice/human_male_warcry_4.ogg','sound/voice/human_male_warcry_5.ogg','sound/voice/human_male_warcry_6.ogg','sound/voice/human_male_warcry_7.ogg','sound/voice/human_male_warcry_8.ogg','sound/voice/human_male_warcry_9.ogg','sound/voice/human_male_warcry_10.ogg','sound/voice/human_male_warcry_11.ogg','sound/voice/human_male_warcry_12.ogg','sound/voice/human_male_warcry_13.ogg','sound/voice/human_male_warcry_14.ogg','sound/voice/human_male_warcry_15.ogg','sound/voice/human_male_warcry_16.ogg','sound/voice/human_male_warcry_17.ogg','sound/voice/human_male_warcry_18.ogg','sound/voice/human_male_warcry_19.ogg','sound/voice/human_male_warcry_20.ogg','sound/voice/human_male_warcry_21.ogg','sound/voice/human_male_warcry_22.ogg','sound/voice/human_male_warcry_23.ogg','sound/voice/human_male_warcry_24.ogg','sound/voice/human_male_warcry_25.ogg','sound/voice/human_male_warcry_26.ogg','sound/voice/human_male_warcry_27.ogg','sound/voice/human_male_warcry_28.ogg','sound/voice/human_male_warcry_29.ogg') + S = pick('sound/voice/human/male/warcry_1.ogg','sound/voice/human/male/warcry_2.ogg','sound/voice/human/male/warcry_3.ogg','sound/voice/human/male/warcry_4.ogg','sound/voice/human/male/warcry_5.ogg','sound/voice/human/male/warcry_6.ogg','sound/voice/human/male/warcry_7.ogg','sound/voice/human/male/warcry_8.ogg','sound/voice/human/male/warcry_9.ogg','sound/voice/human/male/warcry_10.ogg','sound/voice/human/male/warcry_11.ogg','sound/voice/human/male/warcry_12.ogg','sound/voice/human/male/warcry_13.ogg','sound/voice/human/male/warcry_14.ogg','sound/voice/human/male/warcry_15.ogg','sound/voice/human/male/warcry_16.ogg','sound/voice/human/male/warcry_17.ogg','sound/voice/human/male/warcry_18.ogg','sound/voice/human/male/warcry_19.ogg','sound/voice/human/male/warcry_20.ogg','sound/voice/human/male/warcry_21.ogg','sound/voice/human/male/warcry_22.ogg','sound/voice/human/male/warcry_23.ogg','sound/voice/human/male/warcry_24.ogg','sound/voice/human/male/warcry_25.ogg','sound/voice/human/male/warcry_26.ogg','sound/voice/human/male/warcry_27.ogg','sound/voice/human/male/warcry_28.ogg','sound/voice/human/male/warcry_29.ogg') if("female_scream") - S = pick('sound/voice/human_female_scream_1.ogg','sound/voice/human_female_scream_2.ogg','sound/voice/human_female_scream_3.ogg','sound/voice/human_female_scream_4.ogg','sound/voice/human_female_scream_5.ogg') + S = pick('sound/voice/human/female/scream_1.ogg','sound/voice/human/female/scream_2.ogg','sound/voice/human/female/scream_3.ogg','sound/voice/human/female/scream_4.ogg','sound/voice/human/female/scream_5.ogg') if("female_pain") - S = pick('sound/voice/human_female_pain_1.ogg','sound/voice/human_female_pain_2.ogg','sound/voice/human_female_pain_3.ogg') + S = pick('sound/voice/human/female/pain_1.ogg','sound/voice/human/female/pain_2.ogg','sound/voice/human/female/pain_3.ogg') if("female_gored") - S = pick('sound/voice/human_female_gored_1.ogg','sound/voice/human_female_gored_2.ogg') + S = pick('sound/voice/human/female/gored_1.ogg','sound/voice/human/female/gored_2.ogg') if("female_fragout") - S = pick("sound/voice/human_female_grenadethrow_1.ogg", 'sound/voice/human_female_grenadethrow_2.ogg', 'sound/voice/human_female_grenadethrow_3.ogg') + S = pick("sound/voice/human/female/grenadethrow_1.ogg", 'sound/voice/human/female/grenadethrow_2.ogg', 'sound/voice/human/female/grenadethrow_3.ogg') if("female_warcry") - S = pick('sound/voice/human_female_warcry_1.ogg','sound/voice/human_female_warcry_2.ogg','sound/voice/human_female_warcry_3.ogg','sound/voice/human_female_warcry_4.ogg','sound/voice/human_female_warcry_5.ogg','sound/voice/human_female_warcry_6.ogg','sound/voice/human_female_warcry_7.ogg','sound/voice/human_female_warcry_8.ogg','sound/voice/human_female_warcry_9.ogg','sound/voice/human_female_warcry_10.ogg','sound/voice/human_female_warcry_11.ogg','sound/voice/human_female_warcry_12.ogg','sound/voice/human_female_warcry_13.ogg','sound/voice/human_female_warcry_14.ogg','sound/voice/human_female_warcry_15.ogg','sound/voice/human_female_warcry_16.ogg','sound/voice/human_female_warcry_17.ogg','sound/voice/human_female_warcry_18.ogg','sound/voice/human_female_warcry_19.ogg') + S = pick('sound/voice/human/female/warcry_1.ogg','sound/voice/human/female/warcry_2.ogg','sound/voice/human/female/warcry_3.ogg','sound/voice/human/female/warcry_4.ogg','sound/voice/human/female/warcry_5.ogg','sound/voice/human/female/warcry_6.ogg','sound/voice/human/female/warcry_7.ogg','sound/voice/human/female/warcry_8.ogg','sound/voice/human/female/warcry_9.ogg','sound/voice/human/female/warcry_10.ogg','sound/voice/human/female/warcry_11.ogg','sound/voice/human/female/warcry_12.ogg','sound/voice/human/female/warcry_13.ogg','sound/voice/human/female/warcry_14.ogg','sound/voice/human/female/warcry_15.ogg','sound/voice/human/female/warcry_16.ogg','sound/voice/human/female/warcry_17.ogg','sound/voice/human/female/warcry_18.ogg','sound/voice/human/female/warcry_19.ogg') if("male_hugged") - S = pick("sound/voice/human_male_facehugged1.ogg", 'sound/voice/human_male_facehugged2.ogg', 'sound/voice/human_male_facehugged3.ogg') + S = pick("sound/voice/human/male/facehugged1.ogg", 'sound/voice/human/male/facehugged2.ogg', 'sound/voice/human/male/facehugged3.ogg') if("female_hugged") - S = pick("sound/voice/human_female_facehugged1.ogg", 'sound/voice/human_female_facehugged2.ogg') + S = pick("sound/voice/human/female/facehugged1.ogg", 'sound/voice/human/female/facehugged2.ogg') if("male_gasp") - S = pick("sound/voice/human_male_gasp1.ogg", 'sound/voice/human_male_gasp2.ogg', 'sound/voice/human_male_gasp3.ogg') + S = pick("sound/voice/human/male/gasp1.ogg", 'sound/voice/human/male/gasp2.ogg', 'sound/voice/human/male/gasp3.ogg') if("female_gasp") - S = pick("sound/voice/human_female_gasp1.ogg", 'sound/voice/human_female_gasp2.ogg') + S = pick("sound/voice/human/female/gasp1.ogg", 'sound/voice/human/female/gasp2.ogg') if("male_cough") - S = pick("sound/voice/human_male_cough1.ogg", 'sound/voice/human_male_cough2.ogg') + S = pick("sound/voice/human/male/cough1.ogg", 'sound/voice/human/male/cough2.ogg') if("female_cough") - S = pick("sound/voice/human_female_cough1.ogg", 'sound/voice/human_female_cough2.ogg') + S = pick("sound/voice/human/female/cough1.ogg", 'sound/voice/human/female/cough2.ogg') if("male_preburst") - S = pick("sound/voice/human_male_preburst1.ogg", 'sound/voice/human_male_preburst2.ogg', 'sound/voice/human_male_preburst3.ogg', 'sound/voice/human_male_preburst4.ogg', 'sound/voice/human_male_preburst5.ogg', 'sound/voice/human_male_preburst6.ogg', 'sound/voice/human_male_preburst7.ogg', 'sound/voice/human_male_preburst8.ogg', 'sound/voice/human_male_preburst9.ogg', 'sound/voice/human_male_preburst10.ogg') + S = pick("sound/voice/human/male/preburst1.ogg", 'sound/voice/human/male/preburst2.ogg', 'sound/voice/human/male/preburst3.ogg', 'sound/voice/human/male/preburst4.ogg', 'sound/voice/human/male/preburst5.ogg', 'sound/voice/human/male/preburst6.ogg', 'sound/voice/human/male/preburst7.ogg', 'sound/voice/human/male/preburst8.ogg', 'sound/voice/human/male/preburst9.ogg', 'sound/voice/human/male/preburst10.ogg') if("female_preburst") - S = pick("sound/voice/human_female_preburst1.ogg", 'sound/voice/human_female_preburst2.ogg', 'sound/voice/human_female_preburst3.ogg') + S = pick("sound/voice/human/female/preburst1.ogg", 'sound/voice/human/female/preburst2.ogg', 'sound/voice/human/female/preburst3.ogg') if("jump") S = pick('sound/effects/bounce_1.ogg','sound/effects/bounce_2.ogg','sound/effects/bounce_3.ogg','sound/effects/bounce_4.ogg') @@ -369,15 +369,15 @@ A good representation is: 'byond applies a volume reduction to the sound every X //yautja race if("pred_scream") - S = pick('sound/voice/pred_roar1.ogg','sound/voice/pred_roar2.ogg','sound/voice/pred_roar3.ogg','sound/voice/pred_roar4.ogg','sound/voice/pred_roar5.ogg') + S = pick('sound/voice/predator/roar1.ogg','sound/voice/predator/roar2.ogg','sound/voice/predator/roar3.ogg','sound/voice/predator/roar4.ogg','sound/voice/predator/roar5.ogg') if("pred_pain") - S = pick('sound/voice/pred_pain1.ogg','sound/voice/pred_pain2.ogg','sound/voice/pred_pain3.ogg','sound/voice/pred_pain4.ogg','sound/voice/pred_pain5.ogg') + S = pick('sound/voice/predator/pain1.ogg','sound/voice/predator/pain2.ogg','sound/voice/predator/pain3.ogg','sound/voice/predator/pain4.ogg','sound/voice/predator/pain5.ogg') if("pred_hugged") - S = pick('sound/voice/pred_facehugged.ogg') + S = pick('sound/voice/predator/facehugged.ogg') if("pred_preburst") - S = pick('sound/voice/pred_pain_rare1.ogg') + S = pick('sound/voice/predator/pain_rare1.ogg') if("pred_warcry") - S = pick('sound/voice/pred_warcry.ogg') + S = pick('sound/voice/predator/warcry.ogg') //pred items if("clan_sword_hit") diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index eb27ddf1d05..58c293c9007 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -58,7 +58,7 @@ . = ..() if(isxenobehemoth(xeno_user)) xeno_user.do_attack_animation(src) - playsound(src, 'sound/effects/behemoth/earth_pillar_eating.ogg', 10, TRUE) + playsound(src, 'sound/effects/alien/behemoth/earth_pillar_eating.ogg', 10, TRUE) xeno_user.visible_message(span_xenowarning("\The [xeno_user] eats away at the [src.name]!"), \ span_xenonotice(pick( "We eat away at the stone. It tastes good, as expected of our primary diet.", diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 829f17ac96c..8a4a1c2081f 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -307,7 +307,7 @@ if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_VENTSOUND) || silent_crawl) return TIMER_COOLDOWN_START(user, COOLDOWN_VENTSOUND, 3 SECONDS) - playsound(src, pick('sound/effects/alien_ventcrawl1.ogg','sound/effects/alien_ventcrawl2.ogg'), 50, TRUE, -3) + playsound(src, pick('sound/effects/alien/ventcrawl1.ogg','sound/effects/alien/ventcrawl2.ogg'), 50, TRUE, -3) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4f9a8438e90..61f186a7e5f 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -282,7 +282,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if("apc sparks") target.playsound_local(source, get_sfx("sparks"), 35, TRUE) if("hugged") - target.playsound_local(source, 'sound/effects/alien_egg_move.ogg', 35, TRUE) + target.playsound_local(source, 'sound/effects/alien/egg_move.ogg', 35, TRUE) sleep(1 SECONDS) target.playsound_local(source, get_sfx("[pick("male", "female")]_hugged"), 35, TRUE) if("weed placed") diff --git a/code/modules/mob/living/carbon/human/emote-yautja.dm b/code/modules/mob/living/carbon/human/emote-yautja.dm index d19cadf19fd..fe38dbbfa23 100644 --- a/code/modules/mob/living/carbon/human/emote-yautja.dm +++ b/code/modules/mob/living/carbon/human/emote-yautja.dm @@ -3,7 +3,7 @@ /datum/emote/living/carbon/human/species/yautja/anytime key = "anytime" - sound = 'sound/voice/pred_anytime.ogg' + sound = 'sound/voice/predator/anytime.ogg' key_third_person = "anytime" message = "any time" emote_type = EMOTE_AUDIBLE @@ -16,13 +16,13 @@ /datum/emote/living/carbon/human/species/yautja/click/get_sound(mob/living/user) if(rand(0,100) < 50) - return 'sound/voice/pred_click1.ogg' + return 'sound/voice/predator/click1.ogg' else - return 'sound/voice/pred_click2.ogg' + return 'sound/voice/predator/click2.ogg' /datum/emote/living/carbon/human/species/yautja/helpme key = "helpme" - sound = 'sound/voice/pred_helpme.ogg' + sound = 'sound/voice/predator/helpme.ogg' key_third_person = "helpme" message = "help me!" emote_type = EMOTE_AUDIBLE @@ -36,42 +36,42 @@ /datum/emote/living/carbon/human/species/yautja/itsatrap key = "itsatrap" - sound = 'sound/voice/pred_itsatrap.ogg' + sound = 'sound/voice/predator/itsatrap.ogg' key_third_person = "itsatrap" message = "it's a trap!" emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/laugh1 key = "laugh1" - sound = 'sound/voice/pred_laugh1.ogg' + sound = 'sound/voice/predator/laugh1.ogg' key_third_person = "laugh1" message = "laughs" emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/laugh2 key = "laugh2" - sound = 'sound/voice/pred_laugh2.ogg' + sound = 'sound/voice/predator/laugh2.ogg' key_third_person = "laugh2" message = "laughs" emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/laugh3 key = "laugh3" - sound = 'sound/voice/pred_laugh3.ogg' + sound = 'sound/voice/predator/laugh3.ogg' key_third_person = "laugh3" message = "laughs" emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/laugh4 key = "laugh4" - sound = 'sound/voice/pred_laugh4.ogg' + sound = 'sound/voice/predator/laugh4.ogg' key_third_person = "laugh4" message = "laughs" emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/overhere key = "overhere" - sound = 'sound/voice/pred_overhere.ogg' + sound = 'sound/voice/predator/overhere.ogg' key_third_person = "overhere" message = "over here!" emote_type = EMOTE_AUDIBLE @@ -83,12 +83,12 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/predroar/get_sound(mob/living/user) - return pick('sound/voice/pred_roar1.ogg', 'sound/voice/pred_roar2.ogg') + return pick('sound/voice/predator/roar1.ogg', 'sound/voice/predator/roar2.ogg') /datum/emote/living/carbon/human/species/yautja/predroar2 key = "predroar2" key_third_person = "predroars2" - sound = 'sound/voice/pred_roar3.ogg' + sound = 'sound/voice/predator/roar3.ogg' message = "roars!" emote_type = EMOTE_AUDIBLE @@ -100,7 +100,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/loudroar/get_sound(mob/living/user) - return pick('sound/voice/pred_roar4.ogg', 'sound/voice/pred_roar5.ogg') + return pick('sound/voice/predator/roar4.ogg', 'sound/voice/predator/roar5.ogg') /datum/emote/living/carbon/human/species/yautja/loudroar/run_emote(mob/user, params, type_override, intentional) . = ..() @@ -118,7 +118,7 @@ key = "turnaround" key_third_person = "turnaround" message = "turn around!" - sound = 'sound/voice/pred_turnaround.ogg' + sound = 'sound/voice/predator/turnaround.ogg' emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/click2 @@ -128,7 +128,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/click2/get_sound(mob/living/user) - return pick('sound/voice/pred_click3.ogg', 'sound/voice/pred_click4.ogg') + return pick('sound/voice/predator/click3.ogg', 'sound/voice/predator/click4.ogg') /datum/emote/living/carbon/human/species/yautja/aliengrowl key = "aliengrowl" @@ -137,7 +137,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/aliengrowl/get_sound(mob/living/user) - return pick('sound/voice/alien_growl1.ogg', 'sound/voice/alien_growl2.ogg') + return pick('sound/voice/alien/growl1.ogg', 'sound/voice/alien/growl2.ogg') /datum/emote/living/carbon/human/species/yautja/alienhelp key = "alienhelp" @@ -146,25 +146,25 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/alienhelp/get_sound(mob/living/user) - return pick('sound/voice/alien_help1.ogg', 'sound/voice/alien_help2.ogg') + return pick('sound/voice/alien/help1.ogg', 'sound/voice/alien/help2.ogg') /datum/emote/living/carbon/human/species/yautja/comeonout key = "comeonout" key_third_person = "comeonout" message = "come on out!" - sound = 'sound/voice/pred_come_on_out.ogg' + sound = 'sound/voice/predator/come_on_out.ogg' emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/overthere key = "overthere" key_third_person = "overthere" message = "over there!" - sound = 'sound/voice/pred_over_there.ogg' + sound = 'sound/voice/predator/over_there.ogg' emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/species/yautja/uglyfreak key = "uglyfreak" key_third_person = "uglyfreak" message = "ugly freak!" - sound = 'sound/voice/pred_ugly_freak.ogg' + sound = 'sound/voice/predator/ugly_freak.ogg' emote_type = EMOTE_AUDIBLE diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d6731448d08..a20ec4301f1 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -373,12 +373,12 @@ /datum/emote/living/carbon/human/laugh/get_sound(mob/living/user) //RUTGMC EDIT if(isyautja(user)) - return pick('sound/voice/pred_laugh1.ogg', 'sound/voice/pred_laugh2.ogg', 'sound/voice/pred_laugh3.ogg', 'sound/voice/pred_laugh4.ogg') + return pick('sound/voice/predator/laugh1.ogg', 'sound/voice/predator/laugh2.ogg', 'sound/voice/predator/laugh3.ogg', 'sound/voice/predator/laugh4.ogg') //RUTGMC EDIT else if(user.gender == FEMALE) - return 'sound/voice/human_female_laugh_1.ogg' + return 'sound/voice/human/female/laugh_1.ogg' else - return pick('sound/voice/human_male_laugh_1.ogg', 'sound/voice/human_male_laugh_2.ogg') + return pick('sound/voice/human/male/laugh_1.ogg', 'sound/voice/human/male/laugh_2.ogg') /datum/emote/living/carbon/human/warcry key = "warcry" @@ -491,11 +491,11 @@ /datum/emote/living/carbon/human/medic/get_sound(mob/living/carbon/human/user) if(user.gender == MALE) if(prob(95)) - return 'sound/voice/human_male_medic.ogg' + return 'sound/voice/human/male/medic.ogg' else - return 'sound/voice/human_male_medic2.ogg' + return 'sound/voice/human/male/medic2.ogg' else - return 'sound/voice/human_female_medic.ogg' + return 'sound/voice/human/female/medic.ogg' /datum/emote/living/carbon/human/medic/run_emote(mob/user, params, type_override, intentional = FALSE, prefix) @@ -590,9 +590,9 @@ if(isrobot(user)) return if(user.gender == FEMALE) - return 'sound/voice/human_female_sigh_1.ogg' + return 'sound/voice/human/female/sigh_1.ogg' else - return 'sound/voice/human_male_sigh_1.ogg' + return 'sound/voice/human/male/sigh_1.ogg' /datum/emote/living/carbon/human/giggle/get_sound(mob/living/user) @@ -602,36 +602,36 @@ else return 'sound/voice/robotic/male_giggle.ogg' if(user.gender == FEMALE) - return 'sound/voice/human_female_giggle_1.ogg' + return 'sound/voice/human/female/giggle_1.ogg' else - return 'sound/voice/human_male_giggle_1.ogg' + return 'sound/voice/human/male/giggle_1.ogg' /datum/emote/living/carbon/human/yawn/get_sound(mob/living/user) if(isrobot(user)) return if(user.gender == FEMALE) - return 'sound/voice/human_female_yawn_1.ogg' + return 'sound/voice/human/female/yawn_1.ogg' else - return 'sound/voice/human_male_yawn_1.ogg' + return 'sound/voice/human/male/yawn_1.ogg' /datum/emote/living/carbon/human/moan/get_sound(mob/living/user) if(isrobot(user)) return if(user.gender == FEMALE) - return 'sound/voice/human_female_moan_1.ogg' + return 'sound/voice/human/female/moan_1.ogg' else - return 'sound/voice/human_male_moan_1.ogg' + return 'sound/voice/human/male/moan_1.ogg' /datum/emote/living/carbon/human/cry/get_sound(mob/living/user) if(isrobot(user)) return if(user.gender == FEMALE) - return 'sound/voice/human_female_cry_1.ogg' + return 'sound/voice/human/female/cry_1.ogg' else - return 'sound/voice/human_male_cry_1.ogg' + return 'sound/voice/human/male/cry_1.ogg' /datum/emote/living/carbon/human/laugh/get_sound(mob/living/user) if(isrobot(user)) @@ -661,7 +661,7 @@ /datum/emote/living/carbon/human/whistle/get_sound(mob/living/user) if(isrobot(user)) return - return 'sound/voice/sound_voice_human_whistle1.ogg' + return 'sound/voice/human/whistle1.ogg' /datum/emote/living/carbon/human/crack key = "crack" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 088d6eb9f0a..7ab04b5c0d9 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -744,7 +744,7 @@ preferences = list("moth_wings" = "Wings") screams = list("neuter" = 'sound/voice/moth_scream.ogg') - paincries = list("neuter" = 'sound/voice/human_male_pain_3.ogg') + paincries = list("neuter" = 'sound/voice/human/male/pain_3.ogg') goredcries = list("neuter" = 'sound/voice/moth_scream.ogg') burstscreams = list("neuter" = 'sound/voice/moth_scream.ogg') warcries = list("neuter" = 'sound/voice/moth_scream.ogg') diff --git a/code/modules/mob/living/carbon/human/yautja.dm b/code/modules/mob/living/carbon/human/yautja.dm index afbf2b67103..0b5f8433b24 100644 --- a/code/modules/mob/living/carbon/human/yautja.dm +++ b/code/modules/mob/living/carbon/human/yautja.dm @@ -33,7 +33,7 @@ max_stamina = 250 blood_color = "#20d450" flesh_color = "#907E4A" - speech_sounds = list('sound/voice/pred_click1.ogg', 'sound/voice/pred_click2.ogg') + speech_sounds = list('sound/voice/predator/click1.ogg', 'sound/voice/predator/click2.ogg') speech_chance = 100 death_message = "clicks in agony and falls still, motionless and completely lifeless..." @@ -254,7 +254,7 @@ var/global/image/hud_icon_hunter_thralled /mob/living/carbon/human/species/yautja/send_speech(message_raw, message_range = 6, obj/source = src, bubble_type = bubble_icon, list/spans, datum/language/message_language=null, message_mode, tts_message, list/tts_filter) . = ..() - playsound(loc, pick('sound/voice/pred_click1.ogg', 'sound/voice/pred_click2.ogg'), 25, 1) + playsound(loc, pick('sound/voice/predator/click1.ogg', 'sound/voice/predator/click2.ogg'), 25, 1) /mob/living/carbon/human/species/yautja/get_idcard(hand_first = TRUE) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities.dm index 8eafcf3a1ae..b9331768eaf 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities.dm @@ -704,7 +704,7 @@ /datum/action/ability/activable/xeno/spray_acid/on_cooldown_finish() - playsound(owner.loc, 'sound/voice/alien_drool1.ogg', 50, 1) + playsound(owner.loc, 'sound/voice/alien/drool1.ogg', 50, 1) to_chat(owner, span_xenodanger("We feel our acid glands refill. We can spray acid again.")) return ..() @@ -817,7 +817,7 @@ /datum/action/ability/activable/xeno/xeno_spit/proc/fire() var/mob/living/carbon/xenomorph/X = owner var/turf/current_turf = get_turf(owner) - var/sound_to_play = pick(1, 2) == 1 ? 'sound/voice/alien_spitacid.ogg' : 'sound/voice/alien_spitacid2.ogg' + var/sound_to_play = pick(1, 2) == 1 ? 'sound/voice/alien/spitacid.ogg' : 'sound/voice/alien/spitacid2.ogg' playsound(X.loc, sound_to_play, 25, 1) var/obj/projectile/newspit = new /obj/projectile(current_turf) @@ -939,7 +939,7 @@ return FALSE /datum/action/ability/activable/xeno/neurotox_sting/on_cooldown_finish() - playsound(owner.loc, 'sound/voice/alien_drool1.ogg', 50, 1) + playsound(owner.loc, 'sound/voice/alien/drool1.ogg', 50, 1) to_chat(owner, span_xenodanger("We feel our toxic glands refill. We can use our [initial(name)] again.")) return ..() @@ -1076,7 +1076,7 @@ /datum/action/ability/xeno_action/rally_hive/action_activate() var/mob/living/carbon/xenomorph/X = owner - xeno_message("Our leader [X] is rallying the hive to [AREACOORD_NO_Z(X.loc)]!", "xenoannounce", 6, X.hivenumber, FALSE, X, 'sound/voice/alien_distantroar_3.ogg',TRUE,null,/atom/movable/screen/arrow/leader_tracker_arrow) + xeno_message("Our leader [X] is rallying the hive to [AREACOORD_NO_Z(X.loc)]!", "xenoannounce", 6, X.hivenumber, FALSE, X, 'sound/voice/alien/distantroar_3.ogg',TRUE,null,/atom/movable/screen/arrow/leader_tracker_arrow) notify_ghosts("\ [X] is rallying the hive to [AREACOORD_NO_Z(X.loc)]!", source = X, action = NOTIFY_JUMP) succeed_activate() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm index 7a3a788ccee..2b1aa2a346e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm @@ -307,7 +307,7 @@ xeno_owner.set_canmove(FALSE) xeno_owner.behemoth_charging = TRUE ADD_TRAIT(xeno_owner, TRAIT_SILENT_FOOTSTEPS, XENO_TRAIT) - playsound(xeno_owner, 'sound/effects/behemoth/landslide_roar.ogg', 40, TRUE) + playsound(xeno_owner, 'sound/effects/alien/behemoth/landslide_roar.ogg', 40, TRUE) var/which_step = pick(0, 1) new /obj/effect/temp_visual/behemoth/landslide/dust(owner_turf, direction, which_step) do_warning(xeno_owner, get_affected_turfs(owner_turf, direction, LANDSLIDE_RANGE), LANDSLIDE_WIND_UP + 0.5 SECONDS) @@ -316,7 +316,7 @@ if(primal_wrath_action?.ability_active) var/animation_time = LANDSLIDE_RANGE * LANDSLIDE_ENHANCED_STEP_DELAY addtimer(CALLBACK(src, PROC_REF(enhanced_do_charge), direction, charge_damage, LANDSLIDE_ENHANCED_STEP_DELAY, LANDSLIDE_RANGE), LANDSLIDE_ENHANCED_WIND_UP) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), xeno_owner, 'sound/effects/behemoth/landslide_enhanced_charge.ogg', 30, TRUE), LANDSLIDE_ENHANCED_WIND_UP) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), xeno_owner, 'sound/effects/alien/behemoth/landslide_enhanced_charge.ogg', 30, TRUE), LANDSLIDE_ENHANCED_WIND_UP) animate(xeno_owner, time = LANDSLIDE_ENHANCED_WIND_UP, flags = ANIMATION_END_NOW) animate(pixel_y = xeno_owner.pixel_y + (LANDSLIDE_RANGE / 2), time = animation_time / 2, easing = CIRCULAR_EASING|EASE_OUT) animate(pixel_y = initial(xeno_owner.pixel_y), time = animation_time / 2, easing = CIRCULAR_EASING|EASE_IN) @@ -401,7 +401,7 @@ continue hit_object(affected_object) if(LinkBlocked(owner_turf, direct_turf)) - playsound(direct_turf, 'sound/effects/behemoth/behemoth_stomp.ogg', 40, TRUE) + playsound(direct_turf, 'sound/effects/alien/behemoth/stomp.ogg', 40, TRUE) xeno_owner.do_attack_animation(direct_turf) addtimer(CALLBACK(src, PROC_REF(end_charge)), LANDSLIDE_ENDING_COLLISION_DELAY) return @@ -433,7 +433,7 @@ var/mob/living/carbon/xenomorph/xeno_owner = owner if(steps_to_take <= 0 || xeno_owner.wrath_stored < ability_cost) if(LinkBlocked(owner_turf, direct_turf)) - playsound(direct_turf, 'sound/effects/behemoth/behemoth_stomp.ogg', 40, TRUE) + playsound(direct_turf, 'sound/effects/alien/behemoth/stomp.ogg', 40, TRUE) xeno_owner.do_attack_animation(direct_turf) new /obj/effect/temp_visual/behemoth/crack/landslide(get_turf(owner), direction, pick(1, 2)) end_charge() @@ -500,7 +500,7 @@ if(!living_target.lying_angle) living_target.Knockdown(LANDSLIDE_KNOCKDOWN_DURATION) new /obj/effect/temp_visual/behemoth/landslide/hit(get_turf(living_target)) - playsound(living_target, 'sound/effects/behemoth/landslide_hit_mob.ogg', 30, TRUE) + playsound(living_target, 'sound/effects/alien/behemoth/landslide_hit_mob.ogg', 30, TRUE) living_target.emote("scream") shake_camera(living_target, 1, 0.8) living_target.apply_damage(damage, BRUTE, blocked = MELEE) @@ -644,7 +644,7 @@ var/datum/action/ability/xeno_action/ready_charge/behemoth_roll/behemoth_roll_action = xeno_owner.actions_by_path[/datum/action/ability/xeno_action/ready_charge/behemoth_roll] if(behemoth_roll_action?.charge_ability_on) behemoth_roll_action.charge_off() - playsound(target_turf, 'sound/effects/behemoth/behemoth_stomp.ogg', 30, TRUE) + playsound(target_turf, 'sound/effects/alien/behemoth/stomp.ogg', 30, TRUE) new /obj/effect/temp_visual/behemoth/stomp/west(owner_turf, owner.dir) new /obj/effect/temp_visual/behemoth/crack(owner_turf, owner.dir) var/wind_up_duration = EARTH_RISER_WIND_UP @@ -683,7 +683,7 @@ while(length(active_pillars) > maximum_pillars) var/obj/structure/earth_pillar/oldest_pillar = popleft(active_pillars) new /obj/effect/temp_visual/behemoth/earth_pillar/broken(oldest_pillar.loc) - playsound(oldest_pillar.loc, 'sound/effects/behemoth/earth_pillar_destroyed.ogg', 30, TRUE) + playsound(oldest_pillar.loc, 'sound/effects/alien/behemoth/earth_pillar_destroyed.ogg', 30, TRUE) qdel(oldest_pillar) update_button_icon() @@ -792,7 +792,7 @@ RU TGMC EDIT */ var/owner_turf = get_turf(xeno_owner) new /obj/effect/temp_visual/behemoth/stomp/east(owner_turf, owner.dir) new /obj/effect/temp_visual/behemoth/crack(owner_turf, owner.dir) - playsound(target_turf, 'sound/effects/behemoth/behemoth_stomp.ogg', 30, TRUE) + playsound(target_turf, 'sound/effects/alien/behemoth/stomp.ogg', 30, TRUE) var/datum/action/ability/xeno_action/primal_wrath/primal_wrath_action = xeno_owner.actions_by_path[/datum/action/ability/xeno_action/primal_wrath] do_ability(target_turf, SEISMIC_FRACTURE_WIND_UP, primal_wrath_action?.ability_active? TRUE : FALSE) @@ -822,7 +822,7 @@ RU TGMC EDIT */ if(!enhanced) return new /obj/effect/temp_visual/shockwave/enhanced(get_turf(owner), SEISMIC_FRACTURE_ATTACK_RADIUS, owner.dir) - playsound(owner, 'sound/effects/behemoth/landslide_roar.ogg', 40, TRUE) + playsound(owner, 'sound/effects/alien/behemoth/landslide_roar.ogg', 40, TRUE) var/list/turf/extra_turfs_to_warn = filled_turfs(target_turf, SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED, bypass_window = TRUE, projectile = TRUE) for(var/turf/extra_turf_to_warn AS in extra_turfs_to_warn) if(isclosedturf(extra_turf_to_warn)) @@ -850,7 +850,7 @@ RU TGMC EDIT */ if(isclosedturf(target_turf)) continue new /obj/effect/temp_visual/behemoth/crack(target_turf) - playsound(target_turf, 'sound/effects/behemoth/seismic_fracture_explosion.ogg', 15) + playsound(target_turf, 'sound/effects/alien/behemoth/seismic_fracture_explosion.ogg', 15) var/attack_vfx = enhanced? /obj/effect/temp_visual/behemoth/seismic_fracture/enhanced : /obj/effect/temp_visual/behemoth/seismic_fracture new attack_vfx(target_turf, enhanced? FALSE : null) for(var/atom/movable/affected_atom AS in target_turf) @@ -894,7 +894,7 @@ RU TGMC EDIT */ affected_living.layer = initial(affected_living.layer) var/landing_damage = (xeno_owner.xeno_caste.melee_damage * xeno_owner.xeno_melee_damage_modifier) / 2 affected_living.apply_damage(landing_damage, BRUTE, blocked = MELEE) - //playsound(affected_living.loc, 'sound/effects/behemoth/seismic_fracture_landing.ogg', 10, TRUE) + //playsound(affected_living.loc, 'sound/effects/alien/behemoth/seismic_fracture_landing.ogg', 10, TRUE) new /obj/effect/temp_visual/behemoth/stomp(affected_living.loc) /** @@ -1044,7 +1044,7 @@ RU TGMC EDIT */ xeno_owner.face_atom(target) xeno_owner.set_canmove(FALSE) var/owner_turf = get_turf(xeno_owner) - playsound(owner_turf, 'sound/effects/behemoth/primal_wrath_roar.ogg', 75, TRUE) + playsound(owner_turf, 'sound/effects/alien/behemoth/primal_wrath_roar.ogg', 75, TRUE) do_ability(owner_turf) addtimer(CALLBACK(src, PROC_REF(end_ability)), PRIMAL_WRATH_ACTIVATION_DURATION) succeed_activate() @@ -1261,7 +1261,7 @@ RU TGMC EDIT */ density = TRUE max_integrity = 200 soft_armor = list(MELEE = 25, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 100, FIRE = 100, ACID = 0) - destroy_sound = 'sound/effects/behemoth/earth_pillar_destroyed.ogg' + destroy_sound = 'sound/effects/alien/behemoth/earth_pillar_destroyed.ogg' coverage = 128 /// The xeno owner of this object. var/mob/living/carbon/xenomorph/xeno_owner @@ -1282,7 +1282,7 @@ RU TGMC EDIT */ animate(src, pixel_x = random_x, pixel_y = 500, time = 0) animate(pixel_x = 0, pixel_y = 0, time = 0.5 SECONDS) return - playsound(src, 'sound/effects/behemoth/earth_pillar_rising.ogg', 40, TRUE) + playsound(src, 'sound/effects/alien/behemoth/earth_pillar_rising.ogg', 40, TRUE) particle_holder = new(src, /particles/earth_pillar) particle_holder.pixel_y = -4 animate(particle_holder, pixel_y = 4, time = 1.0 SECONDS) @@ -1292,7 +1292,7 @@ RU TGMC EDIT */ RegisterSignals(src, list(COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_HAND_ALTERNATE, COMSIG_ATOM_ATTACKBY), PROC_REF(call_update_icon_state)) /obj/structure/earth_pillar/Destroy() - playsound(loc, 'sound/effects/behemoth/earth_pillar_destroyed.ogg', 40, TRUE) + playsound(loc, 'sound/effects/alien/behemoth/earth_pillar_destroyed.ogg', 40, TRUE) new /obj/effect/temp_visual/behemoth/earth_pillar/broken(loc) var/datum/action/ability/activable/xeno/earth_riser/earth_riser_action = xeno_owner?.actions_by_path[/datum/action/ability/activable/xeno/earth_riser] if(earth_riser_action && (src in earth_riser_action.active_pillars)) @@ -1346,7 +1346,7 @@ RU TGMC EDIT */ if(isxenobehemoth(xeno_user)) xeno_user.do_attack_animation(src) do_jitter_animation(jitter_loops = 1) - playsound(src, 'sound/effects/behemoth/earth_pillar_eating.ogg', 30, TRUE) + playsound(src, 'sound/effects/alien/behemoth/earth_pillar_eating.ogg', 30, TRUE) xeno_user.visible_message(span_xenowarning("\The [xeno_user] eats away at the [src.name]!"), \ span_xenonotice(pick( "We eat away at the stone. It tastes good, as expected of our primary diet.", @@ -1446,11 +1446,11 @@ RU TGMC EDIT */ /// VFX + SFX for when the rock doesn't hit anything. /datum/ammo/xeno/earth_pillar/proc/rock_broke(turf/hit_turf, obj/projectile/proj) new /obj/effect/temp_visual/behemoth/earth_pillar/broken(hit_turf) - playsound(hit_turf, 'sound/effects/behemoth/earth_pillar_destroyed.ogg', 30, TRUE) + playsound(hit_turf, 'sound/effects/alien/behemoth/earth_pillar_destroyed.ogg', 30, TRUE) /// Does some stuff if the rock DOES hit something. /datum/ammo/xeno/earth_pillar/proc/on_hit_anything(turf/hit_turf, obj/projectile/proj) - playsound(hit_turf, 'sound/effects/behemoth/earth_pillar_destroyed.ogg', 40, TRUE) + playsound(hit_turf, 'sound/effects/alien/behemoth/earth_pillar_destroyed.ogg', 40, TRUE) new /obj/effect/temp_visual/behemoth/earth_pillar/destroyed(hit_turf) var/list/turf/affected_turfs = filled_turfs(hit_turf, EARTH_PILLAR_SPREAD_RADIUS, include_edge = FALSE, bypass_window = TRUE, projectile = TRUE) behemoth_area_attack(proj.firer, affected_turfs, damage_multiplier = EARTH_PILLAR_SPREAD_DAMAGE_MULTIPLIER) @@ -1488,7 +1488,7 @@ RU TGMC EDIT */ if(isclosedturf(affected_turf)) continue new /obj/effect/temp_visual/behemoth/crack(affected_turf) - playsound(affected_turf, 'sound/effects/behemoth/seismic_fracture_explosion.ogg', 15) + playsound(affected_turf, 'sound/effects/alien/behemoth/seismic_fracture_explosion.ogg', 15) var/attack_vfx = enhanced? /obj/effect/temp_visual/behemoth/seismic_fracture/enhanced : /obj/effect/temp_visual/behemoth/seismic_fracture new attack_vfx(affected_turf, enhanced? FALSE : null) for(var/atom/movable/affected_atom AS in affected_turf) @@ -1537,7 +1537,7 @@ RU TGMC EDIT */ var/warning_type = primal_wrath_action?.ability_active? /obj/effect/temp_visual/behemoth/warning/enhanced : /obj/effect/temp_visual/behemoth/warning for(var/turf/target_turf AS in target_turfs) new warning_type(target_turf, duration) - playsound(target_turf, 'sound/effects/behemoth/behemoth_rumble.ogg', 15, TRUE) + playsound(target_turf, 'sound/effects/alien/behemoth/rumble.ogg', 15, TRUE) for(var/mob/living/target_living in target_turf) if(xeno_owner.issamexenohive(target_living) || target_living.stat == DEAD || CHECK_BITFIELD(target_living.status_flags, INCORPOREAL|GODMODE)) continue diff --git a/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm index 1f5609a01c7..97b685426bd 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(hugger_images_list, list( F.kill_hugger() huggers++ if(message) - playsound(src, 'sound/voice/alien_drool2.ogg', 50, 0, 1) + playsound(src, 'sound/voice/alien/drool2.ogg', 50, 0, 1) to_chat(src, span_notice("We salvage this young one's biomass to produce another. Now sheltering: [huggers] / [xeno_caste.huggers_max].")) else if(message) to_chat(src, span_warning("We can't carry any more facehuggers!")) @@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(hugger_images_list, list( /datum/action/ability/xeno_action/spawn_hugger/on_cooldown_finish() to_chat(owner, span_xenodanger("We can now spawn another young one.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/xeno_action/spawn_hugger/can_use_action(silent = FALSE, override_flags) @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(hugger_images_list, list( caster.huggers++ to_chat(caster, span_xenowarning("We spawn a young one via the miracle of asexual internal reproduction, adding it to our stores. Now sheltering: [caster.huggers] / [caster.xeno_caste.huggers_max].")) - playsound(caster, 'sound/voice/alien_drool2.ogg', 50, 0, 1) + playsound(caster, 'sound/voice/alien/drool2.ogg', 50, 0, 1) succeed_activate() add_cooldown() if(owner.client) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm index 5441f19947d..0646419751e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm @@ -141,7 +141,7 @@ /datum/action/ability/activable/xeno/blink/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to blink again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() ///Return TRUE if we have a block, return FALSE otherwise @@ -191,7 +191,7 @@ /datum/action/ability/xeno_action/phantom/on_cooldown_finish() to_chat(owner, span_xenodanger("We gather enough strength to create a new phantom.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/xeno_action/phantom/action_activate() @@ -268,7 +268,7 @@ /datum/action/ability/activable/xeno/pounce/abduction/on_cooldown_finish() to_chat(owner, span_xenodanger("We gather enough strength to abduct another one.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/activable/xeno/pounce/abduction/use_ability(atom/A) @@ -343,7 +343,7 @@ /datum/action/ability/activable/xeno/body_swap/on_cooldown_finish() to_chat(owner, span_xenodanger("We gather enough strength to perform body swap again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/activable/xeno/body_swap/use_ability(atom/A) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm index e100992c86f..2dea79212b5 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm @@ -80,7 +80,7 @@ /datum/action/ability/activable/xeno/cresttoss/on_cooldown_finish() var/mob/living/carbon/xenomorph/X = owner to_chat(X, span_xenowarning("We can now crest toss again.")) - playsound(X, 'sound/effects/xeno_newlarva.ogg', 50, 0, 1) + playsound(X, 'sound/effects/alien/newlarva.ogg', 50, 0, 1) return ..() /datum/action/ability/activable/xeno/cresttoss/can_use_ability(atom/A, silent = FALSE, override_flags) @@ -198,7 +198,7 @@ /datum/action/ability/activable/xeno/advance/on_cooldown_finish() to_chat(owner, span_xenowarning("We can now rapidly charge forward again.")) - playsound(owner, 'sound/effects/xeno_newlarva.ogg', 50, 0, 1) + playsound(owner, 'sound/effects/alien/newlarva.ogg', 50, 0, 1) return ..() /datum/action/ability/activable/xeno/advance/can_use_ability(atom/A, silent = FALSE, override_flags) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm index a6e2b090c25..81833f6b757 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm @@ -31,7 +31,7 @@ X.add_filter("defender_tail_sweep", 2, gauss_blur_filter(1)) //Add cool SFX X.spin(4, 1) X.enable_throw_parry(0.6 SECONDS) - playsound(X,pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg'), 25, 1) //Sound effects + playsound(X,pick('sound/effects/alien/tail_swipe1.ogg','sound/effects/alien/tail_swipe2.ogg','sound/effects/alien/tail_swipe3.ogg'), 25, 1) //Sound effects var/sweep_range = 1 var/list/L = orange(sweep_range, X) // Not actually the fruit @@ -70,7 +70,7 @@ /datum/action/ability/xeno_action/tail_sweep/on_cooldown_finish() var/mob/living/carbon/xenomorph/X = owner to_chat(X, span_notice("We gather enough strength to tail sweep again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/xeno_action/tail_sweep/ai_should_start_consider() @@ -416,7 +416,7 @@ var/mob/living/carbon/xenomorph/X = owner X.spin(4, 1) X.enable_throw_parry(0.6 SECONDS) - playsound(X, pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg'), 25, 1) //Sound effects + playsound(X, pick('sound/effects/alien/tail_swipe1.ogg','sound/effects/alien/tail_swipe2.ogg','sound/effects/alien/tail_swipe3.ogg'), 25, 1) //Sound effects for(var/mob/living/carbon/human/slapped in orange(1, X)) if(slapped.stat == DEAD) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm index a586d21b313..d953ae64b10 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm @@ -73,7 +73,7 @@ ) /datum/action/ability/activable/xeno/defile/on_cooldown_finish() - playsound(owner.loc, 'sound/voice/alien_drool1.ogg', 50, 1) + playsound(owner.loc, 'sound/voice/alien/drool1.ogg', 50, 1) to_chat(owner, span_xenodanger("You feel your toxin accelerant glands refill. You can use Defile again.")) return ..() @@ -110,7 +110,7 @@ X.face_atom(living_target) X.do_attack_animation(living_target) playsound(living_target, 'sound/effects/spray3.ogg', 15, TRUE) - playsound(living_target, pick('sound/voice/alien_drool1.ogg', 'sound/voice/alien_drool2.ogg'), 15, 1) + playsound(living_target, pick('sound/voice/alien/drool1.ogg', 'sound/voice/alien/drool2.ogg'), 15, 1) to_chat(X, span_xenodanger("Our stinger successfully discharges accelerant into our victim.")) to_chat(living_target, span_danger("You feel horrible pain as something sharp forcibly pierces your thorax.")) living_target.apply_damage(50, STAMINA) @@ -176,7 +176,7 @@ var/obj/effect/abstract/particle_holder/particle_holder /datum/action/ability/xeno_action/emit_neurogas/on_cooldown_finish() - playsound(owner.loc, 'sound/effects/xeno_newlarva.ogg', 50, 0) + playsound(owner.loc, 'sound/effects/alien/newlarva.ogg', 50, 0) to_chat(owner, span_xenodanger("We feel our dorsal vents bristle with heated gas. We can emit Noxious Gas again.")) return ..() @@ -301,7 +301,7 @@ ) /datum/action/ability/activable/xeno/inject_egg_neurogas/on_cooldown_finish() - playsound(owner.loc, 'sound/effects/xeno_newlarva.ogg', 50, 0) + playsound(owner.loc, 'sound/effects/alien/newlarva.ogg', 50, 0) to_chat(owner, span_xenodanger("We feel our stinger fill with toxins. We can inject an egg with gas again.")) return ..() @@ -456,7 +456,7 @@ reagent_slash_reagent = X.selected_reagent X.balloon_alert(X, "Reagent slash active") //Let the user know - X.playsound_local(X, 'sound/voice/alien_drool2.ogg', 25) + X.playsound_local(X, 'sound/voice/alien/drool2.ogg', 25) toggle_particles(TRUE) succeed_activate() @@ -473,7 +473,7 @@ toggle_particles(FALSE) X.balloon_alert(X, "Reagent slash over") //Let the user know - X.playsound_local(X, 'sound/voice/hiss5.ogg', 25) + X.playsound_local(X, 'sound/voice/alien/hiss8.ogg', 25) ///Called when we slash while reagent slash is active @@ -513,7 +513,7 @@ /datum/action/ability/xeno_action/reagent_slash/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to infuse our spines with toxins again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() // Toggles particles on or off, depending on the defined var. diff --git a/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm index 1bed20235ac..710de6df33d 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm @@ -47,7 +47,7 @@ var/mob/living/carbon/xenomorph/facehugger/caster = owner caster.visible_message(span_danger("[caster] leaps on [living_target]!"), span_xenodanger("We leap on [living_target]!"), null, 5) - playsound(caster.loc, 'sound/voice/alien_roar_larva3.ogg', 25, TRUE) //TODO: I NEED ACTUAL HUGGERS SOUND DAMMED + playsound(caster.loc, 'sound/voice/alien/larva/roar3.ogg', 25, TRUE) //TODO: I NEED ACTUAL HUGGERS SOUND DAMMED if(ishuman(living_target) && (angle_to_dir(Get_Angle(caster.throw_source, living_target)) in reverse_nearby_direction(living_target.dir))) var/mob/living/carbon/human/human_target = living_target diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm index 7ce164dfeb2..43242153c28 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm @@ -53,7 +53,7 @@ recycled_xeno.gib() - playsound(hivelord, 'sound/effects/alien_recycler.ogg', 40) + playsound(hivelord, 'sound/effects/alien/recycler.ogg', 40) hivelord.visible_message(span_xenowarning("\The [hivelord] brushes xenomorphs' bits off its claws."), \ span_danger("We brush xenomorphs' bits off of our claws."), null, 20) return succeed_activate() //dew it diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm index c71a6865c7b..bcc61d546f9 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm @@ -404,7 +404,7 @@ return to_chat(get_parent(), span_xenoannounce("Our [src.name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).")) - SEND_SOUND(get_parent(), 'sound/voice/alien_help1.ogg') + SEND_SOUND(get_parent(), 'sound/voice/alien/help1.ogg') COOLDOWN_START(src, hivemind_proxy_alert_cooldown, XENO_HIVEMIND_DETECTION_COOLDOWN) //set the cooldown. /// Getter for the parent of this hive core diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm index ce9c339e5af..b42f00153fe 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm @@ -34,7 +34,7 @@ /datum/action/ability/xeno_action/stealth/on_cooldown_finish() owner.balloon_alert(owner, "Stealth ready.") - playsound(owner, "sound/effects/xeno_newlarva.ogg", 25, 0, 1) + playsound(owner, "sound/effects/alien/newlarva.ogg", 25, 0, 1) return ..() /datum/action/ability/xeno_action/stealth/action_activate() @@ -113,7 +113,7 @@ return can_sneak_attack = TRUE owner.balloon_alert(owner, "Sneak Attack ready.") - playsound(owner, "sound/effects/xeno_newlarva.ogg", 25, 0, 1) + playsound(owner, "sound/effects/alien/newlarva.ogg", 25, 0, 1) /datum/action/ability/xeno_action/stealth/process() if(!stealth) @@ -306,7 +306,7 @@ /datum/action/ability/activable/xeno/pounce/on_cooldown_finish() owner.balloon_alert(owner, "Pounce ready") - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/activable/xeno/pounce/can_use_ability(atom/A, silent = FALSE, override_flags) @@ -364,7 +364,7 @@ ///Triggers the effect of a successful pounce on the target. /datum/action/ability/activable/xeno/pounce/proc/trigger_pounce_effect(mob/living/living_target) - playsound(get_turf(living_target), 'sound/voice/alien_pounce.ogg', 25, TRUE) + playsound(get_turf(living_target), 'sound/voice/alien/pounce.ogg', 25, TRUE) var/mob/living/carbon/xenomorph/xeno_owner = owner xeno_owner.set_throwing(FALSE) xeno_owner.Immobilize(XENO_POUNCE_STANDBY_DURATION) @@ -459,7 +459,7 @@ /datum/action/ability/activable/xeno/hunter_mark/on_cooldown_finish() to_chat(owner, span_xenowarning("We are able to impose our psychic mark again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() @@ -713,7 +713,7 @@ /datum/action/ability/activable/xeno/silence/on_cooldown_finish() to_chat(owner, span_xenowarning("We refocus our psionic energies, allowing us to impose silence again.") ) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) cooldown_duration = initial(cooldown_duration) //Reset the cooldown timer to its initial state in the event of a whiffed Silence. return ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm index 3961e9b8321..0b9f61c541c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm @@ -204,7 +204,7 @@ return owner.dir = get_cardinal_dir(owner, target) - playsound(owner, 'sound/voice/ed209_20sec.ogg', 70, sound_range = 20) + playsound(owner, 'sound/voice/alien/king_roar.ogg', 70, sound_range = 20) var/mob/living/carbon/xenomorph/king/king_owner = owner if(istype(king_owner)) king_owner.icon_state = "King Screeching" @@ -218,7 +218,7 @@ return fail_activate() finish_charging() - playsound(owner, 'sound/voice/xenos_roaring.ogg', 90, sound_range = 30) + playsound(owner, 'sound/voice/alien/xenos_roaring.ogg', 90, sound_range = 30) for(var/mob/living/carbon/human/human_victim AS in GLOB.humans_by_zlevel["[owner.z]"]) if(get_dist(human_victim, owner) > 9) continue diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm index 811fc690c55..6b3ce27b5ce 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm @@ -24,7 +24,7 @@ /mob/living/carbon/xenomorph/king/Initialize(mapload) . = ..() - playsound(loc, 'sound/voice/xenos_roaring.ogg', 75, 0) + playsound(loc, 'sound/voice/alien/xenos_roaring.ogg', 75, 0) /mob/living/carbon/xenomorph/king/generate_name() var/playtime_mins = client?.get_exp(xeno_caste.caste_name) @@ -48,4 +48,4 @@ mind.name = name /mob/living/carbon/xenomorph/king/death_cry() - playsound(loc, 'sound/voice/alien_king_died.ogg', 75, 0) + playsound(loc, 'sound/voice/alien/king_died.ogg', 75, 0) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm b/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm index 49461bc044f..d2cd95efa17 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm @@ -38,7 +38,7 @@ xenomorph_owner.add_filter("defender_tail_sweep", 2, gauss_blur_filter(1)) //Add cool SFX xenomorph_owner.spin(4, 1) xenomorph_owner.enable_throw_parry(0.6 SECONDS) - playsound(xenomorph_owner,pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg'), 25, 1) //Sound effects + playsound(xenomorph_owner,pick('sound/effects/alien/tail_swipe1.ogg','sound/effects/alien/tail_swipe2.ogg','sound/effects/alien/tail_swipe3.ogg'), 25, 1) //Sound effects var/sweep_range = 1 var/list/L = orange(sweep_range, xenomorph_owner) // Not actually the fruit @@ -69,7 +69,7 @@ /datum/action/ability/xeno_action/tearingtail/on_cooldown_finish() var/mob/living/carbon/xenomorph/xenomorph_owner = owner to_chat(xenomorph_owner, span_notice("We gather enough strength to tear the skin again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /////////////////////////////////// @@ -93,7 +93,7 @@ /datum/action/ability/activable/xeno/adrenalinejump/on_cooldown_finish() to_chat(owner, span_xenodanger("We ready ourselves to jump again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/activable/xeno/adrenalinejump/can_use_ability(atom/A, silent = FALSE, override_flags) @@ -391,13 +391,13 @@ evade_active = FALSE //Evasion is no longer active owner.balloon_alert(owner, "Evasion ended") - owner.playsound_local(owner, 'sound/voice/hiss5.ogg', 50) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50) #define PANTHER_EVASION_RUN_DELAY 0.5 SECONDS // If the time since the Runner last moved is equal to or greater than this, its Evasion ends. /datum/action/ability/xeno_action/evasive_maneuvers/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to take evasive action again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() @@ -455,7 +455,7 @@ xenomorph_owner.do_jitter_animation(4000) var/turf/our_turf = get_turf(xenomorph_owner) //location of after image SFX - playsound(our_turf, pick('sound/effects/throw.ogg','sound/effects/alien_tail_swipe1.ogg', 'sound/effects/alien_tail_swipe2.ogg'), 25, 1) //sound effects + playsound(our_turf, pick('sound/effects/throw.ogg','sound/effects/alien/tail_swipe1.ogg', 'sound/effects/alien/tail_swipe2.ogg'), 25, 1) //sound effects var/obj/effect/temp_visual/xenomorph/afterimage/our_afterimage for(var/i = 0 to 2) //number of after images our_afterimage = new /obj/effect/temp_visual/xenomorph/afterimage(our_turf, owner) //Create the after image. diff --git a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm index 70e47599d0b..f2eb176f0a7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm @@ -37,7 +37,7 @@ /datum/action/ability/activable/xeno/scatter_spit/on_cooldown_finish() to_chat(owner, span_xenodanger("Our auxiliary sacks fill to bursting; we can use scatter spit again.")) - owner.playsound_local(owner, 'sound/voice/alien_drool1.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/drool1.ogg', 25, 0, 1) return ..() // *************************************** diff --git a/code/modules/mob/living/carbon/xenomorph/castes/predalien/abilities_predalien.dm b/code/modules/mob/living/carbon/xenomorph/castes/predalien/abilities_predalien.dm index 25bfe60f699..de0646270f2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/predalien/abilities_predalien.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/predalien/abilities_predalien.dm @@ -19,7 +19,7 @@ ///Triggers the effect of a successful pounce on the target. /datum/action/ability/activable/xeno/pounce/predalien/trigger_pounce_effect(mob/living/living_target) - playsound(get_turf(living_target), 'sound/voice/predalien_pounce.ogg', 25, TRUE) + playsound(get_turf(living_target), 'sound/voice/alien/predalien/pounce.ogg', 25, TRUE) var/mob/living/carbon/xenomorph/xeno_owner = owner xeno_owner.set_throwing(FALSE) xeno_owner.Immobilize(XENO_POUNCE_STANDBY_DURATION) @@ -40,7 +40,7 @@ cooldown_duration = 25 SECONDS ability_cost = 50 - var/predalien_roar = list("sound/voice/predalien_roar.ogg") + var/predalien_roar = list("sound/voice/alien/predalien/roar.ogg") var/bonus_damage_scale = 2.5 var/bonus_speed_scale = 0.05 @@ -90,7 +90,7 @@ ability_cost = 80 var/freeze_duration = 1.5 SECONDS - var/smash_sounds = list('sound/effects/alien_footstep_charge1.ogg', 'sound/effects/alien_footstep_charge2.ogg', 'sound/effects/alien_footstep_charge3.ogg') + var/smash_sounds = list('sound/effects/footstep/alien/charge1.ogg', 'sound/effects/footstep/alien/charge2.ogg', 'sound/effects/footstep/alien/charge3.ogg') /datum/action/ability/activable/xeno/smash/can_use_ability(atom/target, silent = FALSE, override_flags) . = ..() @@ -196,7 +196,7 @@ xeno.setDir(turn(xeno.dir, 90)) xeno.do_attack_animation(carbon, ATTACK_EFFECT_BITE) - playsound(xeno, 'sound/voice/predalien_growl.ogg', 75, 0) + playsound(xeno, 'sound/voice/alien/predalien/growl.ogg', 75, 0) xeno.anchored = FALSE xeno.SetImmobilized(0) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm index 03580ce55a5..eafdf370085 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm @@ -37,7 +37,7 @@ var/queens_word = "HIVE MESSAGE:
" + input var/sound/queen_sound = sound(get_sfx("queen"), channel = CHANNEL_ANNOUNCEMENTS) - var/sound/king_sound = sound('sound/voice/xenos_roaring.ogg', channel = CHANNEL_ANNOUNCEMENTS) + var/sound/king_sound = sound('sound/voice/alien/xenos_roaring.ogg', channel = CHANNEL_ANNOUNCEMENTS) for(var/mob/living/carbon/xenomorph/X AS in Q.hive.get_all_xenos()) switch(Q.caste_base_type) if(/mob/living/carbon/xenomorph/queen) @@ -92,7 +92,7 @@ succeed_activate() add_cooldown() - playsound(X.loc, 'sound/voice/alien_queen_screech.ogg', 75, 0) + playsound(X.loc, 'sound/voice/alien/queen/screech.ogg', 75, 0) X.visible_message(span_xenohighdanger("\The [X] emits an ear-splitting guttural roar!")) GLOB.round_statistics.queen_screech++ SSblackbox.record_feedback("tally", "round_statistics", 1, "queen_screech") @@ -155,7 +155,7 @@ continue affected_xeno.apply_status_effect(/datum/status_effect/plasma_surge, affected_xeno.xeno_caste.plasma_max / 3, bonus_regen, duration) - playsound(X.loc, 'sound/voice/alien_plasma_screech.ogg', 75, 0) + playsound(X.loc, 'sound/voice/alien/queen/screech_plasma.ogg', 75, 0) X.visible_message(span_xenohighdanger("\The [X] emits an ear-splitting guttural roar!")) succeed_activate() @@ -188,7 +188,7 @@ for(var/mob/living/carbon/xenomorph/affected_xeno in cheap_get_xenos_near(X, screech_range)) affected_xeno.apply_status_effect(/datum/status_effect/frenzy_screech, buff_duration, buff_damage_modifier) - playsound(X.loc, 'sound/voice/alien_frenzy_screech.ogg', 75, 0) + playsound(X.loc, 'sound/voice/alien/queen/screech_frenzy.ogg', 75, 0) X.visible_message(span_xenohighdanger("\The [X] emits an ear-splitting guttural roar!")) succeed_activate() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm index 32ab7a3b7b2..b6b6feb4211 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm @@ -31,7 +31,7 @@ RegisterSignal(src, COMSIG_HIVE_BECOME_RULER, PROC_REF(on_becoming_ruler)) . = ..() hive.RegisterSignal(src, COMSIG_HIVE_XENO_DEATH, TYPE_PROC_REF(/datum/hive_status, on_queen_death)) - playsound(loc, 'sound/voice/alien_queen_command.ogg', 75, 0) + playsound(loc, 'sound/voice/alien/queen/command.ogg', 75, 0) // *************************************** // *********** Mob overrides @@ -98,7 +98,7 @@ // *********** Death // *************************************** /mob/living/carbon/xenomorph/queen/death_cry() - playsound(loc, 'sound/voice/alien_queen_died.ogg', 75, 0) + playsound(loc, 'sound/voice/alien/queen/died.ogg', 75, 0) /mob/living/carbon/xenomorph/queen/xeno_death_alert() return diff --git a/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm b/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm index aac732b46d4..5672ebd1b6e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm @@ -34,7 +34,7 @@ /datum/action/ability/activable/xeno/charge/on_cooldown_finish() to_chat(owner, span_xenodanger("Our exoskeleton quivers as we get ready to use [name] again.")) - playsound(owner, "sound/effects/xeno_newlarva.ogg", 50, 0, 1) + playsound(owner, "sound/effects/alien/newlarva.ogg", 50, 0, 1) return ..() /datum/action/ability/activable/xeno/charge/ai_should_start_consider() @@ -105,7 +105,7 @@ /datum/action/ability/activable/xeno/ravage/on_cooldown_finish() to_chat(owner, span_xenodanger("We gather enough strength to Ravage again.")) - playsound(owner, "sound/effects/xeno_newlarva.ogg", 50, 0, 1) + playsound(owner, "sound/effects/alien/newlarva.ogg", 50, 0, 1) return ..() /datum/action/ability/activable/xeno/ravage/use_ability(atom/A) @@ -209,7 +209,7 @@ /datum/action/ability/xeno_action/endure/on_cooldown_finish() to_chat(owner, span_xenodanger("We feel able to imbue ourselves with plasma to Endure once again!")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/xeno_action/endure/action_activate() @@ -246,7 +246,7 @@ if(QDELETED(owner)) return to_chat(owner,span_highdanger("We feel the plasma draining from our veins... [initial(name)] will last for only [timeleft(endure_duration) * 0.1] more seconds!")) - owner.playsound_local(owner, 'sound/voice/hiss4.ogg', 50, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50, 0, 1) ///Turns off the Endure buff /datum/action/ability/xeno_action/endure/proc/endure_deactivate() @@ -276,7 +276,7 @@ endure_warning_duration = initial(endure_warning_duration) to_chat(owner,span_highdanger("The last of the plasma drains from our body... We can no longer endure beyond our normal limits!")) - owner.playsound_local(owner, 'sound/voice/hiss4.ogg', 50, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50, 0, 1) ///Warns us when our health is critically low and tells us exactly how much more punishment we can take /datum/action/ability/xeno_action/endure/proc/damage_taken(mob/living/carbon/xenomorph/X, damage_taken) @@ -326,7 +326,7 @@ /datum/action/ability/xeno_action/rage/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to enter our rage once again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() /datum/action/ability/xeno_action/rage/can_use_action(atom/A, silent = FALSE, override_flags) @@ -359,7 +359,7 @@ //Roar SFX; volume scales with rage - playsound(X.loc, 'sound/voice/alien_roar2.ogg', clamp(100 * rage_power, 25, 80), 0) + playsound(X.loc, 'sound/voice/alien/roar2.ogg', clamp(100 * rage_power, 25, 80), 0) var/bonus_duration if(rage_power >= RAVAGER_RAGE_SUPER_RAGE_THRESHOLD) //If we're super pissed it's time to get crazy @@ -428,7 +428,7 @@ RU TGMC EDIT */ if(QDELETED(owner)) return to_chat(owner,span_highdanger("Our rage begins to subside... [initial(name)] will only last for only [(RAVAGER_RAGE_DURATION + bonus_duration) * (1-RAVAGER_RAGE_WARNING) * 0.1] more seconds!")) - owner.playsound_local(owner, 'sound/voice/hiss4.ogg', 50, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50, 0, 1) ///Warns the user when his rage is about to end. /datum/action/ability/xeno_action/rage/proc/drain_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod) @@ -482,7 +482,7 @@ RU TGMC EDIT */ //rage_sunder = 0 //RU TGMC EDIT rage_power = 0 rage_plasma = 0 - X.playsound_local(X, 'sound/voice/hiss5.ogg', 50) //Audio cue + X.playsound_local(X, 'sound/voice/alien/hiss8.ogg', 50) //Audio cue // *************************************** diff --git a/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm index 5c899221807..d5c71092b96 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm @@ -61,7 +61,7 @@ if(COOLDOWN_CHECK(src, savage_cooldown)) button.cut_overlay(visual_references[VREF_MUTABLE_SAVAGE_COOLDOWN]) owner.balloon_alert(owner, "Savage ready") - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) STOP_PROCESSING(SSprocessing, src) return button.cut_overlay(visual_references[VREF_MUTABLE_SAVAGE_COOLDOWN]) @@ -101,7 +101,7 @@ /datum/action/ability/xeno_action/evasion/on_cooldown_finish() . = ..() owner.balloon_alert(owner, "Evasion ready") - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) /datum/action/ability/xeno_action/evasion/can_use_action(silent = FALSE, override_flags) . = ..() @@ -195,7 +195,7 @@ evasion_stacks = 0 evasion_duration = 0 owner.balloon_alert(owner, "Evasion ended") - owner.playsound_local(owner, 'sound/voice/hiss5.ogg', 50) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50) var/mob/living/carbon/xenomorph/runner/runner_owner = owner runner_owner.hud_set_evasion(evasion_duration) @@ -245,7 +245,7 @@ if(auto_evasion && xeno_owner.plasma_stored >= ability_cost) action_activate() var/turf/current_turf = get_turf(xeno_owner) //location of after image SFX - playsound(current_turf, pick('sound/effects/throw.ogg','sound/effects/alien_tail_swipe1.ogg', 'sound/effects/alien_tail_swipe2.ogg'), 25, 1) //sound effects + playsound(current_turf, pick('sound/effects/throw.ogg','sound/effects/alien/tail_swipe1.ogg', 'sound/effects/alien/tail_swipe2.ogg'), 25, 1) //sound effects var/obj/effect/temp_visual/xenomorph/afterimage/after_image for(var/i=0 to 2) //number of after images after_image = new /obj/effect/temp_visual/xenomorph/afterimage(current_turf, owner) //Create the after image. @@ -329,7 +329,7 @@ if(!stolen_item) victim.balloon_alert(owner, "Snatch failed, no item") return fail_activate() - playsound(owner, 'sound/voice/alien_pounce2.ogg', 30) + playsound(owner, 'sound/voice/alien/pounce2.ogg', 30) victim.dropItemToGround(stolen_item, TRUE) stolen_item.forceMove(owner) stolen_appearance = mutable_appearance(stolen_item.icon, stolen_item.icon_state) @@ -382,6 +382,6 @@ stolen_item.forceMove(get_turf(owner)) stolen_item = null owner.overlays -= stolen_appearance - playsound(owner, 'sound/voice/alien_pounce2.ogg', 30, frequency = -1) + playsound(owner, 'sound/voice/alien/pounce2.ogg', 30, frequency = -1) UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm index 929fe567b5e..74f50fe83f4 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm @@ -60,7 +60,7 @@ ability_duration = addtimer(CALLBACK(src, PROC_REF(toxic_slash_deactivate), xeno_owner), SENTINEL_TOXIC_SLASH_DURATION, TIMER_STOPPABLE) //Initiate the timer and set the timer ID for reference RegisterSignal(xeno_owner, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(toxic_slash)) xeno_owner.balloon_alert(xeno_owner, "Toxic Slash active") - xeno_owner.playsound_local(xeno_owner, 'sound/voice/alien_drool2.ogg', 25) + xeno_owner.playsound_local(xeno_owner, 'sound/voice/alien/drool2.ogg', 25) action_icon_state = "neuroclaws_on" particle_holder = new(owner, /particles/toxic_slash) particle_holder.pixel_x = 9 @@ -93,11 +93,11 @@ ability_duration = null QDEL_NULL(particle_holder) xeno_owner.balloon_alert(xeno_owner, "Toxic Slash over") //Let the user know - xeno_owner.playsound_local(xeno_owner, 'sound/voice/hiss5.ogg', 25) + xeno_owner.playsound_local(xeno_owner, 'sound/voice/alien/hiss8.ogg', 25) action_icon_state = "neuroclaws_off" /datum/action/ability/xeno_action/toxic_slash/on_cooldown_finish() - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) owner.balloon_alert(owner, "Toxic Slash ready") return ..() @@ -168,7 +168,7 @@ HEAL_XENO_DAMAGE(xeno_owner, drain_potency, FALSE) xeno_owner.gain_plasma(drain_potency * 3.5) xeno_owner.do_attack_animation(xeno_target, ATTACK_EFFECT_DRAIN_STING) - playsound(owner.loc, 'sound/effects/alien_tail_swipe1.ogg', 30) + playsound(owner.loc, 'sound/effects/alien/tail_swipe1.ogg', 30) xeno_owner.visible_message(message = span_xenowarning("\A [xeno_owner] stings [xeno_target]!"), self_message = span_xenowarning("We sting [xeno_target]!")) debuff.stacks -= round(debuff.stacks * 0.7) succeed_activate() @@ -177,7 +177,7 @@ SSblackbox.record_feedback("tally", "round_statistics", 1, "sentinel_drain_stings") /datum/action/ability/activable/xeno/drain_sting/on_cooldown_finish() - playsound(owner.loc, 'sound/voice/alien_drool1.ogg', 50, 1) + playsound(owner.loc, 'sound/voice/alien/drool1.ogg', 50, 1) owner.balloon_alert(owner, "Drain Sting ready") return ..() @@ -220,7 +220,7 @@ smoke_duration = 4 dangerous = TRUE smoketype = /datum/effect_system/smoke_spread/xeno/toxic - arm_sound = 'sound/voice/alien_yell_alt.ogg' + arm_sound = 'sound/voice/alien/yell_alt.ogg' smokeradius = 3 /obj/item/explosive/grenade/smokebomb/xeno/update_overlays() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm b/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm index 22cdd0196ad..f74cdbcb04c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm @@ -94,7 +94,7 @@ /datum/action/ability/activable/xeno/spray_acid/line/on_cooldown_finish() //Give acid spray a proper cooldown notification to_chat(owner, span_xenodanger("Our dermal pouches bloat with fresh acid; we can use acid spray again.")) - owner.playsound_local(owner, 'sound/voice/alien_drool2.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/drool2.ogg', 25, 0, 1) return ..() // *************************************** @@ -135,5 +135,5 @@ /datum/action/ability/activable/xeno/scatter_spit/on_cooldown_finish() to_chat(owner, span_xenodanger("Our auxiliary sacks fill to bursting; we can use scatter spit again.")) - owner.playsound_local(owner, 'sound/voice/alien_drool1.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/drool1.ogg', 25, 0, 1) return ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm index 4e94675eea2..7ce5071e9b4 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm @@ -172,7 +172,7 @@ affected.throw_at(throwlocation, 4, 1, owner, TRUE) playsound(owner,'sound/effects/bamf.ogg', 75, TRUE) - playsound(owner, 'sound/voice/alien_roar_warlock.ogg', 25) + playsound(owner, 'sound/voice/alien/roar_warlock.ogg', 25) GLOB.round_statistics.psy_shield_blasts++ SSblackbox.record_feedback("tally", "round_statistics", 1, "psy_shield_blasts") diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warrior/abilities_warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/warrior/abilities_warrior.dm index e033747fb01..06775cfa9eb 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warrior/abilities_warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warrior/abilities_warrior.dm @@ -59,7 +59,7 @@ /// Happens when Empower fades. /datum/action/ability/xeno_action/empower/proc/empower_fade() - owner.playsound_local(owner, 'sound/voice/hiss4.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 25, 0, 1) clear_empower() @@ -772,5 +772,5 @@ RU TGMC EDIT*/ /datum/action/ability/activable/xeno/warrior/punch/jab/on_cooldown_finish() var/mob/living/carbon/xenomorph/xeno_owner = owner xeno_owner.balloon_alert(xeno_owner, "Jab ready") - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm index b086e6e5fb6..a85be7c090c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm @@ -147,7 +147,7 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( /datum/action/ability/activable/xeno/blink/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to blink again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() // *************************************** @@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( return to_chat(owner,span_highdanger("Our banishment target [banishment_target.name] is about to return to reality at [AREACOORD_NO_Z(portal)]!")) - owner.playsound_local(owner, 'sound/voice/hiss4.ogg', 50, 0, 1) + owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50, 0, 1) ///Ends the effect of the Banish ability /datum/action/ability/activable/xeno/banish/proc/banish_deactivate() @@ -338,7 +338,7 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( /datum/action/ability/activable/xeno/banish/on_cooldown_finish() to_chat(owner, span_xenodanger("We are able to banish again.")) - owner.playsound_local(owner, 'sound/effects/xeno_newlarva.ogg', 25, 0, 1) + owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) return ..() // *************************************** diff --git a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm index 5c3457aa490..e67512fc590 100644 --- a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm +++ b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm @@ -111,7 +111,7 @@ if(X.client.prefs.mute_xeno_health_alert_messages) //Build the filter list; people who opted not to receive health alert messages filter_list += X //Add the xeno to the filter list - xeno_message("Our sister [name] is badly hurt with ([health]/[maxHealth]) health remaining at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, hivenumber, FALSE, src, 'sound/voice/alien_help1.ogg', TRUE, filter_list, /atom/movable/screen/arrow/silo_damaged_arrow) + xeno_message("Our sister [name] is badly hurt with ([health]/[maxHealth]) health remaining at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, hivenumber, FALSE, src, 'sound/voice/alien/help1.ogg', TRUE, filter_list, /atom/movable/screen/arrow/silo_damaged_arrow) COOLDOWN_START(src, xeno_health_alert_cooldown, XENO_HEALTH_ALERT_COOLDOWN) //set the cooldown. return damage diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index c5a7573d96a..272e1eb20aa 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -1,6 +1,6 @@ /mob/living/carbon/xenomorph/proc/death_cry() - playsound(loc, prob(50) ? 'sound/voice/alien_death.ogg' : 'sound/voice/alien_death2.ogg', 25, 1) + playsound(loc, prob(50) ? 'sound/voice/alien/death.ogg' : 'sound/voice/alien/death2.ogg', 25, 1) /mob/living/carbon/xenomorph/death(gibbing, deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw.", silent) diff --git a/code/modules/mob/living/carbon/xenomorph/egg.dm b/code/modules/mob/living/carbon/xenomorph/egg.dm index f67ceb114ab..5caa4d308b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/egg.dm +++ b/code/modules/mob/living/carbon/xenomorph/egg.dm @@ -116,7 +116,7 @@ advance_maturity(stage_ready_to_burst + 1) for(var/turf/turf_to_watch AS in filled_turfs(src, trigger_size, "circle", FALSE)) UnregisterSignal(turf_to_watch, COMSIG_ATOM_ENTERED) - playsound(loc, "sound/effects/alien_egg_move.ogg", 25) + playsound(loc, "sound/effects/alien/egg_move.ogg", 25) flick("egg opening", src) var/mob/living/carbon/xenomorph/facehugger/new_hugger = new(loc) @@ -162,10 +162,10 @@ return if(via_damage) hugger_type = null - playsound(loc, "sound/effects/alien_egg_burst.ogg", 30) + playsound(loc, "sound/effects/alien/egg_burst.ogg", 30) flick("egg exploding", src) return - playsound(src.loc, "sound/effects/alien_egg_move.ogg", 25) + playsound(src.loc, "sound/effects/alien/egg_move.ogg", 25) flick("egg opening", src) addtimer(CALLBACK(src, PROC_REF(spawn_hugger), loc), 1 SECONDS) @@ -277,11 +277,11 @@ return var/spread = EGG_GAS_DEFAULT_SPREAD if(via_damage) // More violent destruction, more gas. - playsound(loc, "sound/effects/alien_egg_burst.ogg", 30) + playsound(loc, "sound/effects/alien/egg_burst.ogg", 30) flick("egg gas exploding", src) spread = EGG_GAS_KILL_SPREAD else - playsound(src.loc, "sound/effects/alien_egg_move.ogg", 25) + playsound(src.loc, "sound/effects/alien/egg_move.ogg", 25) flick("egg gas opening", src) spread += gas_size_bonus diff --git a/code/modules/mob/living/carbon/xenomorph/embryo.dm b/code/modules/mob/living/carbon/xenomorph/embryo.dm index 58aedefb467..a3dae7170e5 100644 --- a/code/modules/mob/living/carbon/xenomorph/embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/embryo.dm @@ -162,7 +162,7 @@ if(picked) picked.mind.transfer_to(new_xeno, TRUE) to_chat(new_xeno, span_xenoannounce("We are a xenomorph larva inside a host! Move to burst out of it!")) - new_xeno << sound('sound/effects/xeno_newlarva.ogg') + new_xeno << sound('sound/effects/alien/newlarva.ogg') stage = 6 @@ -209,7 +209,7 @@ forceMove(veh.exit_location(src)) else forceMove(get_turf(victim)) //moved to the turf directly so we don't get stuck inside a cryopod or another mob container. - playsound(src, pick('sound/voice/alien_chestburst.ogg','sound/voice/alien_chestburst2.ogg'), 25) + playsound(src, pick('sound/voice/alien/chestburst.ogg','sound/voice/alien/chestburst2.ogg'), 25) GLOB.round_statistics.total_larva_burst++ SSblackbox.record_feedback("tally", "round_statistics", 1, "total_larva_burst") var/obj/item/alien_embryo/AE = locate() in victim diff --git a/code/modules/mob/living/carbon/xenomorph/emote.dm b/code/modules/mob/living/carbon/xenomorph/emote.dm index cc524fc7fda..33927f20f1d 100644 --- a/code/modules/mob/living/carbon/xenomorph/emote.dm +++ b/code/modules/mob/living/carbon/xenomorph/emote.dm @@ -15,23 +15,23 @@ key_third_person = "growls" message = "growls!" emote_type = EMOTE_AUDIBLE - predalien_sound = 'sound/voice/predalien_growl.ogg' - sound = 'sound/voice/alien_growl1.ogg' + predalien_sound = 'sound/voice/alien/predalien/growl.ogg' + sound = 'sound/voice/alien/growl1.ogg' /datum/emote/living/carbon/xenomorph/growl/one key = "growl1" - sound = 'sound/voice/alien_growl1.ogg' + sound = 'sound/voice/alien/growl1.ogg' /datum/emote/living/carbon/xenomorph/growl/two key = "growl2" - sound = 'sound/voice/alien_growl2.ogg' + sound = 'sound/voice/alien/growl2.ogg' /datum/emote/living/carbon/xenomorph/growl/three key = "growl3" - sound = 'sound/voice/alien_growl3.ogg' + sound = 'sound/voice/alien/growl3.ogg' /datum/emote/living/carbon/xenomorph/hiss @@ -39,23 +39,23 @@ key_third_person = "hisses" message = "hisses!" emote_type = EMOTE_AUDIBLE - predalien_sound = 'sound/voice/predalien_hiss.ogg' - sound = 'sound/voice/alien_hiss1.ogg' + predalien_sound = 'sound/voice/alien/predalien/hiss.ogg' + sound = 'sound/voice/alien/hiss1.ogg' /datum/emote/living/carbon/xenomorph/hiss/one key = "hiss1" - sound = 'sound/voice/alien_hiss1.ogg' + sound = 'sound/voice/alien/hiss1.ogg' /datum/emote/living/carbon/xenomorph/hiss/two key = "hiss2" - sound = 'sound/voice/alien_hiss2.ogg' + sound = 'sound/voice/alien/hiss2.ogg' /datum/emote/living/carbon/xenomorph/hiss/three key = "hiss3" - sound = 'sound/voice/alien_hiss3.ogg' + sound = 'sound/voice/alien/hiss3.ogg' /datum/emote/living/carbon/xenomorph/needhelp @@ -63,17 +63,17 @@ key_third_person = "needshelp" message = "needs help!" emote_type = EMOTE_AUDIBLE - sound = 'sound/voice/alien_help1.ogg' + sound = 'sound/voice/alien/help1.ogg' /datum/emote/living/carbon/xenomorph/needhelp/one key = "needhelp1" - sound = 'sound/voice/alien_help1.ogg' + sound = 'sound/voice/alien/help1.ogg' /datum/emote/living/carbon/xenomorph/needhelp/two key = "needhelp2" - sound = 'sound/voice/alien_help2.ogg' + sound = 'sound/voice/alien/help2.ogg' /datum/emote/living/carbon/xenomorph/roar @@ -81,38 +81,38 @@ key_third_person = "roars" message = "roars!" emote_type = EMOTE_AUDIBLE - predalien_sound = 'sound/voice/predalien_roar.ogg' - sound = 'sound/voice/alien_roar1.ogg' + predalien_sound = 'sound/voice/alien/predalien/roar.ogg' + sound = 'sound/voice/alien/roar1.ogg' /datum/emote/living/carbon/xenomorph/roar/one key = "roar1" - sound = 'sound/voice/alien_roar1.ogg' + sound = 'sound/voice/alien/roar1.ogg' /datum/emote/living/carbon/xenomorph/roar/two key = "roar2" - sound = 'sound/voice/alien_roar2.ogg' + sound = 'sound/voice/alien/roar2.ogg' /datum/emote/living/carbon/xenomorph/roar/three key = "roar3" - sound = 'sound/voice/alien_roar3.ogg' + sound = 'sound/voice/alien/roar3.ogg' /datum/emote/living/carbon/xenomorph/roar/four key = "roar4" - sound = 'sound/voice/alien_roar4.ogg' + sound = 'sound/voice/alien/roar4.ogg' /datum/emote/living/carbon/xenomorph/roar/five key = "roar5" - sound = 'sound/voice/alien_roar5.ogg' + sound = 'sound/voice/alien/roar5.ogg' /datum/emote/living/carbon/xenomorph/roar/six key = "roar6" - sound = 'sound/voice/alien_roar6.ogg' + sound = 'sound/voice/alien/roar6.ogg' /datum/emote/living/carbon/xenomorph/tail @@ -120,22 +120,22 @@ key_third_person = "tailsweeps" message = "swipes its tail." emote_type = EMOTE_AUDIBLE - sound = 'sound/effects/alien_tail_swipe1.ogg' + sound = 'sound/effects/alien/tail_swipe1.ogg' /datum/emote/living/carbon/xenomorph/tail/one key = "tail1" - sound = 'sound/effects/alien_tail_swipe1.ogg' + sound = 'sound/effects/alien/tail_swipe1.ogg' /datum/emote/living/carbon/xenomorph/tail/two key = "tail2" - sound = 'sound/effects/alien_tail_swipe2.ogg' + sound = 'sound/effects/alien/tail_swipe2.ogg' /datum/emote/living/carbon/xenomorph/tail/three key = "tail3" - sound = 'sound/effects/alien_tail_swipe3.ogg' + sound = 'sound/effects/alien/tail_swipe3.ogg' /datum/emote/living/carbon/xenomorph/run_emote(mob/user, params, type_override, intentional = FALSE, prefix) diff --git a/code/modules/mob/living/carbon/xenomorph/facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/facehuggers.dm index b39fb232626..23529590f74 100644 --- a/code/modules/mob/living/carbon/xenomorph/facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/facehuggers.dm @@ -594,7 +594,7 @@ kill_hugger() else reset_attach_status(as_planned) - playsound(loc, 'sound/voice/alien_facehugger_dies.ogg', 25, 1) + playsound(loc, 'sound/voice/alien/facehugger_dies.ogg', 25, 1) activetimer = addtimer(CALLBACK(src, PROC_REF(go_active)), activate_time, TIMER_STOPPABLE|TIMER_UNIQUE) update_icon() @@ -621,7 +621,7 @@ remove_danger_overlay() //Remove the danger overlay update_icon() - playsound(loc, 'sound/voice/alien_facehugger_dies.ogg', 25, 1) + playsound(loc, 'sound/voice/alien/facehugger_dies.ogg', 25, 1) layer = BELOW_MOB_LAYER //so dead hugger appears below live hugger if stacked on same tile. diff --git a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm index b127aa0c497..3360e6c0120 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm @@ -1266,7 +1266,7 @@ to_chat will check for valid clients itself already so no need to double check f message_admins("[key_name(xeno_candidate)] has joined as [ADMIN_TPMONTY(new_xeno)].") xeno_candidate.mob.mind.transfer_to(new_xeno, TRUE) - new_xeno.playsound_local(new_xeno, 'sound/effects/xeno_newlarva.ogg') + new_xeno.playsound_local(new_xeno, 'sound/effects/alien/newlarva.ogg') to_chat(new_xeno, span_xenoannounce("We are a xenomorph larva awakened from slumber!")) if(!larva_already_reserved) xeno_job.occupy_job_positions(1) diff --git a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm index 31e79e28f98..f7e53ce3d59 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm @@ -261,7 +261,7 @@ if(evolution_stored == xeno_caste.evolution_threshold) to_chat(src, span_xenodanger("Our carapace crackles and our tendons strengthen. We are ready to evolve!")) - SEND_SOUND(src, sound('sound/effects/xeno_evolveready.ogg')) + SEND_SOUND(src, sound('sound/effects/alien/evolveready.ogg')) //This deals with "throwing" xenos -- ravagers, hunters, and runners in particular. Everyone else defaults to normal diff --git a/code/modules/mob/living/silicon/ai/ai_notifications.dm b/code/modules/mob/living/silicon/ai/ai_notifications.dm index 59bfb1049bd..7c3b481b6c2 100644 --- a/code/modules/mob/living/silicon/ai/ai_notifications.dm +++ b/code/modules/mob/living/silicon/ai/ai_notifications.dm @@ -45,14 +45,14 @@ SIGNAL_HANDLER var/area/A = get_area(lockedship) to_chat(src, span_notice("Electronic corruption detected at [A]! Controls overridden!")) - playsound_local(src, 'sound/voice/4_xeno_roars.ogg', 15) + playsound_local(src, 'sound/voice/alien/4_roars.ogg', 15) notify_ai(src, " Electronic corruption detected at [A]! Controls overridden! " , source = lockedship, action = NOTIFY_AI_ALERT, notify_volume = 15) ///Receive notifications about the tad control equipment being destroyed /mob/living/silicon/ai/proc/receive_tad_warning(datum/source, obj/machinery/computer/camera_advanced/shuttle_docker/minidropship/ruinedtad) SIGNAL_HANDLER to_chat(src, span_notice("Telemetry from our mini dropship reports that the controls have become nonfunctional!")) - notify_ai(src, " Telemetry from our mini dropship reports that the controls have become nonfunctional! ", ai_sound = 'sound/voice/4_xeno_roars.ogg', source = ruinedtad, action = NOTIFY_AI_ALERT, notify_volume = 15) + notify_ai(src, " Telemetry from our mini dropship reports that the controls have become nonfunctional! ", ai_sound = 'sound/voice/alien/4_roars.ogg', source = ruinedtad, action = NOTIFY_AI_ALERT, notify_volume = 15) ///Receive notifications about disks being generated /mob/living/silicon/ai/proc/show_disk_complete(datum/source, obj/machinery/computer/nuke_disk_generator/generatingcomputer) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 75a9bb9dccc..6fc64779728 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -45,5 +45,5 @@ if(stat == DEAD) return ..() if(!gibbing && !silent) - playsound(src, 'sound/voice/alien_death.ogg', 50, TRUE) + playsound(src, 'sound/voice/alien/death.ogg', 50, TRUE) return ..() diff --git a/code/modules/predator/yautja/bracers.dm b/code/modules/predator/yautja/bracers.dm index c8219aa155c..deae7ceb1f1 100644 --- a/code/modules/predator/yautja/bracers.dm +++ b/code/modules/predator/yautja/bracers.dm @@ -616,7 +616,7 @@ exploding = TRUE var/turf/T = get_turf(src) if(explosion_type == SD_TYPE_BIG && victim.stat == CONSCIOUS && (is_ground_level(T.z) || SSticker.mode.flags_round_type & MODE_SHIPSIDE_SD)) - playsound(src, 'sound/voice/pred_deathlaugh.ogg', 100, 0, 17) + playsound(src, 'sound/voice/predator/deathlaugh.ogg', 100, 0, 17) playsound(src, 'sound/effects/pred_countdown.ogg', 100, 0, 17) message_admins(font_size_xl("CLICK TO CANCEL THIS PRED SD")) diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 1df73bcf698..ed8c6e0de7f 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -155,7 +155,7 @@ */ /datum/action/vehicle/sealed/mecha/skyfall/proc/land() chassis.visible_message(span_danger("[chassis] lands from above!")) - playsound(chassis, 'sound/effects/explosion_large1.ogg', 50, 1) + playsound(chassis, 'sound/effects/explosion/large1.ogg', 50, 1) chassis.resistance_flags &= ~INDESTRUCTIBLE chassis.mecha_flags &= ~(QUIET_STEPS|QUIET_TURNS|CANNOT_INTERACT) chassis.phasing = initial(chassis.phasing) diff --git a/code/modules/xenomorph/silo.dm b/code/modules/xenomorph/silo.dm index ef3e9ac28ff..1bc6a028beb 100644 --- a/code/modules/xenomorph/silo.dm +++ b/code/modules/xenomorph/silo.dm @@ -61,9 +61,9 @@ if(GLOB.hive_datums[hivenumber]) INVOKE_NEXT_TICK(SSticker.mode, TYPE_PROC_REF(/datum/game_mode, update_silo_death_timer), GLOB.hive_datums[hivenumber]) // checks all silos next tick after this one is gone UnregisterSignal(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK)) - GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien_help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) + GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien/help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) notify_ghosts("\ A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", source = get_turf(src), action = NOTIFY_JUMP) - playsound(loc,'sound/effects/alien_egg_burst.ogg', 75) + playsound(loc,'sound/effects/alien/egg_burst.ogg', 75) return ..() /obj/structure/xeno/silo/Destroy() @@ -106,7 +106,7 @@ return warning = TRUE update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien/help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) COOLDOWN_START(src, silo_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_HEALTH_ALERT_COOLDOWN) //clear warning @@ -131,7 +131,7 @@ warning = TRUE update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien/help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) COOLDOWN_START(src, silo_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning diff --git a/code/modules/xenomorph/spawner.dm b/code/modules/xenomorph/spawner.dm index 441780081b0..28747bb1f22 100644 --- a/code/modules/xenomorph/spawner.dm +++ b/code/modules/xenomorph/spawner.dm @@ -53,7 +53,7 @@ return warning = TRUE update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien/help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) COOLDOWN_START(src, spawner_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning @@ -79,7 +79,7 @@ warning = TRUE update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien/help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) COOLDOWN_START(src, spawner_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning diff --git a/code/modules/xenomorph/trap.dm b/code/modules/xenomorph/trap.dm index f6180ad44ae..a8cfea59a82 100644 --- a/code/modules/xenomorph/trap.dm +++ b/code/modules/xenomorph/trap.dm @@ -121,7 +121,7 @@ if(TRAP_ACID_STRONG) for(var/turf/acided AS in RANGE_TURFS(1, src)) new /obj/effect/xenomorph/spray/strong(acided, 12 SECONDS, XENO_HIGH_ACID_PUDDLE_DAMAGE) - xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) + xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien/talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) set_trap_type(null) /// Move the hugger out of the trap diff --git a/code/modules/xenomorph/turret.dm b/code/modules/xenomorph/turret.dm index 11a6905b9a4..82b2c92ab07 100644 --- a/code/modules/xenomorph/turret.dm +++ b/code/modules/xenomorph/turret.dm @@ -70,7 +70,7 @@ set_hostile(null) set_last_hostile(null) STOP_PROCESSING(SSobj, src) - playsound(loc,'sound/effects/xeno_turret_death.ogg', 70) + playsound(loc,'sound/effects/alien/turret_death.ogg', 70) return ..() /obj/structure/xeno/xeno_turret/ex_act(severity) @@ -110,7 +110,7 @@ set_last_hostile(null) return if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_XENO_TURRETS_ALERT)) - GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien/help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) TIMER_COOLDOWN_START(src, COOLDOWN_XENO_TURRETS_ALERT, 20 SECONDS) if(hostile != last_hostile) set_last_hostile(hostile) diff --git a/sound/effects/behemoth/earth_pillar_destroyed.ogg b/sound/effects/alien/behemoth/earth_pillar_destroyed.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_destroyed.ogg rename to sound/effects/alien/behemoth/earth_pillar_destroyed.ogg diff --git a/sound/effects/behemoth/earth_pillar_eating.ogg b/sound/effects/alien/behemoth/earth_pillar_eating.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_eating.ogg rename to sound/effects/alien/behemoth/earth_pillar_eating.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_1.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_1.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_1.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_1.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_2.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_2.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_2.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_2.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_3.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_3.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_3.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_3.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_4.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_4.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_4.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_4.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_5.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_5.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_5.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_5.ogg diff --git a/sound/effects/behemoth/earth_pillar_hit_6.ogg b/sound/effects/alien/behemoth/earth_pillar_hit_6.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_hit_6.ogg rename to sound/effects/alien/behemoth/earth_pillar_hit_6.ogg diff --git a/sound/effects/behemoth/earth_pillar_rising.ogg b/sound/effects/alien/behemoth/earth_pillar_rising.ogg similarity index 100% rename from sound/effects/behemoth/earth_pillar_rising.ogg rename to sound/effects/alien/behemoth/earth_pillar_rising.ogg diff --git a/sound/effects/behemoth/landslide_enhanced_charge.ogg b/sound/effects/alien/behemoth/landslide_enhanced_charge.ogg similarity index 100% rename from sound/effects/behemoth/landslide_enhanced_charge.ogg rename to sound/effects/alien/behemoth/landslide_enhanced_charge.ogg diff --git a/sound/effects/behemoth/landslide_hit_mob.ogg b/sound/effects/alien/behemoth/landslide_hit_mob.ogg similarity index 100% rename from sound/effects/behemoth/landslide_hit_mob.ogg rename to sound/effects/alien/behemoth/landslide_hit_mob.ogg diff --git a/sound/effects/behemoth/landslide_roar.ogg b/sound/effects/alien/behemoth/landslide_roar.ogg similarity index 100% rename from sound/effects/behemoth/landslide_roar.ogg rename to sound/effects/alien/behemoth/landslide_roar.ogg diff --git a/sound/effects/behemoth/primal_wrath_roar.ogg b/sound/effects/alien/behemoth/primal_wrath_roar.ogg similarity index 100% rename from sound/effects/behemoth/primal_wrath_roar.ogg rename to sound/effects/alien/behemoth/primal_wrath_roar.ogg diff --git a/sound/effects/behemoth/behemoth_roll.ogg b/sound/effects/alien/behemoth/roll.ogg similarity index 100% rename from sound/effects/behemoth/behemoth_roll.ogg rename to sound/effects/alien/behemoth/roll.ogg diff --git a/sound/effects/behemoth/behemoth_rumble.ogg b/sound/effects/alien/behemoth/rumble.ogg similarity index 100% rename from sound/effects/behemoth/behemoth_rumble.ogg rename to sound/effects/alien/behemoth/rumble.ogg diff --git a/sound/effects/behemoth/seismic_fracture_explosion.ogg b/sound/effects/alien/behemoth/seismic_fracture_explosion.ogg similarity index 100% rename from sound/effects/behemoth/seismic_fracture_explosion.ogg rename to sound/effects/alien/behemoth/seismic_fracture_explosion.ogg diff --git a/sound/effects/behemoth/behemoth_stomp.ogg b/sound/effects/alien/behemoth/stomp.ogg similarity index 100% rename from sound/effects/behemoth/behemoth_stomp.ogg rename to sound/effects/alien/behemoth/stomp.ogg diff --git a/sound/effects/alien_egg_burst.ogg b/sound/effects/alien/egg_burst.ogg similarity index 100% rename from sound/effects/alien_egg_burst.ogg rename to sound/effects/alien/egg_burst.ogg diff --git a/sound/effects/alien_egg_move.ogg b/sound/effects/alien/egg_move.ogg similarity index 100% rename from sound/effects/alien_egg_move.ogg rename to sound/effects/alien/egg_move.ogg diff --git a/sound/effects/xeno_evolveready.ogg b/sound/effects/alien/evolveready.ogg similarity index 100% rename from sound/effects/xeno_evolveready.ogg rename to sound/effects/alien/evolveready.ogg diff --git a/sound/effects/xeno_newlarva.ogg b/sound/effects/alien/newlarva.ogg similarity index 100% rename from sound/effects/xeno_newlarva.ogg rename to sound/effects/alien/newlarva.ogg diff --git a/sound/effects/alien_recycler.ogg b/sound/effects/alien/recycler.ogg similarity index 100% rename from sound/effects/alien_recycler.ogg rename to sound/effects/alien/recycler.ogg diff --git a/sound/effects/alien_resin_break1.ogg b/sound/effects/alien/resin_break1.ogg similarity index 100% rename from sound/effects/alien_resin_break1.ogg rename to sound/effects/alien/resin_break1.ogg diff --git a/sound/effects/alien_resin_break2.ogg b/sound/effects/alien/resin_break2.ogg similarity index 100% rename from sound/effects/alien_resin_break2.ogg rename to sound/effects/alien/resin_break2.ogg diff --git a/sound/effects/alien_resin_build1.ogg b/sound/effects/alien/resin_build1.ogg similarity index 100% rename from sound/effects/alien_resin_build1.ogg rename to sound/effects/alien/resin_build1.ogg diff --git a/sound/effects/alien_resin_build2.ogg b/sound/effects/alien/resin_build2.ogg similarity index 100% rename from sound/effects/alien_resin_build2.ogg rename to sound/effects/alien/resin_build2.ogg diff --git a/sound/effects/alien_resin_build3.ogg b/sound/effects/alien/resin_build3.ogg similarity index 100% rename from sound/effects/alien_resin_build3.ogg rename to sound/effects/alien/resin_build3.ogg diff --git a/sound/effects/footstep/alien_resin_move1.ogg b/sound/effects/alien/resin_move1.ogg similarity index 100% rename from sound/effects/footstep/alien_resin_move1.ogg rename to sound/effects/alien/resin_move1.ogg diff --git a/sound/effects/footstep/alien_resin_move2.ogg b/sound/effects/alien/resin_move2.ogg similarity index 100% rename from sound/effects/footstep/alien_resin_move2.ogg rename to sound/effects/alien/resin_move2.ogg diff --git a/sound/effects/alien_tail_swipe1.ogg b/sound/effects/alien/tail_swipe1.ogg similarity index 100% rename from sound/effects/alien_tail_swipe1.ogg rename to sound/effects/alien/tail_swipe1.ogg diff --git a/sound/effects/alien_tail_swipe2.ogg b/sound/effects/alien/tail_swipe2.ogg similarity index 100% rename from sound/effects/alien_tail_swipe2.ogg rename to sound/effects/alien/tail_swipe2.ogg diff --git a/sound/effects/alien_tail_swipe3.ogg b/sound/effects/alien/tail_swipe3.ogg similarity index 100% rename from sound/effects/alien_tail_swipe3.ogg rename to sound/effects/alien/tail_swipe3.ogg diff --git a/sound/effects/xeno_turret_death.ogg b/sound/effects/alien/turret_death.ogg similarity index 100% rename from sound/effects/xeno_turret_death.ogg rename to sound/effects/alien/turret_death.ogg diff --git a/sound/effects/alien_ventcrawl1.ogg b/sound/effects/alien/ventcrawl1.ogg similarity index 100% rename from sound/effects/alien_ventcrawl1.ogg rename to sound/effects/alien/ventcrawl1.ogg diff --git a/sound/effects/alien_ventcrawl2.ogg b/sound/effects/alien/ventcrawl2.ogg similarity index 100% rename from sound/effects/alien_ventcrawl2.ogg rename to sound/effects/alien/ventcrawl2.ogg diff --git a/sound/effects/alien_ventpass1.ogg b/sound/effects/alien/ventpass1.ogg similarity index 100% rename from sound/effects/alien_ventpass1.ogg rename to sound/effects/alien/ventpass1.ogg diff --git a/sound/effects/alien_ventpass2.ogg b/sound/effects/alien/ventpass2.ogg similarity index 100% rename from sound/effects/alien_ventpass2.ogg rename to sound/effects/alien/ventpass2.ogg diff --git a/sound/effects/explosioncreak1.ogg b/sound/effects/explosion/creak1.ogg similarity index 100% rename from sound/effects/explosioncreak1.ogg rename to sound/effects/explosion/creak1.ogg diff --git a/sound/effects/explosioncreak2.ogg b/sound/effects/explosion/creak2.ogg similarity index 100% rename from sound/effects/explosioncreak2.ogg rename to sound/effects/explosion/creak2.ogg diff --git a/sound/effects/explosionfar.ogg b/sound/effects/explosion/far0.ogg similarity index 100% rename from sound/effects/explosionfar.ogg rename to sound/effects/explosion/far0.ogg diff --git a/sound/effects/explosion_far1.ogg b/sound/effects/explosion/far1.ogg similarity index 100% rename from sound/effects/explosion_far1.ogg rename to sound/effects/explosion/far1.ogg diff --git a/sound/effects/explosion_far2.ogg b/sound/effects/explosion/far2.ogg similarity index 100% rename from sound/effects/explosion_far2.ogg rename to sound/effects/explosion/far2.ogg diff --git a/sound/effects/explosion_far3.ogg b/sound/effects/explosion/far3.ogg similarity index 100% rename from sound/effects/explosion_far3.ogg rename to sound/effects/explosion/far3.ogg diff --git a/sound/effects/explosion_far4.ogg b/sound/effects/explosion/far4.ogg similarity index 100% rename from sound/effects/explosion_far4.ogg rename to sound/effects/explosion/far4.ogg diff --git a/sound/effects/explosion_far5.ogg b/sound/effects/explosion/far5.ogg similarity index 100% rename from sound/effects/explosion_far5.ogg rename to sound/effects/explosion/far5.ogg diff --git a/sound/effects/incendiary_explosion_1.ogg b/sound/effects/explosion/incendiary1.ogg similarity index 100% rename from sound/effects/incendiary_explosion_1.ogg rename to sound/effects/explosion/incendiary1.ogg diff --git a/sound/effects/incendiary_explosion_2.ogg b/sound/effects/explosion/incendiary2.ogg similarity index 100% rename from sound/effects/incendiary_explosion_2.ogg rename to sound/effects/explosion/incendiary2.ogg diff --git a/sound/effects/incendiary_explosion_3.ogg b/sound/effects/explosion/incendiary3.ogg similarity index 100% rename from sound/effects/incendiary_explosion_3.ogg rename to sound/effects/explosion/incendiary3.ogg diff --git a/sound/effects/explosion_large1.ogg b/sound/effects/explosion/large1.ogg similarity index 100% rename from sound/effects/explosion_large1.ogg rename to sound/effects/explosion/large1.ogg diff --git a/sound/effects/explosion_large2.ogg b/sound/effects/explosion/large2.ogg similarity index 100% rename from sound/effects/explosion_large2.ogg rename to sound/effects/explosion/large2.ogg diff --git a/sound/effects/explosion_large3.ogg b/sound/effects/explosion/large3.ogg similarity index 100% rename from sound/effects/explosion_large3.ogg rename to sound/effects/explosion/large3.ogg diff --git a/sound/effects/explosion_large4.ogg b/sound/effects/explosion/large4.ogg similarity index 100% rename from sound/effects/explosion_large4.ogg rename to sound/effects/explosion/large4.ogg diff --git a/sound/effects/explosion_large5.ogg b/sound/effects/explosion/large5.ogg similarity index 100% rename from sound/effects/explosion_large5.ogg rename to sound/effects/explosion/large5.ogg diff --git a/sound/effects/explosion_large6.ogg b/sound/effects/explosion/large6.ogg similarity index 100% rename from sound/effects/explosion_large6.ogg rename to sound/effects/explosion/large6.ogg diff --git a/sound/effects/explosion_med1.ogg b/sound/effects/explosion/medium1.ogg similarity index 100% rename from sound/effects/explosion_med1.ogg rename to sound/effects/explosion/medium1.ogg diff --git a/sound/effects/explosion_med2.ogg b/sound/effects/explosion/medium2.ogg similarity index 100% rename from sound/effects/explosion_med2.ogg rename to sound/effects/explosion/medium2.ogg diff --git a/sound/effects/explosion_med3.ogg b/sound/effects/explosion/medium3.ogg similarity index 100% rename from sound/effects/explosion_med3.ogg rename to sound/effects/explosion/medium3.ogg diff --git a/sound/effects/explosion_med4.ogg b/sound/effects/explosion/medium4.ogg similarity index 100% rename from sound/effects/explosion_med4.ogg rename to sound/effects/explosion/medium4.ogg diff --git a/sound/effects/explosion_med5.ogg b/sound/effects/explosion/medium5.ogg similarity index 100% rename from sound/effects/explosion_med5.ogg rename to sound/effects/explosion/medium5.ogg diff --git a/sound/effects/explosion_med6.ogg b/sound/effects/explosion/medium6.ogg similarity index 100% rename from sound/effects/explosion_med6.ogg rename to sound/effects/explosion/medium6.ogg diff --git a/sound/effects/explosion_micro1.ogg b/sound/effects/explosion/micro1.ogg similarity index 100% rename from sound/effects/explosion_micro1.ogg rename to sound/effects/explosion/micro1.ogg diff --git a/sound/effects/explosion_micro2.ogg b/sound/effects/explosion/micro2.ogg similarity index 100% rename from sound/effects/explosion_micro2.ogg rename to sound/effects/explosion/micro2.ogg diff --git a/sound/effects/explosion_micro3.ogg b/sound/effects/explosion/micro3.ogg similarity index 100% rename from sound/effects/explosion_micro3.ogg rename to sound/effects/explosion/micro3.ogg diff --git a/sound/effects/explosion_small1.ogg b/sound/effects/explosion/small1.ogg similarity index 100% rename from sound/effects/explosion_small1.ogg rename to sound/effects/explosion/small1.ogg diff --git a/sound/effects/explosion_small2.ogg b/sound/effects/explosion/small2.ogg similarity index 100% rename from sound/effects/explosion_small2.ogg rename to sound/effects/explosion/small2.ogg diff --git a/sound/effects/explosion_small3.ogg b/sound/effects/explosion/small3.ogg similarity index 100% rename from sound/effects/explosion_small3.ogg rename to sound/effects/explosion/small3.ogg diff --git a/sound/effects/explosion_small4.ogg b/sound/effects/explosion/small4.ogg similarity index 100% rename from sound/effects/explosion_small4.ogg rename to sound/effects/explosion/small4.ogg diff --git a/sound/effects/explosionsmallfar.ogg b/sound/effects/explosion/small_far0.ogg similarity index 100% rename from sound/effects/explosionsmallfar.ogg rename to sound/effects/explosion/small_far0.ogg diff --git a/sound/effects/explosion_smallfar1.ogg b/sound/effects/explosion/small_far1.ogg similarity index 100% rename from sound/effects/explosion_smallfar1.ogg rename to sound/effects/explosion/small_far1.ogg diff --git a/sound/effects/explosion_smallfar2.ogg b/sound/effects/explosion/small_far2.ogg similarity index 100% rename from sound/effects/explosion_smallfar2.ogg rename to sound/effects/explosion/small_far2.ogg diff --git a/sound/effects/explosion_smallfar3.ogg b/sound/effects/explosion/small_far3.ogg similarity index 100% rename from sound/effects/explosion_smallfar3.ogg rename to sound/effects/explosion/small_far3.ogg diff --git a/sound/effects/explosion_smallfar4.ogg b/sound/effects/explosion/small_far4.ogg similarity index 100% rename from sound/effects/explosion_smallfar4.ogg rename to sound/effects/explosion/small_far4.ogg diff --git a/sound/effects/alien_footstep_charge1.ogg b/sound/effects/footstep/alien/charge1.ogg similarity index 100% rename from sound/effects/alien_footstep_charge1.ogg rename to sound/effects/footstep/alien/charge1.ogg diff --git a/sound/effects/alien_footstep_charge2.ogg b/sound/effects/footstep/alien/charge2.ogg similarity index 100% rename from sound/effects/alien_footstep_charge2.ogg rename to sound/effects/footstep/alien/charge2.ogg diff --git a/sound/effects/alien_footstep_charge3.ogg b/sound/effects/footstep/alien/charge3.ogg similarity index 100% rename from sound/effects/alien_footstep_charge3.ogg rename to sound/effects/footstep/alien/charge3.ogg diff --git a/sound/effects/alien_footstep_large1.ogg b/sound/effects/footstep/alien/large1.ogg similarity index 100% rename from sound/effects/alien_footstep_large1.ogg rename to sound/effects/footstep/alien/large1.ogg diff --git a/sound/effects/alien_footstep_large2.ogg b/sound/effects/footstep/alien/large2.ogg similarity index 100% rename from sound/effects/alien_footstep_large2.ogg rename to sound/effects/footstep/alien/large2.ogg diff --git a/sound/effects/alien_footstep_large3.ogg b/sound/effects/footstep/alien/large3.ogg similarity index 100% rename from sound/effects/alien_footstep_large3.ogg rename to sound/effects/footstep/alien/large3.ogg diff --git a/sound/effects/alien_footstep_medium1.ogg b/sound/effects/footstep/alien/medium1.ogg similarity index 100% rename from sound/effects/alien_footstep_medium1.ogg rename to sound/effects/footstep/alien/medium1.ogg diff --git a/sound/effects/alien_footstep_medium2.ogg b/sound/effects/footstep/alien/medium2.ogg similarity index 100% rename from sound/effects/alien_footstep_medium2.ogg rename to sound/effects/footstep/alien/medium2.ogg diff --git a/sound/effects/alien_footstep_medium3.ogg b/sound/effects/footstep/alien/medium3.ogg similarity index 100% rename from sound/effects/alien_footstep_medium3.ogg rename to sound/effects/footstep/alien/medium3.ogg diff --git a/sound/effects/alien_resin_move1.ogg b/sound/effects/footstep/alien/resin_move1.ogg similarity index 100% rename from sound/effects/alien_resin_move1.ogg rename to sound/effects/footstep/alien/resin_move1.ogg diff --git a/sound/effects/alien_resin_move2.ogg b/sound/effects/footstep/alien/resin_move2.ogg similarity index 100% rename from sound/effects/alien_resin_move2.ogg rename to sound/effects/footstep/alien/resin_move2.ogg diff --git a/sound/effects/footstep/alien_footstep_large1.ogg b/sound/effects/footstep/alien_footstep_large1.ogg deleted file mode 100644 index 5292006352003af40443998978986361f6a9f0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7555 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 diff --git a/sound/effects/footstep/alien_footstep_large2.ogg b/sound/effects/footstep/alien_footstep_large2.ogg deleted file mode 100644 index c5ff7040a26a0a5c2180eae0ae231101e4b48657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7379 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 F{{Voagtq_y diff --git a/sound/effects/footstep/alien_footstep_large3.ogg b/sound/effects/footstep/alien_footstep_large3.ogg deleted file mode 100644 index d5a6d280dbb103c67905eb4f38d660c26250a429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7054 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 I6@T0P7d{RB)c^nh diff --git a/sound/effects/footstep/alien_footstep_medium1.ogg b/sound/effects/footstep/alien_footstep_medium1.ogg deleted file mode 100644 index dd68658f8aef908a61e7e295c9af89c2e29c575f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25788 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 RrUXC9ZrXhZxC*!c_&*ea+zbE! diff --git a/sound/effects/footstep/alien_footstep_medium3.ogg b/sound/effects/footstep/alien_footstep_medium3.ogg deleted file mode 100644 index bc1b6589de5be3365a38fbac89b9d1d891ac86eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31168 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 diff --git a/sound/voice/4_xeno_roars.ogg b/sound/voice/alien/4_roars.ogg similarity index 100% rename from sound/voice/4_xeno_roars.ogg rename to sound/voice/alien/4_roars.ogg diff --git a/sound/voice/alien_chestburst.ogg b/sound/voice/alien/chestburst.ogg similarity index 100% rename from sound/voice/alien_chestburst.ogg rename to sound/voice/alien/chestburst.ogg diff --git a/sound/voice/alien_chestburst2.ogg b/sound/voice/alien/chestburst2.ogg similarity index 100% rename from sound/voice/alien_chestburst2.ogg rename to sound/voice/alien/chestburst2.ogg diff --git a/sound/voice/alien_death.ogg b/sound/voice/alien/death.ogg similarity index 100% rename from sound/voice/alien_death.ogg rename to sound/voice/alien/death.ogg diff --git a/sound/voice/alien_death2.ogg b/sound/voice/alien/death2.ogg similarity index 100% rename from sound/voice/alien_death2.ogg rename to sound/voice/alien/death2.ogg diff --git a/sound/voice/alien_distantroar_3.ogg b/sound/voice/alien/distantroar_3.ogg similarity index 100% rename from sound/voice/alien_distantroar_3.ogg rename to sound/voice/alien/distantroar_3.ogg diff --git a/sound/voice/alien_drool1.ogg b/sound/voice/alien/drool1.ogg similarity index 100% rename from sound/voice/alien_drool1.ogg rename to sound/voice/alien/drool1.ogg diff --git a/sound/voice/alien_drool2.ogg b/sound/voice/alien/drool2.ogg similarity index 100% rename from sound/voice/alien_drool2.ogg rename to sound/voice/alien/drool2.ogg diff --git a/sound/voice/alien_facehugger_dies.ogg b/sound/voice/alien/facehugger_dies.ogg similarity index 100% rename from sound/voice/alien_facehugger_dies.ogg rename to sound/voice/alien/facehugger_dies.ogg diff --git a/sound/voice/alien_growl1.ogg b/sound/voice/alien/growl1.ogg similarity index 100% rename from sound/voice/alien_growl1.ogg rename to sound/voice/alien/growl1.ogg diff --git a/sound/voice/alien_growl2.ogg b/sound/voice/alien/growl2.ogg similarity index 100% rename from sound/voice/alien_growl2.ogg rename to sound/voice/alien/growl2.ogg diff --git a/sound/voice/alien_growl3.ogg b/sound/voice/alien/growl3.ogg similarity index 100% rename from sound/voice/alien_growl3.ogg rename to sound/voice/alien/growl3.ogg diff --git a/sound/voice/alien_growl4.ogg b/sound/voice/alien/growl4.ogg similarity index 100% rename from sound/voice/alien_growl4.ogg rename to sound/voice/alien/growl4.ogg diff --git a/sound/voice/alien_help1.ogg b/sound/voice/alien/help1.ogg similarity index 100% rename from sound/voice/alien_help1.ogg rename to sound/voice/alien/help1.ogg diff --git a/sound/voice/alien_help2.ogg b/sound/voice/alien/help2.ogg similarity index 100% rename from sound/voice/alien_help2.ogg rename to sound/voice/alien/help2.ogg diff --git a/sound/voice/alien_hiss1.ogg b/sound/voice/alien/hiss1.ogg similarity index 100% rename from sound/voice/alien_hiss1.ogg rename to sound/voice/alien/hiss1.ogg diff --git a/sound/voice/alien_hiss2.ogg b/sound/voice/alien/hiss2.ogg similarity index 100% rename from sound/voice/alien_hiss2.ogg rename to sound/voice/alien/hiss2.ogg diff --git a/sound/voice/alien_hiss3.ogg b/sound/voice/alien/hiss3.ogg similarity index 100% rename from sound/voice/alien_hiss3.ogg rename to sound/voice/alien/hiss3.ogg diff --git a/sound/voice/hiss1.ogg b/sound/voice/alien/hiss4.ogg similarity index 100% rename from sound/voice/hiss1.ogg rename to sound/voice/alien/hiss4.ogg diff --git a/sound/voice/hiss2.ogg b/sound/voice/alien/hiss5.ogg similarity index 100% rename from sound/voice/hiss2.ogg rename to sound/voice/alien/hiss5.ogg diff --git a/sound/voice/hiss3.ogg b/sound/voice/alien/hiss6.ogg similarity index 100% rename from sound/voice/hiss3.ogg rename to sound/voice/alien/hiss6.ogg diff --git a/sound/voice/hiss4.ogg b/sound/voice/alien/hiss7.ogg similarity index 100% rename from sound/voice/hiss4.ogg rename to sound/voice/alien/hiss7.ogg diff --git a/sound/voice/hiss5.ogg b/sound/voice/alien/hiss8.ogg similarity index 100% rename from sound/voice/hiss5.ogg rename to sound/voice/alien/hiss8.ogg diff --git a/sound/voice/hiss6.ogg b/sound/voice/alien/hiss9.ogg similarity index 100% rename from sound/voice/hiss6.ogg rename to sound/voice/alien/hiss9.ogg diff --git a/sound/voice/alien_king_died.ogg b/sound/voice/alien/king_died.ogg similarity index 100% rename from sound/voice/alien_king_died.ogg rename to sound/voice/alien/king_died.ogg diff --git a/sound/voice/ed209_20sec.ogg b/sound/voice/alien/king_roar.ogg similarity index 100% rename from sound/voice/ed209_20sec.ogg rename to sound/voice/alien/king_roar.ogg diff --git a/sound/voice/alien_roar_larva1.ogg b/sound/voice/alien/larva/roar1.ogg similarity index 100% rename from sound/voice/alien_roar_larva1.ogg rename to sound/voice/alien/larva/roar1.ogg diff --git a/sound/voice/alien_roar_larva2.ogg b/sound/voice/alien/larva/roar2.ogg similarity index 100% rename from sound/voice/alien_roar_larva2.ogg rename to sound/voice/alien/larva/roar2.ogg diff --git a/sound/voice/alien_roar_larva3.ogg b/sound/voice/alien/larva/roar3.ogg similarity index 100% rename from sound/voice/alien_roar_larva3.ogg rename to sound/voice/alien/larva/roar3.ogg diff --git a/sound/voice/alien_roar_larva4.ogg b/sound/voice/alien/larva/roar4.ogg similarity index 100% rename from sound/voice/alien_roar_larva4.ogg rename to sound/voice/alien/larva/roar4.ogg diff --git a/sound/voice/larva_talk1.ogg b/sound/voice/alien/larva/talk1.ogg similarity index 100% rename from sound/voice/larva_talk1.ogg rename to sound/voice/alien/larva/talk1.ogg diff --git a/sound/voice/larva_talk2.ogg b/sound/voice/alien/larva/talk2.ogg similarity index 100% rename from sound/voice/larva_talk2.ogg rename to sound/voice/alien/larva/talk2.ogg diff --git a/sound/voice/larva_talk3.ogg b/sound/voice/alien/larva/talk3.ogg similarity index 100% rename from sound/voice/larva_talk3.ogg rename to sound/voice/alien/larva/talk3.ogg diff --git a/sound/voice/larva_talk4.ogg b/sound/voice/alien/larva/talk4.ogg similarity index 100% rename from sound/voice/larva_talk4.ogg rename to sound/voice/alien/larva/talk4.ogg diff --git a/sound/voice/alien_pounce.ogg b/sound/voice/alien/pounce.ogg similarity index 100% rename from sound/voice/alien_pounce.ogg rename to sound/voice/alien/pounce.ogg diff --git a/sound/voice/alien_pounce2.ogg b/sound/voice/alien/pounce2.ogg similarity index 100% rename from sound/voice/alien_pounce2.ogg rename to sound/voice/alien/pounce2.ogg diff --git a/sound/voice/predalien_click.ogg b/sound/voice/alien/predalien/click.ogg similarity index 100% rename from sound/voice/predalien_click.ogg rename to sound/voice/alien/predalien/click.ogg diff --git a/sound/voice/predalien_click1.ogg b/sound/voice/alien/predalien/click1.ogg similarity index 100% rename from sound/voice/predalien_click1.ogg rename to sound/voice/alien/predalien/click1.ogg diff --git a/sound/voice/predalien_click2.ogg b/sound/voice/alien/predalien/click2.ogg similarity index 100% rename from sound/voice/predalien_click2.ogg rename to sound/voice/alien/predalien/click2.ogg diff --git a/sound/voice/predalien_click3.ogg b/sound/voice/alien/predalien/click3.ogg similarity index 100% rename from sound/voice/predalien_click3.ogg rename to sound/voice/alien/predalien/click3.ogg diff --git a/sound/voice/predalien_death.ogg b/sound/voice/alien/predalien/death.ogg similarity index 100% rename from sound/voice/predalien_death.ogg rename to sound/voice/alien/predalien/death.ogg diff --git a/sound/voice/predalien_growl.ogg b/sound/voice/alien/predalien/growl.ogg similarity index 100% rename from sound/voice/predalien_growl.ogg rename to sound/voice/alien/predalien/growl.ogg diff --git a/sound/voice/predalien_hiss.ogg b/sound/voice/alien/predalien/hiss.ogg similarity index 100% rename from sound/voice/predalien_hiss.ogg rename to sound/voice/alien/predalien/hiss.ogg diff --git a/sound/voice/predalien_pounce.ogg b/sound/voice/alien/predalien/pounce.ogg similarity index 100% rename from sound/voice/predalien_pounce.ogg rename to sound/voice/alien/predalien/pounce.ogg diff --git a/sound/voice/predalien_roar.ogg b/sound/voice/alien/predalien/roar.ogg similarity index 100% rename from sound/voice/predalien_roar.ogg rename to sound/voice/alien/predalien/roar.ogg diff --git a/sound/voice/alien_queen_breath1.ogg b/sound/voice/alien/queen/breath1.ogg similarity index 100% rename from sound/voice/alien_queen_breath1.ogg rename to sound/voice/alien/queen/breath1.ogg diff --git a/sound/voice/alien_queen_breath2.ogg b/sound/voice/alien/queen/breath2.ogg similarity index 100% rename from sound/voice/alien_queen_breath2.ogg rename to sound/voice/alien/queen/breath2.ogg diff --git a/sound/voice/alien_queen_command.ogg b/sound/voice/alien/queen/command.ogg similarity index 100% rename from sound/voice/alien_queen_command.ogg rename to sound/voice/alien/queen/command.ogg diff --git a/sound/voice/alien_queen_command2.ogg b/sound/voice/alien/queen/command2.ogg similarity index 100% rename from sound/voice/alien_queen_command2.ogg rename to sound/voice/alien/queen/command2.ogg diff --git a/sound/voice/alien_queen_command3.ogg b/sound/voice/alien/queen/command3.ogg similarity index 100% rename from sound/voice/alien_queen_command3.ogg rename to sound/voice/alien/queen/command3.ogg diff --git a/sound/voice/alien_queen_died.ogg b/sound/voice/alien/queen/died.ogg similarity index 100% rename from sound/voice/alien_queen_died.ogg rename to sound/voice/alien/queen/died.ogg diff --git a/sound/voice/alien_queen_screech.ogg b/sound/voice/alien/queen/screech.ogg similarity index 100% rename from sound/voice/alien_queen_screech.ogg rename to sound/voice/alien/queen/screech.ogg diff --git a/sound/voice/alien_frenzy_screech.ogg b/sound/voice/alien/queen/screech_frenzy.ogg similarity index 100% rename from sound/voice/alien_frenzy_screech.ogg rename to sound/voice/alien/queen/screech_frenzy.ogg diff --git a/sound/voice/alien_heal_screech.ogg b/sound/voice/alien/queen/screech_heal.ogg similarity index 100% rename from sound/voice/alien_heal_screech.ogg rename to sound/voice/alien/queen/screech_heal.ogg diff --git a/sound/voice/alien_plasma_screech.ogg b/sound/voice/alien/queen/screech_plasma.ogg similarity index 100% rename from sound/voice/alien_plasma_screech.ogg rename to sound/voice/alien/queen/screech_plasma.ogg diff --git a/sound/voice/alien_roar1.ogg b/sound/voice/alien/roar1.ogg similarity index 100% rename from sound/voice/alien_roar1.ogg rename to sound/voice/alien/roar1.ogg diff --git a/sound/voice/alien_roar10.ogg b/sound/voice/alien/roar10.ogg similarity index 100% rename from sound/voice/alien_roar10.ogg rename to sound/voice/alien/roar10.ogg diff --git a/sound/voice/alien_roar11.ogg b/sound/voice/alien/roar11.ogg similarity index 100% rename from sound/voice/alien_roar11.ogg rename to sound/voice/alien/roar11.ogg diff --git a/sound/voice/alien_roar12.ogg b/sound/voice/alien/roar12.ogg similarity index 100% rename from sound/voice/alien_roar12.ogg rename to sound/voice/alien/roar12.ogg diff --git a/sound/voice/alien_roar2.ogg b/sound/voice/alien/roar2.ogg similarity index 100% rename from sound/voice/alien_roar2.ogg rename to sound/voice/alien/roar2.ogg diff --git a/sound/voice/alien_roar3.ogg b/sound/voice/alien/roar3.ogg similarity index 100% rename from sound/voice/alien_roar3.ogg rename to sound/voice/alien/roar3.ogg diff --git a/sound/voice/alien_roar4.ogg b/sound/voice/alien/roar4.ogg similarity index 100% rename from sound/voice/alien_roar4.ogg rename to sound/voice/alien/roar4.ogg diff --git a/sound/voice/alien_roar5.ogg b/sound/voice/alien/roar5.ogg similarity index 100% rename from sound/voice/alien_roar5.ogg rename to sound/voice/alien/roar5.ogg diff --git a/sound/voice/alien_roar6.ogg b/sound/voice/alien/roar6.ogg similarity index 100% rename from sound/voice/alien_roar6.ogg rename to sound/voice/alien/roar6.ogg diff --git a/sound/voice/alien_roar7.ogg b/sound/voice/alien/roar7.ogg similarity index 100% rename from sound/voice/alien_roar7.ogg rename to sound/voice/alien/roar7.ogg diff --git a/sound/voice/alien_roar8.ogg b/sound/voice/alien/roar8.ogg similarity index 100% rename from sound/voice/alien_roar8.ogg rename to sound/voice/alien/roar8.ogg diff --git a/sound/voice/alien_roar9.ogg b/sound/voice/alien/roar9.ogg similarity index 100% rename from sound/voice/alien_roar9.ogg rename to sound/voice/alien/roar9.ogg diff --git a/sound/voice/alien_roar_warlock.ogg b/sound/voice/alien/roar_warlock.ogg similarity index 100% rename from sound/voice/alien_roar_warlock.ogg rename to sound/voice/alien/roar_warlock.ogg diff --git a/sound/voice/alien_spitacid.ogg b/sound/voice/alien/spitacid.ogg similarity index 100% rename from sound/voice/alien_spitacid.ogg rename to sound/voice/alien/spitacid.ogg diff --git a/sound/voice/alien_spitacid2.ogg b/sound/voice/alien/spitacid2.ogg similarity index 100% rename from sound/voice/alien_spitacid2.ogg rename to sound/voice/alien/spitacid2.ogg diff --git a/sound/voice/alien_talk.ogg b/sound/voice/alien/talk.ogg similarity index 100% rename from sound/voice/alien_talk.ogg rename to sound/voice/alien/talk.ogg diff --git a/sound/voice/alien_talk2.ogg b/sound/voice/alien/talk2.ogg similarity index 100% rename from sound/voice/alien_talk2.ogg rename to sound/voice/alien/talk2.ogg diff --git a/sound/voice/alien_talk3.ogg b/sound/voice/alien/talk3.ogg similarity index 100% rename from sound/voice/alien_talk3.ogg rename to sound/voice/alien/talk3.ogg diff --git a/sound/voice/xenos_roaring.ogg b/sound/voice/alien/xenos_roaring.ogg similarity index 100% rename from sound/voice/xenos_roaring.ogg rename to sound/voice/alien/xenos_roaring.ogg diff --git a/sound/voice/alien_yell_alt.ogg b/sound/voice/alien/yell_alt.ogg similarity index 100% rename from sound/voice/alien_yell_alt.ogg rename to sound/voice/alien/yell_alt.ogg diff --git a/sound/voice/alien_cena.ogg b/sound/voice/alien_cena.ogg deleted file mode 100644 index cf9fc6d8ea424cd465f7d779bb0fc88ad893372a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58020 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 diff --git a/sound/voice/alien_queen_xmas.ogg b/sound/voice/alien_queen_xmas.ogg deleted file mode 100644 index 5f191ba30f55ccc4addc81e3b76b1ab032e51107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34180 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 H0D1uqCVtdV diff --git a/sound/voice/b18_activate.ogg b/sound/voice/b18/activate.ogg similarity index 100% rename from sound/voice/b18_activate.ogg rename to sound/voice/b18/activate.ogg diff --git a/sound/voice/b18_antitoxin.ogg b/sound/voice/b18/antitoxin.ogg similarity index 100% rename from sound/voice/b18_antitoxin.ogg rename to sound/voice/b18/antitoxin.ogg diff --git a/sound/voice/b18_antitoxin2.ogg b/sound/voice/b18/antitoxin2.ogg similarity index 100% rename from sound/voice/b18_antitoxin2.ogg rename to sound/voice/b18/antitoxin2.ogg diff --git a/sound/voice/b18_brute.ogg b/sound/voice/b18/brute.ogg similarity index 100% rename from sound/voice/b18_brute.ogg rename to sound/voice/b18/brute.ogg diff --git a/sound/voice/b18_fracture.ogg b/sound/voice/b18/fracture.ogg similarity index 100% rename from sound/voice/b18_fracture.ogg rename to sound/voice/b18/fracture.ogg diff --git a/sound/voice/ib_detected.ogg b/sound/voice/b18/ib_detected.ogg similarity index 100% rename from sound/voice/ib_detected.ogg rename to sound/voice/b18/ib_detected.ogg diff --git a/sound/voice/b18_pain_suppress.ogg b/sound/voice/b18/pain_suppress.ogg similarity index 100% rename from sound/voice/b18_pain_suppress.ogg rename to sound/voice/b18/pain_suppress.ogg diff --git a/sound/voice/bcreep.ogg b/sound/voice/bcreep.ogg deleted file mode 100644 index d1d4f043be4d0e8bd059e5c24c859033d818c882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4370 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 diff --git a/sound/voice/biamthelaw.ogg b/sound/voice/biamthelaw.ogg deleted file mode 100644 index c4405b24289c674f5f0440161a7297df6f62a477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5897 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 diff --git a/sound/voice/bsecureday.ogg b/sound/voice/bsecureday.ogg deleted file mode 100644 index 594f8a8cbc0c3527a9959b76541338fe7e72624f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4610 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 PcfN${7U;tJ76AVNxqIw@ diff --git a/sound/voice/human_female_cough1.ogg b/sound/voice/human/female/cough1.ogg similarity index 100% rename from sound/voice/human_female_cough1.ogg rename to sound/voice/human/female/cough1.ogg diff --git a/sound/voice/human_female_cough2.ogg b/sound/voice/human/female/cough2.ogg similarity index 100% rename from sound/voice/human_female_cough2.ogg rename to sound/voice/human/female/cough2.ogg diff --git a/sound/voice/human_female_cry_1.ogg b/sound/voice/human/female/cry_1.ogg similarity index 100% rename from sound/voice/human_female_cry_1.ogg rename to sound/voice/human/female/cry_1.ogg diff --git a/sound/voice/human_female_facehugged1.ogg b/sound/voice/human/female/facehugged1.ogg similarity index 100% rename from sound/voice/human_female_facehugged1.ogg rename to sound/voice/human/female/facehugged1.ogg diff --git a/sound/voice/human_female_facehugged2.ogg b/sound/voice/human/female/facehugged2.ogg similarity index 100% rename from sound/voice/human_female_facehugged2.ogg rename to sound/voice/human/female/facehugged2.ogg diff --git a/sound/voice/human_female_gasp1.ogg b/sound/voice/human/female/gasp1.ogg similarity index 100% rename from sound/voice/human_female_gasp1.ogg rename to sound/voice/human/female/gasp1.ogg diff --git a/sound/voice/human_female_gasp2.ogg b/sound/voice/human/female/gasp2.ogg similarity index 100% rename from sound/voice/human_female_gasp2.ogg rename to sound/voice/human/female/gasp2.ogg diff --git a/sound/voice/human_female_giggle_1.ogg b/sound/voice/human/female/giggle_1.ogg similarity index 100% rename from sound/voice/human_female_giggle_1.ogg rename to sound/voice/human/female/giggle_1.ogg diff --git a/sound/voice/human_female_gored_1.ogg b/sound/voice/human/female/gored_1.ogg similarity index 100% rename from sound/voice/human_female_gored_1.ogg rename to sound/voice/human/female/gored_1.ogg diff --git a/sound/voice/human_female_gored_2.ogg b/sound/voice/human/female/gored_2.ogg similarity index 100% rename from sound/voice/human_female_gored_2.ogg rename to sound/voice/human/female/gored_2.ogg diff --git a/sound/voice/human_female_grenadethrow_1.ogg b/sound/voice/human/female/grenadethrow_1.ogg similarity index 100% rename from sound/voice/human_female_grenadethrow_1.ogg rename to sound/voice/human/female/grenadethrow_1.ogg diff --git a/sound/voice/human_female_grenadethrow_2.ogg b/sound/voice/human/female/grenadethrow_2.ogg similarity index 100% rename from sound/voice/human_female_grenadethrow_2.ogg rename to sound/voice/human/female/grenadethrow_2.ogg diff --git a/sound/voice/human_female_grenadethrow_3.ogg b/sound/voice/human/female/grenadethrow_3.ogg similarity index 100% rename from sound/voice/human_female_grenadethrow_3.ogg rename to sound/voice/human/female/grenadethrow_3.ogg diff --git a/sound/voice/human_female_laugh_1.ogg b/sound/voice/human/female/laugh_1.ogg similarity index 100% rename from sound/voice/human_female_laugh_1.ogg rename to sound/voice/human/female/laugh_1.ogg diff --git a/sound/voice/human_female_medic.ogg b/sound/voice/human/female/medic.ogg similarity index 100% rename from sound/voice/human_female_medic.ogg rename to sound/voice/human/female/medic.ogg diff --git a/sound/voice/human_female_moan_1.ogg b/sound/voice/human/female/moan_1.ogg similarity index 100% rename from sound/voice/human_female_moan_1.ogg rename to sound/voice/human/female/moan_1.ogg diff --git a/sound/voice/human_female_pain_1.ogg b/sound/voice/human/female/pain_1.ogg similarity index 100% rename from sound/voice/human_female_pain_1.ogg rename to sound/voice/human/female/pain_1.ogg diff --git a/sound/voice/human_female_pain_2.ogg b/sound/voice/human/female/pain_2.ogg similarity index 100% rename from sound/voice/human_female_pain_2.ogg rename to sound/voice/human/female/pain_2.ogg diff --git a/sound/voice/human_female_pain_3.ogg b/sound/voice/human/female/pain_3.ogg similarity index 100% rename from sound/voice/human_female_pain_3.ogg rename to sound/voice/human/female/pain_3.ogg diff --git a/sound/voice/human_female_preburst1.ogg b/sound/voice/human/female/preburst1.ogg similarity index 100% rename from sound/voice/human_female_preburst1.ogg rename to sound/voice/human/female/preburst1.ogg diff --git a/sound/voice/human_female_preburst2.ogg b/sound/voice/human/female/preburst2.ogg similarity index 100% rename from sound/voice/human_female_preburst2.ogg rename to sound/voice/human/female/preburst2.ogg diff --git a/sound/voice/human_female_preburst3.ogg b/sound/voice/human/female/preburst3.ogg similarity index 100% rename from sound/voice/human_female_preburst3.ogg rename to sound/voice/human/female/preburst3.ogg diff --git a/sound/voice/human_female_scream_1.ogg b/sound/voice/human/female/scream_1.ogg similarity index 100% rename from sound/voice/human_female_scream_1.ogg rename to sound/voice/human/female/scream_1.ogg diff --git a/sound/voice/human_female_scream_2.ogg b/sound/voice/human/female/scream_2.ogg similarity index 100% rename from sound/voice/human_female_scream_2.ogg rename to sound/voice/human/female/scream_2.ogg diff --git a/sound/voice/human_female_scream_3.ogg b/sound/voice/human/female/scream_3.ogg similarity index 100% rename from sound/voice/human_female_scream_3.ogg rename to sound/voice/human/female/scream_3.ogg diff --git a/sound/voice/human_female_scream_4.ogg b/sound/voice/human/female/scream_4.ogg similarity index 100% rename from sound/voice/human_female_scream_4.ogg rename to sound/voice/human/female/scream_4.ogg diff --git a/sound/voice/human_female_scream_5.ogg b/sound/voice/human/female/scream_5.ogg similarity index 100% rename from sound/voice/human_female_scream_5.ogg rename to sound/voice/human/female/scream_5.ogg diff --git a/sound/voice/human_female_sigh_1.ogg b/sound/voice/human/female/sigh_1.ogg similarity index 100% rename from sound/voice/human_female_sigh_1.ogg rename to sound/voice/human/female/sigh_1.ogg diff --git a/sound/voice/human_female_warcry_1.ogg b/sound/voice/human/female/warcry_1.ogg similarity index 100% rename from sound/voice/human_female_warcry_1.ogg rename to sound/voice/human/female/warcry_1.ogg diff --git a/sound/voice/human_female_warcry_10.ogg b/sound/voice/human/female/warcry_10.ogg similarity index 100% rename from sound/voice/human_female_warcry_10.ogg rename to sound/voice/human/female/warcry_10.ogg diff --git a/sound/voice/human_female_warcry_11.ogg b/sound/voice/human/female/warcry_11.ogg similarity index 100% rename from sound/voice/human_female_warcry_11.ogg rename to sound/voice/human/female/warcry_11.ogg diff --git a/sound/voice/human_female_warcry_12.ogg b/sound/voice/human/female/warcry_12.ogg similarity index 100% rename from sound/voice/human_female_warcry_12.ogg rename to sound/voice/human/female/warcry_12.ogg diff --git a/sound/voice/human_female_warcry_13.ogg b/sound/voice/human/female/warcry_13.ogg similarity index 100% rename from sound/voice/human_female_warcry_13.ogg rename to sound/voice/human/female/warcry_13.ogg diff --git a/sound/voice/human_female_warcry_14.ogg b/sound/voice/human/female/warcry_14.ogg similarity index 100% rename from sound/voice/human_female_warcry_14.ogg rename to sound/voice/human/female/warcry_14.ogg diff --git a/sound/voice/human_female_warcry_15.ogg b/sound/voice/human/female/warcry_15.ogg similarity index 100% rename from sound/voice/human_female_warcry_15.ogg rename to sound/voice/human/female/warcry_15.ogg diff --git a/sound/voice/human_female_warcry_16.ogg b/sound/voice/human/female/warcry_16.ogg similarity index 100% rename from sound/voice/human_female_warcry_16.ogg rename to sound/voice/human/female/warcry_16.ogg diff --git a/sound/voice/human_female_warcry_17.ogg b/sound/voice/human/female/warcry_17.ogg similarity index 100% rename from sound/voice/human_female_warcry_17.ogg rename to sound/voice/human/female/warcry_17.ogg diff --git a/sound/voice/human_female_warcry_18.ogg b/sound/voice/human/female/warcry_18.ogg similarity index 100% rename from sound/voice/human_female_warcry_18.ogg rename to sound/voice/human/female/warcry_18.ogg diff --git a/sound/voice/human_female_warcry_19.ogg b/sound/voice/human/female/warcry_19.ogg similarity index 100% rename from sound/voice/human_female_warcry_19.ogg rename to sound/voice/human/female/warcry_19.ogg diff --git a/sound/voice/human_female_warcry_2.ogg b/sound/voice/human/female/warcry_2.ogg similarity index 100% rename from sound/voice/human_female_warcry_2.ogg rename to sound/voice/human/female/warcry_2.ogg diff --git a/sound/voice/human_female_warcry_3.ogg b/sound/voice/human/female/warcry_3.ogg similarity index 100% rename from sound/voice/human_female_warcry_3.ogg rename to sound/voice/human/female/warcry_3.ogg diff --git a/sound/voice/human_female_warcry_4.ogg b/sound/voice/human/female/warcry_4.ogg similarity index 100% rename from sound/voice/human_female_warcry_4.ogg rename to sound/voice/human/female/warcry_4.ogg diff --git a/sound/voice/human_female_warcry_5.ogg b/sound/voice/human/female/warcry_5.ogg similarity index 100% rename from sound/voice/human_female_warcry_5.ogg rename to sound/voice/human/female/warcry_5.ogg diff --git a/sound/voice/human_female_warcry_6.ogg b/sound/voice/human/female/warcry_6.ogg similarity index 100% rename from sound/voice/human_female_warcry_6.ogg rename to sound/voice/human/female/warcry_6.ogg diff --git a/sound/voice/human_female_warcry_7.ogg b/sound/voice/human/female/warcry_7.ogg similarity index 100% rename from sound/voice/human_female_warcry_7.ogg rename to sound/voice/human/female/warcry_7.ogg diff --git a/sound/voice/human_female_warcry_8.ogg b/sound/voice/human/female/warcry_8.ogg similarity index 100% rename from sound/voice/human_female_warcry_8.ogg rename to sound/voice/human/female/warcry_8.ogg diff --git a/sound/voice/human_female_warcry_9.ogg b/sound/voice/human/female/warcry_9.ogg similarity index 100% rename from sound/voice/human_female_warcry_9.ogg rename to sound/voice/human/female/warcry_9.ogg diff --git a/sound/voice/human_female_yawn_1.ogg b/sound/voice/human/female/yawn_1.ogg similarity index 100% rename from sound/voice/human_female_yawn_1.ogg rename to sound/voice/human/female/yawn_1.ogg diff --git a/sound/voice/human_male_cough1.ogg b/sound/voice/human/male/cough1.ogg similarity index 100% rename from sound/voice/human_male_cough1.ogg rename to sound/voice/human/male/cough1.ogg diff --git a/sound/voice/human_male_cough2.ogg b/sound/voice/human/male/cough2.ogg similarity index 100% rename from sound/voice/human_male_cough2.ogg rename to sound/voice/human/male/cough2.ogg diff --git a/sound/voice/human_male_cry_1.ogg b/sound/voice/human/male/cry_1.ogg similarity index 100% rename from sound/voice/human_male_cry_1.ogg rename to sound/voice/human/male/cry_1.ogg diff --git a/sound/voice/human_male_facehugged1.ogg b/sound/voice/human/male/facehugged1.ogg similarity index 100% rename from sound/voice/human_male_facehugged1.ogg rename to sound/voice/human/male/facehugged1.ogg diff --git a/sound/voice/human_male_facehugged2.ogg b/sound/voice/human/male/facehugged2.ogg similarity index 100% rename from sound/voice/human_male_facehugged2.ogg rename to sound/voice/human/male/facehugged2.ogg diff --git a/sound/voice/human_male_facehugged3.ogg b/sound/voice/human/male/facehugged3.ogg similarity index 100% rename from sound/voice/human_male_facehugged3.ogg rename to sound/voice/human/male/facehugged3.ogg diff --git a/sound/voice/human_male_gasp1.ogg b/sound/voice/human/male/gasp1.ogg similarity index 100% rename from sound/voice/human_male_gasp1.ogg rename to sound/voice/human/male/gasp1.ogg diff --git a/sound/voice/human_male_gasp2.ogg b/sound/voice/human/male/gasp2.ogg similarity index 100% rename from sound/voice/human_male_gasp2.ogg rename to sound/voice/human/male/gasp2.ogg diff --git a/sound/voice/human_male_gasp3.ogg b/sound/voice/human/male/gasp3.ogg similarity index 100% rename from sound/voice/human_male_gasp3.ogg rename to sound/voice/human/male/gasp3.ogg diff --git a/sound/voice/human_male_giggle_1.ogg b/sound/voice/human/male/giggle_1.ogg similarity index 100% rename from sound/voice/human_male_giggle_1.ogg rename to sound/voice/human/male/giggle_1.ogg diff --git a/sound/voice/human_male_gored3.ogg b/sound/voice/human/male/gored3.ogg similarity index 100% rename from sound/voice/human_male_gored3.ogg rename to sound/voice/human/male/gored3.ogg diff --git a/sound/voice/human_male_gored_1.ogg b/sound/voice/human/male/gored_1.ogg similarity index 100% rename from sound/voice/human_male_gored_1.ogg rename to sound/voice/human/male/gored_1.ogg diff --git a/sound/voice/human_male_gored_2.ogg b/sound/voice/human/male/gored_2.ogg similarity index 100% rename from sound/voice/human_male_gored_2.ogg rename to sound/voice/human/male/gored_2.ogg diff --git a/sound/voice/human_male_grenadethrow_1.ogg b/sound/voice/human/male/grenadethrow_1.ogg similarity index 100% rename from sound/voice/human_male_grenadethrow_1.ogg rename to sound/voice/human/male/grenadethrow_1.ogg diff --git a/sound/voice/human_male_grenadethrow_2.ogg b/sound/voice/human/male/grenadethrow_2.ogg similarity index 100% rename from sound/voice/human_male_grenadethrow_2.ogg rename to sound/voice/human/male/grenadethrow_2.ogg diff --git a/sound/voice/human_male_grenadethrow_3.ogg b/sound/voice/human/male/grenadethrow_3.ogg similarity index 100% rename from sound/voice/human_male_grenadethrow_3.ogg rename to sound/voice/human/male/grenadethrow_3.ogg diff --git a/sound/voice/human_male_laugh_1.ogg b/sound/voice/human/male/laugh_1.ogg similarity index 100% rename from sound/voice/human_male_laugh_1.ogg rename to sound/voice/human/male/laugh_1.ogg diff --git a/sound/voice/human_male_laugh_2.ogg b/sound/voice/human/male/laugh_2.ogg similarity index 100% rename from sound/voice/human_male_laugh_2.ogg rename to sound/voice/human/male/laugh_2.ogg diff --git a/sound/voice/human_male_medic.ogg b/sound/voice/human/male/medic.ogg similarity index 100% rename from sound/voice/human_male_medic.ogg rename to sound/voice/human/male/medic.ogg diff --git a/sound/voice/human_male_medic2.ogg b/sound/voice/human/male/medic2.ogg similarity index 100% rename from sound/voice/human_male_medic2.ogg rename to sound/voice/human/male/medic2.ogg diff --git a/sound/voice/human_male_moan_1.ogg b/sound/voice/human/male/moan_1.ogg similarity index 100% rename from sound/voice/human_male_moan_1.ogg rename to sound/voice/human/male/moan_1.ogg diff --git a/sound/voice/human_male_pain_1.ogg b/sound/voice/human/male/pain_1.ogg similarity index 100% rename from sound/voice/human_male_pain_1.ogg rename to sound/voice/human/male/pain_1.ogg diff --git a/sound/voice/human_male_pain_10.ogg b/sound/voice/human/male/pain_10.ogg similarity index 100% rename from sound/voice/human_male_pain_10.ogg rename to sound/voice/human/male/pain_10.ogg diff --git a/sound/voice/human_male_pain_11.ogg b/sound/voice/human/male/pain_11.ogg similarity index 100% rename from sound/voice/human_male_pain_11.ogg rename to sound/voice/human/male/pain_11.ogg diff --git a/sound/voice/human_male_pain_2.ogg b/sound/voice/human/male/pain_2.ogg similarity index 100% rename from sound/voice/human_male_pain_2.ogg rename to sound/voice/human/male/pain_2.ogg diff --git a/sound/voice/human_male_pain_3.ogg b/sound/voice/human/male/pain_3.ogg similarity index 100% rename from sound/voice/human_male_pain_3.ogg rename to sound/voice/human/male/pain_3.ogg diff --git a/sound/voice/human_male_pain_4.ogg b/sound/voice/human/male/pain_4.ogg similarity index 100% rename from sound/voice/human_male_pain_4.ogg rename to sound/voice/human/male/pain_4.ogg diff --git a/sound/voice/human_male_pain_5.ogg b/sound/voice/human/male/pain_5.ogg similarity index 100% rename from sound/voice/human_male_pain_5.ogg rename to sound/voice/human/male/pain_5.ogg diff --git a/sound/voice/human_male_pain_6.ogg b/sound/voice/human/male/pain_6.ogg similarity index 100% rename from sound/voice/human_male_pain_6.ogg rename to sound/voice/human/male/pain_6.ogg diff --git a/sound/voice/human_male_pain_7.ogg b/sound/voice/human/male/pain_7.ogg similarity index 100% rename from sound/voice/human_male_pain_7.ogg rename to sound/voice/human/male/pain_7.ogg diff --git a/sound/voice/human_male_pain_8.ogg b/sound/voice/human/male/pain_8.ogg similarity index 100% rename from sound/voice/human_male_pain_8.ogg rename to sound/voice/human/male/pain_8.ogg diff --git a/sound/voice/human_male_pain_9.ogg b/sound/voice/human/male/pain_9.ogg similarity index 100% rename from sound/voice/human_male_pain_9.ogg rename to sound/voice/human/male/pain_9.ogg diff --git a/sound/voice/human_male_preburst1.ogg b/sound/voice/human/male/preburst1.ogg similarity index 100% rename from sound/voice/human_male_preburst1.ogg rename to sound/voice/human/male/preburst1.ogg diff --git a/sound/voice/human_male_preburst10.ogg b/sound/voice/human/male/preburst10.ogg similarity index 100% rename from sound/voice/human_male_preburst10.ogg rename to sound/voice/human/male/preburst10.ogg diff --git a/sound/voice/human_male_preburst2.ogg b/sound/voice/human/male/preburst2.ogg similarity index 100% rename from sound/voice/human_male_preburst2.ogg rename to sound/voice/human/male/preburst2.ogg diff --git a/sound/voice/human_male_preburst3.ogg b/sound/voice/human/male/preburst3.ogg similarity index 100% rename from sound/voice/human_male_preburst3.ogg rename to sound/voice/human/male/preburst3.ogg diff --git a/sound/voice/human_male_preburst4.ogg b/sound/voice/human/male/preburst4.ogg similarity index 100% rename from sound/voice/human_male_preburst4.ogg rename to sound/voice/human/male/preburst4.ogg diff --git a/sound/voice/human_male_preburst5.ogg b/sound/voice/human/male/preburst5.ogg similarity index 100% rename from sound/voice/human_male_preburst5.ogg rename to sound/voice/human/male/preburst5.ogg diff --git a/sound/voice/human_male_preburst6.ogg b/sound/voice/human/male/preburst6.ogg similarity index 100% rename from sound/voice/human_male_preburst6.ogg rename to sound/voice/human/male/preburst6.ogg diff --git a/sound/voice/human_male_preburst7.ogg b/sound/voice/human/male/preburst7.ogg similarity index 100% rename from sound/voice/human_male_preburst7.ogg rename to sound/voice/human/male/preburst7.ogg diff --git a/sound/voice/human_male_preburst8.ogg b/sound/voice/human/male/preburst8.ogg similarity index 100% rename from sound/voice/human_male_preburst8.ogg rename to sound/voice/human/male/preburst8.ogg diff --git a/sound/voice/human_male_preburst9.ogg b/sound/voice/human/male/preburst9.ogg similarity index 100% rename from sound/voice/human_male_preburst9.ogg rename to sound/voice/human/male/preburst9.ogg diff --git a/sound/voice/human_male_scream_1.ogg b/sound/voice/human/male/scream_1.ogg similarity index 100% rename from sound/voice/human_male_scream_1.ogg rename to sound/voice/human/male/scream_1.ogg diff --git a/sound/voice/human_male_scream_2.ogg b/sound/voice/human/male/scream_2.ogg similarity index 100% rename from sound/voice/human_male_scream_2.ogg rename to sound/voice/human/male/scream_2.ogg diff --git a/sound/voice/human_male_scream_3.ogg b/sound/voice/human/male/scream_3.ogg similarity index 100% rename from sound/voice/human_male_scream_3.ogg rename to sound/voice/human/male/scream_3.ogg diff --git a/sound/voice/human_male_scream_4.ogg b/sound/voice/human/male/scream_4.ogg similarity index 100% rename from sound/voice/human_male_scream_4.ogg rename to sound/voice/human/male/scream_4.ogg diff --git a/sound/voice/human_male_scream_5.ogg b/sound/voice/human/male/scream_5.ogg similarity index 100% rename from sound/voice/human_male_scream_5.ogg rename to sound/voice/human/male/scream_5.ogg diff --git a/sound/voice/human_male_scream_6.ogg b/sound/voice/human/male/scream_6.ogg similarity index 100% rename from sound/voice/human_male_scream_6.ogg rename to sound/voice/human/male/scream_6.ogg diff --git a/sound/voice/human_male_scream_7.ogg b/sound/voice/human/male/scream_7.ogg similarity index 100% rename from sound/voice/human_male_scream_7.ogg rename to sound/voice/human/male/scream_7.ogg diff --git a/sound/voice/human_male_sigh_1.ogg b/sound/voice/human/male/sigh_1.ogg similarity index 100% rename from sound/voice/human_male_sigh_1.ogg rename to sound/voice/human/male/sigh_1.ogg diff --git a/sound/voice/human_male_warcry_1.ogg b/sound/voice/human/male/warcry_1.ogg similarity index 100% rename from sound/voice/human_male_warcry_1.ogg rename to sound/voice/human/male/warcry_1.ogg diff --git a/sound/voice/human_male_warcry_10.ogg b/sound/voice/human/male/warcry_10.ogg similarity index 100% rename from sound/voice/human_male_warcry_10.ogg rename to sound/voice/human/male/warcry_10.ogg diff --git a/sound/voice/human_male_warcry_11.ogg b/sound/voice/human/male/warcry_11.ogg similarity index 100% rename from sound/voice/human_male_warcry_11.ogg rename to sound/voice/human/male/warcry_11.ogg diff --git a/sound/voice/human_male_warcry_12.ogg b/sound/voice/human/male/warcry_12.ogg similarity index 100% rename from sound/voice/human_male_warcry_12.ogg rename to sound/voice/human/male/warcry_12.ogg diff --git a/sound/voice/human_male_warcry_13.ogg b/sound/voice/human/male/warcry_13.ogg similarity index 100% rename from sound/voice/human_male_warcry_13.ogg rename to sound/voice/human/male/warcry_13.ogg diff --git a/sound/voice/human_male_warcry_14.ogg b/sound/voice/human/male/warcry_14.ogg similarity index 100% rename from sound/voice/human_male_warcry_14.ogg rename to sound/voice/human/male/warcry_14.ogg diff --git a/sound/voice/human_male_warcry_15.ogg b/sound/voice/human/male/warcry_15.ogg similarity index 100% rename from sound/voice/human_male_warcry_15.ogg rename to sound/voice/human/male/warcry_15.ogg diff --git a/sound/voice/human_male_warcry_16.ogg b/sound/voice/human/male/warcry_16.ogg similarity index 100% rename from sound/voice/human_male_warcry_16.ogg rename to sound/voice/human/male/warcry_16.ogg diff --git a/sound/voice/human_male_warcry_17.ogg b/sound/voice/human/male/warcry_17.ogg similarity index 100% rename from sound/voice/human_male_warcry_17.ogg rename to sound/voice/human/male/warcry_17.ogg diff --git a/sound/voice/human_male_warcry_18.ogg b/sound/voice/human/male/warcry_18.ogg similarity index 100% rename from sound/voice/human_male_warcry_18.ogg rename to sound/voice/human/male/warcry_18.ogg diff --git a/sound/voice/human_male_warcry_19.ogg b/sound/voice/human/male/warcry_19.ogg similarity index 100% rename from sound/voice/human_male_warcry_19.ogg rename to sound/voice/human/male/warcry_19.ogg diff --git a/sound/voice/human_male_warcry_2.ogg b/sound/voice/human/male/warcry_2.ogg similarity index 100% rename from sound/voice/human_male_warcry_2.ogg rename to sound/voice/human/male/warcry_2.ogg diff --git a/sound/voice/human_male_warcry_20.ogg b/sound/voice/human/male/warcry_20.ogg similarity index 100% rename from sound/voice/human_male_warcry_20.ogg rename to sound/voice/human/male/warcry_20.ogg diff --git a/sound/voice/human_male_warcry_21.ogg b/sound/voice/human/male/warcry_21.ogg similarity index 100% rename from sound/voice/human_male_warcry_21.ogg rename to sound/voice/human/male/warcry_21.ogg diff --git a/sound/voice/human_male_warcry_22.ogg b/sound/voice/human/male/warcry_22.ogg similarity index 100% rename from sound/voice/human_male_warcry_22.ogg rename to sound/voice/human/male/warcry_22.ogg diff --git a/sound/voice/human_male_warcry_23.ogg b/sound/voice/human/male/warcry_23.ogg similarity index 100% rename from sound/voice/human_male_warcry_23.ogg rename to sound/voice/human/male/warcry_23.ogg diff --git a/sound/voice/human_male_warcry_24.ogg b/sound/voice/human/male/warcry_24.ogg similarity index 100% rename from sound/voice/human_male_warcry_24.ogg rename to sound/voice/human/male/warcry_24.ogg diff --git a/sound/voice/human_male_warcry_25.ogg b/sound/voice/human/male/warcry_25.ogg similarity index 100% rename from sound/voice/human_male_warcry_25.ogg rename to sound/voice/human/male/warcry_25.ogg diff --git a/sound/voice/human_male_warcry_26.ogg b/sound/voice/human/male/warcry_26.ogg similarity index 100% rename from sound/voice/human_male_warcry_26.ogg rename to sound/voice/human/male/warcry_26.ogg diff --git a/sound/voice/human_male_warcry_27.ogg b/sound/voice/human/male/warcry_27.ogg similarity index 100% rename from sound/voice/human_male_warcry_27.ogg rename to sound/voice/human/male/warcry_27.ogg diff --git a/sound/voice/human_male_warcry_28.ogg b/sound/voice/human/male/warcry_28.ogg similarity index 100% rename from sound/voice/human_male_warcry_28.ogg rename to sound/voice/human/male/warcry_28.ogg diff --git a/sound/voice/human_male_warcry_29.ogg b/sound/voice/human/male/warcry_29.ogg similarity index 100% rename from sound/voice/human_male_warcry_29.ogg rename to sound/voice/human/male/warcry_29.ogg diff --git a/sound/voice/human_male_warcry_3.ogg b/sound/voice/human/male/warcry_3.ogg similarity index 100% rename from sound/voice/human_male_warcry_3.ogg rename to sound/voice/human/male/warcry_3.ogg diff --git a/sound/voice/human_male_warcry_4.ogg b/sound/voice/human/male/warcry_4.ogg similarity index 100% rename from sound/voice/human_male_warcry_4.ogg rename to sound/voice/human/male/warcry_4.ogg diff --git a/sound/voice/human_male_warcry_5.ogg b/sound/voice/human/male/warcry_5.ogg similarity index 100% rename from sound/voice/human_male_warcry_5.ogg rename to sound/voice/human/male/warcry_5.ogg diff --git a/sound/voice/human_male_warcry_6.ogg b/sound/voice/human/male/warcry_6.ogg similarity index 100% rename from sound/voice/human_male_warcry_6.ogg rename to sound/voice/human/male/warcry_6.ogg diff --git a/sound/voice/human_male_warcry_7.ogg b/sound/voice/human/male/warcry_7.ogg similarity index 100% rename from sound/voice/human_male_warcry_7.ogg rename to sound/voice/human/male/warcry_7.ogg diff --git a/sound/voice/human_male_warcry_8.ogg b/sound/voice/human/male/warcry_8.ogg similarity index 100% rename from sound/voice/human_male_warcry_8.ogg rename to sound/voice/human/male/warcry_8.ogg diff --git a/sound/voice/human_male_warcry_9.ogg b/sound/voice/human/male/warcry_9.ogg similarity index 100% rename from sound/voice/human_male_warcry_9.ogg rename to sound/voice/human/male/warcry_9.ogg diff --git a/sound/voice/human_male_yawn_1.ogg b/sound/voice/human/male/yawn_1.ogg similarity index 100% rename from sound/voice/human_male_yawn_1.ogg rename to sound/voice/human/male/yawn_1.ogg diff --git a/sound/voice/sound_voice_human_whistle1.ogg b/sound/voice/human/whistle1.ogg similarity index 100% rename from sound/voice/sound_voice_human_whistle1.ogg rename to sound/voice/human/whistle1.ogg diff --git a/sound/voice/liveagain.ogg b/sound/voice/liveagain.ogg deleted file mode 100644 index c2c1df9bc37b91a9e9890d6782e4dc77692be257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28143 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 Date: Fri, 26 Jul 2024 11:16:04 +0300 Subject: [PATCH 09/10] Xeno and a bit of defines cleanup. (#41) * voice folder * b18 * predator * human male * human female * predalien * alien * larva * queen * oops * effect folder * behemoth * alien * explosions * behemoth2 * alien footsteps * Revert "alien footsteps" This reverts commit 73b313d707df830947ab08280dfe2c4044337ba3. * Reapply "alien footsteps" This reverts commit ee800cfa261041ebed2005bc073c0af147f00d3f. * hmmm * Update sound.dm * Update __game.dm * Update _radio.dm * hmm * eh * etc * icons * fixes * forgot * Update code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm Co-authored-by: homexp13 <52973135+homexp13@users.noreply.github.com> Signed-off-by: Helg2 <93882977+Helg2@users.noreply.github.com> * Update sentries.dm * hmm * Vet * conflicts * conflicts * Delete abilities_wraith.dm --------- Signed-off-by: Helg2 <93882977+Helg2@users.noreply.github.com> Co-authored-by: homexp13 <52973135+homexp13@users.noreply.github.com> --- code/__DEFINES/__game.dm | 23 - code/__DEFINES/_radio.dm | 7 +- code/__DEFINES/actions.dm | 3 - code/__DEFINES/area.dm | 2 +- code/__DEFINES/cooldowns.dm | 1 - code/__DEFINES/dcs/signals.dm | 5 +- code/__DEFINES/is_helpers.dm | 2 - code/__DEFINES/mobs.dm | 37 +- code/__DEFINES/obj_flags.dm | 6 +- code/__DEFINES/traits.dm | 2 - code/__DEFINES/xeno.dm | 27 +- code/_globalvars/bitfields.dm | 4 - code/datums/actions/ability_actions.dm | 5 - code/datums/actions/xeno_action.dm | 10 - code/datums/components/riding/riding_mob.dm | 75 -- code/datums/gamemodes/crash.dm | 5 - code/datums/keybinding/xeno.dm | 190 ----- code/datums/round_statistics.dm | 4 +- code/datums/status_effects/xeno_buffs.dm | 79 -- code/game/objects/effects/aliens.dm | 15 - .../temporary_visuals/miscellaneous.dm | 7 - code/game/objects/items/radio/headset.dm | 4 - code/game/objects/structures/window.dm | 1 - code/modules/admin/topic.dm | 17 - code/modules/ai/ai_behaviors/ai_behavior.dm | 3 - code/modules/ai/ai_behaviors/xeno/puppet.dm | 187 ----- .../mob/living/carbon/human/examine.dm | 7 - .../mob/living/carbon/human/human_defines.dm | 2 +- .../castes/behemoth/castedatum_behemoth.dm | 3 - .../castes/boiler/abilities_boiler.dm | 4 +- .../castes/boiler/castedatum_boiler.dm | 3 - .../xenomorph/castes/bull/castedatum_bull.dm | 1 - .../castes/carrier/castedatum_carrier.dm | 1 - .../castes/chimera/abilities_chimera.dm | 17 +- .../castes/chimera/castedatum_chimera.dm | 6 +- .../castes/crusher/castedatum_crusher.dm | 2 - .../castes/defender/castedatum_defender.dm | 2 - .../castes/defiler/castedatum_defiler.dm | 2 - .../castes/drone/castedatum_drone.dm | 2 - .../castes/gorger/castedatum_gorger.dm | 2 - .../castes/hivelord/castedatum_hivelord.dm | 1 - .../xenomorph/castes/hivemind/hivemind.dm | 3 +- .../castes/hunter/castedatum_hunter.dm | 1 - .../xenomorph/castes/king/castedatum_king.dm | 1 - .../castes/panther/castedatum_panther.dm | 1 - .../praetorian/castedatum_praetorian.dm | 2 - .../castes/puppet/abilities_puppet.dm | 28 - .../castes/puppet/castedatum_puppet.dm | 26 - .../carbon/xenomorph/castes/puppet/puppet.dm | 68 -- .../castes/puppeteer/abilities_puppeteer.dm | 527 ------------ .../castes/puppeteer/castedatum_puppeteer.dm | 84 -- .../xenomorph/castes/puppeteer/puppeteer.dm | 29 - .../castes/queen/castedatum_queen.dm | 1 - .../castes/ravager/castedatum_ravager.dm | 2 - .../castes/runner/castedatum_runner.dm | 1 - .../castes/sentinel/castedatum_sentinel.dm | 1 - .../castes/shrike/castedatum_shrike.dm | 3 - .../spiderling/castedatum_spiderling.dm | 39 - .../xenomorph/castes/spiderling/spiderling.dm | 276 ------- .../castes/spitter/castedatum_spitter.dm | 1 - .../castes/warlock/abilities_warlock.dm | 2 +- .../castes/warlock/castedatum_warlock.dm | 1 - .../castes/warrior/castedatum_warrior.dm | 1 - .../xenomorph/castes/widow/abilities_widow.dm | 478 ----------- .../castes/widow/castedatum_widow.dm | 96 --- .../carbon/xenomorph/castes/widow/widow.dm | 66 -- .../castes/wraith/abilities_wraith.dm | 749 ------------------ .../castes/wraith/castedatum_wraith.dm | 79 -- .../carbon/xenomorph/castes/wraith/wraith.dm | 19 - .../mob/living/carbon/xenomorph/hive_datum.dm | 24 +- .../living/carbon/xenomorph/xeno_defines.dm | 33 +- .../mob/living/carbon/xenomorph/xenoprocs.dm | 7 - .../living/carbon/xenomorph/xenoupgrade.dm | 56 -- code/modules/predator/yautja/items.dm | 1 - code/modules/projectiles/ammo_datums.dm | 84 -- code/modules/projectiles/sentries.dm | 2 +- code/modules/vehicles/armored/__armored.dm | 2 +- code/modules/vehicles/mecha/_mecha.dm | 2 +- code/modules/xenomorph/tunnel.dm | 2 +- code/modules/xenomorph/turret.dm | 2 +- icons/UI_Icons/map_blips.dmi | Bin 16667 -> 12900 bytes icons/Xeno/actions.dmi | Bin 90128 -> 78510 bytes icons/Xeno/castes/baneling.dmi | Bin 35465 -> 0 bytes icons/Xeno/castes/puppeteer.dmi | Bin 17780 -> 0 bytes icons/Xeno/castes/widow.dmi | Bin 18920 -> 0 bytes icons/Xeno/castes/wraith.dmi | Bin 46668 -> 0 bytes icons/mob/hud.dmi | Bin 38790 -> 38816 bytes tgmc.dme | 15 - 88 files changed, 45 insertions(+), 3546 deletions(-) delete mode 100644 code/modules/ai/ai_behaviors/xeno/puppet.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppet/abilities_puppet.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppet/puppet.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/widow/castedatum_widow.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/widow/widow.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm delete mode 100644 code/modules/mob/living/carbon/xenomorph/castes/wraith/wraith.dm delete mode 100644 icons/Xeno/castes/baneling.dmi delete mode 100644 icons/Xeno/castes/puppeteer.dmi delete mode 100644 icons/Xeno/castes/widow.dmi delete mode 100644 icons/Xeno/castes/wraith.dmi diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm index ad4fa14628f..234493baed2 100644 --- a/code/__DEFINES/__game.dm +++ b/code/__DEFINES/__game.dm @@ -38,7 +38,6 @@ #define INVISIBILITY_ABSTRACT 101 //only used for abstract objects (e.g. spacevine_controller), things that are not really there. - //Object specific defines #define CANDLE_LUM 3 //For how bright candles are @@ -47,24 +46,11 @@ #define SEC_LEVEL_RED 2 #define SEC_LEVEL_DELTA 3 - -//================================================= -#define HOSTILE_STANCE_IDLE 1 -#define HOSTILE_STANCE_ALERT 2 -#define HOSTILE_STANCE_ATTACK 3 -#define HOSTILE_STANCE_ATTACKING 4 -#define HOSTILE_STANCE_TIRED 5 -//================================================= - - //================================================= //Game mode related defines. #define TRANSITIONEDGE 3 //Distance from edge to move to another z-level -//Flags for zone sleeping -#define ZONE_ACTIVE 1 -#define ZONE_SLEEPING 0 #define GET_RANDOM_FREQ rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. //ceiling types @@ -77,7 +63,6 @@ #define CEILING_DEEP_UNDERGROUND 6 #define CEILING_DEEP_UNDERGROUND_METAL 6 - // Default font settings #define FONT_SIZE "5pt" #define FONT_COLOR "#09f" @@ -89,7 +74,6 @@ #define GAME_YEAR (text2num(time2text(world.realtime, "YYYY")) + 395) - #define MAX_MESSAGE_LEN 1024 #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_BOOK_MESSAGE_LEN 9216 @@ -97,13 +81,6 @@ #define MAX_BROADCAST_LEN 512 #define MAX_NAME_HYPO 3 - -//for whether AI eyes see static, and whether it is mouse-opaque or not -#define USE_STATIC_NONE 0 -#define USE_STATIC_TRANSPARENT 1 -#define USE_STATIC_OPAQUE 2 - - #define CINEMATIC_DEFAULT 1 #define CINEMATIC_SELFDESTRUCT 2 #define CINEMATIC_SELFDESTRUCT_MISS 3 diff --git a/code/__DEFINES/_radio.dm b/code/__DEFINES/_radio.dm index 07a1a131fca..0f0c5ff1503 100644 --- a/code/__DEFINES/_radio.dm +++ b/code/__DEFINES/_radio.dm @@ -60,13 +60,13 @@ #define RADIO_CHANNEL_ECHO "Echo" #define RADIO_CHANNEL_DS1 "Alamo" #define RADIO_CHANNEL_DS2 "Normandy" -#define RADIO_CHANNEL_YAUTJA "Yautja" //RU TGMC ADDITION +#define RADIO_CHANNEL_YAUTJA "Yautja" #define MIN_FREE_FREQ 1201 // ------------------------------------------------- // Frequencies are always odd numbers and range from 1201 to 1599. //Preds -#define YAUT_FREQ 1233 //RU TGMC ADDITION +#define YAUT_FREQ 1233 //SOM squads #define FREQ_COMMAND_SOM 1235 @@ -119,14 +119,11 @@ #define FREQ_CIV_GENERAL 1469 - #define MAX_FREQ 1489 // ------------------------------------------------------ - #define MAX_FREE_FREQ 1599 // ------------------------------------------------- - // Transmission types. #define TRANSMISSION_WIRE 0 // some sort of wired connection, not used #define TRANSMISSION_RADIO 1 // electromagnetic radiation (default) diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index f7649a678ee..67157524c32 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -13,15 +13,12 @@ #define ABILITY_IGNORE_DEAD_TARGET (1 << 13) // bypass checks of a dead target #define ABILITY_IGNORE_SELECTED_ABILITY (1 << 14) // bypass the check of the selected ability #define ABILITY_DO_AFTER_ATTACK (1 << 15) //Let the xeno attack the object and perform the ability. -#define ABILITY_USE_BURROWED (1 << 16) // ignore being burrowed -#define ABILITY_USE_ROOTED (1 << 17) // ignore being currently rooted #define ABILITY_TURF_TARGET (1 << 0) // ability targets turfs #define ABILITY_MOB_TARGET (1 << 1) // ability targets mobs #define ABILITY_KEYBIND_USE_ABILITY (1 << 0) // immediately activate even if selectable - #define ABILITY_CRASH (1<<0) #define ABILITY_NUCLEARWAR (1<<1) #define ABILITY_ALL_GAMEMODE (ABILITY_CRASH|ABILITY_NUCLEARWAR) diff --git a/code/__DEFINES/area.dm b/code/__DEFINES/area.dm index 69f79abf673..7bfd6ce6308 100644 --- a/code/__DEFINES/area.dm +++ b/code/__DEFINES/area.dm @@ -14,7 +14,7 @@ #define NO_DROPPOD (1<<2) ///Make this area immune to cas/ob laser. Explosions can still go through if the ob is called in a nearby area #define OB_CAS_IMMUNE (1<<3) -///Prevent wraith from portaling there, and hivemind to weed there when shutters are closed +///Prevent hivemind to weed there when shutters are closed #define MARINE_BASE (1<<4) ///radio works even underground #define ALWAYS_RADIO (1<<5) diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 6633b1f43b7..561517ce170 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -45,7 +45,6 @@ #define COOLDOWN_GAS_BREATH "cooldown_gas_breath" #define COOLDOWN_SIGNALLER_SEND "cooldown_signaller_send" #define COOLDOWN_BIKE_FUEL_MESSAGE "cooldown_bikee_fuel_message" -#define COOLDOWN_WRAITH_PORTAL_TELEPORTED "cooldown_wraith_portal_teleported" #define COOLDOWN_ITEM_TRICK "cooldown_item_trick" #define COOLDOWN_RAVAGER_FLAMER_ACT "cooldown_ravager_flamer_act" #define COOLDOWN_DROPPOD_TARGETTING "cooldown_droppod_targetting" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 3d596d510ed..f479b311e6d 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -229,7 +229,7 @@ ///from base of atom/get_mechanics_info(): (/mob) #define COMSIG_ATOM_GET_MECHANICS_INFO "atom_mechanics_info" #define COMPONENT_MECHANICS_CHANGE (1<<0) - + ///from base of [/atom/proc/update_appearance]: (updates) #define COMSIG_ATOM_UPDATE_APPEARANCE "atom_update_appearance" /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its name. @@ -678,9 +678,6 @@ #define COMSIG_XENO_PROJECTILE_HIT "xeno_projectile_hit" ///from [/mob/living/carbon/xenomorph/projectile_hit] called when a projectile hits a xeno but before confirmation of a hit (can miss due to inaccuracy/evasion) #define COMPONENT_PROJECTILE_DODGE (1<<0) -#define COMSIG_XENOMORPH_WRAITH_RECALL "xenomorph_wraith_recall" - #define COMPONENT_BANISH_TARGETS_EXIST (1<<0) - #define COMSIG_XENO_PSYCHIC_LINK_REMOVED "xeno_psychic_link_removed" #define COMSIG_XENOMORPH_LEAP_BUMP "xenomorph_leap_bump" //from /mob/living/carbon/xenomorph/bump diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index d63ab0aef12..326ef6b9c79 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -111,8 +111,6 @@ #define isxenodefiler(A) (istype(A, /mob/living/carbon/xenomorph/defiler)) #define isxenobull(A) (istype(A, /mob/living/carbon/xenomorph/bull)) #define isxenohivemind(A) (istype(A, /mob/living/carbon/xenomorph/hivemind)) -#define isxenowraith(A) (istype(A, /mob/living/carbon/xenomorph/wraith)) -//#define isxenowidow(A) (istype(A, /mob/living/carbon/xenomorph/widow)) //RUTGMC DELETION, WIDOW DELETION #define isxenowarlock(A) (istype(A, /mob/living/carbon/xenomorph/warlock)) #define isxenoking(A) (istype(A, /mob/living/carbon/xenomorph/king)) #define isxenobehemoth(A) (istype(A, /mob/living/carbon/xenomorph/behemoth)) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index f057d3b856b..9a99a003a79 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -714,36 +714,17 @@ GLOBAL_LIST_INIT(xenoupgradetiers, list(XENO_UPGRADE_BASETYPE, XENO_UPGRADE_INVA #define SENTINEL_INTOXICATED_RESIST_REDUCTION 8 //Amount of stacks removed every time the Intoxicated debuff is Resisted against. #define SENTINEL_INTOXICATED_SANGUINAL_INCREASE 3 //Amount of debuff stacks applied for every tick of Sanguinal. -//Wraith defines - -#define WRAITH_BLINK_DRAG_NONFRIENDLY_MULTIPLIER 20 //The amount we multiply the cooldown by when we teleport while dragging a non-friendly target -#define WRAITH_BLINK_DRAG_FRIENDLY_MULTIPLIER 4 //The amount we multiply the cooldown by when we teleport while dragging a friendly target -#define WRAITH_BLINK_RANGE 3 - -#define WRAITH_BANISH_BASE_DURATION 10 SECONDS -#define WRAITH_BANISH_NONFRIENDLY_LIVING_MULTIPLIER 0.5 -#define WRAITH_BANISH_VERY_SHORT_MULTIPLIER 0.3 - -#define WRAITH_TELEPORT_DEBUFF_STAGGER_STACKS 2 SECONDS //Stagger and slow stacks applied to adjacent living hostiles before/after a teleport -#define WRAITH_TELEPORT_DEBUFF_SLOWDOWN_STACKS 3 //Stagger and slow stacks applied to adjacent living hostiles before/after a teleport - //Larva defines #define LARVA_VENT_CRAWL_TIME 1 SECONDS //Larva can crawl into vents fast -/* RUTGMC DELETION, WIDOW DELETION -//Widow Defines -#define WIDOW_SPEED_BONUS 1 // How much faster widow moves while she has wall_speedup element -#define WIDOW_WEB_HOOK_RANGE 10 // how far the web hook can reach -#define WIDOW_WEB_HOOK_MIN_RANGE 3 // the minimum range that the hook must travel to use the ability -#define WIDOW_WEB_HOOK_SPEED 3 // how fast widow yeets herself when using web hook - -//Spiderling defines -#define TIME_TO_DISSOLVE 5 SECONDS -#define SPIDERLING_RAGE_RANGE 10 // how close a nearby human has to be in order to be targeted -*/ //Praetorian defines #define PRAE_CHARGEDISTANCE 6 +// Chimera defines +//Stagger and slowdown stacks applied to adjacent living hostiles before/after a teleport +#define CHIMERA_TELEPORT_DEBUFF_STAGGER_STACKS 2 SECONDS +#define CHIMERA_TELEPORT_DEBUFF_SLOWDOWN_STACKS 3 + //misc #define STANDARD_SLOWDOWN_REGEN 0.3 @@ -835,14 +816,6 @@ GLOBAL_LIST_INIT(human_body_parts, list(BODY_ZONE_HEAD, #define IGNORE_LOC_CHANGE (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE) -/* RUTGMC DELETION -#define TIER_ONE_THRESHOLD 420 - -#define TIER_TWO_THRESHOLD 840 - -#define TIER_THREE_THRESHOLD 1750 -*/ - // Pheromones and buff orders #define AURA_XENO_RECOVERY "Recovery" diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index fe8f881952c..324034253df 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -12,10 +12,8 @@ #define XENO_DAMAGEABLE (1<<3) //xenos can damage this by slashing and spitting #define DROPSHIP_IMMUNE (1<<4) //dropship cannot land on it #define CRUSHER_IMMUNE (1<<5) //is immune to crusher's charge destruction -#define BANISH_IMMUNE (1<<6) //is immune it wraith's banish ability -#define PLASMACUTTER_IMMUNE (1<<7) //is immune to being cut by a plasmacutter -#define PROJECTILE_IMMUNE (1<<8) //Cannot be hit by projectiles -#define PORTAL_IMMUNE (1<<9) //Cannot be teleported by wraith's portals +#define PLASMACUTTER_IMMUNE (1<<6) //is immune to being cut by a plasmacutter +#define PROJECTILE_IMMUNE (1<<7) //Cannot be hit by projectiles #define RESIST_ALL (UNACIDABLE|INDESTRUCTIBLE|PLASMACUTTER_IMMUNE) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index ef98bccb3b4..fab56ea4f19 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -101,7 +101,6 @@ #define OPTABLE_TRAIT "optable" #define TIMESHIFT_TRAIT "timeshift" #define BRAIN_TRAIT "brain" -//#define WIDOW_ABILITY_TRAIT "widow_ability_trait" //RUTGMC DELETION, WIDOW DELETION #define PSYCHIC_BLAST_ABILITY_TRAIT "psychic_blast_ability_trait" #define PSYCHIC_CRUSH_ABILITY_TRAIT "psychic_crush_ability_trait" #define VORTEX_ABILITY_TRAIT "vortex_ability_trait" @@ -183,7 +182,6 @@ #define TRAIT_LEGLESS "legless" //Has lost all the appendages needed to stay standing up. #define TRAIT_NOPLASMAREGEN "noplasmaregen"//xeno plasma wont recharge #define TRAIT_UNDEFIBBABLE "undefibbable"//human can't be revived -// #define TRAIT_HOLLOW "hollowedout" //examine trait for puppeteer #define TRAIT_IMMEDIATE_DEFIB "immediate_defib"//immediately revives when defibbed, rather than just healing #define TRAIT_HEALING_INFUSION "healing_infusion"//greatly improves natural healing for xenos #define TRAIT_PSY_DRAINED "psy_drained"//mob was drained of life force by a xenos diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 90c3b297c7c..43f5af92c85 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -55,12 +55,7 @@ #define WEAK_ACID_STRENGTH 0.016 #define REGULAR_ACID_STRENGTH 0.04 #define STRONG_ACID_STRENGTH 0.1 -/* RU TGMC EDIT -#define PUPPET_RECALL "recall puppet" -#define PUPPET_SEEK_CLOSEST "seeking closest and attack order" //not xeno-usable -#define PUPPET_ATTACK "seek and attack order" -#define PUPPET_SCOUT "scouting order" -RU TGMC EDIT*/ + //List of weed types GLOBAL_LIST_INIT(weed_type_list, typecacheof(list( /obj/alien/weeds/node, @@ -134,24 +129,6 @@ GLOBAL_LIST_INIT(resin_images_list, list( ALIEN_NEST = image('icons/Xeno/actions.dmi', icon_state = ALIEN_NEST) )) -/* RU TGMC EDIT PUPPETEER REMOVAL -//List of puppeteer order images -GLOBAL_LIST_INIT(puppeteer_order_images_list, list( - PUPPET_ATTACK = image('icons/Xeno/actions.dmi', icon_state = "enrage"), - PUPPET_SCOUT = image('icons/mob/actions.dmi', icon_state = "66"), - PUPPET_RECALL = image('icons/mob/actions.dmi', icon_state = "rally") - )) -RU TGMC EDIT PUPPETEER REMOVAL*/ -//RUTGMC EDIT BEGIN - Moved to modular_RUtgmc\code\__DEFINES\xeno.dm -/* -//List of puppeteer pheromone images -GLOBAL_LIST_INIT(puppeteer_phero_images_list, list( - AURA_XENO_BLESSFURY = image('icons/mob/actions.dmi', icon_state = "Fury"), - AURA_XENO_BLESSWARDING = image('icons/mob/actions.dmi', icon_state = "Warding"), - AURA_XENO_BLESSFRENZY = image('icons/mob/actions.dmi', icon_state = "Frenzy"), - )) -*/ //RUTGMC EDIT END - GLOBAL_LIST_INIT(panther_toxin_type_list, list( /datum/reagent/toxin/xeno_hemodile, /datum/reagent/toxin/xeno_transvitox, @@ -215,6 +192,4 @@ GLOBAL_LIST_INIT(xeno_ai_spawnable, list( /// Failed to other blockers such as egg, power plant , coocon , traps #define ERROR_CONSTRUCT 8 -#define PUPPET_WITHER_RANGE 15 - #define PRIMAL_WRATH_GAIN_MULTIPLIER 0.5 diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 83513a29487..b7f5d52513d 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -551,10 +551,8 @@ GLOBAL_LIST_INIT(bitfields, list( "XENO_DAMAGEABLE" = XENO_DAMAGEABLE, "DROPSHIP_IMMUNE" = DROPSHIP_IMMUNE, "CRUSHER_IMMUNE" = CRUSHER_IMMUNE, - "BANISH_IMMUNE" = BANISH_IMMUNE, "PLASMACUTTER_IMMUNE" = PLASMACUTTER_IMMUNE, "PROJECTILE_IMMUNE" = PROJECTILE_IMMUNE, - "PORTAL_IMMUNE" = PORTAL_IMMUNE ), "restrained_flags" = list( "RESTRAINED_XENO_NEST" = RESTRAINED_XENO_NEST, @@ -601,8 +599,6 @@ GLOBAL_LIST_INIT(bitfields, list( "ABILITY_IGNORE_DEAD_TARGET" = ABILITY_IGNORE_DEAD_TARGET, "ABILITY_IGNORE_SELECTED_ABILITY" = ABILITY_IGNORE_SELECTED_ABILITY, "ABILITY_DO_AFTER_ATTACK" = ABILITY_DO_AFTER_ATTACK, - "ABILITY_USE_BURROWED" = ABILITY_USE_BURROWED, - "ABILITY_USE_ROOTED" = ABILITY_USE_ROOTED ), "pipe_flags" = list( "PIPING_ALL_LAYER" = PIPING_ALL_LAYER, diff --git a/code/datums/actions/ability_actions.dm b/code/datums/actions/ability_actions.dm index fb5e2129d37..202cbc67f0f 100644 --- a/code/datums/actions/ability_actions.dm +++ b/code/datums/actions/ability_actions.dm @@ -90,11 +90,6 @@ carbon_owner.balloon_alert(carbon_owner, "Cannot, busy") return FALSE - if(!(flags_to_check & ABILITY_USE_BURROWED) && HAS_TRAIT(carbon_owner, TRAIT_BURROWED)) - if(!silent) - carbon_owner.balloon_alert(carbon_owner, "Cannot while burrowed") - return FALSE - if(!(flags_to_check & ABILITY_USE_CLOSEDTURF) && isclosedturf(get_turf(carbon_owner))) if(!silent) //Not converted to balloon alert as xeno.dm's balloon alert is simultaneously called and will overlap. diff --git a/code/datums/actions/xeno_action.dm b/code/datums/actions/xeno_action.dm index 0b1aa86c113..775a5249af5 100644 --- a/code/datums/actions/xeno_action.dm +++ b/code/datums/actions/xeno_action.dm @@ -37,11 +37,6 @@ X.balloon_alert(X, "Cannot while in crest defense") return FALSE - if(!(flags_to_check & ABILITY_USE_ROOTED) && HAS_TRAIT_FROM(X, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - if(!silent) - X.balloon_alert(X, "Cannot while rooted") - return FALSE - if(!(flags_to_check & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) if(!silent) X.balloon_alert(X, "Need [ability_cost - X.plasma_stored] more plasma") @@ -83,11 +78,6 @@ X.balloon_alert(X, "Cannot while in crest defense") return FALSE - if(!(flags_to_check & ABILITY_USE_ROOTED) && HAS_TRAIT_FROM(X, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - if(!silent) - X.balloon_alert(X, "Cannot while rooted") - return FALSE - if(!(flags_to_check & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) if(!silent) X.balloon_alert(X, "Need [ability_cost - X.plasma_stored] more plasma") diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index c6b718be36c..ad2710fa57e 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -276,78 +276,3 @@ . = riding_offsets["[mob_type]"] else if(riding_offsets["[RIDING_OFFSET_ALL]"]) . = riding_offsets["[RIDING_OFFSET_ALL]"] - -/* RUTGMC DELETION, WIDOW DELETION -// *************************************** -// *********** Widow -// *************************************** -/datum/component/riding/creature/widow - can_be_driven = FALSE - -/datum/component/riding/creature/widow/handle_specials() - . = ..() - var/mob/living/widow = parent - if(widow.stat == UNCONSCIOUS) //For spiderling guard - set_riding_offsets(1, list(TEXT_NORTH = list(0, 0), TEXT_SOUTH = list(0, 0), TEXT_EAST = list(0, 0), TEXT_WEST = list(0, 0))) - set_riding_offsets(2, list(TEXT_NORTH = list(16, 16), TEXT_SOUTH = list(16, 16), TEXT_EAST = list(16, 16), TEXT_WEST = list(16, 16))) - set_riding_offsets(3, list(TEXT_NORTH = list(-16, 16), TEXT_SOUTH = list(-16, 16), TEXT_EAST = list(-16, 16), TEXT_WEST = list(-16, 16))) - set_riding_offsets(4, list(TEXT_NORTH = list(16, 32), TEXT_SOUTH = list(16, -16), TEXT_EAST = list(16, -16), TEXT_WEST = list(16, -16))) - set_riding_offsets(5, list(TEXT_NORTH = list(0, -16), TEXT_SOUTH = list(-16, -16), TEXT_EAST = list(-16, -16), TEXT_WEST = list(-16, -16))) - set_vehicle_dir_layer(SOUTH, ABOVE_ALL_MOB_LAYER) - set_vehicle_dir_layer(NORTH, ABOVE_ALL_MOB_LAYER) - set_vehicle_dir_layer(EAST, ABOVE_ALL_MOB_LAYER) - set_vehicle_dir_layer(WEST, ABOVE_ALL_MOB_LAYER) - return - set_riding_offsets(1, list(TEXT_NORTH = list(-16, 9), TEXT_SOUTH = list(-16, 17), TEXT_EAST = list(-21, 7), TEXT_WEST = list(-6, 7))) - set_riding_offsets(2, list(TEXT_NORTH = list(16, 16), TEXT_SOUTH = list(16, 17), TEXT_EAST = list(21, 7), TEXT_WEST = list(6, 7))) - set_riding_offsets(3, list(TEXT_NORTH = list(8, 8), TEXT_SOUTH = list(-8, 21), TEXT_EAST = list(14, 11), TEXT_WEST = list(0, 2))) - set_riding_offsets(4, list(TEXT_NORTH = list(-8, 16), TEXT_SOUTH = list(-16, 13), TEXT_EAST = list(-21, 2), TEXT_WEST = list(6, 11))) - set_riding_offsets(5, list(TEXT_NORTH = list(8, 8), TEXT_SOUTH = list(8, 12), TEXT_EAST = list(21, 2), TEXT_WEST = list(-6, 11))) - set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) - set_vehicle_dir_layer(NORTH, ABOVE_LYING_MOB_LAYER) - set_vehicle_dir_layer(EAST, ABOVE_LYING_MOB_LAYER) - set_vehicle_dir_layer(WEST, ABOVE_LYING_MOB_LAYER) - -/datum/component/riding/creature/widow/Initialize(mob/living/riding_mob, force = FALSE, check_loc, lying_buckle, hands_needed, target_hands_needed, silent) - . = ..() - riding_mob.density = FALSE - -// If we call parent here , we get registered for COMSIG_MOVABLE_BUMP, and when we do bump, there will be a bad index runtime -/datum/component/riding/creature/widow/RegisterWithParent() - RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(vehicle_turned)) - RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, PROC_REF(vehicle_mob_unbuckle)) - RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(vehicle_moved)) - RegisterSignals(parent, list(COMSIG_XENOMORPH_ATTACK_LIVING, COMSIG_XENOMORPH_ATTACK_OBJ, COMSIG_XENOMORPH_ATTACK_HOSTILE_XENOMORPH), PROC_REF(check_widow_attack)) - -/datum/component/riding/creature/widow/vehicle_mob_unbuckle(datum/source, mob/living/former_rider, force = FALSE) - unequip_buckle_inhands(parent) - former_rider.density = initial(former_rider.density) - REMOVE_TRAIT(former_rider, TRAIT_IMMOBILE, WIDOW_ABILITY_TRAIT) - return ..() - -/// If the widow gets knocked over, force the riding rounys off and see if someone got hurt -/datum/component/riding/creature/widow/proc/check_widow_attack(mob/living/carbon/xenomorph/widow/carrying_widow) - SIGNAL_HANDLER - for(var/mob/living/rider AS in carrying_widow.buckled_mobs) - carrying_widow.unbuckle_mob(rider) - REMOVE_TRAIT(rider, TRAIT_IMMOBILE, WIDOW_ABILITY_TRAIT) - -// Spiderlings latch on to crit widows when guarding and cannot be kicked off.. -/datum/component/riding/creature/widow/ride_check(mob/living/rider) - var/mob/living/widow = parent - return widow.stat == UNCONSCIOUS - -//..nor can they be laid under widow.. -/datum/component/riding/creature/widow/handle_vehicle_layer(dir) - var/mob/living/widow = parent - if(widow.stat == UNCONSCIOUS) - return - return ..() - -//..and nor will they change direction. -/datum/component/riding/creature/widow/handle_vehicle_offsets(dir) - var/mob/living/widow = parent - if(widow.stat == UNCONSCIOUS) - dir = SOUTH - return ..() -*/ diff --git a/code/datums/gamemodes/crash.dm b/code/datums/gamemodes/crash.dm index 98b9ec0021b..a477016b622 100644 --- a/code/datums/gamemodes/crash.dm +++ b/code/datums/gamemodes/crash.dm @@ -115,11 +115,6 @@ if(isxenolarva(i)) // Larva var/mob/living/carbon/xenomorph/larva/X = i X.evolution_stored = X.xeno_caste.evolution_threshold //Immediate roundstart evo for larva. - /* RUTGMC DELETION - else // Handles Shrike etc - var/mob/living/carbon/xenomorph/X = i - X.upgrade_stored = X.xeno_caste.upgrade_threshold - */ /datum/game_mode/infestation/crash/announce() to_chat(world, span_round_header("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!")) diff --git a/code/datums/keybinding/xeno.dm b/code/datums/keybinding/xeno.dm index d6489299253..29e8bb276bf 100644 --- a/code/datums/keybinding/xeno.dm +++ b/code/datums/keybinding/xeno.dm @@ -948,196 +948,6 @@ keybind_signal = COMSIG_XENOABILITY_FLURRY hotkey_keys = list("Q") -/* RUTGMC DELETION, WIDOW DELETION -/datum/keybinding/xeno/burrow - name = "burrow" - full_name = "Widow: Burrow" - description = "Dig to the ground, making you invisible." - keybind_signal = COMSIG_XENOABILITY_BURROW - hotkey_keys = list("C") - -/datum/keybinding/xeno/web_spit - name = "Web Spit" - full_name = "Widow: Web Spit" - description = "Spit web at your target. Hitting the target will impede their functions depending on their hit location." - keybind_signal = COMSIG_XENOABILITY_WEB_SPIT - hotkey_keys = list("Q") - -/datum/keybinding/xeno/leash_ball - name = "Leash Ball" - full_name = "Widow: Leash Ball" - description = "Spit a huge web ball of web that snares groups of targets for a brief while." - keybind_signal = COMSIG_XENOABILITY_LEASH_BALL - hotkey_keys = list("E") - -/datum/keybinding/xeno/create_spiderling - name = "Birth Spiderling" - full_name = "Widow: Birth Spiderling" - description = "Give birth to a spiderling after a short charge-up." - keybind_signal = COMSIG_XENOABILITY_CREATE_SPIDERLING - hotkey_keys = list("F") - -/datum/keybinding/xeno/create_spiderling_using_cc - name = "Birth Spiderling using Cannibalise charges" - full_name = "Widow: Birth Spiderling using Cannibalise charges" - description = "Give birth to a spiderling after a short charge-up if you have any Cannibalise charges available." - keybind_signal = COMSIG_XENOABILITY_CREATE_SPIDERLING_USING_CC - hotkey_keys = list("H") - -/datum/keybinding/xeno/attach_spiderlings - name = "Attach Spiderlings" - full_name = "Widow: Attach Spiderlings" - description = "Scoop up and carry your spawn with you." - keybind_signal = COMSIG_XENOABILITY_ATTACH_SPIDERLINGS - hotkey_keys = list("X") - -/datum/keybinding/xeno/cannibalise - name = "Cannibalise Spiderling" - full_name = "Widow: Cannibalise Spiderling" - description = "Eat your own young and store their biomass for later." - keybind_signal = COMSIG_XENOABILITY_CANNIBALISE_SPIDERLING - hotkey_keys = list("G") - -/datum/keybinding/xeno/web_hook - name = "Web Hook" - full_name = "Widow: Web Hook" - description = "Shoot a strong web and pull yourself towards whatever it hits." - keybind_signal = COMSIG_XENOABILITY_WEB_HOOK - hotkey_keys = list("R") - -/datum/keybinding/xeno/spiderling_mark - name = "Spiderling Mark" - full_name = "Widow: Spiderling Mark" - description = "Signal your spawn to a target they shall attack." - keybind_signal = COMSIG_XENOABILITY_SPIDERLING_MARK - hotkey_keys = list("V") -*/ - -/* RU TGMC EDIT START -/datum/keybinding/xeno/rewind - name = "rewind" - full_name = "Wraith: Time Shift" - description = "Save the location and status of the target. When the time is up, the target location and status are restored" - keybind_signal = COMSIG_XENOABILITY_REWIND - hotkey_keys = list("C") - -/datum/keybinding/xeno/portal - name = "portal" - full_name = "Wraith: Portal" - description = "Place the first portal on your location. You can travel from portal one to portal two and vice versa." - keybind_signal =COMSIG_XENOABILITY_PORTAL - hotkey_keys = list("E") - -/datum/keybinding/xeno/portal_two - name = "portal_two" - full_name = "Wraith: Portal two" - description = "Place the second portal on your location. You can travel from portal one to portal two and vice versa." - keybind_signal =COMSIG_XENOABILITY_PORTAL_ALTERNATE - hotkey_keys = list("R") - -/datum/keybinding/xeno/blink - name = "wraith_blink" - full_name = "Wraith: Blink" - description = "Teleport to a space a short distance away within line of sight. Can teleport mobs you're dragging with you at the cost of higher cooldown." - keybind_signal = COMSIG_XENOABILITY_BLINK - hotkey_keys = list("Q") - -/datum/keybinding/xeno/banish - name = "banish" - full_name = "Wraith: Banish" - description = "Banish a creature or object a short distance away within line of sight to null space. Can target oneself and allies. Can be manually cancelled with Recall." - keybind_signal = COMSIG_XENOABILITY_BANISH - hotkey_keys = list("F") - -/datum/keybinding/xeno/recall - name = "recall" - full_name = "Wraith: Recall" - description = "Recall a target from netherspace, ending Banish's effect." - keybind_signal = COMSIG_XENOABILITY_RECALL - hotkey_keys = list("G") - -/datum/keybinding/xeno/timestop - name = "timestop" - full_name = "Wraith: Time stop" - description = "Freezes bullets in their course, and they will start to move again only after a certain time" - keybind_signal = COMSIG_XENOABILITY_TIMESTOP - hotkey_keys = list("V") -RU TGMC EDIT END*/ -/*RU TGMC EDIT PUPPETEER REMOVAL -/datum/keybinding/xeno/flay - name = "Flay" - full_name = "Puppeteer: Flay" - description = "Takes a chunk of flesh from the victim marine through a quick swiping motion, adding 100 biomass to your biomass collection." - keybind_signal = COMSIG_XENOABILITY_FLAY - -/datum/keybinding/xeno/pincushion - name = "Pincushion" - full_name = "Puppeteer: Pincushion" - description = "Launch a spine from your tail. This attack will help deter any organic as well as support your puppets and teammates in direct combat." - keybind_signal = COMSIG_XENOABILITY_PINCUSHION - -/datum/keybinding/xeno/dread - name = "Dreadful Presence" - full_name = "Puppeteer: Dreadful Presence" - description = "Emit a menacing presence, striking fear into the organics and slowing them for a short duration." - keybind_signal = COMSIG_XENOABILITY_DREADFULPRESENCE - -/datum/keybinding/xeno/refurbish_husk - name = "Refurbish Husk" - full_name = "Puppeteer: Refurbish Husk" - description = "Harvest the biomass and organs of a body in order to create a meat puppet to do your bidding." - keybind_signal = COMSIG_XENOABILITY_REFURBISHHUSK - -/datum/keybinding/xeno/stitch_puppet - name = "Stitch Puppet" - full_name = "Puppeteer: Stitch Puppet" - description = "Uses 350 biomass to create a flesh homunculus to do your bidding, at an adjacent target location." - keybind_signal = COMSIG_XENOABILITY_PUPPET - -/datum/keybinding/xeno/organic_bomb - name = "Organic Bomb" - full_name = "Puppeteer: Organic Bomb" - description = "Causes one of our puppets to detonate on selection, spewing acid out of the puppet's body in all directions, gibbing the puppet." - keybind_signal = COMSIG_XENOABILITY_ORGANICBOMB - -/datum/keybinding/xeno/tendrils - name = "Tendrils" - full_name = "Puppeteer: Tendrils" - description = "Burrow freshly created tendrils to tangle organics in a 3x3 patch." - keybind_signal = COMSIG_XENOABILITY_TENDRILS - -/datum/keybinding/xeno/send_orders_puppet_radial - name = "Give Orders to Puppets: Radial" - full_name = "Puppeteer: Give Orders to Puppets (Radial)" - description = "Give orders to your puppets, altering their behaviour." - keybind_signal = COMSIG_XENOABILITY_SENDORDERS_RADIAL - -/datum/keybinding/xeno/send_attack_order_puppet - name = "Give attack order" - full_name = "Puppeteer: Give Attack Order" - description = "Give your puppets order to attack" - keybind_signal = COMSIG_XENOABILITY_ATTACKORDER - -/datum/keybinding/xeno/send_recall_orders_puppet - name = "Give recall order" - full_name = "Puppeteer: Give Recall Order" - description = "Give your puppets order to recall" - keybind_signal = COMSIG_XENOABILITY_RECALLORDER - -/datum/keybinding/xeno/bestow_blessing - name = "Bestow Blessings" - full_name = "Puppeteer: Bestow Blessings" - description = "Give blessings to your puppets." - keybind_signal = COMSIG_XENOABILITY_BESTOWBLESSINGS -RU TGMC EDIT PUPPETEER REMOVAL*/ -/* RUTGMC DELETION -/datum/keybinding/xeno/behemoth_roll - name = "Roll" - full_name = "Behemoth: Roll" - description = "Curl up into a ball, sacrificing some offensive capabilities in exchange for greater movement speed." - keybind_signal = COMSIG_XENOABILITY_BEHEMOTH_ROLL -*/ - /datum/keybinding/xeno/landslide name = "Landslide" full_name = "Behemoth: Landslide" diff --git a/code/datums/round_statistics.dm b/code/datums/round_statistics.dm index 02bb1ff416c..df7baadc0ce 100644 --- a/code/datums/round_statistics.dm +++ b/code/datums/round_statistics.dm @@ -76,9 +76,6 @@ GLOBAL_DATUM_INIT(round_statistics, /datum/round_statistics, new) var/hivelord_healing_infusions = 0 var/spitter_acid_sprays = 0 var/spitter_scatter_spits = 0 - var/wraith_phase_shifts = 0 - var/wraith_blinks = 0 - var/wraith_banishes = 0 var/bull_crush_hit = 0 var/bull_gore_hit = 0 var/bull_headbutt_hit = 0 @@ -98,3 +95,4 @@ GLOBAL_DATUM_INIT(round_statistics, /datum/round_statistics, new) var/psy_lances = 0 var/psy_shields = 0 var/psy_shield_blasts = 0 + var/chimera_blinks = 0 diff --git a/code/datums/status_effects/xeno_buffs.dm b/code/datums/status_effects/xeno_buffs.dm index f6deb2ea740..65ae6e42662 100644 --- a/code/datums/status_effects/xeno_buffs.dm +++ b/code/datums/status_effects/xeno_buffs.dm @@ -910,82 +910,3 @@ X.remove_filter("overbonus_vis"); qdel(src) - - -/* RU TGMC EDIT -// *************************************** -// *********** Blessings -// *************************************** -/datum/status_effect/blessing - duration = -1 - tick_interval = 5 SECONDS - status_type = STATUS_EFFECT_REFRESH - alert_type = null - /// The owner of this buff. - var/mob/living/carbon/xenomorph/buff_owner - ///Aura strength of the puppeteer who gave this effect - var/strength = 1 - ///weakref to the puppeteer to set strength - var/datum/weakref/puppeteer - -/datum/status_effect/blessing/tick() - var/mob/living/carbon/xenomorph/xeno = puppeteer?.resolve() - if(!xeno) - return - strength = xeno.xeno_caste.aura_strength - -/datum/status_effect/blessing/on_creation(mob/living/new_owner, mob/living/carbon/xenomorph/caster) - owner = new_owner - puppeteer = WEAKREF(caster) - strength = caster.xeno_caste.aura_strength - return ..() - -/datum/status_effect/blessing/frenzy - id = "blessing of frenzy" - -/datum/status_effect/blessing/frenzy/on_apply() - buff_owner = owner - if(!isxeno(buff_owner)) - return FALSE - buff_owner.add_movespeed_modifier(type, TRUE, 0, NONE, TRUE, strength * -0.2) - return TRUE - -/datum/status_effect/blessing/frenzy/on_remove() - buff_owner.remove_movespeed_modifier(type) - return ..() - -/datum/status_effect/blessing/fury - id = "blessing of fury" - ///the modifier we apply to the xenos melee damage modifier - var/modifier - -/datum/status_effect/blessing/fury/on_apply() - buff_owner = owner - if(!isxeno(buff_owner)) - return FALSE - modifier = strength * 0.07 - buff_owner.xeno_melee_damage_modifier += modifier - return TRUE - -/datum/status_effect/blessing/fury/on_remove() - buff_owner.xeno_melee_damage_modifier -= modifier - return ..() - -/datum/status_effect/blessing/warding - id = "blessing of warding" - ///A holder for the exact armor modified by this status effect - var/datum/armor/armor_modifier - -/datum/status_effect/blessing/warding/on_apply() - buff_owner = owner - if(!isxeno(buff_owner)) - return FALSE - armor_modifier = buff_owner.soft_armor.scaleAllRatings(strength * 2.7) - buff_owner.soft_armor = buff_owner.soft_armor.attachArmor(armor_modifier) - return TRUE - -/datum/status_effect/blessing/warding/on_remove() - buff_owner.soft_armor = buff_owner.soft_armor.detachArmor(armor_modifier) - armor_modifier = null - return ..() -RU TGMC EDIT */ diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index fc92346bd2e..df4993c62d6 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -218,18 +218,3 @@ visible_message(span_xenowarning("\The [acid_t]\s structure is being melted by the acid!")) if(6) visible_message(span_xenowarning("\The [acid_t] is barely holding up against the acid!")) - -/obj/effect/xenomorph/warp_shadow - name = "warp shadow" - desc = "A strange rift in space and time. You probably shouldn't touch this." - icon = 'icons/Xeno/castes/wraith.dmi' - icon_state = "Wraith Walking" - color = COLOR_BLACK - alpha = 128 //Translucent - density = FALSE - opacity = FALSE - anchored = TRUE - -/obj/effect/xenomorph/warp_shadow/Initialize(mapload, target) - . = ..() - add_filter("wraith_warp_shadow", 4, list("type" = "blur", 5)) //Cool filter appear diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 95439b0e33c..add18286b1e 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -225,13 +225,6 @@ GLOBAL_LIST_EMPTY(blood_particles) layer = ABOVE_LYING_MOB_LAYER duration = 0.5 SECONDS -/obj/effect/temp_visual/banishment_portal - name = "banishment portal" - icon = 'icons/obj/objects.dmi' - icon_state = "bhole3" - layer = ABOVE_LYING_MOB_LAYER - duration = WRAITH_BANISH_BASE_DURATION+1 //So we don't delete our contents early - /obj/effect/temp_visual/acid_splatter name = "acid_splatter" icon = 'icons/Xeno/Effects.dmi' diff --git a/code/game/objects/items/radio/headset.dm b/code/game/objects/items/radio/headset.dm index 7e15c50ed3f..a7c983c80f1 100644 --- a/code/game/objects/items/radio/headset.dm +++ b/code/game/objects/items/radio/headset.dm @@ -314,15 +314,11 @@ GLOBAL_LIST_INIT(channel_tokens, list( SSminimaps.add_marker(wearer, marker_flags, image('icons/UI_icons/map_blips.dmi', null, "defibbable[stage]")) return if(wearer.assigned_squad) - SSminimaps.add_marker(wearer, marker_flags, image('icons/UI_icons/map_blips.dmi', null, lowertext(wearer.assigned_squad.name)+"_"+wearer.job.minimap_icon)) - //почему это было в модульной папке? - /* //Выключил ибо у нас свой набор иконок который и так не грейскейл var/image/underlay = image('icons/UI_icons/map_blips.dmi', null, "squad_underlay") var/image/overlay = image('icons/UI_icons/map_blips.dmi', null, wearer.job.minimap_icon) overlay.color = wearer.assigned_squad.color underlay.overlays += overlay SSminimaps.add_marker(wearer, marker_flags, underlay) - */ return SSminimaps.add_marker(wearer, marker_flags, image('icons/UI_icons/map_blips.dmi', null, wearer.job.minimap_icon)) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 586cd78d0b2..3feea2acd34 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -660,7 +660,6 @@ desc = "A glass window with a special rod matrice inside a wall frame. This one has an automatic shutter system to prevent any atmospheric breach." max_integrity = 200 //icon_state = "rwindow0_debug" //Uncomment to check hull in the map editor - resistance_flags = BANISH_IMMUNE icon_state = "window-invincible" /obj/structure/window/framed/prison/reinforced/hull/Initialize(mapload) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 86bcc003ee0..101825b8ba9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -426,8 +426,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] newmob = M.change_mob_type(/mob/living/carbon/xenomorph/boiler, location, null, delmob) if("crusher") newmob = M.change_mob_type(/mob/living/carbon/xenomorph/crusher, location, null, delmob) - //if("widow") //RUTGMC DELETION, WIDOW DELETION - //newmob = M.change_mob_type(/mob/living/carbon/xenomorph/widow, location, null, delmob) if("defiler") newmob = M.change_mob_type(/mob/living/carbon/xenomorph/defiler, location, null, delmob) if("gorger") @@ -442,14 +440,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] newmob = M.change_mob_type(/mob/living/carbon/xenomorph/queen, location, null, delmob) if("king") newmob = M.change_mob_type(/mob/living/carbon/xenomorph/king, location, null, delmob) - /* RU TGMC EDIT START - if("wraith") - newmob = M.change_mob_type(/mob/living/carbon/xenomorph/wraith, location, null, delmob) - RU TGMC EDIT END */ - /*RU TGMC EDIT - if("puppeteer") - newmob = M.change_mob_type(/mob/living/carbon/xenomorph/puppeteer, location, null, delmob) - RU TGMC EDIT*/ if("behemoth") newmob = M.change_mob_type(/mob/living/carbon/xenomorph/behemoth, location, null, delmob) if("human") @@ -476,7 +466,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] newmob = M.change_mob_type(/mob/living/carbon/human/species/zombie, location, null, delmob, "Zombie") if("ai") newmob = M.change_mob_type(/mob/living/silicon/ai, location, null, delmob) - //RUTGNC EDIT BEGIN if("facehugger") newmob = M.change_mob_type(/mob/living/carbon/xenomorph/facehugger, location, null, delmob) if("panther") @@ -492,7 +481,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] newmob = M.change_mob_type(/mob/living/carbon/xenomorph/predalien, location, null, delmob) if("yautja") newmob = M.change_mob_type(/mob/living/carbon/human/species/yautja, location, null, delmob) - //RUTGMC EDIT END C.holder.show_player_panel(newmob) @@ -2106,11 +2094,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] return X.upgrade_xeno(change) - /* RUTGMC DELETION - if(change != XENO_UPGRADE_NORMAL) - var/datum/xeno_caste/previous_maturity = GLOB.xeno_caste_datums[X.caste_base_type][X.upgrade_prev()] - X.upgrade_stored = previous_maturity.upgrade_threshold - */ DIRECT_OUTPUT(usr, browse(null, "window=xeno_panel_[old_keyname]")) usr.client.holder.xeno_panel(X) diff --git a/code/modules/ai/ai_behaviors/ai_behavior.dm b/code/modules/ai/ai_behaviors/ai_behavior.dm index 1a42bc57359..9591389d2ab 100644 --- a/code/modules/ai/ai_behaviors/ai_behavior.dm +++ b/code/modules/ai/ai_behaviors/ai_behavior.dm @@ -342,9 +342,6 @@ These are parameter based so the ai behavior can choose to (un)register the sign /datum/ai_behavior/proc/ai_do_move() if(!mob_parent?.canmove || mob_parent.do_actions) return - /// This allows minions to be buckled to their atom_to_escort without disrupting the movement of atom_to_escort - //if(get_dist(mob_parent, atom_to_walk_to) <= 0) // RUTGMC DELETION, WIDOW REMOVAL - //return mob_parent.next_move_slowdown = 0 var/step_dir if(get_dist(mob_parent, atom_to_walk_to) == distance_to_maintain) diff --git a/code/modules/ai/ai_behaviors/xeno/puppet.dm b/code/modules/ai/ai_behaviors/xeno/puppet.dm deleted file mode 100644 index 63fd4f082af..00000000000 --- a/code/modules/ai/ai_behaviors/xeno/puppet.dm +++ /dev/null @@ -1,187 +0,0 @@ -/* RU TGMC EDIT -/datum/ai_behavior/puppet - target_distance = 7 - base_action = IDLE - identifier = IDENTIFIER_XENO - ///should we go back to escorting the puppeteer if we stray too far - var/too_far_escort = TRUE - ///weakref to our puppeteer - var/datum/weakref/master_ref - ///the feed ability - var/datum/action/ability/activable/xeno/feed - - -/datum/ai_behavior/puppet/New(loc, parent_to_assign, escorted_atom) - . = ..() - master_ref = WEAKREF(escorted_atom) - RegisterSignals(escorted_atom, list(COMSIG_MOB_DEATH, COMSIG_QDELETING), PROC_REF(die_on_master_death)) - change_order(null, PUPPET_RECALL) - feed = mob_parent.actions_by_path[/datum/action/ability/activable/xeno/feed] - -///starts AI and registers obstructed move signal -/datum/ai_behavior/puppet/start_ai() - var/master = master_ref?.resolve() - if(master) - RegisterSignal(master, COMSIG_PUPPET_CHANGE_ALL_ORDER, PROC_REF(change_order)) - RegisterSignal(mob_parent, COMSIG_OBSTRUCTED_MOVE, PROC_REF(deal_with_obstacle)) - RegisterSignal(mob_parent, COMSIG_PUPPET_CHANGE_ORDER, PROC_REF(change_order)) - return ..() - -///cleans up signals and unregisters obstructed move signal -/datum/ai_behavior/puppet/cleanup_signals() - . = ..() - UnregisterSignal(mob_parent, list(COMSIG_OBSTRUCTED_MOVE,COMSIG_PUPPET_CHANGE_ORDER)) - var/master = master_ref?.resolve() - if(master) - UnregisterSignal(master, COMSIG_PUPPET_CHANGE_ALL_ORDER) - -///signal handler for if the master (puppeteer) dies, gibs the puppet -/datum/ai_behavior/puppet/proc/die_on_master_death(mob/living/source) - SIGNAL_HANDLER - if(!QDELETED(mob_parent)) - mob_parent.gib() - -///Signal handler to try to attack our target -///Attack our current atom we are moving to, if targetted is specified attack that instead -/datum/ai_behavior/puppet/proc/attack_target(datum/source, atom/targetted) - SIGNAL_HANDLER - if(world.time < mob_parent.next_move) - return - var/atom/target = targetted ? targetted : atom_to_walk_to - if(!mob_parent.Adjacent(target)) - return - if(mob_parent.z != target.z) - return - if(isliving(target)) - var/mob/living/victim = target - if(victim.stat == DEAD) - late_initialize() - return - do_feed(victim) - - mob_parent.face_atom(target) - mob_parent.UnarmedAttack(target, mob_parent) - -///looks for a new state, handles recalling if too far and some AI shenanigans -/datum/ai_behavior/puppet/look_for_new_state() - switch(current_action) - if(MOVING_TO_NODE, FOLLOWING_PATH) - if(get_dist(mob_parent, escorted_atom) > PUPPET_WITHER_RANGE && too_far_escort) - change_order(null, PUPPET_RECALL) - return - if(!change_order(null, PUPPET_SEEK_CLOSEST)) - change_action(MOVING_TO_NODE) - return - if(IDLE) - if(!change_order(null, PUPPET_SEEK_CLOSEST)) - return - if(ESCORTING_ATOM) - if(!escorted_atom && master_ref) - escorted_atom = master_ref.resolve() - if(MOVING_TO_ATOM) - if(!atom_to_walk_to) //edge case - late_initialize() - return ..() - -///override for MOVING_TO_ATOM to register signals for maintaining distance with our target and attacking -/datum/ai_behavior/puppet/register_action_signals(action_type) - if(action_type == MOVING_TO_ATOM) - RegisterSignal(mob_parent, COMSIG_STATE_MAINTAINED_DISTANCE, PROC_REF(attack_target)) - if(!isobj(atom_to_walk_to)) - RegisterSignal(atom_to_walk_to, list(COMSIG_MOB_DEATH, COMSIG_QDELETING), PROC_REF(look_for_new_state)) - return ..() - -///override for MOVING_TO_ATOM to unregister signals for maintaining distance with our target and attacking -/datum/ai_behavior/puppet/unregister_action_signals(action_type) - if(action_type == MOVING_TO_ATOM) - UnregisterSignal(mob_parent, COMSIG_STATE_MAINTAINED_DISTANCE) - if(!isnull(atom_to_walk_to)) - UnregisterSignal(atom_to_walk_to, list(COMSIG_MOB_DEATH, COMSIG_QDELETING)) - return ..() - -///attack the first closest human, by moving towards it -/datum/ai_behavior/puppet/proc/seek_and_attack_closest(mob/living/source) - var/victim = get_nearest_target(mob_parent, target_distance, TARGET_HUMAN, mob_parent.faction) - if(!victim) - return FALSE - change_action(MOVING_TO_ATOM, victim) - return TRUE - -///seeks a living humans in a 9 tile range near our parent, picks one, then changes our action to move towards it and attack. -/datum/ai_behavior/puppet/proc/seek_and_attack() - var/list/mob/living/carbon/human/possible_victims = list() - for(var/mob/living/carbon/human/victim in cheap_get_humans_near(mob_parent, 9)) - if(victim.stat == DEAD || isnestedhost(victim)) // RUTGMC ADDITION, no nest killing puppets - continue - possible_victims += victim - if(!length(possible_victims)) - return FALSE - - change_action(MOVING_TO_ATOM, pick(possible_victims)) - return TRUE - -///changes our current behavior with a define (order), optionally with a target, FALSE means fail and TRUE means success -/datum/ai_behavior/puppet/proc/change_order(mob/living/source, order, atom/target) - SIGNAL_HANDLER - if(!order) - stack_trace("puppet AI was somehow passed a null order") - return FALSE - switch(order) - if(PUPPET_SEEK_CLOSEST) //internal order, to attack closest enemy - return seek_and_attack_closest() - if(PUPPET_RECALL) //reset our escorted atom to master_ref and change our action to escorting it, and turn on recalling if out of range. - escorted_atom = master_ref?.resolve() - base_action = ESCORTING_ATOM - change_action(ESCORTING_ATOM, escorted_atom) - too_far_escort = TRUE - return TRUE - if(PUPPET_ATTACK) //turns on recalling out of range, if there is a target, attacks it, otherwise seeks and attacks one - too_far_escort = TRUE - if(target) - change_action(MOVING_TO_ATOM, target) - return TRUE - else - return seek_and_attack() - if(PUPPET_SCOUT) //makes our parent wander and turn off recalling if out of range - too_far_escort = FALSE - base_action = MOVING_TO_NODE - change_action(MOVING_TO_NODE) - return TRUE - -///behavior to deal with obstacles -/datum/ai_behavior/puppet/deal_with_obstacle(datum/source, direction) - var/turf/obstacle_turf = get_step(mob_parent, direction) - if(obstacle_turf.flags_atom & AI_BLOCKED) - return - for(var/thing in obstacle_turf.contents) - if(istype(thing, /obj/structure/window_frame)) //if its a window, climb it after 2 seconds - LAZYINCREMENT(mob_parent.do_actions, obstacle_turf) - addtimer(CALLBACK(src, PROC_REF(climb_window_frame), obstacle_turf), 2 SECONDS) - return COMSIG_OBSTACLE_DEALT_WITH - if(istype(thing, /obj/alien)) //dont attack resin and such - return - if(istype(thing, /obj/structure/bed/nest)) //RUTGMC ADDITION, no nest breaking minions - return - if(isobj(thing)) //otherwise smash it if its damageable - var/obj/obstacle = thing - if(obstacle.resistance_flags & XENO_DAMAGEABLE) - INVOKE_ASYNC(src, PROC_REF(attack_target), null, obstacle) - return COMSIG_OBSTACLE_DEALT_WITH - if(ISDIAGONALDIR(direction) && ((deal_with_obstacle(null, turn(direction, -45)) & COMSIG_OBSTACLE_DEALT_WITH) || (deal_with_obstacle(null, turn(direction, 45)) & COMSIG_OBSTACLE_DEALT_WITH))) - return COMSIG_OBSTACLE_DEALT_WITH - -///makes our parent climb over a turf with a window by setting its location to it -/datum/ai_behavior/puppet/proc/climb_window_frame(turf/window_turf) - mob_parent.loc = window_turf - mob_parent.last_move_time = world.time - LAZYDECREMENT(mob_parent.do_actions, window_turf) - -///uses our feed ability if possible and it exists, on the target -/datum/ai_behavior/puppet/proc/do_feed(atom/target) - if(mob_parent.do_actions) - return - if(!feed) - return - if(feed.ai_should_use(target)) - feed.use_ability(target) -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index dca2c21dd0e..45475f2651e 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -488,13 +488,6 @@ msg += "\[Assign to a fireteam.\]\n" msg += "[flavor_text]
" -/* RU TGMC EDIT PUPPETEER REMOVAL - if(HAS_TRAIT(src, TRAIT_HOLLOW)) - if(isxeno(user)) - msg += "[t_He] [t_is] hollow. Useless.\n" - else - msg += "[span_warning("[t_He] [t_is] hollowed out!")]\n" -RU TGMC EDIT PUPPETEER REMOVAL */ if(isxeno(user)) if(species.species_flags & IS_SYNTHETIC) msg += "[span_xenowarning("You sense [t_he] [t_is] not organic.")]\n" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 3de341f05f3..2d8022f688b 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -9,7 +9,7 @@ melee_damage = 5 m_intent = MOVE_INTENT_WALK buckle_flags = CAN_BE_BUCKLED|CAN_BUCKLE - resistance_flags = XENO_DAMAGEABLE|PORTAL_IMMUNE + resistance_flags = XENO_DAMAGEABLE appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE hud_type = /datum/hud/human diff --git a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm index 4a3d163f076..fd67958b39c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm @@ -22,9 +22,6 @@ // *** Health *** // max_health = 750 - // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/bull // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm index cabd99a0dac..3c87b9e6335 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm @@ -33,7 +33,6 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_LONG_RANGE_SIGHT, ) - use_state_flags = ABILITY_USE_ROOTED /datum/action/ability/xeno_action/toggle_long_range/action_activate() var/mob/living/carbon/xenomorph/boiler/X = owner @@ -170,7 +169,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( ability_cost = 150 cooldown_duration = 180 SECONDS keybind_flags = ABILITY_KEYBIND_USE_ABILITY |ABILITY_IGNORE_SELECTED_ABILITY - use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_ROOTED + use_state_flags = ABILITY_USE_STAGGERED keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_DUMP_ACID, ) @@ -383,4 +382,3 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( // *************************************** /datum/action/ability/activable/xeno/spray_acid/line/boiler cooldown_duration = 9 SECONDS - use_state_flags = ABILITY_USE_ROOTED diff --git a/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm index 07c9cc3a9b3..ebadec95ba0 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm @@ -25,9 +25,6 @@ // *** Health *** // max_health = 325 - // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/spitter // *** Darksight *** /// diff --git a/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm b/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm index 5207c1a34d2..644ba6020ff 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm @@ -23,7 +23,6 @@ // *** Evolution *** // evolution_threshold = 225 - // upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list( /mob/living/carbon/xenomorph/crusher, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm index d27837cdea6..7dabc895c8c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm @@ -25,7 +25,6 @@ // *** Evolution *** // evolution_threshold = 225 - // upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION deevolves_to = /mob/living/carbon/xenomorph/drone diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm index 0646419751e..63a12c3eb3f 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm @@ -43,7 +43,6 @@ to_chat(owner, span_xenowarning("We cannot blink here!")) return FALSE - return TRUE ///Check for whether the target turf has dense objects inside @@ -61,7 +60,7 @@ var/mob/living/carbon/xenomorph/X = owner var/turf/T = X.loc var/turf/temp_turf = X.loc - var/check_distance = min(X.xeno_caste.wraith_blink_range, get_dist(X,A)) + var/check_distance = min(X.xeno_caste.blink_range, get_dist(X,A)) var/list/fully_legal_turfs = list() for (var/x = 1 to check_distance) @@ -86,11 +85,11 @@ if(pulled_target) //bring the pulled target with us if applicable but at the cost of sharply increasing the next cooldown if(pulled_target.issamexenohive(X)) - cooldown_mod = X.xeno_caste.wraith_blink_drag_friendly_multiplier + cooldown_mod = X.xeno_caste.blink_drag_friendly_multiplier else if(!do_after(owner, 0.5 SECONDS, NONE, owner, BUSY_ICON_HOSTILE)) //Grap-porting hostiles has a slight wind up return fail_activate() - cooldown_mod = X.xeno_caste.wraith_blink_drag_nonfriendly_living_multiplier + cooldown_mod = X.xeno_caste.blink_drag_nonfriendly_living_multiplier if(ishuman(pulled_target)) var/mob/living/carbon/human/H = pulled_target if(H.stat == UNCONSCIOUS) //Apply critdrag damage as if they were quickly pulled the same distance @@ -111,10 +110,10 @@ succeed_activate() add_cooldown(cooldown_duration * cooldown_mod) - GLOB.round_statistics.wraith_blinks++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "wraith_blinks") //Statistics + GLOB.round_statistics.chimera_blinks++ + SSblackbox.record_feedback("tally", "round_statistics", 1, "chimera_blinks") //Statistics -///Called by many of the Wraith's teleportation effects +///Called by many of the Chimera's teleportation effects /datum/action/ability/activable/xeno/proc/teleport_debuff_aoe(atom/movable/teleporter, silent = FALSE) var/mob/living/carbon/xenomorph/ghost = owner @@ -135,8 +134,8 @@ if(X.issamexenohive(ghost)) //No friendly fire continue - living_target.adjust_stagger(WRAITH_TELEPORT_DEBUFF_STAGGER_STACKS) - living_target.add_slowdown(WRAITH_TELEPORT_DEBUFF_SLOWDOWN_STACKS) + living_target.adjust_stagger(CHIMERA_TELEPORT_DEBUFF_STAGGER_STACKS) + living_target.add_slowdown(CHIMERA_TELEPORT_DEBUFF_SLOWDOWN_STACKS) to_chat(living_target, span_warning("You feel nauseous as reality warps around you!")) /datum/action/ability/activable/xeno/blink/on_cooldown_finish() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm index 3a94acad4eb..a89f47c9356 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm @@ -23,8 +23,6 @@ max_health = 350 // *** Evolution *** // - // upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/panther // *** Flags *** // @@ -35,7 +33,9 @@ // *** Defense *** // soft_armor = list(MELEE = 50, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 0, BIO = 50, FIRE = 0, ACID = 50) - wraith_blink_range = 5 + blink_drag_nonfriendly_living_multiplier = 20 + blink_drag_friendly_multiplier = 4 + blink_range = 5 minimap_icon = "chimera" diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm index 76707b4dca2..1abc6dad8f5 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm @@ -27,8 +27,6 @@ max_health = 400 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/bull // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm index 9f22db0a570..5b74ac80035 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm @@ -25,8 +25,6 @@ // *** Evolution *** // evolution_threshold = 100 - // upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION - evolves_to = list( /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/bull, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm index 52d055876f6..08b2a0c9df5 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm @@ -24,8 +24,6 @@ max_health = 400 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/carrier // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm index 7ba51ce2e4f..5b130c0aa35 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm @@ -27,8 +27,6 @@ // *** Evolution *** // evolution_threshold = 100 - //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION - evolves_to = list( /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/queen, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm b/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm index 7392d53e70b..0b1d7e30c0d 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm @@ -27,8 +27,6 @@ max_health = 600 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = list(/mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/hivelord) // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm index f6852111788..d5b80f60611 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm @@ -26,7 +26,6 @@ // *** Evolution *** // evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION deevolves_to = /mob/living/carbon/xenomorph/drone diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm index bcc61d546f9..186964a4c54 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm @@ -10,7 +10,7 @@ bubble_icon = "alienroyal" icon = 'icons/Xeno/castes/hivemind.dmi' status_flags = GODMODE | INCORPOREAL - resistance_flags = RESIST_ALL|BANISH_IMMUNE + resistance_flags = RESIST_ALL pass_flags = PASS_LOW_STRUCTURE|PASSABLE|PASS_FIRE //to prevent hivemind eye to catch fire when crossing lava density = FALSE @@ -128,7 +128,6 @@ update_movespeed() if(status_flags & INCORPOREAL) status_flags = NONE - resistance_flags = BANISH_IMMUNE pass_flags = PASS_LOW_STRUCTURE|PASS_MOB|PASS_XENO density = TRUE hive.xenos_by_upgrade[upgrade] -= src diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm b/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm index 5f744ded309..df7dd7336fc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm @@ -29,7 +29,6 @@ // *** Evolution *** // evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list(/mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/chimera) deevolves_to = /mob/living/carbon/xenomorph/runner diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/castedatum_king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/castedatum_king.dm index c9ad494ab80..7dcf09bf4fd 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/king/castedatum_king.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/king/castedatum_king.dm @@ -24,7 +24,6 @@ sunder_recover = 2 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION maximum_active_caste = 1 evolve_min_xenos = 12 death_evolution_delay = 7 MINUTES diff --git a/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm b/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm index e6f625c0b76..d777ac01ca6 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm @@ -29,7 +29,6 @@ // *** Evolution *** // evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list(/mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/chimera) deevolves_to = /mob/living/carbon/xenomorph/runner diff --git a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm index 554f7bedb70..f88170065d7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm @@ -22,8 +22,6 @@ max_health = 460 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/spitter // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppet/abilities_puppet.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppet/abilities_puppet.dm deleted file mode 100644 index 438aca53da4..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppet/abilities_puppet.dm +++ /dev/null @@ -1,28 +0,0 @@ -/*RU TGMC EDIT -/datum/action/ability/activable/xeno/feed - name = "Feed" - action_icon_state = "lunge" - desc = "Assault an organic, restoring health through the use of the their biomass." - ability_cost = 0 - cooldown_duration = 35 SECONDS - target_flags = ABILITY_MOB_TARGET - -/datum/action/ability/activable/xeno/feed/use_ability(mob/living/carbon/human/target_human) - var/mob/living/carbon/xenomorph/owner_xeno = owner - owner_xeno.face_atom(target_human) - owner_xeno.do_attack_animation(target_human, ATTACK_EFFECT_REDSLASH) - owner_xeno.visible_message(target_human, span_danger("[owner_xeno] tears into [target_human]!")) - playsound(target_human, "alien_claw_flesh", 25, TRUE) - target_human.emote("scream") - target_human.apply_damage(damage = 25, damagetype = BRUTE, def_zone = BODY_ZONE_CHEST, blocked = 0, sharp = TRUE, edge = FALSE, updating_health = TRUE) - var/amount = 15 //heal xeno damage needs a variable not a number - HEAL_XENO_DAMAGE(owner_xeno, amount, FALSE) - add_cooldown() - -/datum/action/ability/activable/xeno/feed/can_use_ability(mob/living/target, silent = FALSE, override_flags) - . = ..() - if(!ishuman(target)) - return FALSE - if(!owner.Adjacent(target)) - return FALSE -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm deleted file mode 100644 index 24d9fc87b4b..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm +++ /dev/null @@ -1,26 +0,0 @@ -/*RU TGMC EDIT -/datum/xeno_caste/puppet - caste_name = "Puppet" - display_name = "Puppet" - upgrade_name = "" - caste_desc = "A grotesque puppet of a puppeteer." - wound_type = "" - - caste_type_path = /mob/living/carbon/xenomorph/puppet - - tier = XENO_TIER_MINION - upgrade = XENO_UPGRADE_BASETYPE - melee_damage = 15 - speed = -0.8 - plasma_max = 2 - plasma_gain = 0 - max_health = 250 - caste_flags = CASTE_NOT_IN_BIOSCAN|CASTE_DO_NOT_ANNOUNCE_DEATH|CASTE_DO_NOT_ALERT_LOW_LIFE - minimap_icon = "puppet" - soft_armor = list(MELEE = 14, BULLET = 3, LASER = 5, ENERGY = 3, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) - - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/activable/xeno/feed, - ) -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppet/puppet.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppet/puppet.dm deleted file mode 100644 index 36fb756efaa..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppet/puppet.dm +++ /dev/null @@ -1,68 +0,0 @@ -/*RU TGMC EDIT -/mob/living/carbon/xenomorph/puppet - caste_base_type = /mob/living/carbon/xenomorph/puppet - name = "Puppet" - desc = "A reanimated body, crudely pieced together and held in place by an ominous energy tethered to some unknown force." - icon = 'icons/Xeno/castes/puppet.dmi' - icon_state = "Puppet Running" - health = 250 - maxHealth = 250 - plasma_stored = 0 - pixel_x = 0 - old_x = 0 - tier = XENO_TIER_MINION - upgrade = XENO_UPGRADE_BASETYPE - pull_speed = -1 - allow_pass_flags = PASS_XENO - pass_flags = PASS_XENO - voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"} - ///our masters weakref - var/datum/weakref/weak_master - -/mob/living/carbon/xenomorph/puppet/handle_special_state() //prevent us from using different run/walk sprites - icon_state = "[xeno_caste.caste_name] Running" - return TRUE - -/mob/living/carbon/xenomorph/puppet/Initialize(mapload, mob/living/carbon/xenomorph/puppeteer) - . = ..() - if(puppeteer) - weak_master = WEAKREF(puppeteer) - transfer_to_hive(puppeteer.hivenumber) - AddComponent(/datum/component/ai_controller, /datum/ai_behavior/puppet, puppeteer) - -/mob/living/carbon/xenomorph/puppet/on_death() - . = ..() - if(!QDELETED(src)) - gib() - -/* /mob/living/carbon/xenomorph/puppet/Life() - . = ..() - var/atom/movable/master = weak_master?.resolve() - if(!master) - return - if(get_dist(src, master) > PUPPET_WITHER_RANGE) - adjustBruteLoss(15) - else - adjustBruteLoss(-5) - Moved to Modularity -*/ -/mob/living/carbon/xenomorph/puppet/can_receive_aura(aura_type, atom/source, datum/aura_bearer/bearer) - . = ..() - var/atom/movable/master = weak_master?.resolve() - if(!master) - return - if(source != master) //puppeteer phero only - return FALSE - -/mob/living/carbon/xenomorph/puppet/med_hud_set_status() - . = ..() - hud_set_blessings() - -/mob/living/carbon/xenomorph/puppet/proc/hud_set_blessings() - var/image/holder = hud_list[XENO_BLESSING_HUD] - if(!holder) - return - for(var/datum/status_effect/effect AS in status_effects) - if(istype(effect, /datum/status_effect/blessing)) - holder.overlays += image('icons/mob/hud.dmi', icon_state = initial(effect.id)) -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm deleted file mode 100644 index ce2a725f6f6..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm +++ /dev/null @@ -1,527 +0,0 @@ -/* RUTGMC EDIT -// *************************************** -// *********** Flay -// *************************************** -/datum/action/ability/activable/xeno/flay - name = "Flay" - action_icon_state = "flay" - desc = "Takes a chunk of flesh from the victim marine through a quick swiping motion, adding 100 biomass to your biomass collection." - ability_cost = 0 - cooldown_duration = 20 SECONDS - target_flags = ABILITY_MOB_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_FLAY, - ) - -/datum/action/ability/activable/xeno/flay/can_use_ability(atom/target, silent = FALSE, override_flags) - . = ..() - if(!.) - return - - var/mob/living/carbon/xenomorph/owner_xeno = owner - var/mob/living/carbon/human/target_human = target - if(!ishuman(target)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "not suitable!") - return FALSE - - if(!owner_xeno.Adjacent(target_human)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "not adjacent!") - return FALSE - - if(target_human.stat == DEAD) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "dead!") - return FALSE - -/datum/action/ability/activable/xeno/flay/use_ability(mob/living/carbon/human/target_human) - var/mob/living/carbon/xenomorph/owner_xeno = owner - owner_xeno.face_atom(target_human) - owner_xeno.do_attack_animation(target_human, ATTACK_EFFECT_REDSLASH) - owner_xeno.visible_message(target_human, span_danger("[owner_xeno] flays and rips skin and flesh from [target_human]!")) - playsound(target_human, "alien_claw_flesh", 25, TRUE) - target_human.emote("scream") - owner_xeno.emote("roar") - target_human.apply_damage(30, def_zone = BODY_ZONE_CHEST, blocked = MELEE, sharp = TRUE, edge = FALSE, updating_health = TRUE, penetration = 15) - target_human.Paralyze(0.8 SECONDS) - - owner_xeno.gain_plasma(owner_xeno.xeno_caste.flay_plasma_gain) - - add_cooldown() - -// *************************************** -// *********** Pincushion -// *************************************** -/datum/action/ability/activable/xeno/pincushion - name = "Pincushion" - action_icon_state = "pincushion" - desc = "Launch a spine from your tail. This attack will help deter any organic as well as support your puppets and teammates in direct combat." - cooldown_duration = 5 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_PINCUSHION, - ) - -/datum/action/ability/activable/xeno/pincushion/can_use_ability(atom/victim, silent = FALSE, override_flags) - . = ..() - if(!.) - return - var/mob/living/carbon/xenomorph/X = owner - if(X.do_actions) - return FALSE - X.face_atom(victim) - if(!do_after(X, 0.3 SECONDS, IGNORE_HELD_ITEM|IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, victim, BUSY_ICON_DANGER, extra_checks = CALLBACK(X, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = X.health)))) - return FALSE - succeed_activate() - -/datum/action/ability/activable/xeno/pincushion/use_ability(atom/victim) - var/mob/living/carbon/xenomorph/xeno = owner - var/turf/current_turf = get_turf(owner) - playsound(xeno.loc, 'sound/bullets/spear_armor1.ogg', 25, 1) - xeno.visible_message(span_warning("[xeno] shoots a spike!"), span_xenonotice("We discharge a spinal spike from our body.")) - - var/obj/projectile/spine = new /obj/projectile(current_turf) - spine.generate_bullet(/datum/ammo/xeno/spine) - spine.def_zone = xeno.get_limbzone_target() - spine.fire_at(victim, xeno, null, range = 6, speed = 1) - - add_cooldown() -// *************************************** -// *********** Dreadful Presence -// *************************************** -#define DREAD_RANGE 6 -/datum/action/ability/xeno_action/dreadful_presence - name = "Dreadful Presence" - action_icon_state = "dreadful_presence" - desc = "Emit a menacing presence, striking fear into the organics and slowing them for a short duration." - ability_cost = 50 - cooldown_duration = 20 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_DREADFULPRESENCE, - ) - -/datum/action/ability/xeno_action/dreadful_presence/action_activate() - var/obj/effect/overlay/dread/effect = new - owner.vis_contents += effect - for(var/mob/living/carbon/human/human in view(DREAD_RANGE, owner.loc)) - to_chat(human, span_userdanger("An overwhelming sense of dread washes over you... You are temporarily slowed down!")) - human.set_timed_status_effect(6 SECONDS, /datum/status_effect/dread) - addtimer(CALLBACK(human, TYPE_PROC_REF(/mob/living/carbon/human, emote), "scream"), rand(1,2)) - addtimer(CALLBACK(src, PROC_REF(clear_effect), effect), 3 SECONDS) - add_cooldown() - succeed_activate() - -/datum/action/ability/xeno_action/dreadful_presence/proc/clear_effect(atom/effect) - owner.vis_contents -= effect - qdel(effect) - -#undef DREAD_RANGE -// *************************************** -// *********** Refurbish Husk -// *************************************** -/datum/action/ability/activable/xeno/refurbish_husk - name = "Refurbish Husk" - action_icon_state = "refurbish_husk" - desc = "Harvest the biomass and organs of a body in order to create a meat puppet to do your bidding." - cooldown_duration = 25 SECONDS - target_flags = ABILITY_MOB_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_REFURBISHHUSK, - ) - /// List of all our puppets - var/list/mob/living/carbon/xenomorph/puppet/puppets = list() - -/datum/action/ability/activable/xeno/refurbish_husk/can_use_ability(atom/target, silent = FALSE, override_flags) - . = ..() - if(!.) - return - var/mob/living/carbon/xenomorph/owner_xeno = owner - var/mob/living/carbon/human/target_human = target - if(!ishuman(target)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "not suitable!") - return FALSE - if(length(puppets) >= owner_xeno.xeno_caste.max_puppets) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "too many puppets! (max: [owner_xeno.xeno_caste.max_puppets])") - return FALSE - if(HAS_TRAIT(target, TRAIT_MAPSPAWNED) || HAS_TRAIT(target, TRAIT_HOLLOW)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "of no use!") - return FALSE - - if(!owner_xeno.Adjacent(target_human)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "not adjacent!") - return FALSE - -#ifndef TESTING - if(!HAS_TRAIT(target_human, TRAIT_UNDEFIBBABLE) || target_human.stat != DEAD) - owner_xeno.balloon_alert(owner_xeno, "not dead and unrevivable!") - return FALSE -#endif - - owner_xeno.face_atom(target_human) - owner_xeno.visible_message(target_human, span_danger("[owner_xeno] begins carving out, doing all sorts of horrible things to [target_human]!")) - if(!do_after(owner_xeno, 8 SECONDS, IGNORE_HELD_ITEM, target_human, BUSY_ICON_DANGER, extra_checks = CALLBACK(owner_xeno, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = owner_xeno.health)))) - return FALSE - succeed_activate() - -/datum/action/ability/activable/xeno/refurbish_husk/use_ability(mob/living/carbon/human/victim) - var/turf/victim_turf = get_turf(victim) - - ADD_TRAIT(victim, TRAIT_HOLLOW, TRAIT_GENERIC) - victim.spawn_gibs() - var/mob/living/carbon/xenomorph/puppet/puppet = new(victim_turf, owner) - puppet.voice = victim.voice - add_puppet(puppet) - add_cooldown() - -/// Adds a puppet to our list -/datum/action/ability/activable/xeno/refurbish_husk/proc/add_puppet(mob/living/carbon/xenomorph/puppet/new_puppet) - RegisterSignals(new_puppet, list(COMSIG_MOB_DEATH, COMSIG_QDELETING), PROC_REF(remove_puppet)) - RegisterSignal(new_puppet, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(postattack)) - puppets += new_puppet - -/// Cleans up puppet from our list -/datum/action/ability/activable/xeno/refurbish_husk/proc/remove_puppet(datum/source) - SIGNAL_HANDLER - puppets -= source - UnregisterSignal(source, list(COMSIG_MOB_DEATH, COMSIG_QDELETING, COMSIG_XENOMORPH_POSTATTACK_LIVING)) - -/datum/action/ability/activable/xeno/refurbish_husk/proc/postattack(mob/living/source, mob/living/target, damage) - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/owner_xeno = owner - if(target.stat == DEAD) - return - owner_xeno.plasma_stored = min(owner_xeno.plasma_stored + round(damage / 0.9), owner_xeno.xeno_caste.plasma_max) - -// *************************************** -// *********** Stitch Puppet -// *************************************** -/datum/action/ability/activable/xeno/puppet - name = "Stitch Puppet" - action_icon_state = "stitch_puppet" - desc = "Uses 125 biomass to create a flesh homunculus to do your bidding, at an adjacent target location." - ability_cost = 125 - cooldown_duration = 25 SECONDS - target_flags = ABILITY_TURF_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_PUPPET, - ) - -/datum/action/ability/activable/xeno/puppet/can_use_ability(atom/target, silent = FALSE, override_flags) - . = ..() - if(!.) - return - - var/mob/living/carbon/xenomorph/owner_xeno = owner - if(isclosedturf(target)) - if(!silent) - target.balloon_alert(owner_xeno, "dense area") - return FALSE - - var/datum/action/ability/activable/xeno/refurbish_husk/huskaction = owner.actions_by_path[/datum/action/ability/activable/xeno/refurbish_husk] - if(length(huskaction.puppets) >= owner_xeno.xeno_caste.max_puppets) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "too many puppets! (max: [owner_xeno.xeno_caste.max_puppets])") - return FALSE - - if(!owner_xeno.Adjacent(target)) - if(!silent) - owner_xeno.balloon_alert(owner_xeno, "not adjacent!") - return FALSE - - owner_xeno.face_atom(target) - //reverse gib here - owner_xeno.visible_message(span_warning("[owner_xeno] begins to vomit out biomass and skillfully sews various bits and pieces together!")) - if(!do_after(owner_xeno, 8 SECONDS, IGNORE_HELD_ITEM, target, BUSY_ICON_CLOCK, extra_checks = CALLBACK(owner_xeno, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = owner_xeno.health)))) - return FALSE - owner_xeno.visible_message(span_warning("[owner_xeno] forms a repulsive puppet!")) - succeed_activate() - -/datum/action/ability/activable/xeno/puppet/use_ability(atom/target) - var/turf/target_turf = get_turf(target) - - var/datum/action/ability/activable/xeno/refurbish_husk/huskaction = owner.actions_by_path[/datum/action/ability/activable/xeno/refurbish_husk] - huskaction.add_puppet(new /mob/living/carbon/xenomorph/puppet(target_turf, owner)) - add_cooldown() - -// *************************************** -// *********** Organic Bomb -// *************************************** -/datum/action/ability/activable/xeno/organic_bomb - name = "Organic Bomb" - action_icon_state = "organic_bomb" - desc = "Causes one of our puppets to detonate on selection, spewing acid out of the puppet's body in all directions, gibbing the puppet." - cooldown_duration = 30 SECONDS - ability_cost = 100 - target_flags = ABILITY_MOB_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_ORGANICBOMB, - ) - -/datum/action/ability/activable/xeno/organic_bomb/use_ability(mob/living/victim) - . = ..() - var/datum/action/ability/activable/xeno/refurbish_husk/huskaction = owner.actions_by_path[/datum/action/ability/activable/xeno/refurbish_husk] - if(length(huskaction.puppets) <= 0) - owner.balloon_alert(owner, "no puppets") - return fail_activate() - if(!istype(victim, /mob/living/carbon/xenomorph/puppet) || !(victim in huskaction.puppets)) - victim.balloon_alert(owner, "not our puppet") - return fail_activate() - if(!SEND_SIGNAL(victim, COMSIG_PUPPET_CHANGE_ORDER, PUPPET_SEEK_CLOSEST)) - victim.balloon_alert(owner, "fail") - return fail_activate() - RegisterSignal(victim, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(start_exploding)) - RegisterSignal(victim, COMSIG_MOB_DEATH, PROC_REF(detonate)) - addtimer(CALLBACK(src, PROC_REF(detonate), victim), 15 SECONDS) - add_cooldown() - -///asynchronous signal handler for start_exploding_async -/datum/action/ability/activable/xeno/organic_bomb/proc/start_exploding(mob/living/puppet) - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(start_exploding_async), puppet) - -///makes a puppet start a do_after to dexplode -/datum/action/ability/activable/xeno/organic_bomb/proc/start_exploding_async(mob/living/puppet) - puppet.visible_message(span_danger("[puppet] bloats and slowly unfurls its stitched body!")) - if(do_after(puppet, 1.5 SECONDS, IGNORE_HELD_ITEM, puppet, BUSY_ICON_DANGER)) - detonate(puppet) - -///detonates a puppet causing a spray of acid -/datum/action/ability/activable/xeno/organic_bomb/proc/detonate(mob/living/puppet) - SIGNAL_HANDLER - UnregisterSignal(puppet, list(COMSIG_XENOMORPH_ATTACK_LIVING, COMSIG_MOB_DEATH)) - var/turf/our_turf = get_turf(puppet) - our_turf.visible_message(span_danger("[puppet] ruptures, releasing corrosive acid!")) - playsound(our_turf, 'sound/bullets/acid_impact1.ogg', 50, 1) - if(!QDELETED(puppet)) - puppet.gib() - - for(var/turf/acid_tile AS in RANGE_TURFS(2, our_turf)) - if(!line_of_sight(our_turf,acid_tile) || isclosedturf(acid_tile)) - continue - new /obj/effect/temp_visual/acid_splatter(acid_tile) //SFX - if(!locate(/obj/effect/xenomorph/spray) in acid_tile.contents) - new /obj/effect/xenomorph/spray(acid_tile, 12 SECONDS, 18) -// *************************************** -// *********** Articulate -// *************************************** -/datum/action/ability/activable/xeno/articulate - name = "Articulate" - action_icon_state = "mimicry" - desc = "Takes direct control of a Puppet’s vocal chords. Allows you to speak directly through your puppet to the talls." - cooldown_duration = 10 SECONDS - target_flags = ABILITY_MOB_TARGET - ///Whether we should cancel instead of doing the thing when activated - var/talking = FALSE - ///our current target - var/mob/living/carbon/active_target - -/datum/action/ability/activable/xeno/articulate/use_ability(mob/living/victim) - if(talking) - cancel(owner) - return fail_activate() - var/datum/action/ability/activable/xeno/refurbish_husk/huskaction = owner.actions_by_path[/datum/action/ability/activable/xeno/refurbish_husk] - if(!istype(victim, /mob/living/carbon/xenomorph/puppet) || !(victim in huskaction.puppets)) - victim.balloon_alert(owner, "not our puppet") - return fail_activate() - owner.balloon_alert(owner, "channeling voice, move or activate to cancel!") - active_target = victim - RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(relay_speech)) - RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(cancel)) - RegisterSignal(victim, COMSIG_QDELETING, PROC_REF(cancel)) - talking = TRUE - add_cooldown() - -/datum/action/ability/activable/xeno/articulate/proc/relay_speech(mob/living/carbon/source, arguments) - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(relay_speech_async), active_target, arguments[SPEECH_MESSAGE]) - -/datum/action/ability/activable/xeno/articulate/proc/relay_speech_async(mob/living/carbon/target, text) - target.say(text, language = /datum/language/common, forced = "puppeteer articulate ability") - -/datum/action/ability/activable/xeno/articulate/proc/cancel(atom/target) - SIGNAL_HANDLER - if(talking) - owner.balloon_alert(owner, "cancelled!") - talking = FALSE - active_target = null - UnregisterSignal(owner, list(COMSIG_MOB_SAY, COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) - -// *************************************** -// *********** Tendrils (Primordial) -// *************************************** -/datum/action/ability/activable/xeno/tendril_patch - name = "Tendrils" - action_icon_state = "living_construct" - desc = "Burrow freshly created tendrils to tangle organics in a 3x3 patch." - ability_cost = 175 - cooldown_duration = 40 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_TENDRILS, - ) - -/datum/action/ability/activable/xeno/tendril_patch/use_ability(atom/movable/victim) - var/turf/their_turf = get_turf(victim) - var/mob/living/living_owner = owner - living_owner.face_atom(victim) - living_owner.visible_message(span_warning("[living_owner] begins to form biomass and force it into the ground!")) - if(!do_after(living_owner, 3 SECONDS, IGNORE_HELD_ITEM, victim, BUSY_ICON_DANGER, extra_checks = CALLBACK(living_owner, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = living_owner.health)))) - return FALSE - their_turf.visible_message(span_warning("[living_owner]'s tendrils burst out from the ground!")) - for(var/turf/tile AS in RANGE_TURFS(1, their_turf)) - if(!locate(/obj/effect/tentacle) in tile.contents) - new /obj/effect/tentacle(tile) - add_cooldown() - -/obj/effect/tentacle - name = "tendril" - icon = 'icons/effects/effects.dmi' - icon_state = "tendril_1" - layer = BELOW_MOB_LAYER - plane = GAME_PLANE - anchored = TRUE - -/obj/effect/tentacle/Initialize(mapload) - . = ..() - addtimer(CALLBACK(src, PROC_REF(start_grabbing)), 0.4 SECONDS) - -/// change our icon state and start a 0.3 second timer to call grab() -/obj/effect/tentacle/proc/start_grabbing() - icon_state = "tendril_2" - addtimer(CALLBACK(src, PROC_REF(grab)), 0.3 SECONDS, TIMER_STOPPABLE) - -/// brute damage and paralyze everyone on our tile -/obj/effect/tentacle/proc/grab() - for (var/mob/living/victim in loc) - if (victim.stat == DEAD) - continue - if(isxeno(victim)) - continue - balloon_alert(victim, "tangled!") - visible_message(span_danger("[src] tangles [victim]!")) - victim.adjustBruteLoss(10) - victim.Paralyze(2 SECONDS) - addtimer(CALLBACK(src, PROC_REF(retract)), 0.3 SECONDS) - -/// change our icon to our retracting icon and delete in 0.3 seconds -/obj/effect/tentacle/proc/retract() - icon_state = "tendril_3" - QDEL_IN(src, 0.4 SECONDS) - -// *************************************** -// *********** Blessing -// *************************************** -/datum/action/ability/activable/xeno/puppet_blessings - name = "Bestow Blessing" - action_icon_state = "emit_pheromones" - ability_cost = 200 - desc = "Give a permanent upgrade to a puppet." - cooldown_duration = 30 SECONDS - use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_NOTTURF|ABILITY_USE_BUSY|ABILITY_USE_LYING - target_flags = ABILITY_MOB_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_BESTOWBLESSINGS, - ) - -/datum/action/ability/activable/xeno/puppet_blessings/can_use_ability(mob/target, silent = FALSE, override_flags) - . = ..() - if(!.) - return fail_activate() - if(!istype(target, /mob/living/carbon/xenomorph/puppet)) - owner.balloon_alert(owner, "not a puppet") - return fail_activate() - succeed_activate() - -/datum/action/ability/activable/xeno/puppet_blessings/use_ability(mob/living/victim) - var/mob/living/carbon/xenomorph/xeno = owner - var/choice = show_radial_menu(owner, owner, GLOB.puppeteer_phero_images_list, radius = 35) - if(!choice) - return fail_activate() - var/effect_path - switch(choice) - if(AURA_XENO_BLESSFRENZY) - effect_path = /datum/status_effect/blessing/frenzy - if(AURA_XENO_BLESSFURY) - effect_path = /datum/status_effect/blessing/fury - if(AURA_XENO_BLESSWARDING) - effect_path = /datum/status_effect/blessing/warding - if(victim.has_status_effect(effect_path)) - victim.balloon_alert(owner, "already has this blessing!") - return fail_activate() - victim.balloon_alert(owner, "[choice]") - victim.apply_status_effect(effect_path, xeno) - victim.med_hud_set_status() - playsound(get_turf(xeno), "alien_drool", 25) - add_cooldown() - -// *************************************** -// *********** Radial Orders -// *************************************** - -/datum/action/ability/xeno_action/puppeteer_orders_radial - name = "Give Orders to Puppets" - action_icon_state = "orders" - desc = "Give orders to your puppets, altering their behaviour." - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_SENDORDERS_RADIAL, - ) - -/datum/action/ability/xeno_action/puppeteer_orders_radial/action_activate(mob/living/victim) - var/choice = show_radial_menu(owner, owner, GLOB.puppeteer_order_images_list, radius = 35) - if(!choice) - return - if(SEND_SIGNAL(owner, COMSIG_PUPPET_CHANGE_ALL_ORDER, choice)) - owner.balloon_alert(owner, "success") - switch(choice) - if(PUPPET_ATTACK) - owner.visible_message(span_warning("[owner] swiftly manipulates the psychic strings of the puppets, ordering them to attack!")) - if(PUPPET_RECALL) - owner.visible_message(span_warning("[owner] quickly manipulates the psychic strings of the puppets, drawing them near!")) - else - owner.balloon_alert(owner, "fail") - -// *************************************** -// *********** Attack Order -// *************************************** - -/datum/action/ability/xeno_action/puppeteer_attack_order - name = "Give Order to Attack" - desc = "Give your puppets order to attack" - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_ATTACKORDER, - ) - -/datum/action/ability/xeno_action/puppeteer_attack_order/action_activate(mob/living/victim) - var/puppet_attack = PUPPET_ATTACK - if(SEND_SIGNAL(owner, COMSIG_PUPPET_CHANGE_ALL_ORDER, puppet_attack)) - owner.balloon_alert(owner, "success: attack") - else - owner.balloon_alert(owner, "fail") - -/datum/action/ability/xeno_action/puppeteer_attack_order/should_show() - return FALSE - -// *************************************** -// *********** Recall Order -// *************************************** - -/datum/action/ability/xeno_action/puppeteer_recall_order - name = "Give Order to Recall" - desc = "Give your puppets order to recall" - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_RECALLORDER, - ) - -/datum/action/ability/xeno_action/puppeteer_recall_order/action_activate(mob/living/victim) - var/puppet_recall = PUPPET_RECALL - if(SEND_SIGNAL(owner, COMSIG_PUPPET_CHANGE_ALL_ORDER, puppet_recall)) - owner.balloon_alert(owner, "success: recall") - -/datum/action/ability/xeno_action/puppeteer_recall_order/should_show() - return FALSE - - -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm deleted file mode 100644 index 6c2970dad80..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm +++ /dev/null @@ -1,84 +0,0 @@ -/*RU TGMC EDIT -/datum/xeno_caste/puppeteer - caste_name = "Puppeteer" - display_name = "Puppeteer" - upgrade_name = "" - caste_desc = "An alien creature of terrifying display, it has a tail adorned with needles that drips a strange chemical and elongated claws." - caste_type_path = /mob/living/carbon/xenomorph/puppeteer - primordial_message = "The organics will tremble at our swarm. We are legion." - - tier = XENO_TIER_TWO - upgrade = XENO_UPGRADE_BASETYPE - wound_type = "puppeteer" - speed = -0.8 - melee_damage = 18 - plasma_max = 750 - plasma_gain = 0 - plasma_regen_limit = 0 - plasma_icon_state = "fury" - max_health = 365 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolution_threshold = 225 - - //evolves_to = list(/mob/living/carbon/xenomorph/widow, /mob/living/carbon/xenomorph/warlock) // RUTGMC DELETION, WIDOW DELETION, moved to the other file - deevolves_to = list(/mob/living/carbon/xenomorph/defender) - caste_flags = CASTE_INNATE_PLASMA_REGEN|CASTE_PLASMADRAIN_IMMUNE|CASTE_EVOLUTION_ALLOWED - can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_LEADER - caste_traits = null - soft_armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 20, FIRE = 20, ACID = 20) - minimap_icon = "puppeteer" - flay_plasma_gain = 100 - max_puppets = 3 - aura_strength = 2.8 - - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain/free, - /datum/action/ability/activable/xeno/flay, - /datum/action/ability/activable/xeno/pincushion, - /datum/action/ability/xeno_action/dreadful_presence, - /datum/action/ability/activable/xeno/refurbish_husk, - /datum/action/ability/activable/xeno/puppet, - /datum/action/ability/activable/xeno/organic_bomb, - /datum/action/ability/xeno_action/puppeteer_attack_order, - /datum/action/ability/xeno_action/puppeteer_recall_order, - /datum/action/ability/xeno_action/puppeteer_orders_radial, - /datum/action/ability/activable/xeno/articulate, - /datum/action/ability/activable/xeno/puppet_blessings, - ) - -/datum/xeno_caste/puppeteer/normal - upgrade = XENO_UPGRADE_NORMAL - -/datum/xeno_caste/puppeteer/primordial - upgrade_name = "Primordial" - caste_desc = "Being within mere eyeshot of this hulking monstrosity fills you with a deep, unshakeable sense of unease. You are unsure if you can even harm it." - upgrade = XENO_UPGRADE_PRIMO - speed = -0.8 - melee_damage = 18 - plasma_max = 750 - max_health = 385 - soft_armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 20, FIRE = 20, ACID = 20) - max_puppets = 3 - - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain/free, - /datum/action/ability/activable/xeno/flay, - /datum/action/ability/activable/xeno/pincushion, - /datum/action/ability/xeno_action/dreadful_presence, - /datum/action/ability/activable/xeno/refurbish_husk, - /datum/action/ability/activable/xeno/puppet, - /datum/action/ability/activable/xeno/organic_bomb, - /datum/action/ability/activable/xeno/tendril_patch, - /datum/action/ability/xeno_action/puppeteer_attack_order, - /datum/action/ability/xeno_action/puppeteer_recall_order, - /datum/action/ability/xeno_action/puppeteer_orders_radial, - /datum/action/ability/activable/xeno/articulate, - /datum/action/ability/activable/xeno/puppet_blessings, - ) - - aura_strength = 3 -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm deleted file mode 100644 index 20f08f48c95..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm +++ /dev/null @@ -1,29 +0,0 @@ -/*RU TGMC EDIT -/mob/living/carbon/xenomorph/puppeteer - caste_base_type = /mob/living/carbon/xenomorph/puppeteer - name = "Puppeteer" - desc = "A xenomorph of terrifying display, it has a tail adorned with needles that drips a strange chemical and elongated claws." - icon = 'icons/Xeno/castes/puppeteer.dmi' - icon_state = "Puppeteer Running" - health = 250 - maxHealth = 250 - plasma_stored = 350 - pixel_x = -16 - old_x = -16 - tier = XENO_TIER_TWO - upgrade = XENO_UPGRADE_NORMAL - drag_delay = 5 //pulling a big dead xeno is hard - bubble_icon = "alien" - -/mob/living/carbon/xenomorph/puppeteer/Initialize(mapload) - . = ..() - GLOB.huds[DATA_HUD_XENO_HEART].add_hud_to(src) - RegisterSignal(src, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(postattack)) - -/mob/living/carbon/xenomorph/puppeteer/proc/postattack(mob/living/source, mob/living/target, damage) - SIGNAL_HANDLER - if(target.stat == DEAD) - return - plasma_stored = min(plasma_stored + round(damage / 0.8), xeno_caste.plasma_max) - SEND_SIGNAL(src, COMSIG_PUPPET_CHANGE_ALL_ORDER, PUPPET_ATTACK, target) //we are on harm intent so it probably means we want to kill the target -RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm index d114e8102c7..694f5693b86 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm @@ -26,7 +26,6 @@ sunder_recover = 1.5 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION evolve_min_xenos = 8 maximum_active_caste = 1 death_evolution_delay = 5 MINUTES diff --git a/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm b/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm index 0bd20765a77..9d867db42a0 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm @@ -25,8 +25,6 @@ max_health = 350 // *** Evolution *** // - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION - deevolves_to = /mob/living/carbon/xenomorph/hunter // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm index 7ff31375d8e..992b58095bc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm @@ -29,7 +29,6 @@ // *** Evolution *** // evolution_threshold = 100 - //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION evolves_to = list( /mob/living/carbon/xenomorph/hunter, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm index 0503db7b2d4..94861c2220a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm @@ -27,7 +27,6 @@ // *** Evolution *** // evolution_threshold = 100 - //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION evolves_to = list(/mob/living/carbon/xenomorph/spitter) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm b/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm index 8aa04f2ce9f..4a88f5f548c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm @@ -24,10 +24,7 @@ max_health = 400 // *** Evolution *** // - // The only evolution path does not require threshold - // evolution_threshold = 225 maximum_active_caste = 1 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list(/mob/living/carbon/xenomorph/queen) deevolves_to = /mob/living/carbon/xenomorph/drone diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm deleted file mode 100644 index e220cbc53c5..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm +++ /dev/null @@ -1,39 +0,0 @@ -/* RUTGMC DELETION, WIDOW REMOVAL -/datum/xeno_caste/spiderling - caste_name = "spiderling" - display_name = "spiderling" - upgrade_name = "" - caste_desc = "An anthropod xenomorph without any qualms to obey their widow, even if it will never grow up and will face death." - wound_type = "" - - caste_type_path = /mob/living/carbon/xenomorph/spiderling - - tier = XENO_TIER_MINION - upgrade = XENO_UPGRADE_BASETYPE - - // *** Melee Attacks *** // - melee_damage = 8 - - // *** Speed *** // - speed = -0.6 - - // *** Plasma *** // - plasma_max = 200 - plasma_gain = 1 - - // *** Health *** // - max_health = 125 - - // *** Flags *** // - caste_flags = CASTE_NOT_IN_BIOSCAN|CASTE_DO_NOT_ANNOUNCE_DEATH|CASTE_DO_NOT_ALERT_LOW_LIFE - - // *** Minimap Icon *** // - minimap_icon = "spiderling" - - // *** Defense *** // - soft_armor = list(MELEE = 15, BULLET = 0, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) - - actions = list( - /datum/action/ability/xeno_action/burrow, - ) -*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm deleted file mode 100644 index c1952454be3..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm +++ /dev/null @@ -1,276 +0,0 @@ -/* RUTGMC DELETION, WIDOW REMOVAL -#define SPIDERLING_ATTEMPTING_GUARD "spiderling_attempting_guard" -#define SPIDERLING_NOT_GUARDING "spiderling_not_guarding" -#define SPIDERLING_GUARDING "spiderling_guarding" -#define SPIDERLING_ENRAGED "spiderling_enraged" -#define SPIDERLING_NORMAL "spiderling_normal" - -/mob/living/carbon/xenomorph/spiderling - caste_base_type = /mob/living/carbon/xenomorph/spiderling - name = "Spiderling" - desc = "A widow spawn, it chitters angrily without any sense of self-preservation, only to obey the widow's will." - icon = 'icons/Xeno/Effects.dmi' - icon_state = "Spiderling Running" - health = 250 - maxHealth = 250 - plasma_stored = 200 - pixel_x = 0 - old_x = 0 - tier = XENO_TIER_MINION - upgrade = XENO_UPGRADE_BASETYPE - pull_speed = -2 - allow_pass_flags = PASS_XENO - pass_flags = PASS_XENO|PASS_LOW_STRUCTURE - density = FALSE - /// The widow that this spiderling belongs to - var/mob/living/carbon/xenomorph/spidermother - /// What sprite state this - normal, enraged, guarding? Used for update_icons() - var/spiderling_state = SPIDERLING_NORMAL - -/mob/living/carbon/xenomorph/spiderling/Initialize(mapload, mob/living/carbon/xenomorph/mother) - . = ..() - spidermother = mother - if(spidermother) - AddComponent(/datum/component/ai_controller, /datum/ai_behavior/spiderling, spidermother) - transfer_to_hive(spidermother.get_xeno_hivenumber()) - else - AddComponent(/datum/component/ai_controller, /datum/ai_behavior/xeno) - -/mob/living/carbon/xenomorph/spiderling/update_icons(state_change = TRUE) - . = ..() - if(state_change) - if(spiderling_state == SPIDERLING_ENRAGED) - icon_state = "[icon_state] Enraged" - if(spiderling_state == SPIDERLING_GUARDING) - icon_state = "[icon_state] Guarding" - -/mob/living/carbon/xenomorph/spiderling/on_death() - //We QDEL them as cleanup and preventing them from being sold - QDEL_IN(src, TIME_TO_DISSOLVE) - return ..() - -///If we're covering our widow, any clicks should be transferred to them -/mob/living/carbon/xenomorph/spiderling/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - if(!get_dist(src, spidermother) && isxeno(x)) - spidermother.attack_alien(X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - return - return ..() - -// *************************************** -// *********** Spiderling AI Section -// *************************************** -/datum/ai_behavior/spiderling - target_distance = 1 - base_action = ESCORTING_ATOM - //The atom that will be used in revert_to_default_escort proc, by default this atom is the spiderling's widow - var/datum/weakref/default_escorted_atom - //Whether we are currently guarding a crit widow or not - var/guarding_status = SPIDERLING_NOT_GUARDING - -/datum/ai_behavior/spiderling/New(loc, parent_to_assign, escorted_atom, can_heal = FALSE) - . = ..() - default_escorted_atom = WEAKREF(escorted_atom) - RegisterSignals(escorted_atom, list(COMSIG_XENOMORPH_ATTACK_LIVING, COMSIG_XENOMORPH_ATTACK_HOSTILE_XENOMORPH), PROC_REF(go_to_target)) - RegisterSignal(escorted_atom, COMSIG_XENOMORPH_ATTACK_OBJ, PROC_REF(go_to_obj_target)) - RegisterSignal(escorted_atom, COMSIG_SPIDERLING_GUARD, PROC_REF(attempt_guard)) - RegisterSignal(escorted_atom, COMSIG_SPIDERLING_UNGUARD, PROC_REF(attempt_unguard)) - RegisterSignal(escorted_atom, COMSIG_MOB_DEATH, PROC_REF(spiderling_rage)) - RegisterSignal(escorted_atom, COMSIG_LIVING_DO_RESIST, PROC_REF(parent_resist)) - RegisterSignal(escorted_atom, COMSIG_XENOMORPH_RESIN_JELLY_APPLIED, PROC_REF(apply_spiderling_jelly)) - RegisterSignal(escorted_atom, COMSIG_XENOMORPH_REST, PROC_REF(start_resting)) - RegisterSignal(escorted_atom, COMSIG_XENOMORPH_UNREST, PROC_REF(stop_resting)) - RegisterSignal(escorted_atom, COMSIG_ELEMENT_JUMP_STARTED, PROC_REF(do_jump)) - RegisterSignal(escorted_atom, COMSIG_SPIDERLING_MARK, PROC_REF(decide_mark)) - RegisterSignal(escorted_atom, COMSIG_SPIDERLING_RETURN, PROC_REF(revert_to_default_escort)) - -/// Decides what to do when widow uses spiderling mark ability -/datum/ai_behavior/spiderling/proc/decide_mark(source, atom/A) - SIGNAL_HANDLER - if(!A) - revert_to_default_escort() - return - if(atom_to_walk_to == A) - return - escorted_atom = null - if(ishuman(A)) - INVOKE_ASYNC(src, PROC_REF(triggered_spiderling_rage), source, A) - return - if(isobj(A)) - var/obj/obj_target = A - RegisterSignal(obj_target, COMSIG_QDELETING, PROC_REF(revert_to_default_escort)) - go_to_obj_target(source, A) - return - -/// Sets escorted atom to our pre-defined default escorted atom, which by default is this spiderling's widow, and commands the spiderling to follow it -/datum/ai_behavior/spiderling/proc/revert_to_default_escort(source) - SIGNAL_HANDLER - escorted_atom = default_escorted_atom.resolve() - change_action(ESCORTING_ATOM, escorted_atom) - -/// Signal handler to check if we can attack the obj's that our escorted_atom is attacking -/datum/ai_behavior/spiderling/proc/go_to_obj_target(source, obj/target) - SIGNAL_HANDLER - if(QDELETED(target)) - return - atom_to_walk_to = target - change_action(MOVING_TO_ATOM, target) - -/// Signal handler to check if we can attack what our escorted_atom is attacking -/datum/ai_behavior/spiderling/proc/go_to_target(source, mob/living/target) - SIGNAL_HANDLER - if(!isliving(target)) - return - if(target.stat != CONSCIOUS) - return - if(mob_parent?.get_xeno_hivenumber() == target.get_xeno_hivenumber()) - return - atom_to_walk_to = target - change_action(MOVING_TO_ATOM, target) - -///Signal handler to try to attack our target -/datum/ai_behavior/spiderling/proc/attack_target(datum/source) - SIGNAL_HANDLER - if(world.time < mob_parent?.next_move) - return - if(Adjacent(atom_to_walk_to)) - return - if(isliving(atom_to_walk_to)) - var/mob/living/victim = atom_to_walk_to - if(victim.stat != CONSCIOUS) - change_action(ESCORTING_ATOM, escorted_atom) - return - mob_parent.face_atom(atom_to_walk_to) - mob_parent.UnarmedAttack(atom_to_walk_to, mob_parent) - -/// Check if escorted_atom moves away from the spiderling while it's attacking something, this is to always keep them close to escorted_atom -/datum/ai_behavior/spiderling/look_for_new_state() - if(current_action == MOVING_TO_ATOM) - if(escorted_atom) - change_action(ESCORTING_ATOM, escorted_atom) - -/// Check so that we dont keep attacking our target beyond it's death -/datum/ai_behavior/spiderling/register_action_signals(action_type) - if(action_type == MOVING_TO_ATOM) - RegisterSignal(mob_parent, COMSIG_STATE_MAINTAINED_DISTANCE, PROC_REF(attack_target)) - if(!isobj(atom_to_walk_to)) - RegisterSignals(atom_to_walk_to, list(COMSIG_MOB_DEATH, COMSIG_QDELETING), PROC_REF(look_for_new_state)) - return ..() - -/datum/ai_behavior/spiderling/unregister_action_signals(action_type) - if(action_type == MOVING_TO_ATOM) - UnregisterSignal(mob_parent, COMSIG_STATE_MAINTAINED_DISTANCE) - if(!isnull(atom_to_walk_to)) - UnregisterSignal(atom_to_walk_to, list(COMSIG_MOB_DEATH, COMSIG_QDELETING)) - return ..() - -/// If the spiderling's mother goes into crit, the spiderlings will stop what they are doing and attempt to shield her -/datum/ai_behavior/spiderling/proc/attempt_guard() - SIGNAL_HANDLER - if(guarding_status == SPIDERLING_NOT_GUARDING) //Nothing to cleanup - INVOKE_ASYNC(src, PROC_REF(guard_owner)) - return - -/// Spiderling's mother woke up from crit; reset stuff back to normal -/datum/ai_behavior/spiderling/proc/attempt_unguard() - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(revert_to_default_escort)) - guarding_status = SPIDERLING_NOT_GUARDING - var/mob/living/carbon/xenomorph/spiderling/X = mob_parent - X?.spiderling_state = SPIDERLING_NORMAL - X?.update_icons() - -/datum/ai_behavior/spiderling/ai_do_move() - if((guarding_status == SPIDERLING_ATTEMPTING_GUARD) && (get_dist(mob_parent, atom_to_walk_to) <= 1)) - var/mob/living/carbon/xenomorph/spiderling/X = mob_parent - if(prob(50)) - X?.emote("hiss") - guarding_status = SPIDERLING_GUARDING - var/mob/living/carbon/xenomorph/widow/to_guard = escorted_atom - to_guard.buckle_mob(X, TRUE, TRUE) - X?.dir = SOUTH - return ..() - -/// Moves spiderlings to the widow -/datum/ai_behavior/spiderling/proc/guard_owner() - var/mob/living/carbon/xenomorph/spiderling/X = mob_parent - if(QDELETED(X)) - return - if(prob(50)) - X.emote("roar") - if(X.spiderling_state != SPIDERLING_ENRAGED) - X.spiderling_state = SPIDERLING_GUARDING - X.update_icons() - distance_to_maintain = 0 - revert_to_default_escort() - atom_to_walk_to = escorted_atom - guarding_status = SPIDERLING_ATTEMPTING_GUARD - -/// This happens when the spiderlings mother dies, they move faster and will attack any nearby marines -/datum/ai_behavior/spiderling/proc/spiderling_rage() - SIGNAL_HANDLER - escorted_atom = null - var/mob/living/carbon/xenomorph/spiderling/x = mob_parent - if(QDELETED(x)) - return - var/list/mob/living/carbon/human/possible_victims = list() - for(var/mob/living/victim in get_nearest_target(x, SPIDERLING_RAGE_RANGE)) - if(victim.stat == DEAD) - continue - possible_victims += victim - if(!length(possible_victims)) - kill_parent() - return - x.spiderling_state = SPIDERLING_ENRAGED - x.update_icons() - // Makes the spiderlings roar at slightly different times so they don't stack their roars - addtimer(CALLBACK(x, TYPE_PROC_REF(/mob, emote), "roar"), rand(1, 4)) - change_action(MOVING_TO_ATOM, pick(possible_victims)) - addtimer(CALLBACK(src, PROC_REF(kill_parent)), 10 SECONDS) - -/// Makes the spiderling roar and then kill themselves after some time -/datum/ai_behavior/spiderling/proc/triggered_spiderling_rage(mob/M, mob/victim) - var/mob/living/carbon/xenomorph/spiderling/spiderling_parent = mob_parent - if(QDELETED(spiderling_parent)) - return - change_action(MOVING_TO_ATOM, victim) - spiderling_parent.spiderling_state = SPIDERLING_ENRAGED - spiderling_parent.update_icons() - addtimer(CALLBACK(spiderling_parent, TYPE_PROC_REF(/mob, emote), "roar"), rand(1, 4)) - addtimer(CALLBACK(src, PROC_REF(kill_parent)), 15 SECONDS) - -///This kills the spiderling -/datum/ai_behavior/spiderling/proc/kill_parent() - var/mob/living/carbon/xenomorph/spiderling/spiderling_parent = mob_parent - spiderling_parent?.death(gibbing = FALSE) - -/// resist when widow does -/datum/ai_behavior/spiderling/proc/parent_resist() - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/spiderling/spiderling_parent = mob_parent - spiderling_parent?.do_resist() - -/// rest when widow does -/datum/ai_behavior/spiderling/proc/start_resting(mob/source) - SIGNAL_HANDLER - var/mob/living/living = mob_parent - living?.set_resting(TRUE) - -/// stop resting when widow does, plus unbuckle all mobs so the widow won't get stuck -/datum/ai_behavior/spiderling/proc/stop_resting(mob/source) - SIGNAL_HANDLER - var/mob/living/living = mob_parent - living?.set_resting(FALSE) - source?.unbuckle_all_mobs() - -/// Signal handler to make the spiderling jump when widow does -/datum/ai_behavior/spiderling/proc/do_jump() - SIGNAL_HANDLER - var/datum/component/jump/jumpy_spider = mob_parent.GetComponent(/datum/component/jump) - jumpy_spider?.do_jump(mob_parent) - -/// Signal handler to apply resin jelly to the spiderling whenever widow gets it -/datum/ai_behavior/spiderling/proc/apply_spiderling_jelly() - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/spiderling/beno_to_coat = mob_parent - beno_to_coat?.apply_status_effect(STATUS_EFFECT_RESIN_JELLY_COATING) -*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm b/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm index 2c5c94e9e96..7604de92dd2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm @@ -23,7 +23,6 @@ // *** Evolution *** // evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list( /mob/living/carbon/xenomorph/boiler, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm index 7ce5071e9b4..81e75bc300a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm @@ -181,7 +181,7 @@ /obj/effect/xeno/shield icon = 'icons/Xeno/96x96.dmi' icon_state = "shield" - resistance_flags = BANISH_IMMUNE|UNACIDABLE|PLASMACUTTER_IMMUNE + resistance_flags = UNACIDABLE|PLASMACUTTER_IMMUNE max_integrity = 350 layer = ABOVE_MOB_LAYER ///Who created the shield diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm b/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm index 1c749d8c17e..9c4f6bee6dc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm @@ -13,7 +13,6 @@ plasma_max = 1700 plasma_gain = 60 max_health = 375 - //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION spit_types = list(/datum/ammo/energy/xeno/psy_blast) deevolves_to = list(/mob/living/carbon/xenomorph/warrior) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm index 5195686ef58..5d357100301 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm @@ -23,7 +23,6 @@ // *** Evolution *** // evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolves_to = list(/mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/warlock, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/chimera) deevolves_to = /mob/living/carbon/xenomorph/defender diff --git a/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm b/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm deleted file mode 100644 index e402616164a..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm +++ /dev/null @@ -1,478 +0,0 @@ -/* RUTGMC DELETION, WIDOW REMOVAL -/datum/action/ability/activable/xeno/web_spit - name = "Web Spit" - desc = "Spit a web to your target, this causes different effects depending on where you hit. Spitting the head causes the target to be temporarily blind, body and arms will cause the target to be weakened, and legs will snare the target for a brief while." - action_icon_state = "web_spit" - ability_cost = 125 - cooldown_duration = 10 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_WEB_SPIT, - ) - -/datum/action/ability/activable/xeno/web_spit/use_ability(atom/target) - var/mob/living/carbon/xenomorph/X = owner - var/datum/ammo/xeno/web/web_spit = GLOB.ammo_list[/datum/ammo/xeno/web] - var/obj/projectile/newspit = new /obj/projectile(get_turf(X)) - - newspit.generate_bullet(web_spit, web_spit.damage * SPIT_UPGRADE_BONUS(X)) - newspit.def_zone = X.get_limbzone_target() - - newspit.fire_at(target, X, null, newspit.ammo.max_range) - succeed_activate() - add_cooldown() - -// *************************************** -// *********** Leash Ball -// *************************************** - -/datum/action/ability/activable/xeno/leash_ball - name = "Leash Ball" - desc = "Spit a huge web ball that snares groups of targets for a brief while." - action_icon_state = "leash_ball" - ability_cost = 250 - cooldown_duration = 20 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_LEASH_BALL, - ) - -/datum/action/ability/activable/xeno/leash_ball/use_ability(atom/A) - var/turf/target = get_turf(A) - var/mob/living/carbon/xenomorph/X = owner - X.face_atom(target) - if(!do_after(X, 1 SECONDS, NONE, X, BUSY_ICON_DANGER)) - return fail_activate() - var/datum/ammo/xeno/leash_ball = GLOB.ammo_list[/datum/ammo/xeno/leash_ball] - leash_ball.hivenumber = X.hivenumber - var/obj/projectile/newspit = new (get_turf(X)) - - newspit.generate_bullet(leash_ball) - newspit.fire_at(target, X, null, newspit.ammo.max_range) - succeed_activate() - add_cooldown() - -/obj/structure/xeno/aoe_leash - name = "Snaring Web" - icon = 'icons/Xeno/Effects.dmi' - icon_state = "aoe_leash" - desc = "Sticky and icky. Destroy it when you are stuck!" - destroy_sound = "alien_resin_break" - max_integrity = 75 - layer = ABOVE_ALL_MOB_LAYER - anchored = TRUE - allow_pass_flags = NONE - density = FALSE - obj_flags = CAN_BE_HIT | PROJ_IGNORE_DENSITY - /// How long the leash ball lasts untill it dies - var/leash_life = 10 SECONDS - /// Radius for how far the leash should affect humans and how far away they may walk - var/leash_radius = 5 - /// List of beams to be removed on obj_destruction - var/list/obj/effect/ebeam/beams = list() - /// List of victims to unregister aoe_leash is destroyed - var/list/mob/living/carbon/human/leash_victims = list() - -/// Humans caught get beamed and registered for proc/check_dist, aoe_leash also gains increased integrity for each caught human -/obj/structure/xeno/aoe_leash/Initialize(mapload, _hivenumber) - . = ..() - for(var/mob/living/carbon/human/victim in GLOB.humans_by_zlevel["[z]"]) - if(get_dist(src, victim) > leash_radius) - continue - if(victim.stat == DEAD) /// Add || CONSCIOUS after testing - continue - if(HAS_TRAIT(victim, TRAIT_LEASHED)) - continue - if(!check_path(src, victim, projectile = TRUE)) - continue - leash_victims += victim - for(var/mob/living/carbon/human/snared_victim AS in leash_victims) - ADD_TRAIT(snared_victim, TRAIT_LEASHED, src) - beams += beam(snared_victim, "beam_web", 'icons/effects/beam.dmi', INFINITY, INFINITY) - RegisterSignal(snared_victim, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(check_dist)) - if(!length(beams)) - return INITIALIZE_HINT_QDEL - QDEL_IN(src, leash_life) - -/// To remove beams after the leash_ball is destroyed and also unregister all victims -/obj/structure/xeno/aoe_leash/Destroy() - for(var/mob/living/carbon/human/victim AS in leash_victims) - UnregisterSignal(victim, COMSIG_MOVABLE_PRE_MOVE) - REMOVE_TRAIT(victim, TRAIT_LEASHED, src) - leash_victims = null - QDEL_LIST(beams) - return ..() - -/// Humans caught in the aoe_leash will be pulled back if they leave it's radius -/obj/structure/xeno/aoe_leash/proc/check_dist(datum/leash_victim, atom/newloc) - SIGNAL_HANDLER - if(get_dist(newloc, src) >= leash_radius) - return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - -/// This is so that xenos can remove leash balls -/obj/structure/xeno/aoe_leash/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) - return - X.visible_message(span_xenonotice("\The [X] starts tearing down \the [src]!"), \ - span_xenonotice("We start to tear down \the [src].")) - if(!do_after(X, 1 SECONDS, NONE, X, BUSY_ICON_GENERIC) || QDELETED(src)) - return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_xenonotice("\The [X] tears down \the [src]!"), \ - span_xenonotice("We tear down \the [src].")) - playsound(src, "alien_resin_break", 25) - take_damage(max_integrity) - -// *************************************** -// *********** Spiderling Section -// *************************************** - -/datum/action/ability/xeno_action/create_spiderling - name = "Birth Spiderling" - desc = "Give birth to a spiderling after a short charge-up. The spiderlings will follow you until death. You can only deploy 5 spiderlings at one time. On alt-use, if any charges of Cannibalise are stored, create a spiderling at no plasma cost or cooldown." - action_icon_state = "spawn_spiderling" - ability_cost = 100 - cooldown_duration = 15 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_CREATE_SPIDERLING, - KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_CREATE_SPIDERLING_USING_CC, - ) - - /// List of all our spiderlings - var/list/mob/living/carbon/xenomorph/spiderling/spiderlings = list() - /// Current amount of cannibalise charges - var/cannibalise_charges = 0 - -/datum/action/ability/xeno_action/create_spiderling/give_action(mob/living/L) - . = ..() - var/mob/living/carbon/xenomorph/X = L - var/max_spiderlings = X?.xeno_caste.max_spiderlings ? X.xeno_caste.max_spiderlings : 5 - desc = "Give birth to a spiderling after a short charge-up. The spiderlings will follow you until death. You can only deploy [max_spiderlings] spiderlings at one time. On alt-use, if any charges of Cannibalise are stored, create a spiderling at no plasma cost or cooldown." - -/datum/action/ability/xeno_action/create_spiderling/can_use_action(silent = FALSE, override_flags) - . = ..() - if(!.) - return FALSE - var/mob/living/carbon/xenomorph/X = owner - if(length(spiderlings) >= X.xeno_caste.max_spiderlings) - if(!silent) - X.balloon_alert(X, "Max Spiderlings") - return FALSE - -/// The action to create spiderlings -/datum/action/ability/xeno_action/create_spiderling/action_activate() - . = ..() - if(!do_after(owner, 0.5 SECONDS, NONE, owner, BUSY_ICON_DANGER)) - return fail_activate() - add_spiderling() - succeed_activate() - add_cooldown() - -/datum/action/ability/xeno_action/create_spiderling/alternate_action_activate() - var/mob/living/carbon/xenomorph/X = owner - if(cannibalise_charges <= 0) - X.balloon_alert(X, "No charges remaining!") - return - if(length(spiderlings) >= X.xeno_caste.max_spiderlings) - X.balloon_alert(X, "Max Spiderlings") - return - INVOKE_ASYNC(src, PROC_REF(use_cannibalise)) - return COMSIG_KB_ACTIVATED - -/// Birth a spiderling and use up a charge of cannibalise -/datum/action/ability/xeno_action/create_spiderling/proc/use_cannibalise() - if(!do_after(owner, 0.5 SECONDS, NONE, owner, BUSY_ICON_DANGER)) - return FALSE - var/mob/living/carbon/xenomorph/X = owner - if(cannibalise_charges <= 0) - X.balloon_alert(X, "No charges remaining!") - return - if(length(spiderlings) >= X.xeno_caste.max_spiderlings) - X.balloon_alert(X, "Max Spiderlings") - return - add_spiderling() - cannibalise_charges -= 1 - owner.balloon_alert(owner, "[cannibalise_charges]/3 charges remaining") - -/// Adds spiderlings to spiderling list and registers them for death so we can remove them later -/datum/action/ability/xeno_action/create_spiderling/proc/add_spiderling() - /// This creates and stores the spiderling so we can reassign the owner for spider swarm and cap how many spiderlings you can have at once - var/mob/living/carbon/xenomorph/spiderling/new_spiderling = new(owner.loc, owner, owner) - RegisterSignals(new_spiderling, list(COMSIG_MOB_DEATH, COMSIG_QDELETING), PROC_REF(remove_spiderling)) - spiderlings += new_spiderling - new_spiderling.pixel_x = rand(-8, 8) - new_spiderling.pixel_y = rand(-8, 8) - return TRUE - -/// Removes spiderling from spiderling list and unregisters death signal -/datum/action/ability/xeno_action/create_spiderling/proc/remove_spiderling(datum/source) - SIGNAL_HANDLER - spiderlings -= source - UnregisterSignal(source, list(COMSIG_MOB_DEATH, COMSIG_QDELETING)) - -// *************************************** -// *********** Spiderling mark -// *************************************** - -/datum/action/ability/activable/xeno/spiderling_mark - name = "Spiderling Mark" - desc = "Send your spawn on a valid target, they will automatically destroy themselves out of sheer fury after 15 seconds." - action_icon_state = "spiderling_mark" - ability_cost = 50 - cooldown_duration = 5 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_SPIDERLING_MARK, - ) - -/datum/action/ability/activable/xeno/spiderling_mark/use_ability(atom/A) - . = ..() - // So the spiderlings can actually attack - owner.unbuckle_all_mobs(TRUE) - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = owner.actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - if(length(create_spiderling_action.spiderlings) <= 0) - owner.balloon_alert(owner, "No spiderlings") - return fail_activate() - if(!isturf(A) && !istype(A, /obj/alien/weeds)) - owner.balloon_alert(owner, "Spiderlings attacking " + A.name) - else - for(var/item in A) //Autoaim at humans if weeds or turfs are clicked - if(!ishuman(item)) - continue - A = item - owner.balloon_alert(owner, "Spiderlings attacking " + A.name) - break - if(!ishuman(A)) //If no human found, cancel ability - owner.balloon_alert(owner, "Nothing to attack, cancelled") - return fail_activate() - - succeed_activate() - SEND_SIGNAL(owner, COMSIG_SPIDERLING_MARK, A) - add_cooldown() - -// *************************************** -// *********** Burrow -// *************************************** - -/datum/action/ability/xeno_action/burrow - name = "Burrow" - desc = "Burrow into the ground, allowing you and your active spiderlings to hide in plain sight. You cannot use abilities, attack nor move while burrowed. Use the ability again to unburrow if you're already burrowed." - action_icon_state = "burrow" - ability_cost = 0 - cooldown_duration = 20 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_BURROW, - ) - use_state_flags = ABILITY_USE_BURROWED - -/datum/action/ability/xeno_action/burrow/action_activate() - . = ..() - /// We need the list of spiderlings so that we can burrow them - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = owner.actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - /// Here we make every single spiderling that we have also burrow and assign a signal so that they unburrow too - for(var/mob/living/carbon/xenomorph/spiderling/spiderling AS in create_spiderling_action?.spiderlings) - /// Here we trigger the burrow proc, the registering happens there - var/datum/action/ability/xeno_action/burrow/spiderling_burrow = spiderling.actions_by_path[/datum/action/ability/xeno_action/burrow] - spiderling_burrow.xeno_burrow() - xeno_burrow() - succeed_activate() - -/// Burrow code for xenomorphs -/datum/action/ability/xeno_action/burrow/proc/xeno_burrow() - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/X = owner - if(!HAS_TRAIT(X, TRAIT_BURROWED)) - to_chat(X, span_xenowarning("We start burrowing into the ground...")) - INVOKE_ASYNC(src, PROC_REF(xeno_burrow_doafter)) - return - UnregisterSignal(X, COMSIG_XENOMORPH_TAKING_DAMAGE) - ADD_TRAIT(X, TRAIT_NON_FLAMMABLE, initial(name)) - X.soft_armor = X.soft_armor.modifyRating(fire = 100) - X.hard_armor = X.hard_armor.modifyRating(fire = 100) - X.mouse_opacity = initial(X.mouse_opacity) - X.density = TRUE - X.allow_pass_flags &= ~PASSABLE - REMOVE_TRAIT(X, TRAIT_IMMOBILE, WIDOW_ABILITY_TRAIT) - REMOVE_TRAIT(X, TRAIT_BURROWED, WIDOW_ABILITY_TRAIT) - REMOVE_TRAIT(X, TRAIT_HANDS_BLOCKED, WIDOW_ABILITY_TRAIT) - X.update_icons() - add_cooldown() - owner.unbuckle_all_mobs(TRUE) - -/// Called by xeno_burrow only when burrowing -/datum/action/ability/xeno_action/burrow/proc/xeno_burrow_doafter() - if(!do_after(owner, 3 SECONDS, NONE, null, BUSY_ICON_DANGER)) - return - to_chat(owner, span_xenowarning("We are now burrowed, hidden in plain sight and ready to strike.")) - // This part here actually burrows the xeno - owner.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - owner.density = FALSE - owner.allow_pass_flags |= PASSABLE - // Here we prevent the xeno from moving or attacking or using abilities until they unburrow by clicking the ability - ADD_TRAIT(owner, TRAIT_IMMOBILE, WIDOW_ABILITY_TRAIT) - ADD_TRAIT(owner, TRAIT_BURROWED, WIDOW_ABILITY_TRAIT) - ADD_TRAIT(owner, TRAIT_HANDS_BLOCKED, WIDOW_ABILITY_TRAIT) - // We register for movement so that we unburrow if bombed - var/mob/living/carbon/xenomorph/X = owner - X.soft_armor = X.soft_armor.modifyRating(fire = -100) - X.hard_armor = X.hard_armor.modifyRating(fire = -100) - REMOVE_TRAIT(X, TRAIT_NON_FLAMMABLE, initial(name)) - // Update here without waiting for life - X.update_icons() - RegisterSignal(X, COMSIG_XENOMORPH_TAKING_DAMAGE, PROC_REF(xeno_burrow)) - -// *************************************** -// *********** Attach Spiderlings -// *************************************** -/datum/action/ability/xeno_action/attach_spiderlings - name = "Attach Spiderlings" - desc = "Attach your current spiderlings to you " - action_icon_state = "attach_spiderling" - ability_cost = 0 - cooldown_duration = 0 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_ATTACH_SPIDERLINGS, - ) - ///the attached spiderlings - var/list/mob/living/carbon/xenomorph/spiderling/attached_spiderlings = list() - ///how many times we attempt to attach adjacent spiderligns - var/attach_attempts = 5 - -/datum/action/ability/xeno_action/attach_spiderlings/action_activate() - . = ..() - if(owner.buckled_mobs) - /// yeet off all spiderlings if we are carrying any - owner.unbuckle_all_mobs(TRUE) - return - var/mob/living/carbon/xenomorph/widow/X = owner - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = X.actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - if(!(length(create_spiderling_action.spiderlings))) - X.balloon_alert(X, "No spiderlings") - return fail_activate() - var/list/mob/living/carbon/xenomorph/spiderling/remaining_spiderlings = create_spiderling_action.spiderlings.Copy() - // First make the spiderlings stop what they are doing and return to the widow - for(var/mob/spider in remaining_spiderlings) - var/datum/component/ai_controller/AI = spider.GetComponent(/datum/component/ai_controller) - AI?.ai_behavior.change_action(ESCORTING_ATOM, AI.ai_behavior.escorted_atom) - grab_spiderlings(remaining_spiderlings, attach_attempts) - succeed_activate() - -/// this proc scoops up adjacent spiderlings and then calls ride_widow on them -/datum/action/ability/xeno_action/attach_spiderlings/proc/grab_spiderlings(list/mob/living/carbon/xenomorph/spiderling/remaining_list, number_of_attempts_left) - if(number_of_attempts_left <= 0) - return - for(var/mob/living/carbon/xenomorph/spiderling/remaining_spiderling AS in remaining_list) - SEND_SIGNAL(owner, COMSIG_SPIDERLING_RETURN) //So spiderlings move towards the buckle - if(!owner.Adjacent(remaining_spiderling)) - continue - remaining_list -= remaining_spiderling - owner.buckle_mob(remaining_spiderling, TRUE, TRUE, 90, 1,0) - ADD_TRAIT(remaining_spiderling, TRAIT_IMMOBILE, WIDOW_ABILITY_TRAIT) - addtimer(CALLBACK(src, PROC_REF(grab_spiderlings), remaining_list, number_of_attempts_left - 1), 1) - -// *************************************** -// *********** Cannibalise -// *************************************** -/datum/action/ability/activable/xeno/cannibalise - name = "Cannibalise Spiderling" - desc = "Consume one of your children, storing their biomass for future use. If any charges of Cannibalise are stored, alt-use of Birth Spiderling will create one spiderling in exchange for one charge of Cannibalise. Up to three charges of Cannibalise may be stored at once." - action_icon_state = "cannibalise_spiderling" - ability_cost = 150 - cooldown_duration = 2 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_CANNIBALISE_SPIDERLING, - ) - -/datum/action/ability/activable/xeno/cannibalise/can_use_ability(atom/A, silent = FALSE, override_flags) - . = ..() - if(!.) - return - if(!owner.Adjacent(A)) - owner.balloon_alert(owner, "Not adjacent") - return FALSE - if(!istype(A, /mob/living/carbon/xenomorph/spiderling)) - owner.balloon_alert(owner, "We can't cannibalise this") - return FALSE - return TRUE - -/datum/action/ability/activable/xeno/cannibalise/use_ability(atom/A) - if(!do_after(owner, 0.5 SECONDS, NONE, A, BUSY_ICON_DANGER)) - return fail_activate() - - var/mob/living/carbon/xenomorph/spiderling/to_cannibalise = A - QDEL_NULL(to_cannibalise) - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = owner.actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - if(!create_spiderling_action) - return - - if(create_spiderling_action.cannibalise_charges < 3) - create_spiderling_action.cannibalise_charges += 1 - owner.balloon_alert(owner, "[create_spiderling_action.cannibalise_charges]/3 charges") - else - owner.balloon_alert(owner, "We're full, no charges gained!") - playsound(owner.loc, 'sound/items/eatfood.ogg', 15, TRUE) - succeed_activate() - add_cooldown() - -// *************************************** -// *********** Web Hook -// *************************************** -/datum/action/ability/activable/xeno/web_hook - name = "Web Hook" - desc = "Shoot out a web and pull it to traverse forward" - action_icon_state = "web_hook" - ability_cost = 200 - cooldown_duration = 10 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_WEB_HOOK, - ) - //ref to beam for web hook - var/datum/beam/web_beam - -/datum/action/ability/activable/xeno/web_hook/can_use_ability(atom/A) - . = ..() - if(!.) - return - if(isliving(A)) - owner.balloon_alert(owner, "We can't attach to that") - return FALSE - if(!isturf(A)) - return FALSE - if(get_dist(owner, A) <= WIDOW_WEB_HOOK_MIN_RANGE) - owner.balloon_alert(owner, "Too close") - return FALSE - var/turf/current = get_turf(owner) - var/turf/target_turf = get_turf(A) - if(get_dist(current, target_turf) > WIDOW_WEB_HOOK_RANGE) - owner.balloon_alert(owner, "Too far") - return FALSE - current = get_step_towards(current, target_turf) - -/datum/action/ability/activable/xeno/web_hook/use_ability(atom/A) - var/atom/movable/web_hook/web_hook = new (get_turf(owner)) - web_beam = owner.beam(web_hook,"beam_web",'icons/effects/beam.dmi') - RegisterSignals(web_hook, list(COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_IMPACT), PROC_REF(drag_widow), TRUE) - web_hook.throw_at(A, WIDOW_WEB_HOOK_RANGE, 3, owner, FALSE) - succeed_activate() - add_cooldown() - -/// This throws widow wherever the web_hook landed, distance is dependant on if the web_hook hit a wall or just ground -/datum/action/ability/activable/xeno/web_hook/proc/drag_widow(datum/source, turf/target_turf) - SIGNAL_HANDLER - QDEL_NULL(web_beam) - if(target_turf) - owner.throw_at(target_turf, WIDOW_WEB_HOOK_RANGE, WIDOW_WEB_HOOK_SPEED, owner, FALSE) - else - // we throw widow half the distance if she hits the floor - owner.throw_at(get_turf(source), WIDOW_WEB_HOOK_RANGE / 2, WIDOW_WEB_HOOK_SPEED, owner, FALSE) - qdel(source) - RegisterSignal(owner, COMSIG_MOVABLE_POST_THROW, PROC_REF(delete_beam)) - -///signal handler to delete the web_hook after we are done draggging owner along -/datum/action/ability/activable/xeno/web_hook/proc/delete_beam(datum/source) - SIGNAL_HANDLER - UnregisterSignal(source, COMSIG_MOVABLE_POST_THROW) - QDEL_NULL(web_beam) - -/// Our web hook that we throw -/atom/movable/web_hook - name = "You can't see this" - invisibility = INVISIBILITY_ABSTRACT -*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/widow/castedatum_widow.dm b/code/modules/mob/living/carbon/xenomorph/castes/widow/castedatum_widow.dm deleted file mode 100644 index 960ba1ae5d7..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/widow/castedatum_widow.dm +++ /dev/null @@ -1,96 +0,0 @@ -/* RUTGMC DELETION, WIDOW REMOVAL -/datum/xeno_caste/widow - caste_name = "Widow" - display_name = "Widow" - upgrade_name = "" - caste_desc = "You don't think you've seen a tarantula this giant before." - caste_type_path = /mob/living/carbon/xenomorph/widow - - tier = XENO_TIER_THREE - upgrade = XENO_UPGRADE_BASETYPE - wound_type = "widow" - - // *** Melee Attacks *** // - melee_damage = 18 - - // *** Speed *** // - speed = -0.5 - - // *** Plasma *** // - plasma_max = 600 - plasma_gain = 55 - - // *** Health *** // - max_health = 450 - - // *** Evolution *** // - upgrade_threshold = TIER_THREE_THRESHOLD - - deevolves_to = list(/mob/living/carbon/xenomorph/hunter, /mob/living/carbon/xenomorph/carrier, /mob/living/carbon/xenomorph/puppeteer) - - // *** Flags *** // - caste_flags = CASTE_EVOLUTION_ALLOWED - can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER - caste_traits = null - - // *** Defense *** // - soft_armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 15, BIO = 10, FIRE = 15, ACID = 10) - - // *** Minimap Icon *** // - minimap_icon = "widow" - - // *** Widow Abilities *** // - max_spiderlings = 5 - - // *** Abilities *** /// - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain, - /datum/action/ability/activable/xeno/cocoon, - /datum/action/ability/activable/xeno/web_spit, - /datum/action/ability/xeno_action/burrow, - /datum/action/ability/activable/xeno/leash_ball, - /datum/action/ability/xeno_action/create_spiderling, - /datum/action/ability/xeno_action/lay_egg, - /datum/action/ability/xeno_action/attach_spiderlings, - /datum/action/ability/activable/xeno/cannibalise, - /datum/action/ability/activable/xeno/spiderling_mark, - ) - -/datum/xeno_caste/widow/on_caste_applied(mob/xenomorph) - . = ..() - xenomorph.AddElement(/datum/element/wall_speedup, WIDOW_SPEED_BONUS) - xenomorph.AddElement(/datum/element/ridable, /datum/component/riding/creature/widow) - -/datum/xeno_caste/widow/on_caste_removed(mob/xenomorph) - . = ..() - xenomorph.RemoveElement(/datum/element/wall_speedup, WIDOW_SPEED_BONUS) - xenomorph.RemoveElement(/datum/element/ridable, /datum/component/riding/creature/widow) - -/datum/xeno_caste/widow/normal - upgrade = XENO_UPGRADE_NORMAL - -/datum/xeno_caste/widow/primordial - upgrade_name = "Primordial" - caste_desc = "At times, life is just like a web. You fall, and a spider called accident, at the center, takes you to hell." - primordial_message = "We weave the threads of fate that our victims life hangs from." - upgrade = XENO_UPGRADE_PRIMO - - // *** Abilities *** /// - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain, - /datum/action/ability/activable/xeno/cocoon, - /datum/action/ability/activable/xeno/web_spit, - /datum/action/ability/xeno_action/burrow, - /datum/action/ability/activable/xeno/leash_ball, - /datum/action/ability/xeno_action/create_spiderling, - /datum/action/ability/xeno_action/lay_egg, - /datum/action/ability/xeno_action/attach_spiderlings, - /datum/action/ability/activable/xeno/cannibalise, - /datum/action/ability/activable/xeno/spiderling_mark, - /datum/action/ability/activable/xeno/web_hook, - ) -*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/widow/widow.dm b/code/modules/mob/living/carbon/xenomorph/castes/widow/widow.dm deleted file mode 100644 index c0e6a9530ca..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/widow/widow.dm +++ /dev/null @@ -1,66 +0,0 @@ -/* RUTGMC DELETION, WIDOW REMOVAL -/mob/living/carbon/xenomorph/widow - caste_base_type = /mob/living/carbon/xenomorph/widow - name = "Widow" - desc = "A large arachnid xenomorph, with fangs ready to bear and crawling with many little spiderlings ready to grow." - icon = 'icons/Xeno/castes/widow.dmi' - icon_state = "Widow Walking" - bubble_icon = "alienroyal" - health = 200 - maxHealth = 200 - plasma_stored = 150 - tier = XENO_TIER_THREE - upgrade = XENO_UPGRADE_NORMAL - buckle_flags = CAN_BUCKLE - pixel_x = -16 - old_x = -16 - max_buckled_mobs = 5 - -/mob/living/carbon/xenomorph/widow/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_LIGHT_STEP, XENO_TRAIT) - -/mob/living/carbon/xenomorph/widow/buckle_mob(mob/living/buckling_mob, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, silent) - if(!force) - return FALSE - return ..() - -/mob/living/carbon/xenomorph/widow/post_unbuckle_mob(mob/living/M) - M.layer = initial(M.layer) - M.pixel_x = rand(-8, 8) - M.pixel_y = rand(-8, 8) - - -//Prevents humans unbuckling spiderlings -/mob/living/carbon/xenomorph/widow/user_unbuckle_mob(mob/living/buckled_mob, mob/user, silent) - if(ishuman(user)) - return - return ..() - -/mob/living/carbon/xenomorph/widow/set_stat(new_stat) - . = ..() - if(new_stat == UNCONSCIOUS) - unbuckle_all_mobs(TRUE) //If we have spiderlings on us, get them off and ready for guard - SEND_SIGNAL(src, COMSIG_SPIDERLING_GUARD) - else if(new_stat == CONSCIOUS) - unbuckle_all_mobs(TRUE) - SEND_SIGNAL(src, COMSIG_SPIDERLING_UNGUARD) - -/mob/living/carbon/xenomorph/widow/death(gibbing, deathmessage, silent) - unbuckle_all_mobs(TRUE) //RELEASE THE HORDE - return ..() - -/mob/living/carbon/xenomorph/widow/transfer_to_hive(hivenumber) - . = ..() - var/mob/living/carbon/xenomorph/widow/X = src - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = X.actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - for(var/mob/living/carbon/xenomorph/spider AS in create_spiderling_action.spiderlings) - spider.transfer_to_hive(hivenumber) - -/mob/living/carbon/xenomorph/widow/on_eord(turf/destination) - ..() - var/datum/action/ability/xeno_action/create_spiderling/create_spiderling_action = actions_by_path[/datum/action/ability/xeno_action/create_spiderling] - for(var/mob/living/carbon/xenomorph/spider AS in create_spiderling_action.spiderlings) - spider.revive(TRUE) - spider.forceMove(destination) -*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm deleted file mode 100644 index a85be7c090c..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm +++ /dev/null @@ -1,749 +0,0 @@ -/* RU TGMC EDIT -GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( - /obj/vehicle/sealed, - /obj/structure/barricade, -))) - -// *************************************** -// *********** Blink -// *************************************** -/datum/action/ability/activable/xeno/blink - name = "Blink" - action_icon_state = "blink" - desc = "We teleport ourselves a short distance to a location within line of sight." - use_state_flags = ABILITY_TURF_TARGET - ability_cost = 30 - cooldown_duration = 0.5 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_BLINK, - ) - -///Check target Blink turf to see if it can be blinked to -/datum/action/ability/activable/xeno/blink/proc/check_blink_tile(turf/T, ignore_blocker = FALSE, silent = FALSE) - if(isclosedturf(T) || isspaceturf(T) || isspacearea(T)) - if(!silent) - to_chat(owner, span_xenowarning("We cannot blink here!")) - return FALSE - - if(!line_of_sight(owner, T)) //Needs to be in line of sight. - if(!silent) - to_chat(owner, span_xenowarning("We can't blink without line of sight to our destination!")) - return FALSE - - if(IS_OPAQUE_TURF(T)) - if(!silent) - to_chat(owner, span_xenowarning("We can't blink into this space without vision!")) - return FALSE - - if(ignore_blocker) //If we don't care about objects occupying the target square, return TRUE; used for checking pathing through transparents - return TRUE - - if(turf_block_check(owner, T, FALSE, TRUE, TRUE, TRUE, TRUE)) //Check if there's anything that blocks us; we only care about Canpass here - if(!silent) - to_chat(owner, span_xenowarning("We can't blink here!")) - return FALSE - - var/area/A = get_area(src) - if(isspacearea(A)) - if(!silent) - to_chat(owner, span_xenowarning("We cannot blink here!")) - return FALSE - - - return TRUE - -///Check for whether the target turf has dense objects inside -/datum/action/ability/activable/xeno/blink/proc/check_blink_target_turf_density(turf/T, silent = FALSE) - for(var/atom/blocker AS in T) - if(!blocker.CanPass(owner, T)) - if(!silent) - to_chat(owner, span_xenowarning("We can't blink into a solid object!")) - return FALSE - - return TRUE - -/datum/action/ability/activable/xeno/blink/use_ability(atom/A) - . = ..() - var/mob/living/carbon/xenomorph/wraith/X = owner - var/turf/T = X.loc - var/turf/temp_turf = X.loc - var/check_distance = min(X.xeno_caste.wraith_blink_range, get_dist(X,A)) - var/list/fully_legal_turfs = list() - - for (var/x = 1 to check_distance) - temp_turf = get_step(T, get_dir(T, A)) - if (!temp_turf) - break - if(!check_blink_tile(temp_turf, TRUE, TRUE)) //Verify that the turf is legal; if not we cancel out. We ignore transparent dense objects like windows here for now - break - if(check_blink_target_turf_density(temp_turf, TRUE)) //If we could ultimately teleport to this square, it is fully legal; add it to the list - fully_legal_turfs += temp_turf - T = temp_turf - - check_distance = min(length(fully_legal_turfs), check_distance) //Cap the check distance to the number of fully legal turfs - T = X.loc //Reset T to be our initial position - if(check_distance) - T = fully_legal_turfs[check_distance] - - X.face_atom(T) //Face the target so we don't look like an ass - - var/cooldown_mod = 1 - var/mob/pulled_target = owner.pulling - if(pulled_target) //bring the pulled target with us if applicable but at the cost of sharply increasing the next cooldown - - if(pulled_target.issamexenohive(X)) - cooldown_mod = X.xeno_caste.wraith_blink_drag_friendly_multiplier - else - if(!do_after(owner, 0.5 SECONDS, NONE, owner, BUSY_ICON_HOSTILE)) //Grap-porting hostiles has a slight wind up - return fail_activate() - cooldown_mod = X.xeno_caste.wraith_blink_drag_nonfriendly_living_multiplier - if(ishuman(pulled_target)) - var/mob/living/carbon/human/H = pulled_target - if(H.stat == UNCONSCIOUS) //Apply critdrag damage as if they were quickly pulled the same distance - var/critdamage = HUMAN_CRITDRAG_OXYLOSS * get_dist(H.loc, T) - if(!H.adjustOxyLoss(critdamage)) - H.adjustBruteLoss(critdamage) - - to_chat(X, span_xenodanger("We bring [pulled_target] with us. We won't be ready to blink again for [cooldown_duration * cooldown_mod * 0.1] seconds due to the strain of doing so.")) - - teleport_debuff_aoe(X) //Debuff when we vanish - - if(pulled_target) //Yes, duplicate check because otherwise we end up with the initial teleport debuff AoE happening prior to the wind up which looks really bad and is actually exploitable via deliberate do after cancels - pulled_target.forceMove(T) //Teleport to our target turf - - X.forceMove(T) //Teleport to our target turf - teleport_debuff_aoe(X) //Debuff when we reappear - - succeed_activate() - add_cooldown(cooldown_duration * cooldown_mod) - - GLOB.round_statistics.wraith_blinks++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "wraith_blinks") //Statistics - -///Called by many of the Wraith's teleportation effects -/datum/action/ability/activable/xeno/proc/teleport_debuff_aoe(atom/movable/teleporter, silent = FALSE) - var/mob/living/carbon/xenomorph/ghost = owner - - if(!silent) //Sound effects - playsound(teleporter, 'sound/effects/EMPulse.ogg', 25, 1) //Sound at the location we are arriving at - - new /obj/effect/temp_visual/blink_portal(get_turf(teleporter)) - - new /obj/effect/temp_visual/wraith_warp(get_turf(teleporter)) - - for(var/mob/living/living_target in range(1, teleporter.loc)) - - if(living_target.stat == DEAD) - continue - - if(isxeno(living_target)) - var/mob/living/carbon/xenomorph/X = living_target - if(X.issamexenohive(ghost)) //No friendly fire - continue - - living_target.adjust_stagger(WRAITH_TELEPORT_DEBUFF_STAGGER_STACKS) - living_target.add_slowdown(WRAITH_TELEPORT_DEBUFF_SLOWDOWN_STACKS) - to_chat(living_target, span_warning("You feel nauseous as reality warps around you!")) - -/datum/action/ability/activable/xeno/blink/on_cooldown_finish() - to_chat(owner, span_xenodanger("We are able to blink again.")) - owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) - return ..() - -// *************************************** -// *********** Banish -// *************************************** -/datum/action/ability/activable/xeno/banish - name = "Banish" - action_icon_state = "Banish" - desc = "We banish a target object or creature within line of sight to nullspace for a short duration. Can target onself and allies. Non-friendlies are banished for half as long." - use_state_flags = ABILITY_TARGET_SELF - ability_cost = 50 - cooldown_duration = 20 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_BANISH, - ) - ///Target we've banished - var/atom/movable/banishment_target = null - ///SFX indicating the banished target's position - var/obj/effect/temp_visual/banishment_portal/portal = null - ///Backup coordinates to teleport the banished to, in case the portal gets destroyed (shuttles!!) - var/list/backup_coordinates = list(0,0,0) - /// living mobs in the banished object so we can check they didnt get ejected - var/list/mob/living/contained_living = list() - ///The timer ID of any Banish currently active - var/banish_duration_timer_id - ///Phantom zone reserved area - var/datum/turf_reservation/reserved_area - /// How far can you banish - var/range = 3 - -/datum/action/ability/activable/xeno/banish/Destroy() - QDEL_NULL(reserved_area) //clean up - return ..() - -/datum/action/ability/activable/xeno/banish/can_use_ability(atom/A, silent = FALSE, override_flags) - . = ..() - - if(!ismovableatom(A) || iseffect(A) || istype(A, /obj/alien) || CHECK_BITFIELD(A.resistance_flags, INDESTRUCTIBLE) || CHECK_BITFIELD(A.resistance_flags, BANISH_IMMUNE)) //Cannot banish non-movables/things that are supposed to be invul; also we ignore effects - if(!silent) - to_chat(owner, span_xenowarning("We cannot banish this!")) - return FALSE - - if(HAS_TRAIT(A, TRAIT_TIME_SHIFTED)) - to_chat(owner, span_xenowarning("That target is already affected by a time manipulation effect!")) - return - - var/distance = get_dist(owner, A) - if(distance > range) //Needs to be in range. - if(!silent) - to_chat(owner, span_xenowarning("Our target is too far away! It must be [distance - range] tiles closer!")) - return FALSE - - if(!line_of_sight(owner, A, ignore_target_opacity = TRUE)) //Needs to be in line of sight. - if(!silent) - to_chat(owner, span_xenowarning("We can't banish without line of sight to our target!")) - return FALSE - - -/datum/action/ability/activable/xeno/banish/use_ability(atom/movable/A) - . = ..() - var/mob/living/carbon/xenomorph/wraith/ghost = owner - var/banished_turf = get_turf(A) //Set the banishment turf. - banishment_target = A //Set the banishment target - backup_coordinates[1] = banishment_target.x //Set up backup coordinates in case banish portal gets destroyed - backup_coordinates[2] = banishment_target.y - backup_coordinates[3] = banishment_target.z - - ghost.face_atom(A) //Face the target so we don't look like an ass - - teleport_debuff_aoe(banishment_target) //Debuff when we disappear - portal = new /obj/effect/temp_visual/banishment_portal(banished_turf) - banishment_target.resistance_flags = RESIST_ALL - - if(isliving(A)) - var/mob/living/stasis_target = banishment_target - stasis_target.apply_status_effect(/datum/status_effect/incapacitating/unconscious) //Force the target to KO - stasis_target.notransform = TRUE //Stasis - stasis_target.overlay_fullscreen("banish", /atom/movable/screen/fullscreen/blind) //Force the blind overlay - - if(!reserved_area) //If we don't have a reserved area, set one - reserved_area = SSmapping.RequestBlockReservation(3,3, SSmapping.transit.z_value, /datum/turf_reservation/banish) - if(!reserved_area) //If we *still* don't have a reserved area we've got a problem - CRASH("failed to reserve an area for [owner]'s Banish.") - - var/turf/target_turf = reserved_area.reserved_turfs[5] - new /area/arrival(target_turf) //So we don't get instagibbed from the space area - - if(isxeno(banishment_target)) //If we're a xeno, disgorge all vored contents - var/mob/living/carbon/xenomorph/xeno_target = banishment_target - xeno_target.eject_victim() - - for(var/mob/living/living_contents in banishment_target.GetAllContents()) //Safety measure so living mobs inside the target don't get lost in Brazilspace forever - contained_living += living_contents - living_contents.apply_status_effect(/datum/status_effect/incapacitating/unconscious) - living_contents.notransform = TRUE - living_contents.overlay_fullscreen("banish", /atom/movable/screen/fullscreen/blind) - - banishment_target.forceMove(target_turf) - - var/duration = ghost.xeno_caste.wraith_banish_base_duration //Set the duration - - portal.add_filter("banish_portal_1", 3, list("type" = "motion_blur", 0, 0)) //Cool filter appear - portal.add_filter("banish_portal_2", 3, list("type" = "motion_blur", 0, 0)) //Cool filter appear - animate(portal.get_filter("banish_portal_1"), x = 20*rand() - 10, y = 20*rand() - 10, time = 0.5 SECONDS, loop = -1) - animate(portal.get_filter("banish_portal_2"), x = 20*rand() - 10, y = 20*rand() - 10, time = 0.5 SECONDS, loop = -1) - - var/cooldown_mod = 1 - var/plasma_mod = 1 - if(isliving(banishment_target) && !(banishment_target.issamexenohive(ghost))) //We halve the max duration for living non-allies - duration *= WRAITH_BANISH_NONFRIENDLY_LIVING_MULTIPLIER - else if(is_type_in_typecache(banishment_target, GLOB.wraith_banish_very_short_duration_list)) //Barricades should only be gone long enough to admit an infiltrator xeno or two; one way. - duration *= WRAITH_BANISH_VERY_SHORT_MULTIPLIER - else - cooldown_mod = 0.6 //40% cooldown reduction if used on non-hostile, non-blacklisted targets. - plasma_mod = 0.4 //60% plasma cost reduction if used on non-hostile, non-blacklisted targets. - - banishment_target.visible_message(span_warning("Space abruptly twists and warps around [banishment_target] as it suddenly vanishes!"), \ - span_highdanger("The world around you reels, reality seeming to twist and tear until you find yourself trapped in a forsaken void beyond space and time.")) - playsound(banished_turf, 'sound/weapons/emitter2.ogg', 50, 1) //this isn't quiet - - to_chat(ghost,span_xenodanger("We have banished [banishment_target] to nullspace for [duration * 0.1] seconds.")) - log_attack("[key_name(ghost)] has banished [key_name(banishment_target)] for [duration * 0.1] seconds at [AREACOORD(banishment_target)]") - - addtimer(CALLBACK(src, PROC_REF(banish_warning)), duration * 0.7) //Warn when Banish is about to end - banish_duration_timer_id = addtimer(CALLBACK(src, PROC_REF(banish_deactivate)), duration, TIMER_STOPPABLE) //store the timer ID - - succeed_activate(ability_cost * plasma_mod) - add_cooldown(cooldown_duration * cooldown_mod) - - GLOB.round_statistics.wraith_banishes++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "wraith_banishes") //Statistics - -///Warns the user when Banish's duration is about to lapse. -/datum/action/ability/activable/xeno/banish/proc/banish_warning() - - if(!banishment_target) - return - - to_chat(owner,span_highdanger("Our banishment target [banishment_target.name] is about to return to reality at [AREACOORD_NO_Z(portal)]!")) - owner.playsound_local(owner, 'sound/voice/alien/hiss8.ogg', 50, 0, 1) - -///Ends the effect of the Banish ability -/datum/action/ability/activable/xeno/banish/proc/banish_deactivate() - SIGNAL_HANDLER - if(QDELETED(banishment_target)) - return - var/turf/return_turf = get_turf(portal) - if(!return_turf) - return_turf = locate(backup_coordinates[1], backup_coordinates[2], backup_coordinates[3]) - banishment_target.resistance_flags = initial(banishment_target.resistance_flags) - banishment_target.status_flags = initial(banishment_target.status_flags) //Remove stasis and temp invulerability - banishment_target.forceMove(return_turf) - - var/list/all_contents = banishment_target.GetAllContents() - for(var/mob/living/living_contents AS in contained_living) - if(QDELETED(living_contents)) - continue - living_contents.remove_status_effect(/datum/status_effect/incapacitating/unconscious) - living_contents.notransform = initial(living_contents.notransform) - living_contents.clear_fullscreen("banish") - if(living_contents in all_contents) - continue //if it is still inside then it is not stranded and we dont care - living_contents.forceMove(return_turf) - contained_living.Cut() - - teleport_debuff_aoe(banishment_target) - banishment_target.add_filter("wraith_banishment_filter", 3, list("type" = "blur", 5)) - addtimer(CALLBACK(banishment_target, TYPE_PROC_REF(/atom, remove_filter), "wraith_banishment_filter"), 1 SECONDS) - - if(isliving(banishment_target)) - var/mob/living/living_target = banishment_target - living_target = banishment_target - living_target.remove_status_effect(/datum/status_effect/incapacitating/unconscious) - living_target.notransform = initial(living_target.notransform) - living_target.clear_fullscreen("banish") - - banishment_target.visible_message(span_warning("[banishment_target.name] abruptly reappears!"), \ - span_warning("You suddenly reappear back in what you believe to be reality.")) - - to_chat(owner, span_highdanger("Our target [banishment_target] has returned to reality at [AREACOORD_NO_Z(banishment_target)]")) //Always alert the Wraith - log_attack("[key_name(owner)] has unbanished [key_name(banishment_target)] at [AREACOORD(banishment_target)]") - - QDEL_NULL(portal) //Eliminate the Brazil portal if we need to - - banishment_target = null - - return TRUE //For the recall sub-ability - -/datum/action/ability/activable/xeno/banish/on_cooldown_finish() - to_chat(owner, span_xenodanger("We are able to banish again.")) - owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1) - return ..() - -// *************************************** -// *********** Recall -// *************************************** -/datum/action/ability/xeno_action/recall - name = "Recall" - action_icon_state = "Recall" - desc = "We recall a target we've banished back from the depths of nullspace." - use_state_flags = ABILITY_USE_NOTTURF|ABILITY_USE_CLOSEDTURF|ABILITY_USE_STAGGERED|ABILITY_USE_INCAP|ABILITY_USE_LYING //So we can recall ourselves from nether Brazil - cooldown_duration = 1 SECONDS //Token for anti-spam - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_RECALL, - ) - -/datum/action/ability/xeno_action/recall/can_use_action(silent = FALSE, override_flags) - . = ..() - - var/datum/action/ability/activable/xeno/banish/banish_check = owner.actions_by_path[/datum/action/ability/activable/xeno/banish] - if(!banish_check) //Mainly for when we transition on upgrading - return FALSE - - if(!banish_check.banishment_target) - if(!silent) - to_chat(owner,span_xenodanger("We have no targets banished!")) - return FALSE - - -/datum/action/ability/xeno_action/recall/action_activate() - . = ..() - var/datum/action/ability/activable/xeno/banish/banish_check = owner.actions_by_path[/datum/action/ability/activable/xeno/banish] - banish_check.banish_deactivate() - succeed_activate() - add_cooldown() - -///Return TRUE if we have a block, return FALSE otherwise -/proc/turf_block_check(atom/subject, atom/target, ignore_can_pass = FALSE, ignore_density = FALSE, ignore_closed_turf = FALSE, ignore_invulnerable = FALSE, ignore_objects = FALSE, ignore_mobs = FALSE, ignore_space = FALSE) - var/turf/T = get_turf(target) - if(isspaceturf(T) && !ignore_space) - return TRUE - if(isclosedturf(T) && !ignore_closed_turf) //If we care about closed turfs - return TRUE - for(var/atom/blocker AS in T) - if((blocker.flags_atom & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care - continue - if(!blocker.CanPass(subject, T) && !ignore_can_pass) //If the subject atom can't pass and we care about that, we have a block - return TRUE - if(!blocker.density) //Check if we're dense - continue - if(!ignore_density) //If we care about all dense atoms or only certain types of dense atoms - return TRUE - if((blocker.resistance_flags & INDESTRUCTIBLE) && !ignore_invulnerable) //If we care about dense invulnerable objects - return TRUE - if(isobj(blocker) && !ignore_objects) //If we care about dense objects - var/obj/obj_blocker = blocker - if(!isstructure(obj_blocker)) //If it's not a structure and we care about objects, we have a block - return TRUE - var/obj/structure/blocker_structure = obj_blocker - if(!blocker_structure.climbable) //If it's a structure and can't be climbed, we have a block - return TRUE - if(ismob(blocker) && !ignore_mobs) //If we care about mobs - return TRUE - - return FALSE - -/datum/action/ability/xeno_action/timestop - name = "Time stop" - action_icon_state = "time_stop" - desc = "Freezes bullets in their course, and they will start to move again only after a certain time" - ability_cost = 100 - cooldown_duration = 1 MINUTES - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_TIMESTOP, - ) - ///The range of the ability - var/range = 1 - ///How long is the bullet freeze staying - var/duration = 7 SECONDS - -/datum/action/ability/xeno_action/timestop/action_activate() - . = ..() - var/list/turf/turfs_affected = list() - var/turf/central_turf = get_turf(owner) - for(var/turf/affected_turf in view(range, central_turf)) - ADD_TRAIT(affected_turf, TRAIT_TURF_BULLET_MANIPULATION, REF(src)) - turfs_affected += affected_turf - affected_turf.add_filter("wraith_magic", 2, drop_shadow_filter(color = "#04080FAA", size = -10)) - playsound(owner, 'sound/magic/timeparadox2.ogg', 50, TRUE) - succeed_activate() - add_cooldown() - new /obj/effect/overlay/temp/timestop_effect(central_turf, duration) - addtimer(CALLBACK(src, PROC_REF(remove_bullet_freeze), turfs_affected, central_turf), duration) - addtimer(CALLBACK(src, PROC_REF(play_sound_stop)), duration - 3 SECONDS) - -///Remove the bullet freeze effect on affected turfs -/datum/action/ability/xeno_action/timestop/proc/remove_bullet_freeze(list/turf/turfs_affected, turf/central_turfA) - for(var/turf/affected_turf AS in turfs_affected) - REMOVE_TRAIT(affected_turf, TRAIT_TURF_BULLET_MANIPULATION, REF(src)) - if(HAS_TRAIT(affected_turf, TRAIT_TURF_BULLET_MANIPULATION)) - continue - SEND_SIGNAL(affected_turf, COMSIG_TURF_RESUME_PROJECTILE_MOVE) - affected_turf.remove_filter("wraith_magic") - -///Play the end ability sound -/datum/action/ability/xeno_action/timestop/proc/play_sound_stop() - playsound(owner, 'sound/magic/timeparadox2.ogg', 50, TRUE, frequency = -1) - -/datum/action/ability/xeno_action/portal - name = "Portal" - action_icon_state = "portal" - desc = "Place a portal on your location. You can travel from portal to portal. Left click to create portal one, right click to create portal two" - ability_cost = 50 - cooldown_duration = 5 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_PORTAL, - KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_PORTAL_ALTERNATE, - ) - /// How far can you link two portals - var/range = 20 - /// The first portal - var/obj/effect/wraith_portal/portal_one - /// The second portal - var/obj/effect/wraith_portal/portal_two - -/datum/action/ability/xeno_action/portal/remove_action(mob/M) - clean_portals() - return ..() - -/// Destroy the portals when the wraith is no longer supporting them -/datum/action/ability/xeno_action/portal/proc/clean_portals() - SIGNAL_HANDLER - - QDEL_NULL(portal_one) - QDEL_NULL(portal_two) - -/datum/action/ability/xeno_action/portal/give_action(mob/M) - . = ..() - RegisterSignal(M, COMSIG_MOB_DEATH, PROC_REF(clean_portals)) - -/datum/action/ability/xeno_action/portal/can_use_action(silent, override_flags) - if(locate(/obj/effect/wraith_portal) in get_turf(owner)) - if(!silent) - to_chat(owner, span_xenowarning("There is already a portal here!")) - return FALSE - var/area/area = get_area(owner) - if(area.flags_area & MARINE_BASE) - if(!silent) - to_chat(owner, span_xenowarning("You cannot portal here!")) - return FALSE - return ..() - -/datum/action/ability/xeno_action/portal/action_activate() - . = ..() - qdel(portal_one) - portal_one = new(get_turf(owner)) - succeed_activate() - add_cooldown() - playsound(owner.loc, 'sound/effects/portal_opening.ogg', 20) - if(portal_two) - link_portals() - -/datum/action/ability/xeno_action/portal/alternate_action_activate() - if(!can_use_action()) - return - qdel(portal_two) - portal_two = new(get_turf(owner), TRUE) - succeed_activate() - add_cooldown() - playsound(owner.loc, 'sound/effects/portal_opening.ogg', 20) - if(portal_one) - link_portals() - -/// Link the two portals if possible -/datum/action/ability/xeno_action/portal/proc/link_portals() - if(get_dist(portal_one, portal_two) > range || portal_one.z != portal_two.z) - to_chat(owner, span_xenowarning("The other portal is too far away, they cannot link!")) - return - portal_two.link_portal(portal_one) - portal_one.link_portal(portal_two) - -/obj/effect/wraith_portal - icon_state = "portal" - anchored = TRUE - opacity = FALSE - vis_flags = VIS_HIDE - resistance_flags = UNACIDABLE | CRUSHER_IMMUNE | BANISH_IMMUNE - /// Visual object for handling the viscontents - var/obj/effect/portal_effect/portal_visuals - /// The linked portal - var/obj/effect/wraith_portal/linked_portal - COOLDOWN_DECLARE(portal_cooldown) - -/obj/effect/wraith_portal/Initialize(mapload, portal_is_yellow = FALSE) - . = ..() - var/static/list/connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(teleport_atom) - ) - if(portal_is_yellow) - icon_state = "portal1" - AddElement(/datum/element/connect_loc, connections) - portal_visuals = new - portal_visuals.layer = layer + 0.01 - vis_contents += portal_visuals - add_filter("border_smoother", 1, gauss_blur_filter(1)) - -/obj/effect/wraith_portal/Destroy() - linked_portal?.unlink() - linked_portal = null - REMOVE_TRAIT(loc, TRAIT_TURF_BULLET_MANIPULATION, PORTAL_TRAIT) - vis_contents -= portal_visuals - QDEL_NULL(portal_visuals) - return ..() - -/obj/effect/wraith_portal/attack_ghost(mob/dead/observer/user) - . = ..() - if(!linked_portal) - return - user.forceMove(get_turf(linked_portal)) - -/// Link two portals -/obj/effect/wraith_portal/proc/link_portal(obj/effect/wraith_portal/portal_to_link) - linked_portal = portal_to_link - ADD_TRAIT(loc, TRAIT_TURF_BULLET_MANIPULATION, PORTAL_TRAIT) - RegisterSignal(loc, COMSIG_TURF_PROJECTILE_MANIPULATED, PROC_REF(teleport_bullet)) - portal_visuals.setup_visuals(portal_to_link) - -/// Unlink the portal -/obj/effect/wraith_portal/proc/unlink() - linked_portal = null - REMOVE_TRAIT(loc, TRAIT_TURF_BULLET_MANIPULATION, PORTAL_TRAIT) - UnregisterSignal(loc, COMSIG_TURF_PROJECTILE_MANIPULATED) - portal_visuals.reset_visuals() - -/// Signal handler teleporting crossing atoms -/obj/effect/wraith_portal/proc/teleport_atom/(datum/source, atom/movable/crosser) - SIGNAL_HANDLER - if(!linked_portal || !COOLDOWN_CHECK(src, portal_cooldown) || crosser.anchored || (crosser.resistance_flags & PORTAL_IMMUNE)) - return - COOLDOWN_START(linked_portal, portal_cooldown, 1) - crosser.pass_flags &= ~PASS_MOB - RegisterSignal(crosser, COMSIG_MOVABLE_MOVED, PROC_REF(do_teleport_atom)) - playsound(loc, 'sound/effects/portal.ogg', 20) - -/// Signal handler to teleport the crossing atom when its move is done -/obj/effect/wraith_portal/proc/do_teleport_atom(atom/movable/crosser) - SIGNAL_HANDLER - for(var/mob/rider AS in crosser.buckled_mobs) - if(ishuman(rider)) - crosser.unbuckle_mob(rider) - if(crosser.throwing) - crosser.throw_source = get_turf(linked_portal) - crosser.Move(get_turf(linked_portal), crosser.dir) - UnregisterSignal(crosser, COMSIG_MOVABLE_MOVED) - -/// Signal handler for teleporting a crossing bullet -/obj/effect/wraith_portal/proc/teleport_bullet(datum/source, obj/projectile/bullet) - SIGNAL_HANDLER - playsound(loc, 'sound/effects/portal.ogg', 20) - var/new_range = bullet.proj_max_range - bullet.distance_travelled - if(new_range <= 0) - bullet.loc = get_turf(linked_portal) - bullet.ammo.do_at_max_range(bullet) - qdel(bullet) - return - if(!linked_portal) // A lot of racing conditions here - return - bullet.fire_at(shooter = bullet.firer, range = max(bullet.proj_max_range - bullet.distance_travelled, 0), angle = bullet.dir_angle, recursivity = TRUE, loc_override = get_turf(linked_portal)) - -/obj/effect/portal_effect - appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - vis_flags = VIS_INHERIT_ID - layer = DOOR_OPEN_LAYER - ///turf destination to display - var/turf/our_destination - -/obj/effect/portal_effect/proc/setup_visuals(atom/target) - our_destination = get_turf(target) - update_portal_filters() - -/obj/effect/portal_effect/proc/reset_visuals() - our_destination = null - update_portal_filters() - -/obj/effect/portal_effect/proc/update_portal_filters() - clear_filters() - vis_contents = null - - if(!our_destination) - return - var/static/icon/portal_mask = icon('icons/effects/effects.dmi', "portal_mask") - add_filter("portal_alpha", 1, list("type" = "alpha", "icon" = portal_mask)) - add_filter("portal_blur", 1, list("type" = "blur", "size" = 0.5)) - add_filter("portal_ripple", 1, list("type" = "ripple", "size" = 2, "radius" = 1, "falloff" = 1, "y" = 7)) - - animate(get_filter("portal_ripple"), time = 1.3 SECONDS, loop = -1, easing = LINEAR_EASING, radius = 32) - - vis_contents += our_destination -/obj/effect/wraith_portal/ex_act() - qdel(src) - -/datum/action/ability/activable/xeno/rewind - name = "Time Shift" - action_icon_state = "rewind" - desc = "Save the location and status of the target. When the time is up, the target location and status are restored, unless the target is dead or unconscious." - ability_cost = 100 - cooldown_duration = 30 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_REWIND, - ) - use_state_flags = ABILITY_TARGET_SELF - /// How long till the time rewinds - var/start_rewinding = 5 SECONDS - /// The targeted atom - var/mob/living/targeted - /// List of locations the atom took since it was last saved - var/list/turf/last_target_locs_list = list() - /// Initial burn damage of the target - var/target_initial_burn_damage = 0 - /// Initial brute damage of the target - var/target_initial_brute_damage = 0 - /// Initial sunder of the target - var/target_initial_sunder = 0 - /// How far can you rewind someone - var/range = 5 - - -/datum/action/ability/activable/xeno/rewind/can_use_ability(atom/A, silent, override_flags) - . = ..() - - var/distance = get_dist(owner, A) - if(distance > range) //Needs to be in range. - if(!silent) - to_chat(owner, span_xenowarning("Our target is too far away! It must be [distance - range] tiles closer!")) - return FALSE - - if(HAS_TRAIT(A, TRAIT_TIME_SHIFTED)) - to_chat(owner, span_xenowarning("That target is already affected by a time manipulation effect!")) - return FALSE - - if(!isliving(A)) - to_chat(owner, span_xenowarning("We cannot target that!")) - return FALSE - - - var/mob/living/living_target = A - if(living_target.stat != CONSCIOUS) - to_chat(owner, span_xenowarning("The target is not in good enough shape!")) - -/datum/action/ability/activable/xeno/rewind/use_ability(atom/A) - targeted = A - last_target_locs_list = list(get_turf(A)) - target_initial_brute_damage = targeted.getBruteLoss() - target_initial_burn_damage = targeted.getFireLoss() - if(isxeno(A)) - var/mob/living/carbon/xenomorph/xeno_target = targeted - target_initial_sunder = xeno_target.sunder - addtimer(CALLBACK(src, PROC_REF(start_rewinding)), start_rewinding) - RegisterSignal(targeted, COMSIG_MOVABLE_MOVED, PROC_REF(save_move)) - targeted.add_filter("prerewind_blur", 1, radial_blur_filter(0.04)) - targeted.balloon_alert(targeted, "You feel anchored to the past!") - ADD_TRAIT(targeted, TRAIT_TIME_SHIFTED, XENO_TRAIT) - add_cooldown() - succeed_activate() - return - -/// Signal handler -/datum/action/ability/activable/xeno/rewind/proc/save_move(atom/movable/source, oldloc) - SIGNAL_HANDLER - last_target_locs_list += get_turf(oldloc) - -/// Start the reset process -/datum/action/ability/activable/xeno/rewind/proc/start_rewinding() - targeted.remove_filter("prerewind_blur") - UnregisterSignal(targeted, COMSIG_MOVABLE_MOVED) - if(QDELETED(targeted) || targeted.stat != CONSCIOUS) - REMOVE_TRAIT(targeted, TRAIT_TIME_SHIFTED, XENO_TRAIT) - targeted = null - return - targeted.add_filter("rewind_blur", 1, radial_blur_filter(0.3)) - targeted.status_flags |= (INCORPOREAL|GODMODE) - INVOKE_NEXT_TICK(src, PROC_REF(rewind)) - ADD_TRAIT(owner, TRAIT_IMMOBILE, TIMESHIFT_TRAIT) - playsound(targeted, 'sound/effects/woosh_swoosh.ogg', 50) - -/// Move the target two tiles per tick -/datum/action/ability/activable/xeno/rewind/proc/rewind() - var/turf/loc_a = pop(last_target_locs_list) - if(loc_a) - new /obj/effect/temp_visual/xenomorph/afterimage(targeted.loc, targeted) - - var/turf/loc_b = pop(last_target_locs_list) - if(!loc_b) - targeted.status_flags &= ~(INCORPOREAL|GODMODE) - REMOVE_TRAIT(owner, TRAIT_IMMOBILE, TIMESHIFT_TRAIT) - targeted.heal_overall_damage(targeted.getBruteLoss() - target_initial_brute_damage, targeted.getFireLoss() - target_initial_burn_damage, updating_health = TRUE) - if(isxeno(target)) - var/mob/living/carbon/xenomorph/xeno_target = targeted - xeno_target.sunder = target_initial_sunder - targeted.remove_filter("rewind_blur") - REMOVE_TRAIT(targeted, TRAIT_TIME_SHIFTED, XENO_TRAIT) - targeted = null - return - - targeted.Move(loc_b, get_dir(loc_b, loc_a)) - new /obj/effect/temp_visual/xenomorph/afterimage(loc_a, targeted) - INVOKE_NEXT_TICK(src, PROC_REF(rewind)) -RU TGMC EDIT */ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm deleted file mode 100644 index dddb8dd3caf..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm +++ /dev/null @@ -1,79 +0,0 @@ -/* RU TGMC EDIT -/datum/xeno_caste/wraith - caste_name = "Wraith" - display_name = "Wraith" - upgrade_name = "" - caste_desc = "A strange xeno that utilizes its psychic powers to move out of phase with reality." - caste_type_path = /mob/living/carbon/xenomorph/wraith - tier = XENO_TIER_TWO - upgrade = XENO_UPGRADE_BASETYPE - wound_type = "wraith" //used to match appropriate wound overlays - - // *** Melee Attacks *** // - melee_damage = 20 - - // *** Speed *** // - speed = -1.25 - - // *** Plasma *** // - plasma_max = 400 - plasma_gain = 25 - - // *** Health *** // - max_health = 260 - - // *** Evolution *** // - evolution_threshold = 225 - //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - - evolves_to = list( - /mob/living/carbon/xenomorph/defiler, - /mob/living/carbon/xenomorph/ravager, - /mob/living/carbon/xenomorph/warlock, - ) - deevolves_to = /mob/living/carbon/xenomorph/runner - - // *** Flags *** // - caste_flags = CASTE_EVOLUTION_ALLOWED - can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER - caste_traits = list(TRAIT_CAN_VENTCRAWL) - - // *** Defense *** // - soft_armor = list(MELEE = 40, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 20, FIRE = 30, ACID = 20) - - // *** Minimap Icon *** // - minimap_icon = "wraith" - - // *** Abilities *** // - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain, - /datum/action/ability/activable/xeno/blink, - /datum/action/ability/activable/xeno/banish, - /datum/action/ability/xeno_action/recall, - /datum/action/ability/activable/xeno/rewind, - /datum/action/ability/xeno_action/portal, - ) - -/datum/xeno_caste/wraith/normal - upgrade = XENO_UPGRADE_NORMAL - -/datum/xeno_caste/wraith/primordial - upgrade_name = "Primordial" - caste_desc = "A xenomorph that has perfected the manipulation of space and time. Its movements appear quick and distorted." - primordial_message = "Mastery is achieved when \'telling time\' becomes \'telling time what to do\'." - upgrade = XENO_UPGRADE_PRIMO - - actions = list( - /datum/action/ability/xeno_action/xeno_resting, - /datum/action/ability/xeno_action/watch_xeno, - /datum/action/ability/activable/xeno/psydrain, - /datum/action/ability/activable/xeno/blink, - /datum/action/ability/activable/xeno/banish, - /datum/action/ability/xeno_action/recall, - /datum/action/ability/xeno_action/portal, - /datum/action/ability/activable/xeno/rewind, - /datum/action/ability/xeno_action/timestop, - ) -RU TGMC EDIT */ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/wraith.dm deleted file mode 100644 index 29c27a8c355..00000000000 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/wraith.dm +++ /dev/null @@ -1,19 +0,0 @@ -/* RU TGMC EDIT -/mob/living/carbon/xenomorph/wraith - caste_base_type = /mob/living/carbon/xenomorph/wraith - name = "Wraith" - desc = "A strange tendriled alien. The air around it warps and shimmers like a heat mirage." - icon = 'icons/Xeno/castes/wraith.dmi' - icon_state = "Wraith Walking" - bubble_icon = "alienleft" - health = 150 - maxHealth = 150 - plasma_stored = 150 - pixel_x = -16 - old_x = -16 - tier = XENO_TIER_TWO - upgrade = XENO_UPGRADE_NORMAL - inherent_verbs = list( - /mob/living/carbon/xenomorph/proc/vent_crawl, - ) -RU TGMC EDIT */ diff --git a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm index 3360e6c0120..7bdb2ace78e 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm @@ -180,10 +180,6 @@ .["user_evolution"] = isxeno(user) ? xeno_user.evolution_stored : 0 - /* RUTGMC DELETION - .["user_maturity"] = isxeno(user) ? xeno_user.upgrade_stored : 0 - .["user_next_mat_level"] = isxeno(user) && xeno_user.upgrade_possible() ? xeno_user.xeno_caste.upgrade_threshold : 0 - */ .["user_tracked"] = isxeno(user) && !isnull(xeno_user.tracked) ? REF(xeno_user.tracked) : "" .["user_show_empty"] = isxeno(user) ? xeno_user.status_toggle_flags & HIVE_STATUS_SHOW_EMPTY : 0 @@ -1519,10 +1515,7 @@ to_chat will check for valid clients itself already so no need to double check f /mob/living/carbon/xenomorph/warrior/Corrupted hivenumber = XENO_HIVE_CORRUPTED -/* RU TGMC EDIT -/mob/living/carbon/xenomorph/wraith/Corrupted - hivenumber = XENO_HIVE_CORRUPTED -RU TGMC EDIT */ + /mob/living/carbon/xenomorph/king/Corrupted hivenumber = XENO_HIVE_CORRUPTED @@ -1597,10 +1590,7 @@ RU TGMC EDIT */ /mob/living/carbon/xenomorph/warrior/Alpha hivenumber = XENO_HIVE_ALPHA -/* RU TGMC EDIT -/mob/living/carbon/xenomorph/wraith/Alpha - hivenumber = XENO_HIVE_ALPHA -RU TGMC EDIT */ + /mob/living/carbon/xenomorph/king/Alpha hivenumber = XENO_HIVE_ALPHA @@ -1672,10 +1662,7 @@ RU TGMC EDIT */ /mob/living/carbon/xenomorph/warrior/Beta hivenumber = XENO_HIVE_BETA -/* RU TGMC EDIT -/mob/living/carbon/xenomorph/wraith/Beta - hivenumber = XENO_HIVE_BETA -RU TGMC EDIT */ + /mob/living/carbon/xenomorph/king/Beta hivenumber = XENO_HIVE_BETA @@ -1747,10 +1734,7 @@ RU TGMC EDIT */ /mob/living/carbon/xenomorph/warrior/Zeta hivenumber = XENO_HIVE_ZETA -/* RU TGMC EDIT -/mob/living/carbon/xenomorph/wraith/Zeta - hivenumber = XENO_HIVE_ZETA -RU TGMC EDIT */ + /mob/living/carbon/xenomorph/king/Zeta hivenumber = XENO_HIVE_ZETA diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 82f3f555a49..5cc8fe1e882 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -58,9 +58,6 @@ // *** Evolution *** // ///Threshold amount of evo points to next evolution var/evolution_threshold = 0 - ///Threshold amount of upgrade points to next maturity - //var/upgrade_threshold = 0 // RUTGMC DELETION - ///Type paths to the castes that this xenomorph can evolve to var/list/evolves_to = list() ///Singular type path for the caste to deevolve to when forced to by the queen. @@ -136,10 +133,6 @@ ///delay between the throw hugger ability activation for carriers var/hugger_delay = 0 - // *** Widow Abilities *** // - ///maximum amount of spiderlings a widow can carry at one time. - //var/max_spiderlings = 0 // RUTGMC DELETION, WIDOW DELETION - // *** Defender Abilities *** // ///modifying amount to the crest defense ability for defenders. Positive integers only. var/crest_defense_armor = 0 @@ -147,11 +140,6 @@ var/fortify_armor = 0 ///amount of slowdown to apply when the crest defense is active. trading defense for speed. Positive numbers makes it slower. var/crest_defense_slowdown = 0 -/* RU TGMC EDIT - // *** Puppeteer Abilities *** // - var/flay_plasma_gain = 0 - var/max_puppets = 0 -RU TGMC EDIT */ // *** Crusher Abilities *** // ///The damage the stomp causes, counts armor var/stomp_damage = 0 @@ -172,19 +160,6 @@ RU TGMC EDIT */ ///Amount of leaders allowed var/queen_leader_limit = 0 - // *** Wraith Abilities *** // - //Banish - Values for the Wraith's Banish ability - ///Base duration of Banish before modifiers - var/wraith_banish_base_duration = WRAITH_BANISH_BASE_DURATION - - //Blink - Values for the Wraith's Blink ability - ///Cooldown multiplier of Blink when used on non-friendlies - var/wraith_blink_drag_nonfriendly_living_multiplier = WRAITH_BLINK_DRAG_NONFRIENDLY_MULTIPLIER - ///Cooldown multiplier of Blink when used on friendlies - var/wraith_blink_drag_friendly_multiplier = WRAITH_BLINK_DRAG_FRIENDLY_MULTIPLIER - ///Base range of Blink - var/wraith_blink_range = WRAITH_BLINK_RANGE - // *** Hunter Abilities *** ///Damage breakpoint to knock out of stealth var/stealth_break_threshold = 0 @@ -205,6 +180,14 @@ RU TGMC EDIT */ /// The maximum amount of Wrath that we can have stored at a time. var/wrath_max = 0 + // *** Chimera Abilities *** + ///Cooldown multiplier of Blink when used on non-friendlies + var/blink_drag_nonfriendly_living_multiplier = 0 + ///Cooldown multiplier of Blink when used on friendlies + var/blink_drag_friendly_multiplier = 0 + ///Base range of Blink + var/blink_range = 0 + ///the 'abilities' available to a caste. var/list/actions diff --git a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm index f7e53ce3d59..51faa256740 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm @@ -121,13 +121,6 @@ else . += "Evolve Progress: [evolution_stored]/[xeno_caste.evolution_threshold]" - /* RUTGMC DELETION - if(upgrade_possible()) - . += "Upgrade Progress: [upgrade_stored]/[xeno_caste.upgrade_threshold]" - else //Upgrade process finished or impossible - . += "Upgrade Progress: (FINISHED)" - */ - . += "Health: [health]/[maxHealth][overheal ? " + [overheal]": ""]" //Changes with balance scalar, can't just use the caste if(xeno_caste.plasma_max > 0) diff --git a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm index 75f74c691de..de755efe4cd 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm @@ -82,7 +82,6 @@ /mob/living/carbon/xenomorph/runner/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_ONE_THRESHOLD // RUTGMC DELETION //-----RUNNER END-----// //================// @@ -90,7 +89,6 @@ /mob/living/carbon/xenomorph/bull/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //-----BULL END-----// //================// @@ -98,7 +96,6 @@ /mob/living/carbon/xenomorph/drone/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_ONE_THRESHOLD // RUTGMC DELETION //-----DRONE END-----// //================// @@ -127,7 +124,6 @@ /mob/living/carbon/xenomorph/carrier/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //-----CARRIER END-----// //================// @@ -138,7 +134,6 @@ /mob/living/carbon/xenomorph/hivelord/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //----HIVELORD END----// //================// @@ -151,7 +146,6 @@ /mob/living/carbon/xenomorph/praetorian/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----PRAETORIAN END----// //================// @@ -162,7 +156,6 @@ /mob/living/carbon/xenomorph/ravager/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----RAVAGER END----// //================// @@ -189,7 +182,6 @@ /mob/living/carbon/xenomorph/sentinel/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_ONE_THRESHOLD // RUTGMC DELETION //----SENTINEL END----// //================// @@ -200,7 +192,6 @@ /mob/living/carbon/xenomorph/spitter/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //-----SPITTER END-----// //================// @@ -227,7 +218,6 @@ /mob/living/carbon/xenomorph/hunter/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //----HUNTER END----// //================// @@ -254,7 +244,6 @@ /mob/living/carbon/xenomorph/queen/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----QUEEN END----// //============// @@ -265,7 +254,6 @@ /mob/living/carbon/xenomorph/king/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----KING END----// //============// @@ -276,7 +264,6 @@ /mob/living/carbon/xenomorph/crusher/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //---CRUSHER END---// //============// @@ -287,7 +274,6 @@ /mob/living/carbon/xenomorph/gorger/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //---GORGER END---// //============// @@ -298,7 +284,6 @@ /mob/living/carbon/xenomorph/boiler/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //---BOILER END---// //============// @@ -309,7 +294,6 @@ /mob/living/carbon/xenomorph/defender/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_ONE_THRESHOLD // RUTGMC DELETION //---DEFENDER END---// //============// @@ -320,7 +304,6 @@ /mob/living/carbon/xenomorph/warrior/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION //----WARRIOR END----// //============// @@ -331,7 +314,6 @@ /mob/living/carbon/xenomorph/defiler/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----DEFILER END----// //============// @@ -342,36 +324,9 @@ /mob/living/carbon/xenomorph/shrike/primordial upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_THREE_THRESHOLD // RUTGMC DELETION //----SHRIKE END----// -//============// -/* RU TGMC EDITION START -//----WRAITH START----// - -/mob/living/carbon/xenomorph/wraith - upgrade = XENO_UPGRADE_NORMAL - -/mob/living/carbon/xenomorph/wraith/primordial - upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD - -//----WRAITH END----// -//============// -RU TGMC EDITION END*/ -//----WIDOW START----// -/* RUTGMC DELETION, WIDOW DELETION - -/mob/living/carbon/xenomorph/widow - upgrade = XENO_UPGRADE_NORMAL - -/mob/living/carbon/xenomorph/widow/primordial - upgrade = XENO_UPGRADE_PRIMO - upgrade_stored = TIER_THREE_THRESHOLD -*/ -//----WIDOW END----// -//============// //----WARLOCK START----// /mob/living/carbon/xenomorph/warlock @@ -382,18 +337,7 @@ RU TGMC EDITION END*/ //----WARLOCK END----// //============// -//============// -/*RU TGMC EDIT -//----PUPPETEER START----// -/mob/living/carbon/xenomorph/puppeteer - upgrade = XENO_UPGRADE_NORMAL - -/mob/living/carbon/xenomorph/puppeteer/primordial - upgrade = XENO_UPGRADE_PRIMO - //upgrade_stored = TIER_TWO_THRESHOLD // RUTGMC DELETION -//----PUPPETEER END----// -RU TGMC EDIT*/ //============// //----BEHEMOTH START----// diff --git a/code/modules/predator/yautja/items.dm b/code/modules/predator/yautja/items.dm index 51e027e658b..55c737bd164 100644 --- a/code/modules/predator/yautja/items.dm +++ b/code/modules/predator/yautja/items.dm @@ -699,7 +699,6 @@ icon_state = "yauttrap0" desc = "A bizarre Yautja device used for trapping and killing prey." - resistance_flags = BANISH_IMMUNE layer = LOWER_ITEM_LAYER var/armed = 0 diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index a6fe32376fa..8edf5ca506f 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -4176,90 +4176,6 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/hugger/acid hugger_type = /obj/item/clothing/mask/facehugger/combat/acid -/* RUTGMC DELETION, WIDOW DELETION -/// For Widows Web Spit Ability -/datum/ammo/xeno/web - icon_state = "web_spit" - sound_hit = "snap" - sound_bounce = "alien_resin_build3" - damage_type = STAMINA - bullet_color = COLOR_PURPLE - flags_ammo_behavior = AMMO_SKIPS_ALIENS - ping = null - armor_type = BIO - accurate_range = 15 - max_range = 15 - ///For how long the victim will be blinded - var/hit_eye_blind = 1 - ///How long the victim will be snared for - var/hit_immobilize = 2 SECONDS - ///How long the victim will be KO'd - var/hit_weaken = 2 SECONDS - ///List for bodyparts that upon being hit cause the target to become weakened - var/list/weaken_list = list(BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND) - ///List for bodyparts that upon being hit cause the target to become ensnared - var/list/snare_list = list(BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_LEG, BODY_ZONE_PRECISE_L_FOOT, BODY_ZONE_PRECISE_R_FOOT) - -/datum/ammo/xeno/web/on_hit_mob(mob/victim, obj/projectile/proj) - . = ..() - if(!ishuman(victim)) - return - playsound(get_turf(victim), sound(get_sfx("snap")), 30, falloff = 5) - var/mob/living/carbon/human/human_victim = victim - if(proj.def_zone == BODY_ZONE_HEAD) - human_victim.blind_eyes(hit_eye_blind) - human_victim.balloon_alert(human_victim, "The web blinds you!") - else if(proj.def_zone in weaken_list) - human_victim.apply_effect(hit_weaken, WEAKEN) - human_victim.balloon_alert(human_victim, "The web knocks you down!") - else if(proj.def_zone in snare_list) - human_victim.Immobilize(hit_immobilize, TRUE) - human_victim.balloon_alert(human_victim, "The web snares you!") - -/datum/ammo/xeno/leash_ball - icon_state = "widow_snareball" - ping = "ping_x" - damage_type = STAMINA - flags_ammo_behavior = AMMO_SKIPS_ALIENS | AMMO_EXPLOSIVE - bullet_color = COLOR_PURPLE - ping = null - damage = 0 - armor_type = BIO - shell_speed = 1.5 - accurate_range = 8 - max_range = 8 - -/datum/ammo/xeno/leash_ball/on_hit_turf(turf/T, obj/projectile/proj) - drop_leashball(T.density ? proj.loc : T) - -/datum/ammo/xeno/leash_ball/on_hit_mob(mob/victim, obj/projectile/proj) - var/turf/T = get_turf(victim) - drop_leashball(T.density ? proj.loc : T, proj.firer) - -/datum/ammo/xeno/leash_ball/on_hit_obj(obj/O, obj/projectile/proj) - var/turf/T = get_turf(O) - if(T.density || (O.density && !(O.allow_pass_flags & PASS_PROJECTILE))) - T = get_turf(proj) - drop_leashball(T.density ? proj.loc : T, proj.firer) - -/datum/ammo/xeno/leash_ball/do_at_max_range(turf/T, obj/projectile/proj) - drop_leashball(T.density ? proj.loc : T) - - -/// This spawns a leash ball and checks if the turf is dense before doing so -/datum/ammo/xeno/leash_ball/proc/drop_leashball(turf/T) - new /obj/structure/xeno/aoe_leash(get_turf(T), hivenumber) -*/ -/* RU TGMC EDIT -/datum/ammo/xeno/spine //puppeteer - name = "spine" - damage = 45 - icon_state = "spine" - damage_type = BRUTE - bullet_color = COLOR_WHITE - sound_hit = 'sound/bullets/spear_armor1.ogg' - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS -RU TGMC EDIT*/ /* //================================================ Misc Ammo diff --git a/code/modules/projectiles/sentries.dm b/code/modules/projectiles/sentries.dm index 2ebff4387c0..c13c8fcfe57 100644 --- a/code/modules/projectiles/sentries.dm +++ b/code/modules/projectiles/sentries.dm @@ -375,7 +375,7 @@ continue potential_targets += nearby_human for(var/mob/living/carbon/xenomorph/nearby_xeno AS in cheap_get_xenos_near(src, range)) - if(nearby_xeno.stat == DEAD || HAS_TRAIT(nearby_xeno, TRAIT_TURRET_HIDDEN) || CHECK_BITFIELD(nearby_xeno.status_flags, INCORPOREAL) || CHECK_BITFIELD(nearby_xeno.xeno_iff_check(), iff_signal)) //So wraiths wont be shot at when in phase shift + if(nearby_xeno.stat == DEAD || HAS_TRAIT(nearby_xeno, TRAIT_TURRET_HIDDEN) || CHECK_BITFIELD(nearby_xeno.status_flags, INCORPOREAL) || CHECK_BITFIELD(nearby_xeno.xeno_iff_check(), iff_signal)) //So hiveminds wont be shot at when in phase shift continue potential_targets += nearby_xeno for(var/mob/illusion/nearby_illusion AS in cheap_get_illusions_near(src, range)) diff --git a/code/modules/vehicles/armored/__armored.dm b/code/modules/vehicles/armored/__armored.dm index fe8162801d9..75fc3599cd1 100644 --- a/code/modules/vehicles/armored/__armored.dm +++ b/code/modules/vehicles/armored/__armored.dm @@ -10,7 +10,7 @@ move_resist = INFINITY flags_atom = BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION|CRITICAL_ATOM allow_pass_flags = PASS_TANK|PASS_AIR|PASS_WALKOVER|PASS_THROW - resistance_flags = XENO_DAMAGEABLE|UNACIDABLE|PLASMACUTTER_IMMUNE|PORTAL_IMMUNE + resistance_flags = XENO_DAMAGEABLE|UNACIDABLE|PLASMACUTTER_IMMUNE move_delay = 0.7 SECONDS max_integrity = 600 diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 3541225beef..7b1fe352dc7 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -23,7 +23,7 @@ icon = 'icons/mecha/mecha.dmi' move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_OVERPOWERING - resistance_flags = UNACIDABLE|XENO_DAMAGEABLE|PORTAL_IMMUNE|PLASMACUTTER_IMMUNE + resistance_flags = UNACIDABLE|XENO_DAMAGEABLE|PLASMACUTTER_IMMUNE flags_atom = BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION|CRITICAL_ATOM appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER max_integrity = 300 diff --git a/code/modules/xenomorph/tunnel.dm b/code/modules/xenomorph/tunnel.dm index 0eeaee13180..2ad6d4487a5 100644 --- a/code/modules/xenomorph/tunnel.dm +++ b/code/modules/xenomorph/tunnel.dm @@ -7,7 +7,7 @@ density = FALSE opacity = FALSE anchored = TRUE - resistance_flags = UNACIDABLE|BANISH_IMMUNE + resistance_flags = UNACIDABLE layer = RESIN_STRUCTURE_LAYER max_integrity = 140 diff --git a/code/modules/xenomorph/turret.dm b/code/modules/xenomorph/turret.dm index 82b2c92ab07..3e01e6efda7 100644 --- a/code/modules/xenomorph/turret.dm +++ b/code/modules/xenomorph/turret.dm @@ -9,7 +9,7 @@ max_integrity = 1500 layer = ABOVE_MOB_LAYER density = TRUE - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE |PORTAL_IMMUNE + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE xeno_structure_flags = IGNORE_WEED_REMOVAL|HAS_OVERLAY allow_pass_flags = PASS_AIR|PASS_THROW ///What kind of spit it uses diff --git a/icons/UI_Icons/map_blips.dmi b/icons/UI_Icons/map_blips.dmi index 6f9514cdc41cebb97aca4590210ea71bf1a75161..b4ea668a78f0236091bed023ade593cded10f503 100644 GIT binary patch literal 12900 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 G{ri6nQ|n*= literal 16667 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 diff --git a/icons/Xeno/actions.dmi b/icons/Xeno/actions.dmi index 88ae58bd94e1b74b5f21d8e7e3f821dd52be290c..848c895052cbdfeff208bc180cdbfc9cc641afbd 100644 GIT binary patch literal 78510 zcmY&<1z1$kxBbu|Fm!h+NOyNgH;8njba!{BfOLaOiF9{LH%JWKokP6q@BQPw59S-@ zGBD@tvt#YG*NswDmPJP;Mg@UD=pW>y)IlIvO5g!PMg*?3(k(E8K!|$Yn!2u17A|Ja zHjb_~4)!3BXLgC6k^?O-hVV*fVWNIqzvsYGP7G_zFulvr`W9x~^ciCbBgnL&b~@HsFfR!n%C> zYsaETB8v;bC-wrJ?A7-*ZG}@Pq;1p75h(cZbQlKPkyz@#BV~@e%9wg;AJ?e+wHvqxgr`R#&%A)nzyLO(Xi?7)B9VDW=^A=!YZd>EYwVdK9x*X(Pt{`3(%iYNDmD!gU!zA+OF^byc;!vV1`CM+4^K zD#iz>zt*!%Pgts~f|RDIN5s3EPN!fuIuhR~ZTY1#($EdjVbC+-e;sUhbvm@Ji$-&|Ng+qS`qkc4oPE- zOO=CSxH}XmAZWc8y27GsBw}X^E3ezJ_yVtm3)!HRe2scjqxTI% z8WXaCTV4&X7>pK0_}74w3zxyu25~K%NmFl%xoc57Rb=>)jE~E7|Hu$twGNX|CT0R9 z@g(+E>JWxs@SLmpdopwUTRw4WF5eP7T&tr!c-WRhgsD3_qswrP#%+1~uZ|R1kCCP* zb)v+?_P4T<+gFylvKTcAB9@X1_VqGSa_%#9@J>nKIZ$Ifd@{v>Pgs#4f-L1Fk? zLnl>KTW#PftxJ|*nRGpQ5XOV6bVo`ukokYo>zeVDTgAfacT3qZg>>A`Q?RPs(U)~r z&pF{~Bkx}dk+7cAPU&2D;>~QT=#J)wr@aq-IePk-l<;t8tM&&R{*l2f=gY+E=}t)^_(eDBi-oW!u#lFB2~=&YGeB0*m(s4^*0rj zY&SD!oUw481HLym(euhsM5657IU%v*2^tYtUOId5Nt~3FKw$v&FB!R0fnxTv2&z z;=*RrB9qg{76XP}^Cy_(J9S>6+?z>YAH%nnDbR-FnEx_SZYFmyUxLw^iDX+0!&6=|^BPT-I#eraqGlXoD0*gC&T zSLrQV7cqLF&{Yq+4q3nd3Ib7rK1hjcdS)ND`}pF`HNU=okT~5Q2~Q*mbwn4(j+81Y z=Ks?GDQPGibcxS~!{v^Sd>L6-{;aX1AY9QfFBu@qXsj8nt(Tx>%m3MoY&pZ4DWfXv{_! z8x<-Q7#bl<0zuzDI8goR*=`r$G~f}-mY{(bprPNn;ik{t^RfhG%UMbV>>BHmVX1nO!Fxg4iME8WjCMOr>@v#3zCBv%Um7x#sxzeEq30Y2#NkpjLlJ9di zJ7)DH)7g$Y*K8CeXZx-(jiBuK$dA%|~zM+%rPaD`yLjZ1+AQh(}13L<3{1O zhO7bA^FhXMi)X^=7RhhF&mVNv3bi))FtgSCxSdIuRr+v~rAY7V7wdA+lHmuv74>f+ z2032U+3>7jtf^Jr=hR0`pI^+($t}TZzhpc+Sr|>h70SM)<>Fehm_Wo6_4D)lw#1uh zI=ObLYaB}ej(iPZeRCqgDVgY3IT*G@+VxnM)Y5J*brs#yJ~FENn2FOPa;w_?xN-Lc^64iKPh| zP7>o7@-M-^BmNvHv~#Bg17!*%Rg~GdMY9ada}q~q3$z4 zt>fEH%S_U-L>viqt4h|fY~TSo@cs2@`zp%Ll((b$@VmA%2s>>euWN)sqs@9Z(N;#!dyJcT>a3Olcj#AW6k7!W z!I8{eSfs8mZ9irb9Ox~q{LKe&N@7cRwxqQ{?Z;2Wol3IXX&=rCbbZh7WCo3F#CW^F+mug)^ybj0aOF)mn69#Lq&Q?n1o8q=4g-bJc8O86>07;pJYs z?3=i_d^6z*<9%+!+EkQZC5#VC&GAcMo}z)D#GvDaHEhw}S! z2fDLalB5&yxeZ55me2m0 z;WTT|?}IfL7}j7oVbgnll=yZEXKUnM12FP4xnCKzc|e$>$gE&8_}PWym~OrW7K>sQ z4kCmki9&ZFE{%w16W_rE-rNr|+)=53!Q-v^y*WqXV~Ft}66g=1u{qiU1wI<^%FPS5 zP`Ez#=j8fqhPZh~(3$Z9t_eHpS<&2!^*&;EPsl zNFs0~#-Dw}Kwses5i7mB2=%=_Jsp3}5h6jgreEehJO4j>Nv zJllwR+iwVN7FMz4mw3;WDkN4fZ7%FrMhY5ygTN@0E3lJ`RLmA5Y2CtgSDZhNHj6U) zuz`D~WSIF;%YjH`vgqku6!_s6)=+=M4{JIp(tj@?UP5*aOd$R4-1|w`T^KC(W?@P+ zohf-=Rr+7ZOXDzmtzi=tg?129bmq{Aj9pC5+d0QYcxs70VcWhqC#Rx0Gwi}RgFsif z(!yZFPj*RMtYNueVS-vKSWNg2{#X~|LXEoZNTJc-=*7C^ys-;NL^Nh(sH(MqDzX{L z=XR-@j4A&vUa5yVp*`^l(#YERu=6PX-cF_hX^!vhHE*QiA-05K)w*w;!Q?P6LPHvesCVqik z^cEND&)NYeiflp|k(HMB8MzzuB8>a^KD(aWAghHGWrL%ap#_LmkPyg-Uk%cKuWi7` z=qC2Bn_Ux2Na?xv z8^sSeK3v}9RRV9rhhcLA@f@ND>FhXyzDU~Hi(vA0(QN~J25fK7z~61)F*xdAFEPTv z4(dL#St02|{)=?4DoUYUY2<>;tG~fz=7O?)$bTnrz;gZ^!*+|~Fj=6eJ83jLv>!D5 zBLu=MwLXMD6j!xr51C;!qj9vz5O8RKW5P-G44me@?2nL&2k6brIW| zjAxrrTt%J>cB%#wyJOPa!doXn)jE$5Y3-g#KYS8R_Y_}kra1i< zo%h>8;=Y$%`F(E+cl>~J#u|g`$+u>fm{pY7W6_HNFKo`pMN98Xlldg-64WVqUB(VEDnGX|E=xYTnx5CEJU``d<7US^>f(DaJ!e zr_k|+GDaxpaTF%qbrXd=wbUrIONf#>11XeBh6$^158eZ}k}04TBu3=)?64O|MoEqm z=*d6k5_Wc6O-V%pvM$|&go6@kZdryt#N!I#yBTO-O!hbLJmgPqaYtmRsmiuIOmD9M z;gxL4C&HhGiq5DQO%h}oa}5Qpo`$KaG9VKj8ercc7e2iGU8dTR6+EGFec4uVV@@di zUQpU5RZ}c0m+iAuBq{T0kg!T5_9e8-SxggHBO1S+w?yoD@cz`5*fC1;ioiD^Jn~h9 z3QYdk5{JJ^s=(2qi#4NJ+t>9SS z3Kh8WII*5vlZ!Ykw{Bm(4_2~Gd2Nw+^8qsf-PA!!wGxRY#Ya@XnL-a0i|#C<2)c1= z?m7ln$T|kc;qUbjW>vEjmFENHYKv|}=vtPv;qyeYnYFo7zYzOWwTS6s9EzFf^Ve8o z0VHS|*v4U!bKiFODN1#7kmV!&wPFFzUPZmign`iXyLJ{j>nc=AvNCgy>p-<{XHqt8 z;1WAM$~@!owQN@Tlo}#-hS;L2LGNgGtGn)#f2G+oeP{^T*cPp$BbUs|6_=2Nrr;xm zkUg93!_SKC`4&s@RyK`ETp=c$54qmp+CdhQxY^uitJ+ouVWQZ=|DGlY5w-m@3N|a z>b7yJSW|4DJiBvD7^cA{le<~dBz5V86s2|2H`R|@yIYO+Shk%t1?6F;oi|x2?Q7hn zJD(&=Pn%nSemen>kW7WV#0F$!PwektKoptzgd`zFRrtVhkkfcq4^4eR{!%|k4u%z@ z_T47jM=5BgKya)15U#a6uotZxc~5Cr%zMtuYdb^ET5tf0E;dUAU?QDC>Vf|(bW@q* z*z;XLmFYE3hwwniy{c*3DuvHm)In)sOwn7oNfxS~KUaf1Q&j%=FC6rpsn{)darJ63@q3mZ)ibfAr|gcC9h zS#oy)h0CIzvfT6J@>h!;jic*Q?XP1Zb)r+pD>s1|iu7ej%wyCzR6A+>dFL`GiH46rLHqEq_Pux^n%D=Cnbnwg=L~Uk%@XOp2mo;&_bmg26HgBb4Un zj@|}HuUu+hMA20`C;3R;58w71oPQ5y@Ih)&qbb`tekMzBH2A^0eRw3RyHiIi8zd$b zrKZ|lJ9vqsX`bk&8B6$K(~lJLILu^Ly1CmfP;-l& zI#SUSr=1x~609E8!5*d@KEGe6B(gGWMSQ49YV>O)m(b;2axV$}5&#{S&nd2(bdL`D zKwWb&UecU5#E+bl#-k+CjouN=dohX}8+0;3HLxVYWUW~=|KyIUT5ePl z#u|`t~!~c8SopD4>!upZ3Mu;**w1eR12+ z5f-B_2@%Uj6HJ^6QcH}YO>6FfGCw)&xVvP(P2%{Y8?>rV{Ks?J%C2dVKD;dCr6Q9SD}JuH1@OtE=C_PP~q zXx2S4LIp{=dy*OanNFkeYa1n>K6YT#;8Bc^&)}^#`&Zg>+BQ4akk`H7#yar8(G0e3 ziZa3LOv2>dn#B6fB-kj>u(>;ds8nw9U-|vUH-|cOe=fsoiUh#wm^rIGq{D#%W8sZm zy{H566|)-908DJ#*VhW(wKIusRLJCxY!mwG#e?Ncae(@IW`S$m(KHyDCkAdL1q zvW@`}enZhp@I}alhgAY({4y1W&58{AD+KhMXXC^smA#y%SQ5h6*H`0v!_WqXAiL(S z7T8UnBh;}cuNEd`V9PCbX%uDq-BUQsqj{X=WxdD~NEW+!!Be*ra2fRsgk5OYyGR9% z#V9jhWkBnox?4rKNjMO)*LT@;7eb;67&bVw$~T)4y+hD7TM#qh7lTMGl|veVV~MZ` zy!Li-XU1`o&*R~33x5c0@t1?UEiuHM1{&cY?(<~qkSRV&nHGQjI94z01ZRX=Bq=nY zH?uJED1gu~1o^VqUF z@A>o&sRzee1PMLF)@PbgVBh;kL@+9r&&PYsP@x8&5Ju>!e!#kkNfw`M|Bz}d{*FT% z$CHvMDA|=*n+V&Y9#DytA96#5p`*vFUxSRI7(`4_NX5l4;Xv|v&GmOLYj=AqmhHvH zc=rbh^mEl!*{N0AF!9M8;{&^xh&~S9=Q|HPMmAC};XdeRW)Wv>_$ipK-8$ZP)}PM{ zR0{OCV8zKQGrUT0cta<;0AG&M**3?cE>g@;BMln`QYDC0s?R!!=2D*DW_za~(M|<5 z?uYsi0;YGVC$*G3ad936?$T~p#0}{?S*ctCl{Sh%s|E0)zly_emVheb&^<{sJmU5T zabzaKzKsgyK0kq8`n|1@FpSWBz5#P-v-g*|wlImN29j+Q-n;&C$8db64=86gLZ$`| zsRYFkp_;)MFM^OiQoc{6>Mi3Wm4LRkE` zR;kBPutan4W;4llW6HY?tMP01B+t$j4vCG;5V6Q!<@7+KkBYIChWX889#}e$xfmWf zgqVSxGew?YCBKsre%iH~S6&z3`j^+bN3?pA@o+sZ;w&{exug zFza4g=EL2H-<4e`k^#edy8mm1#-V;!!=9Kg4F*;||rr&x#d2j|CYqsa`OpMmZt zT)kx2F^QxR{~R3JB7yYh^Bc#qJW^!xeksv%r6!B_qgOTEAsgE@(X2M+<-A2sN=Bq? z)khv~qLz4Eoirsk2q<+mQn`?M$dXf~GKDu~MfzwDV;s8&m*~wOI}Xj?Za@9&$a~{T z+RSKZmF?%`Kv28To6|5)1CCVt2Y;Oyd`$2zydOMPOD=8ddhHu7$=O|V?n@9feL)h7 z{bkqhIqYwGib}<45#i5G;V30&I7UMAA1aW)QC+I*;t0O#@aw0Wg7jbwoA8Ew<6x zZiX1O9!cJ`xzqX>Uda{eP10@3qoj%IF+}Axe_-C#XVl_7f;~%j->LtI>cobFr5!E@ z0!}OyrOp)F_V&3nZ56jAF1ApQ?jrPw&8M9adVS!xlG0_6km$DJoR%WKBcT&>!Pj@I z@bk8U5TXa2_Az^qijYw#JMIBSZZBj?0I7J^6p@(U zWJ$hXR)8M1T#EHVd?BYcT(^8Ozh`Upk`n~Lz_4c;ATI8-deMHF3G8{fnbkMZ$0^(6@ zi|Cjk7`JnC{$aAr>s#o9ap~K=?nf5o`1xOgEMgK=f_Vgeves2!2InOrK~)BwtCqk~ zhar0Iz4eX(M-Q9#G+c5WkI|+%S_?R0&XqeLyt?XsDqc@{3%H01J(PSWa5Ad-I@}OV z$==OfIrmz@JzQTkQj)XEbz&}rq2Ue^b<*C%eg|tm)@~fBpK1O|>g5X0i&*KkSZ0{cFL==+1JgW|&wyNv6_C9eXfK3CF zB3=j;a(NbYuj=!h+Qz}Te#B6%I26H-D%>|16ft}gdDIG#p+dY^A?>~G^^CB zz4w?Cnljg+0VB~)DbFW=J?o9Dd3aLpP%qj_kKVk`jhsm;aF9JsX@0r6Sid{4`o`1L zhgF3200il1{69>^88xNF%Epi@=K0x&rHFOaavzXCW^gdN6_U zb1N-tuUsEZ5#!PV<27WcqwXj@A}N9eY{s|Y&rX0R^mPyjD~%-)GgRu_52+o$g&OWNQoIV;!hQaA?QDb^xHL=_^B}hE z|1|N!*IA93?3>1ToV{89{rmq-5B%>}IB))zR$3~)k5vZEx{SCE^o68}4rqp_1q`Hy zyM>s0;%L7RYGhXEy?o@=4~KW!oRz0La#9@F4*mBw%kOCc(lE)uP`6ovBUADIk#KLi zpA))PU+qR!GU%e^)mAy)SAmo(D|@CxnAEQ09y8OeGIzbrJ6j5o3tmnqc&Y|O*e+fI zfQD9L=0pX~q3?BFjf6kxXuaqC_-SZem3^JZb4OLK>c64H@PBv#Pu&c6A<;}U%{O=Knht9UVUN6cdfj3@mKsc!zPTP05?{A8ho6C-+1WODbh=ON(;lyIf0em}kCl62MQZXezZo=?RR3YTYEVaIdKZk6U)~=hz@&Zm@Fv~kcU;eUA zl=fFp^WF7xS8w*wjwT)bYbH}8qmm?tGA?_L=X1|pI=_Be%~i9 zh-`1G#<(oE%C0o?jmkxeOnunK;talvJ)tI!*5{*Dt$PCHF%5_&u`n z-yFVjTv{2pfNOsuLDh0T`|iZlQN{L5dZ2O#6d0Yrk>vD+KUb`jh5A3hDvAIePr^*D zfA9qrgg2jtXYO}MOxbDe{EX7D3f_*as%T2m7iEqBJ#3X#!5I203AQHt=rZ_}jau}` zTGd*sM7@dWK8V*2eL#c(dCMZX)ow9rdMffz{o=Fd|IQSRiAypX6L^^1NqrQrw14)w z8-g>b70Oo^u)C^O9i8|GCfLI(K^lrA$2!CYtCtf`D$(lu|{U8uK!b&1BO;+(r)GGGRiTDlg4 zy*VYa8eY&1!*$niX_E0k)7_FAk`2%_o(Yk>5}bPJo##ym$pf85g|IeDjrlFXw8YoE zyhp_GPW>Icz3iOWjI?JmViZCLlI0nIm}N+kSWdVg0@=}Aw0bPIgR#PZrgu{>J)q?F z(+Az+s-*C2u#hcu<4EpJQ#RbMe|4Xl10Yj-8=RBhNJz4*j377xeCO`pX?rSc3a$h* zKz5+MfP8AtC_zd`J$tuo#FcjU_phP9I6JFI#CP~)qR@Ww*Z5~PJH+`KZhCw zaVtB)rVNF-mebVv1tz3;RFnAesPpcuD1Y3Rh6iMm(`es#A`*WZGYZ>h&hZbG`EFTq zWU2zraV2cM7>0_+%xEft)Hl-d*Yf9z-B+Q_Jz73KvGCidau|oN3PKdT=CWH?$r%4O z9LPJ$U0))l3`^Tgp&2=K17-R>+N~DC*Q=+3rT&?nM)V#PlwVwwviPPWSUpDM!{lwg zp@>SmU%d6HUHyUK%IZq=eGNYkbYuZtD(nlj1VC@-Jj2F<`}fsedbaS5f!)%Ek4c#h zDTem-7Zeo+N5cGIkeKMx)H(5y44stGt?pCsd3|>wSxyR6@i$oBXddkar;F)k=IY%@cuixH4L>qx)eWOiZr9Y?1q!(9H(LpAxRzu0dG zOYnYn(OecdQH#kv-W;D&+zkh+6Vz&uP~?p z0#POPy-E6t6{Arr>xCuOI>Ja-3VY7SDi!BfgslM<8Z-HT_d&2#FuYC2(uuFaY~RTZ z6mgd|b59BuxoDO10^m+@1+N4EdW&a)@eh|Eg%2=KwmB{1D=<9ZjX&DEzf&3wZAoAE z;5ClcZrIce)Fh`N4^3Nm%RsEAR(R`!gU87Aa`4Cbi6$!4;HBc_J*y(fFR#aj(9|qE z@kl&Hjm$elsLMe5;^94l%yfsoZ9V3zQffKCc2UhrZdE0lo0ApaYVfc^(>WaS9`G> zH;CPh*@FSu&7an!eqB=z^rn`7i9Qqk4RJu{BtK#1Tm`C2dkVg(UmNJ2{h>bbW=?;B_4IOH#w_t`oS5YnZeA0)Yo+E zi6@T`U4l)Xa5KCC>BN~)C3Z^iqO2(?G7%#4k8A;gfcaw?5&$CdJoQ%PLJ^;7LQCHa zm%Bm-(9Cf1uM1}-^nGtCH*l2SAeL^;Y)AnXfE1NT#rhIwM*{xgo2%%@^f0qeCt}?c zv72L^bG<@@P5VH)x)idzrv0?lqt<~mmK-S!3iJw!${>&v5_@fO)J%?)Pl_Sp_GA$W z?EbMFTmBi>ueUuiixceRvRmNLM8MphlS}}*zXyddGs}&3AkY~-BYkB!rr@lfbFz@5J}BV~&`~Zm#N5;RetIGF$|!vR`<8L1*Pk&Hw8x>QLE@&OV9>7zs#}Yc3Fb zWSJQKc*;(!gboMS2SLAIq-82!Y1o6GDj+>YwzoE?2U5p`j^R}qqB!W!cEuiOa{X^H zhM)4XmBN=~^+`dV$LJM8113A%mYViEHO}eRqHjI^D0Eo;>O;v))6LHz26VfpgCY zia1AHXNoU$xefjK+-4h0weUe=7fUN^t4{XbkuB zIudFEo^?Q7g*A<8PYI%Ml<1JJP=s#N?R<0Zi558*aa6>i8*^FN%^8?v98;-Nq_F7h zxp|KK!J!z_i>YN^_>@=0Y>Ll`$2f$zwsqs%qBxa)l94FrQjS*OacS{7EOndU3gXx? zs;Tc!Q{kd~JQzzJLcu_KVe_%!0p)K`I(RuvuFga)T2j)oU;sATFE1CHC(CmD{_qy@ zliq3vhQmsFoihOzm1`!oLw4$|6TzWYafl&LLSVuB>Ggkyv1Dv%kMFN{F!;Z=QN$bo^onY z<12&6fTY#2Or?^muplA$)@!|3P&(sE>-{s6;tj~C9>So{`fp6?dYx9RIl)K(X8NvP z<5@obffehM2I?ew}&3!!iFsj*pWh?TQI}*|jXTSP$0tBMURR#vV+t-5Gs%@nK75 z>FkTm#n78ym&A~M5WJdNbDHG3b?Kjuf{vXYk!wMFKucF(_&4)ooZXI%E_qJ@|9mX- zoy(%Gg&<}IA@d6`i@k!5?iR9hJQcbz|^$noqSH$|R=|~EZgU<6Tx+Z?X zm-QtW!pGm1nG91~2--6g2)Ic4d<&KDWvzuy10}T5|IhQO$EoUP_9E9t z_raJ$hLBi4z=qz4EmI-(!@3kf;@!yLc(DmFUN0mpD$VRkFH;fwN7T_C9O2tQ#bT<3 z`nLg)^N0*EV7jQ1fd0$5#*MM&BI|wozCyZ8K9BGCjjQgg>sqs}p}#;m&9kPif8$q^rV^UJ8k;+_F>HE~wy%^+cU01j4S7vZ^m(d3UI zIA*?L(aDvnr)YiVFj#6ax2Pj|t70IzR&nn*E2!;;9KL4k)T^SRew20k7AZ7-{Lu0I z9htKjsQWK{6dcdz_5C!xu_2os&kJ!$wt@q(+NKCu8XHd&GPqCzDmHsf)pjer)H~|} zepY^zU|B%Z7&}*ekna0q?}^1(4;s!kT52LFliZn9 zn|2%k0BVGaiTmTsKMChUQcNir3L ziLu>NUG|B975(obHvzboD=n=4)l#>dM7bxS1sxvcP z5eDIiNHvtvV`i=mby12!yp&_1E1Z+)UBtOWZEu$dX2Q1qvYDYM^LYEiY#Bsa4+Bjc z@en4dx&7C#`1d!i5Wouvt!)rNFJz!cB=3iT&dyPnvyjFUrh<|o$G!*qOGoJG#D~8P zIdGVed%@pTnjV_$N^be*UR68?&Cuv;Ovgi}p8$BUjk7)aLUpSDV9Jqba*MMcU0**J!Rq zcIVivA|OgYs`nvD%unZy#FONM5cqLTbTy)QNH-J-lbsC{FW$in@5O&J(sWUVi9YK- zAMH2SmV7?gQfBZnH?sRHzCPKJq@)K0KJ)N)Sl8k*=$`br7dU-iU^KNB^xCsoxK3gj z(9dlN+?Fsi`{HR5v2^GM(#NJS{k>1Q@!jtN^Bn1{{Og!Br`nN)4>=m6$eM$4FIpms zwd72JKC3|YPS8-FiVp;SDC*esTlrf&>q^vS!>gu!Kil??jVrw<_*#yVV;oWUj{kZq zU!PM(G<1yf0^$Y2-o=c0(X=mv0G-InP7QiwcyqK{4`522g zpEv|u`L;x%0?farNKLhwMcPb^Vw$Z7Bp*CvtOc+r0CAQGyJad@(^;JM^*^yrM&TCS zQLX@8Oo0;8^|uG<;f^Fgq_j4$ve0RsbeYee(B3Y7wWcYrd2860U$S0$WE=WM@*6MO zUH;}zSM@%?NfAJNUKIm$(Aqj2Oya_m&K1*xg=e6MHF#M*Wiy7p|b0GkY#7z1d;+2!$DA?}+IClv4d~t`rT?jJog$ z-ZVBUWC}&qTgC7n`HF*}{mN0wrBP2p2>hjIR)yZ{FZ(7m6i81+n*97$2JkP~moh%z zR2PCi#463`Q)T|2yI&xg|4~;ZPH!~}5e(vX{!>i>!yW^uM#W405lk&FPVNdrzO(J~ zh573g_%zAZ=it@@t-cxo$IhOpet}{^rSy+~zW}=Y2RKYz21WRi+s8Ana~mzF;MSt( z3rE4R=zVYfx8>JsNw*nzQMNq|P~iG^)8WS-vd;Q?3}yF=d74Xix6gSZ?MTBe5H*k5 z;oY2M-$6G};KXO9WAeR$Su{{!3AI?7pTmM^)v^&8WzOZ=+P1^#BI_9S;5ZYfSxsgy zFu~1q+UgCA&FtwQx{_<3nN_fyFnDFD@abF6JHDwFhV`FA9ZfJhHhc|5?FPagS&4x& zg}A?nVl||_zSaDwL0)79hxU3`h4$KYszTU(;RIjGA2aZ$5$T|89<$gs63mkT9piXP zbU~p~%1r+h&0$z6_NdO^E#EQ}8Mny@zVr83ct^R)GRqrw-^kY;wAic2hr8!!_?t8X z@GkCB3lDPUGIGpY&q^MDWT00d7Zmp4IYCfv$VA1}uUWZ8t8{JqCUV2>m+Dm2U$~R^ z5~KCsOW7;_>0%J>kqYTXmn4)!gBR;V!J|rvn}Z>J@i_}gc1sYxMg>h+AsOuqCOw+x zT3euklGcVZWDm2WuYUP~41LQjgyuQ}zu0B8`vC@EY!j`1FXlU!o5)1!x!9g{7W=53 z4^Xbh$Fl!A-gH3#Rj!0^Coilm8ze6PrZL;1OIq~}|D@Ut18Q9JoG-Yy#$dnd+3HrL z6vQI5z5Pl0h!kplc^S$|Qgt=rk%N^ZME2>9d2k$jChdCZYG8X`$++7uIV1Sv!A)NO zdnaljG8pwaKDSt(g6jEcD`0-R$&DZ@F{c@JDU<2nzCo0NE(jfWISy3*x9_P{G5m(l z0yOS9K5w$m+bJ^gr+4Eno+^S>ub2%M>oAtlrQb z9XoA*-#{47IA|v56Q$HmNoSCXfL7pBxvt0O{vcm+A9%{pv~4{BFW!2lNhMl`0kOPR zhlR&QGWYDT{MX|~@@1d2Ep)oQxBRatT!~M_2`auyq7R?)ll-?&&X5>;JG2tIM1sIl zg>_2cj7hMPbDAX}2r#w?z)f0;2z}I2Z&1%PszkFv82F^LsdznX_KzhG=!c9VB^&E(ZhF9 zM>~(Iy1}14HmAT1EotS4kwE;&Gh4p=CI7$<`uX7hZ}xE*JDgrXG_N}WT3yLdf-8cjyIlJCwhha$cMC_#38LRR8*!VAmU z0FsVz_xfv7z|fP6+#gZyIoE!#;pBobd;e5sBnk&KtwwfTVA)K`bq5Ffd^fStFMF_N zB8Bir=5S#2sbRcZArkdlTuhO9-W-X8+CT?DLF_U$wbZ`1)f#p^P@cWOa_X@ztV20YbBn*xo;+p& zF_c#t7jpHn)Gzzz)@{1G$VpPH2k;h(^Tp=(FYLo_rYM+^nhPGtxzM&0eO13nj@>Jj zBxWizq1WF-BNqMaGTlk0PZcFk=k;wf-LrcAgiD}=UdbN2C|EHG4VQOVIpuaL7^vut zw$HVq>eQj6$jmO{Puh4iFS+Xff@?M|JqiC8`4Kriq_pK#X>D|h-!tlUoOJ!n_-}9H zMWGaUn>_w8K5yT2F#I<>S3i6{WbuQ))&RG{e^K_8L2*P|n1efmOK=HJuwcR6o#5_- z;O=gL-~ySvK(vz=FOw|2Mo&vq5eRMErqJ$8?L=iG}P$oa=n1dhz% zE#=qjcgJ!EKiwjig_Oh*3XS3bbpBk2Lif{_6WS`haO`J&=)1)cWL@PJBd9c7fD5)w%!2`gJ)&nyaAFWA}ZmrHyZTqtE>K{m9;w@^ZjTb@C9eKhdM;V{`-P`=+l5I&( z-q)u^tN$qO<7Qj+LVQA#(&;NPCnt;iBprWn|n}FW9+3e#%Z{ zG`}k)pk!Np#av(YI6wEy+Yt#PdD&at@qcOQe%%^30T(4vbf!AURstY@3FVNBrWpk1 zeGHEL666{HW7tJPJ1!|x$Ure$TH2AAu( zlSUS;QX_PF+dgEAQ+#GvSD>So90jnymjQ(!;{D)j0(%t|6xL(o$4Ojyi`NRoynBWD zmphZMOxR}HK|sqQKSh~cP*(mY+P;L_JgxIIK6IB2Q{{%|_;#kQVj^!iW=y5eO}VtW zbbX-jpcD6LjE)8mLZ6DQP*m{ncTasG%8b7-)jy@YDO-_x$B2F`K*Y{Frq;lot3Ez4 z2>|MN-4GL0_Ffq|B-AP&4n&QIxdHD@xD?pb3To1K_1<)De-zy78|&HaA4yMS4@FKi z?1YZ0uDcFk1I_EA3!}bMS^=mrj?E-wLfZD-9Ki1>{}cG8u`$ANp%Su2$D)|(=#^1D;kb6_>a z)WRA^1gD_8erWW5T10<0TFOCT={216s2yH=uuQ)ij93&MjLKg`4S+yfH7^;NAI4$@ zaYF)RPa0?NcA)YY_8gsEu_E@~ZA}!fBX7bAWLRPv(JcGlpHk)}FRU7`iVBBJ%eE zNQ5#_#GoC2)hgLTBbsPm?~HrmwL3kMq@qW@{n%C*^PbU&a{eT~+Lj}*Mr6r^n_*I{`^^^z@c?C1`G7>ZQ*K01ThL%kYVIy*NXD1&e=lAXTJlw=gVK1I*7`74X0q_tahAz z5xD12+54RUbaSr@7T6HN0^kqNo+~v9#H4>HpXZD|8y>|QcF1=b8`E;5kp+DQ440@p zs=9Jk=bZlt45+1odS`wMO1=gG}t4j;d-?&hY>)j<9E>cmzZu&x@};9miaL!90|Jvd?HMG5B5;_sjl<&^2l&X ziSpdPCh@@tQlMD~&UD~i4sK+Kl#40DCZvcB57XGCZAJ?n`4}zYQ_g&^2JjvNT;)@w z;#)xwX3!bz#WhLM8phIr?aPf)%L|j(wFFRmyNK((b#2A5$K)^%M39sAKe2cBD7){; zdH6B%7NdLrVx2A7OXQCvi@5qcmb0uBa>we(0iAFy{3T3+S2^Eh%oj}2QuGyUGP4L) zxK3yMa~3}vX0>F&ttoJ7`51KcO$wg8m*&j-CVyg{x=dz75C2-6*q zoKG!yMG%?h4Ug;P%9lrphog)(%zI}-Z3JXcJAw8s89jV|rkaU=)Son0>3Oga%{ch5 zH(4O_;@JboCC`+ottIahhJRAdSex)w+rWkSk z4ICxxc4$*}CuCN(h3hLJ(d@bQHDu3WY_|_tG)bdxIdb(vlEHsJC(t<9a}7s&t#GJJ z(+}OStXBxy-p%Uk5`oAni>e>?x0_3LnC4g>Z2|;J>L%DUaA8eI3i%~+7wO%l2T)zQ z;8wtGebyT-5w9NkYpAv6G6m^b=-~`_vi-r+M#PJiT0&iQd5&ELVe-0svc_T^%rlg%#V#)gBf;2nMSeVF_*cc1Qhqq)1xfV!kvL|DM2+{D;s@ zM8!qaK+N%yD#GJTwzfSDTEe~fXwCg#_yL=qd_M@($(1XYoCwmtZ_j~C_)n7m=W z1;T-D`V!67jLo#H(jMOui`kOnNyI}Ml*ll!KK)yY+9=NQnNtewk_s3BW8vRVU#s84 z_TAcb0gfxvCtSCoFE0a$OYV!fYF0*U&L?-wH$s?EMq3hFFV&R=k76n(WnF0B(=Pd` z(o2GoEQ~RLaRZ$Z_d&bZv$AotycI6}hT#B^tXQcPb=ah`x@5w}o zb=T52jWDBVCXgt{&`_XlE}pzVdQ0#O!5sX$#BA_APS5d1bM@0oI@kf8NtiaZXKyhp z-^m%F2=O4svc1!FN5%a?=@8lNTxUM8W|T0CB@$b}nB(I{UzIatoB5(E##mvlyw(w;Yi8^bU;Kzd z#&4B|f#ey!{45h@LjwIPXoxT{wpl+QJP(`m!r~v{H@<;~p7_Oi4P#3i9M6sPiYY`p zQ-PEpXyk)ZZv>7xQ#WG~)qW5GKxd7hsPKq6a`1;``}IU7!P}o#q4@rTZZmYHmJ@F| zMT`D$X4Q4yHv%H9gmR`as{9PA@79e^e~g6E`0FgS z_IyI;BX1y68#wR!!N9xYwc=r9KuiCaM{`Do9w$5B64M6BaPfy%4k&E3XF2kJa9caf zFl8>FDR>Zk7IZjJb7)JcU!CLv7Z811QAyL4!T7P2s$Fe?;A|^=5ArS%58FDEosVM} z-HP%`XEa*NlKQcFI^r_yg)ns$$a*h#4(Ycx9~OS3s^Ms$Mc}xy(`5jYC@+D zmprTJY7A*$!S)k>^fF08G!_|9X0lJp13F48glHSP!E0S8)RJxiAQP7!I(%}l6;q@k zNdHo7eUSy|R(2*|DCiEYAC8ykm(Me9Z{erX^TGXd7o^(mKkWu8;i%}Ll&K6;vPn8z zIw9k`I5nX6MJlUR>0vaUc*X{qNL^P27j@3}bhti|u~vIRlg}!8YebBz8c#EiX`D_b zmQudgY^qrp=EO``W8E9i?KXjeYKaLSERRkHn*|9ix!%dPQpiJ;BnPq3EuP_+-tUBj z(uo~ivVSwpUMdxTzdD^*ZdHN0P1{p_y#==s9y7H`$ZG58xS!Tw+&~gUF-JY-F#xH6 zm^AckXXK}9U}eRHHTQhJ4FK_MNmTV}Xb&-S_3XseI$>X~uw7L)$jg-^C7?;*&UlF+ zevf_tvLbHT`s4{Hl%h8lHj~^RlL31rE9Yz)=niY)R0y_I11ks;UrnS`jIVk$pp<5M zPM^I5p0D%5cyzy$^VG_}A`6#a!jO&}xY#|3L3SYO7B%~^@*WA~ zv|7YZgs>P{S$;%#2hkcpm)YxQ#ZjX|<7GZ8z)qSRLRqeCl&Q=N=26xGy2X-oiOOw4 zz9fv3?>fiUR<>bS8Z)Z2AKH+l^r9I&XandldvUguOU?&;varvmdG8J3qjkJmy&JYU zMCh6y0JyrkXI%Dub2I1dcX`{vQ7bob!l``v=m#BPWViMLA}I&_Bp*PRp>O-GQOX8+T8 z0W~MclT-(BUpBU?5*@DJ6Rh(IMW7ng5@Ci1=;v=>&rnR~*)bUEXnsTnnPlq2DAV7` z6p9$wP8RSS-TEJQ4&Wu91bE4;yb7{ zJCTw3Pmdm;4PWCPI?=qzNwkgZy!&HT;|uwK1v}9a*X%3w3oI=MkCJP+1!u+uFqohy z#`-SfrR=luv3v;m#4J69qp=839rB%SZ^)2`1_JQ*Wa;0{Q;Vjvai7mV8~NbL9hI9y*Dmc}3D>w!+J?IfwylX~3KCmU*4$Y0rI@h zJ2vD;{C%EY{%ie5c^-MNwm+7DKS2_;wYjq7`#niX^Sc{%Mev1;rYih1Bw}(-zIg29 zQ|bM}nV0xG_NC=zwe-F`_L$KRP5qyxu}cCF<$Ytnezm=G!51vwe3 z)s*Rc(u*r9-Yq?E5BsSw@OXOqLe?nA9(BD+=zJ)TTX|pp|rAv8%tK;r{kI3-iSz zHDpsB<7xLnqgf(fD&u4&r9Cf~BL#e0--)+#Pf~jyDmk7RDBYPhMqr=jO2BLl!(^Rq z%WVtHp2CUBT2uVBD*939h|G}}{0|s492-tV1he+@(b&)bkQ#t)INf~z#FD{*WJkCj zhd0d)3aZi@o)lTxPkgxyG0^Od{5KwMiTXzs>cj1}V%UKkP*$0A6Z1>aE6jUWAVkf( zXB4Dzs5_)!hh1A;g<&f+CX0fqg-7M;hDXP>AAdD6gZ6h8J9=}R97KyQk=EALfT+j* z#@XQNuSVE|V+WFHWKoAB@cblQ*d7nC&kgGZO)nz;6y`TYk6iHx>z4-WUYMHBj_j-W4drt3LBf#G7X4V?UMflr9TQ@D@$(`xR`qg9TS}NYI=+yo zOCp~z@HwOhciGqbGBFu6qyWZ-1;MOm{nnM~i!`DxJk4TLz5^1&J=sD;XD5lsU}&k6 zL>pz%049xyS2`iZ6{IQ+`Eoq~JnUG<>S`LvMtO39Kys-cP_CHK;@^HuTL8fZK(IkuSj@&BPplT?v5c=|*FsWEzUCcZ6)DGyqp8wtUv+2m$a?Ps9>n=uOOA%B3*(t1*Bp;?NUpM=x6jqKH4Zg{IM9Ht_-IlX{I6a-=YxR$n{M zp*crxNq9wkh;~V2UfnsT_;WP9x!Y&FmmYs2%nJ!OFId1HpTB>9VxAh()*f&HjGt_7m-_l0;E%OOb6O%Bft5*1{44ja}{wYW8i{-8shz{@sGHO{up$A z448F}n{Tk|{C*@M&y{97Kf&z}i^k5|zwNMaY+8|FWTgt--)ge?Y~*!_*=AQ){_7x( zR+Te^!xPuXz8YW)qhE>DA4zm(Rt388E}Z$rr-z=}nXd4R415T9_h56$=I97T<-A4@ z?IZw7fiBJo@$aTXl7&`vaL9v`s(fo`1z|y6;3%E2(F1|_k-Td+{>Z=Pk&nCjBMMH; zLGhd&2pby9kofHfEnWa9T0vKz3g7$f`#s3=oX?Q=V{asp&@0r8MI_Ey&TrDwn!2|V zlqj+|l815b2%eLj6A3ZQeBZ6HDr`yHiR3Osc5$8&F;%1X@bK{C

{L3A}NS0*;j& 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 jsvT#?BR4z(NoUfIo_|s;?_$Oh5l0JQSFN literal 90128 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 diff --git a/icons/Xeno/castes/baneling.dmi b/icons/Xeno/castes/baneling.dmi deleted file mode 100644 index 03d4964aa7217345a624f31e67821e050ae56b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35465 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 YnFUKv5JysJpS5Jr(I1c0_+QNY4|Tr71poj5 diff --git a/icons/Xeno/castes/puppeteer.dmi b/icons/Xeno/castes/puppeteer.dmi deleted file mode 100644 index a6185e94fa7119dba570b6305d258f4680085727..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17780 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 diff --git a/icons/Xeno/castes/widow.dmi b/icons/Xeno/castes/widow.dmi deleted file mode 100644 index 839a5e1245c50976951a42cae6883d4794a871f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18920 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 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index cf1b9073338393115d1005930ff9495a2c6bad46..b08d30e12f9f029636a4c58d47524963f85d79e5 100644 GIT binary patch literal 38816 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 literal 38790 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 diff --git a/tgmc.dme b/tgmc.dme index e9543a24008..c6ffa4c1601 100644 --- a/tgmc.dme +++ b/tgmc.dme @@ -1231,7 +1231,6 @@ #include "code\modules\admin\view_variables\reference_tracking.dm" #include "code\modules\ai\ai_node.dm" #include "code\modules\ai\ai_behaviors\ai_behavior.dm" -#include "code\modules\ai\ai_behaviors\xeno\puppet.dm" #include "code\modules\ai\ai_behaviors\xeno\xeno.dm" #include "code\modules\ai\ai_behaviors\xeno\xeno_illusion.dm" #include "code\modules\ai\ai_behaviors\xeno\zombie.dm" @@ -1725,12 +1724,6 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\predalien\abilities_predalien.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\predalien\castedatum_predalien.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\predalien\predalien.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppet\abilities_puppet.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppet\castedatum_puppet.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppet\puppet.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppeteer\abilities_puppeteer.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppeteer\castedatum_puppeteer.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\puppeteer\puppeteer.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\queen\abilities_queen.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\queen\castedatum_queen.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\queen\queen.dm" @@ -1748,8 +1741,6 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\shrike\abilities_shrike.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\shrike\castedatum_shrike.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\shrike\shrike.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\spiderling\castedatum_spiderling.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\spiderling\spiderling.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\spitter\abilities_spitter.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\spitter\castedatum_spitter.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\spitter\spitter.dm" @@ -1759,12 +1750,6 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\warrior\abilities_warrior.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\warrior\castedatum_warrior.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\warrior\warrior.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\widow\abilities_widow.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\widow\castedatum_widow.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\widow\widow.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\wraith\abilities_wraith.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\wraith\castedatum_wraith.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\wraith\wraith.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\say.dm" #include "code\modules\mob\living\silicon\silicon.dm" From 82aecbaad5e026a733fb764515c36df7233fe3c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:16:21 +0000 Subject: [PATCH 10/10] Automatic changelog for PR #41 [ci skip] --- html/changelogs/AutoChangeLog-pr-41.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-41.yml diff --git a/html/changelogs/AutoChangeLog-pr-41.yml b/html/changelogs/AutoChangeLog-pr-41.yml new file mode 100644 index 00000000000..05aa01a07cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-41.yml @@ -0,0 +1,5 @@ +author: "Helg2" +delete-after: True +changes: + - rscdel: "Удалил старые неиспользуемые дефайны." + - imagedel: "Удалил неиспользуемые спрайты ксенокаст и мап блипов." \ No newline at end of file