From eba54df883686b99916d6421b137118987568783 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:54:37 +0500 Subject: [PATCH 01/11] part_1 --- code/__DEFINES/MC.dm | 8 + code/__DEFINES/blob.dm | 116 +++++ code/__DEFINES/dcs/signals_blob.dm | 4 + code/__DEFINES/dcs/signals_object.dm | 4 +- code/__DEFINES/flags.dm | 9 +- code/__DEFINES/hud.dm | 3 + code/__DEFINES/math.dm | 6 + code/__DEFINES/say.dm | 4 + code/__DEFINES/span.dm | 1 + code/__DEFINES/subsystems.dm | 1 + code/__DEFINES/tools.dm | 1 + code/__DEFINES/traits/declarations.dm | 9 + code/__HELPERS/_lists.dm | 2 + code/__HELPERS/_logging.dm | 13 + code/__HELPERS/atoms.dm | 11 + code/__HELPERS/chat.dm | 15 + code/__HELPERS/level_traits.dm | 2 +- code/__HELPERS/ref.dm | 15 + code/_globalvars/bitfields.dm | 8 + code/_globalvars/lists/mobs.dm | 8 + code/_globalvars/traits.dm | 4 + code/_onclick/hud/blob_overmind.dm | 17 +- code/_onclick/hud/blobbernaut.dm | 5 + code/_onclick/hud/screen_objects.dm | 12 + code/controllers/subsystem/fluids.dm | 251 ++++++++++ code/datums/components/_component.dm | 4 - code/datums/components/blob_minion.dm | 154 ++++++ code/datums/components/chasm.dm | 7 + code/datums/components/connect_containers.dm | 68 +++ code/datums/components/stationloving.dm | 173 +++++++ code/game/area/areas.dm | 2 +- code/game/area/areas/depot-areas.dm | 1 + code/game/area/areas/mining.dm | 12 +- code/game/area/ss13_areas.dm | 38 +- code/game/area/vision_reset_areas.dm | 1 + code/game/atoms.dm | 15 +- .../blob/{theblob.dm => blobs/_blob.dm} | 31 +- .../gamemodes/blob/blobs/captured_nuke.dm | 27 - code/game/gamemodes/blob/blobs/core.dm | 154 ------ code/game/gamemodes/blob/blobs/factory.dm | 30 -- code/game/gamemodes/blob/blobs/node.dm | 39 -- code/game/gamemodes/blob/blobs/resource.dm | 15 - code/game/gamemodes/blob/blobs/shield.dm | 80 --- code/game/gamemodes/nuclear/nuclearbomb.dm | 4 +- .../fluid_spread/_fluid_spread.dm | 156 ++++++ .../fluid_spread/effects_smoke.dm | 461 ++++++++++++++++++ .../temporary_visuals/miscellaneous.dm | 7 + .../objects/items/robot/robot_upgrades.dm | 4 +- code/game/objects/obj_defense.dm | 38 ++ code/game/objects/structures/mirror.dm | 14 +- code/game/turfs/simulated/walls.dm | 10 - code/game/turfs/simulated/walls_mineral.dm | 2 +- code/modules/antagonists/blob/blob_actions.dm | 13 +- code/modules/antagonists/blob/blob_antag.dm | 114 +++++ .../antagonists/blob/blob_infected_datum.dm | 12 +- code/modules/antagonists/blob/blob_minion.dm | 36 ++ .../antagonists/blob/blob_minions/blob_mob.dm | 38 ++ .../blob/blob_minions/blob_spore.dm | 121 +++++ .../blob/blob_minions/blob_zombie.dm | 98 ++++ .../blob/blob_minions/blobbernaut.dm | 107 ++++ .../antagonists/blob/blob_overmind_datum.dm | 19 +- .../antagonists}/blob/blobs/blob_mobs.dm | 2 + code/modules/antagonists/blob/blobs_attack.dm | 11 + .../blob/blobstrains/_blobstrain.dm | 171 +++++++ .../antagonists/blob/blobstrains/_reagent.dm | 44 ++ .../blob/blobstrains/blazing_oil.dm | 43 ++ .../blob/blobstrains/cryogenic_poison.dm | 35 ++ .../blob/blobstrains/debris_devourer.dm | 63 +++ .../blob/blobstrains/distributed_neurons.dm | 37 ++ .../blob/blobstrains/electromagnetic_web.dm | 32 ++ .../blob/blobstrains/energized_jelly.dm | 35 ++ .../blob/blobstrains/explosive_lattice.dm | 74 +++ .../antagonists/blob/blobstrains/multiplex.dm | 40 ++ .../blob/blobstrains/networked_fibers.dm | 41 ++ .../blob/blobstrains/pressurized_slime.dm | 52 ++ .../blob/blobstrains/reactive_spines.dm | 45 ++ .../blob/blobstrains/regenerative_materia.dm | 39 ++ .../blob/blobstrains/replicating_foam.dm | 36 ++ .../blob/blobstrains/shifting_fragments.dm | 37 ++ .../blob/blobstrains/synchronous_mesh.dm | 41 ++ .../antagonists/blob/overmind copy.dm} | 56 +-- code/modules/antagonists/blob/overmind.dm | 244 +++++++++ .../antagonists/blob/powers copy.dm} | 38 +- code/modules/antagonists/blob/powers.dm | 379 ++++++++++++++ .../antagonists/blob/structures/_blob.dm | 421 ++++++++++++++++ .../blob/structures/captured_nuke.dm | 31 ++ .../antagonists/blob/structures/core.dm | 157 ++++++ .../antagonists/blob/structures/factory.dm | 97 ++++ .../antagonists/blob/structures/node.dm | 56 +++ .../antagonists/blob/structures/normal.dm | 49 ++ .../antagonists/blob/structures/resource.dm | 35 ++ .../antagonists/blob/structures/shield.dm | 68 +++ .../antagonists/blob/structures/special.dm | 58 +++ .../antagonists/blob/structures}/storage.dm | 8 +- .../antagonists/space_ninja/ninja_shuttle.dm | 1 + .../mission_code/ruins/ussplaboratory.dm | 1 + code/modules/mob/living/carbon/alien/death.dm | 6 +- code/modules/mob/living/carbon/brain/MMI.dm | 2 +- .../mob/living/carbon/brain/robotic_brain.dm | 2 +- code/modules/mob/living/living.dm | 8 +- code/modules/mob/living/silicon/death.dm | 4 +- .../modules/mob/living/silicon/robot/death.dm | 6 +- code/modules/mob/login.dm | 3 +- code/modules/mob/logout.dm | 3 +- code/modules/mob/mob.dm | 16 +- code/modules/mob/mob_lists.dm | 93 ++++ code/modules/mob/new_player/new_player.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 10 +- code/modules/projectiles/projectile.dm | 6 +- code/modules/ruins/ruin_areas.dm | 5 + code/modules/spacepods/spacepod.dm | 2 +- icons/effects/effects.dmi | Bin 457750 -> 597054 bytes icons/hud/blob.dmi | Bin 0 -> 25760 bytes paradise.dme | 62 ++- 114 files changed, 4894 insertions(+), 547 deletions(-) create mode 100644 code/__DEFINES/dcs/signals_blob.dm create mode 100644 code/__DEFINES/say.dm create mode 100644 code/__HELPERS/chat.dm create mode 100644 code/__HELPERS/ref.dm create mode 100644 code/_onclick/hud/blobbernaut.dm create mode 100644 code/controllers/subsystem/fluids.dm create mode 100644 code/datums/components/blob_minion.dm create mode 100644 code/datums/components/connect_containers.dm create mode 100644 code/datums/components/stationloving.dm rename code/game/gamemodes/blob/{theblob.dm => blobs/_blob.dm} (90%) delete mode 100644 code/game/gamemodes/blob/blobs/captured_nuke.dm delete mode 100644 code/game/gamemodes/blob/blobs/core.dm delete mode 100644 code/game/gamemodes/blob/blobs/factory.dm delete mode 100644 code/game/gamemodes/blob/blobs/node.dm delete mode 100644 code/game/gamemodes/blob/blobs/resource.dm delete mode 100644 code/game/gamemodes/blob/blobs/shield.dm create mode 100644 code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm create mode 100644 code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm create mode 100644 code/modules/antagonists/blob/blob_antag.dm create mode 100644 code/modules/antagonists/blob/blob_minion.dm create mode 100644 code/modules/antagonists/blob/blob_minions/blob_mob.dm create mode 100644 code/modules/antagonists/blob/blob_minions/blob_spore.dm create mode 100644 code/modules/antagonists/blob/blob_minions/blob_zombie.dm create mode 100644 code/modules/antagonists/blob/blob_minions/blobbernaut.dm rename code/{game/gamemodes => modules/antagonists}/blob/blobs/blob_mobs.dm (99%) create mode 100644 code/modules/antagonists/blob/blobs_attack.dm create mode 100644 code/modules/antagonists/blob/blobstrains/_blobstrain.dm create mode 100644 code/modules/antagonists/blob/blobstrains/_reagent.dm create mode 100644 code/modules/antagonists/blob/blobstrains/blazing_oil.dm create mode 100644 code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm create mode 100644 code/modules/antagonists/blob/blobstrains/debris_devourer.dm create mode 100644 code/modules/antagonists/blob/blobstrains/distributed_neurons.dm create mode 100644 code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm create mode 100644 code/modules/antagonists/blob/blobstrains/energized_jelly.dm create mode 100644 code/modules/antagonists/blob/blobstrains/explosive_lattice.dm create mode 100644 code/modules/antagonists/blob/blobstrains/multiplex.dm create mode 100644 code/modules/antagonists/blob/blobstrains/networked_fibers.dm create mode 100644 code/modules/antagonists/blob/blobstrains/pressurized_slime.dm create mode 100644 code/modules/antagonists/blob/blobstrains/reactive_spines.dm create mode 100644 code/modules/antagonists/blob/blobstrains/regenerative_materia.dm create mode 100644 code/modules/antagonists/blob/blobstrains/replicating_foam.dm create mode 100644 code/modules/antagonists/blob/blobstrains/shifting_fragments.dm create mode 100644 code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm rename code/{game/gamemodes/blob/overmind.dm => modules/antagonists/blob/overmind copy.dm} (51%) create mode 100644 code/modules/antagonists/blob/overmind.dm rename code/{game/gamemodes/blob/powers.dm => modules/antagonists/blob/powers copy.dm} (93%) create mode 100644 code/modules/antagonists/blob/powers.dm create mode 100644 code/modules/antagonists/blob/structures/_blob.dm create mode 100644 code/modules/antagonists/blob/structures/captured_nuke.dm create mode 100644 code/modules/antagonists/blob/structures/core.dm create mode 100644 code/modules/antagonists/blob/structures/factory.dm create mode 100644 code/modules/antagonists/blob/structures/node.dm create mode 100644 code/modules/antagonists/blob/structures/normal.dm create mode 100644 code/modules/antagonists/blob/structures/resource.dm create mode 100644 code/modules/antagonists/blob/structures/shield.dm create mode 100644 code/modules/antagonists/blob/structures/special.dm rename code/{game/gamemodes/blob/blobs => modules/antagonists/blob/structures}/storage.dm (59%) create mode 100644 code/modules/mob/mob_lists.dm create mode 100644 icons/hud/blob.dmi diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index 397ab30cc3a..504bcb60d22 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -98,6 +98,14 @@ /datum/controller/subsystem/processing/##X/fire() {..() /*just so it shows up on the profiler*/} \ /datum/controller/subsystem/processing/##X +#define FLUID_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/fluids/##X);\ +/datum/controller/subsystem/fluids/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/fluids/##X/fire() {..() /*just so it shows up on the profiler*/} \ +/datum/controller/subsystem/fluids/##X + #define TIMER_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/timer/##X);\ /datum/controller/subsystem/timer/##X/New(){\ NEW_SS_GLOBAL(SS##X);\ diff --git a/code/__DEFINES/blob.dm b/code/__DEFINES/blob.dm index 27f64f17f0a..dc59d9859f8 100644 --- a/code/__DEFINES/blob.dm +++ b/code/__DEFINES/blob.dm @@ -54,3 +54,119 @@ GLOBAL_LIST_EMPTY(blobs) GLOBAL_LIST_EMPTY(blob_cores) GLOBAL_LIST_EMPTY(blob_nodes) + +// Overmind defines + +#define OVERMIND_MAX_POINTS_DEFAULT 100 // Max point storage +#define OVERMIND_STARTING_POINTS 60 // Points granted upon start +#define OVERMIND_STARTING_REROLLS 1 // Free strain rerolls at the start +#define OVERMIND_MAX_CAMERA_STRAY "3x3" // How far the overmind camera is allowed to stray from blob tiles. 3x3 is 1 tile away, 5x5 2 tiles etc + + +// Generic blob defines + +#define BLOB_BASE_POINT_RATE 2 // Base amount of points per process() +#define BLOB_EXPAND_COST 4 // Price to expand onto a new tile +#define BLOB_ATTACK_REFUND 2 // Points 'refunded' when the expand attempt actually attacks something instead +#define BLOB_BRUTE_RESIST 0.5 // Brute damage taken gets multiplied by this value +#define BLOB_FIRE_RESIST 1 // Burn damage taken gets multiplied by this value +#define BLOB_EXPAND_CHANCE_MULTIPLIER 1 // Increase this value to make blobs naturally expand faster +#define BLOB_REINFORCE_CHANCE 2.5 // The seconds_per_tick chance for cores/nodes to reinforce their surroundings +#define BLOB_REAGENTATK_VOL 25 // Amount of strain-reagents that get injected when the blob attacks: main source of blob damage +#define BLOB_BONUS_POINTS 60 + + +// Structure properties + +#define BLOB_CORE_MAX_HP 400 +#define BLOB_CORE_HP_REGEN 2 // Bases health regeneration rate every process(), can be added on by strains +#define BLOB_CORE_CLAIM_RANGE 12 // Range in which blob tiles are 'claimed' (converted from dead to alive, rarely useful) +#define BLOB_CORE_PULSE_RANGE 4 // The radius up to which the core activates structures, and up to which structures can be built +#define BLOB_CORE_EXPAND_RANGE 3 // Radius of automatic expansion +#define BLOB_CORE_STRONG_REINFORCE_RANGE 1 // The radius of tiles surrounding the core that get upgraded +#define BLOB_CORE_REFLECTOR_REINFORCE_RANGE 0 +#define BLOB_CORE_FIRE_RESIST 2 +#define BLOB_CORE_POINT_RATE 2 + +#define BLOB_NODE_MAX_HP 200 +#define BLOB_NODE_HP_REGEN 3 +#define BLOB_NODE_MIN_DISTANCE 5 // Minimum distance between nodes +#define BLOB_NODE_CLAIM_RANGE 10 +#define BLOB_NODE_PULSE_RANGE 3 // The radius up to which the core activates structures, and up to which structures can be built +#define BLOB_NODE_EXPAND_RANGE 2 // Radius of automatic expansion +#define BLOB_NODE_STRONG_REINFORCE_RANGE 0 // The radius of tiles surrounding the node that get upgraded +#define BLOB_NODE_REFLECTOR_REINFORCE_RANGE 0 + +#define BLOB_FACTORY_MAX_HP 200 +#define BLOB_FACTORY_HP_REGEN 1 +#define BLOB_FACTORY_MIN_DISTANCE 7 // Minimum distance between factories +#define BLOB_FACTORY_MAX_SPORES 3 + +#define BLOB_RESOURCE_MAX_HP 60 +#define BLOB_RESOURCE_HP_REGEN 15 +#define BLOB_RESOURCE_MIN_DISTANCE 4 // Minimum distance between resource blobs +#define BLOB_RESOURCE_GATHER_DELAY (4 SECONDS) // Gather points when pulsed outside this interval +#define BLOB_RESOURCE_GATHER_ADDED_DELAY (0.25 SECONDS) // Every additional resource blob adds this amount to the gather delay +#define BLOB_RESOURCE_POINT_RATE 2 + +#define BLOB_REGULAR_MAX_HP 25 +#define BLOB_REGULAR_HP_INIT 21 // The starting HP of a normal blob tile +#define BLOB_REGULAR_HP_REGEN 1 // Health regenerated when pulsed by a node/core + +#define BLOB_STRONG_MAX_HP 150 +#define BLOB_STRONG_HP_REGEN 2 +#define BLOB_STRONG_BRUTE_RESIST 0.25 // Brute damage taken gets multiplied by this value + +#define BLOB_CAP_NUKE_MAX_HP 100 +#define BLOB_CAP_NUKE_HP_REGEN 1 + +#define BLOB_REFLECTOR_MAX_HP 150 +#define BLOB_REFLECTOR_HP_REGEN 2 + +#define BLOB_STORAGE_MAX_HP 30 +#define BLOB_STORAGE_FIRE_RESIST 2 + + +// Structure purchasing + +#define BLOB_UPGRADE_STRONG_COST 15 // Upgrade and build costs here +#define BLOB_UPGRADE_REFLECTOR_COST 15 +#define BLOB_STRUCTURE_RESOURCE_COST 40 +#define BLOB_STRUCTURE_FACTORY_COST 60 +#define BLOB_STRUCTURE_NODE_COST 50 + +#define BLOB_REFUND_STRONG_COST 4 // Points refunded when destroying the structure +#define BLOB_REFUND_REFLECTOR_COST 8 +#define BLOB_REFUND_RESOURCE_COST 15 +#define BLOB_REFUND_FACTORY_COST 25 +#define BLOB_REFUND_NODE_COST 25 +#define BLOB_REFUND_STORAGE_COST 12 +#define BLOB_REFUND_CORE_COST -1 +#define BLOB_REFUND_CAP_NUKE_COST 0 + +// Blob power properties + +#define BLOB_POWER_RELOCATE_COST 80 // Resource cost to move your core to a different node +#define BLOB_POWER_REROLL_COST 40 // Strain reroll +#define BLOB_POWER_REROLL_FREE_TIME (4 MINUTES) // Gain a free strain reroll every x minutes +#define BLOB_POWER_REROLL_CHOICES 6 // Possibilities to choose from; keep in mind increasing this might fuck with the radial menu + + +// Mob defines + +#define BLOBMOB_HEALING_MULTIPLIER 0.0125 // Multiplies by -maxHealth and heals the blob by this amount every blob_act +#define BLOBMOB_SPORE_HEALTH 30 // Base spore health +#define BLOBMOB_SPORE_SPAWN_COOLDOWN (8 SECONDS) +#define BLOBMOB_SPORE_DMG_LOWER 2 +#define BLOBMOB_SPORE_DMG_UPPER 4 +#define BLOBMOB_BLOBBERNAUT_RESOURCE_COST 40 // Purchase price for making a blobbernaut +#define BLOBMOB_BLOBBERNAUT_HEALTH 200 // Base blobbernaut health +#define BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER 20 // Damage without active overmind (core dead or xenobio mob) +#define BLOBMOB_BLOBBERNAUT_DMG_SOLO_UPPER 20 +#define BLOBMOB_BLOBBERNAUT_DMG_LOWER 4 // Damage dealt with active overmind (most damage comes from strain chems) +#define BLOBMOB_BLOBBERNAUT_DMG_UPPER 4 +#define BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL 20 // Amounts of strain reagents applied on attack -- basically the main damage stat +#define BLOBMOB_BLOBBERNAUT_DMG_OBJ 60 // Damage dealth to objects/machines +#define BLOBMOB_BLOBBERNAUT_HEALING_CORE 0.05 // Percentage multiplier HP restored on Life() when within 2 tiles of the blob core +#define BLOBMOB_BLOBBERNAUT_HEALING_NODE 0.025 // Same, but for a nearby node +#define BLOBMOB_BLOBBERNAUT_HEALTH_DECAY 0.0125 // Percentage multiplier HP lost when not near blob tiles or without factory diff --git a/code/__DEFINES/dcs/signals_blob.dm b/code/__DEFINES/dcs/signals_blob.dm new file mode 100644 index 00000000000..afd4737bdd9 --- /dev/null +++ b/code/__DEFINES/dcs/signals_blob.dm @@ -0,0 +1,4 @@ +/// Signal sent when a blob overmind picked a new strain (/mob/camera/blob/overmind, /datum/blobstrain/new_strain) +#define COMSIG_BLOB_SELECTED_STRAIN "blob_selected_strain" +/// Signal sent by a blob spore when it creates a zombie (/mob/living/basic/blob_minion/spore/spore, //mob/living/basic/blob_minion/zombie/zombie) +#define COMSIG_BLOB_ZOMBIFIED "blob_zombified" diff --git a/code/__DEFINES/dcs/signals_object.dm b/code/__DEFINES/dcs/signals_object.dm index ce5845f447c..1d81249ab54 100644 --- a/code/__DEFINES/dcs/signals_object.dm +++ b/code/__DEFINES/dcs/signals_object.dm @@ -16,7 +16,9 @@ /// Return to prevent the default behavior (attack_selfing) from ocurring. #define COMPONENT_ITEM_ACTION_SLOT_INVALID (1<<0) -/// from base of /obj/item/slimepotion/speed/interact_with_atom(): (obj/target, /obj/src, mob/user) #define COMSIG_SPEED_POTION_APPLIED "speed_potion" #define SPEED_POTION_STOP (1<<0) + +///from base of [/obj/proc/update_integrity]: (old_value, new_value) +#define COMSIG_OBJ_INTEGRITY_CHANGED "obj_integrity_changed" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index b224f0706f6..a8b6fe1092f 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -37,6 +37,10 @@ /// Update the atom's icon #define UPDATE_ICON (UPDATE_ICON_STATE|UPDATE_OVERLAYS) +/// If the thing can reflect light (lasers/energy) +#define RICOCHET_SHINY (1<<0) +/// If the thing can reflect matter (bullets/bomb shrapnel) +#define RICOCHET_HARD (1<<1) //Reagent flags #define REAGENT_NOREACT 1 @@ -186,7 +190,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define MOBILITY_FLAGS_REST_CAPABLE_DEFAULT (MOBILITY_MOVE|MOBILITY_STAND|MOBILITY_PICKUP|MOBILITY_USE|MOBILITY_UI|MOBILITY_STORAGE|MOBILITY_PULL|MOBILITY_REST|MOBILITY_LIEDOWN) -//MINING AREA FLAGS +//AREA FLAGS /// If mining tunnel generation is allowed in this area #define CAVES_ALLOWED (1<<1) /// If flora are allowed to spawn in this area randomly through tunnel generation @@ -195,6 +199,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define MOB_SPAWN_ALLOWED (1<<3) /// If megafauna can be spawned by natural random generation #define MEGAFAUNA_SPAWN_ALLOWED (1<<4) +/// If blobs can spawn there and if it counts towards their score. +#define BLOBS_ALLOWED (1<<5) + // timed_action_flags parameter for [/proc/do_after()] diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 8a69bac57f7..7ee61dccdfb 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -97,3 +97,6 @@ #define PLANE_GROUP_MAIN "main" /// A secondary group, used when a client views a generic window #define PLANE_GROUP_POPUP_WINDOW(screen) "popup-[screen.UID()]" + +//Blobbernauts +#define ui_blobbernaut_overmind_health "EAST-1:28,CENTER+0:19" diff --git a/code/__DEFINES/math.dm b/code/__DEFINES/math.dm index f1322a4b7d3..95a7f556d9c 100644 --- a/code/__DEFINES/math.dm +++ b/code/__DEFINES/math.dm @@ -34,6 +34,9 @@ // Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive #define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max) +/// Increments a value and wraps it if it exceeds some value. Can be used to circularly iterate through a list through `idx = WRAP_UP(idx, length_of_list)`. +#define WRAP_UP(val, max) (((val) % (max)) + 1) + // Real modulus that handles decimals #define MODULUS(x, y) ( (x) - FLOOR(x, y)) @@ -119,3 +122,6 @@ /// Like SPT_PROB_RATE but easier to use, simply put `if(SPT_PROB(10, 5))` #define SPT_PROB(prob_per_second_percent, seconds_per_tick) (prob(100*SPT_PROB_RATE((prob_per_second_percent)/100, (seconds_per_tick)))) // ) + +/// The number of cells in a taxicab circle (rasterized diamond) of radius X. +#define DIAMOND_AREA(X) (1 + 2*(X)*((X)+1)) diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm new file mode 100644 index 00000000000..fa1b4392f5b --- /dev/null +++ b/code/__DEFINES/say.dm @@ -0,0 +1,4 @@ +// A link given to ghost alice to follow bob +#define FOLLOW_LINK(alice, bob) "(F)" +#define TURF_LINK(alice, turfy) "(T)" +#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" \ No newline at end of file diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 5c13748e141..0e40365ee2b 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -18,6 +18,7 @@ #define span_alien(str) ("" + str + "") #define span_announce(str) ("" + str + "") #define span_big(str) ("" + str + "") +#define span_blob(str) ("" + str + "") //#define span_bigicon(str) ("" + str + "") //#define span_binarysay(str) ("" + str + "") //#define span_blue(str) ("" + str + "") diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 5cb1e4ae138..2e06c7645f1 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -130,6 +130,7 @@ #define FIRE_PRIORITY_BURNING 40 #define FIRE_PRIORITY_DEFAULT 50 #define FIRE_PRIORITY_PARALLAX 65 +#define FIRE_PRIORITY_FLUIDS 80 #define FIRE_PRIORITY_MOBS 100 #define FIRE_PRIORITY_ASSETS 105 #define FIRE_PRIORITY_TGUI 110 diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 4e9b6571a4e..1cb58f9f41a 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -5,6 +5,7 @@ #define TOOL_WIRECUTTER "wirecutter" #define TOOL_WRENCH "wrench" #define TOOL_WELDER "welder" +#define TOOL_ANALYZER "analyzer" // Surgery tools #define TOOL_RETRACTOR "retractor" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index f6eefaa8686..928427afda0 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -26,6 +26,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CHASM_STOPPER "chasm_stopper" /// `do_teleport` will not allow this atom to teleport #define TRAIT_NO_TELEPORT "no-teleport" + +/// This atom is a secluded location, which is counted as out of bounds. +/// Anything that enters this atom's contents should react if it wants to stay in bounds. +#define TRAIT_SECLUDED_LOCATION "secluded_loc" + #define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" //turf traits @@ -85,6 +90,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_HUSK "husk" #define TRAIT_SKELETON "skeleton" #define TRAIT_NO_CLONE "no_clone" +/// Isn't attacked harmfully by blob structures +#define TRAIT_BLOB_ALLY "blob_ally" +/// Objects with this trait are deleted if they fall into chasms, rather than entering abstract storage +#define TRAIT_CHASM_DESTROYED "chasm_destroyed" /// "Magic" trait that blocks the mob from moving or interacting with anything. Used for transient stuff like mob transformations or incorporality in special cases. /// Will block movement, `Life()` (!!!), and other stuff based on the mob. diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index d9f5946d34e..ef5b83587a8 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -880,6 +880,8 @@ proc/dd_sortedObjectList(list/incoming) ///Returns the list if it's actually a valid list, otherwise will initialize it #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) +///Qdel every item in the list before setting the list to null +#define QDEL_LAZYLIST(L) for(var/I in L) qdel(I); L = null; ///Adds to the item K the value V, if the list is null it will initialize it #define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += V; ///This is used to add onto lazy assoc list when the value you're adding is a /list/. This one has extra safety over lazyaddassoc because the value could be null (and thus cant be used to += objects) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 41433156e43..4bcf8c2e248 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -396,3 +396,16 @@ GLOBAL_PROTECT(log_end) else user.mob.create_log(OOC_LOG, text) log_ooc(text, user) + +/proc/loc_name(atom/A) + if(!istype(A)) + return "(INVALID LOCATION)" + + var/turf/T = A + if (!istype(T)) + T = get_turf(A) + + if(istype(T)) + return "([AREACOORD(T)])" + else if(A.loc) + return "(UNKNOWN (?, ?, ?))" diff --git a/code/__HELPERS/atoms.dm b/code/__HELPERS/atoms.dm index e801df08a6e..a5c34d5dc70 100644 --- a/code/__HELPERS/atoms.dm +++ b/code/__HELPERS/atoms.dm @@ -132,3 +132,14 @@ return FALSE return (mover.pass_flags & passflag) + +///Returns a list of all locations (except the area) the movable is within. +/proc/get_nested_locs(atom/movable/atom_on_location, include_turf = FALSE) + . = list() + var/atom/location = atom_on_location.loc + var/turf/our_turf = get_turf(atom_on_location) + while(location && location != our_turf) + . += location + location = location.loc + if(our_turf && include_turf) //At this point, only the turf is left, provided it exists. + . += our_turf diff --git a/code/__HELPERS/chat.dm b/code/__HELPERS/chat.dm new file mode 100644 index 00000000000..e19ac5a41d8 --- /dev/null +++ b/code/__HELPERS/chat.dm @@ -0,0 +1,15 @@ +/// Sends a message to all dead and observing players, if a source is provided a follow link will be attached. +/proc/send_to_observers(message, source) + var/list/all_observers = GLOB.dead_player_list + GLOB.current_observers_list + for(var/mob/observer as anything in all_observers) + if (isnull(source)) + to_chat(observer, "[message]") + continue + var/link = FOLLOW_LINK(observer, source) + to_chat(observer, "[link] [message]") + +/// Sends a message to everyone within the list, as well as all observers. +/proc/relay_to_list_and_observers(message, list/mob_list, source) + for(var/mob/creature as anything in mob_list) + to_chat(creature, message) + send_to_observers(message, source) \ No newline at end of file diff --git a/code/__HELPERS/level_traits.dm b/code/__HELPERS/level_traits.dm index ae935df35c7..f2b1bd40c11 100644 --- a/code/__HELPERS/level_traits.dm +++ b/code/__HELPERS/level_traits.dm @@ -1,5 +1,5 @@ /proc/is_level_reachable(z) - return check_level_trait(z, REACHABLE) + return check_level_trait(z, REACHABLE) /proc/is_station_level(z) return check_level_trait(z, STATION_LEVEL) diff --git a/code/__HELPERS/ref.dm b/code/__HELPERS/ref.dm new file mode 100644 index 00000000000..365df03dc88 --- /dev/null +++ b/code/__HELPERS/ref.dm @@ -0,0 +1,15 @@ +/** + * \ref behaviour got changed in 512 so this is necesary to replicate old behaviour. + * If it ever becomes necesary to get a more performant REF(), this lies here in wait + * #define REF(thing) (thing && isdatum(thing) && (thing:datum_flags & DF_USE_TAG) && thing:tag ? "[thing:tag]" : text_ref(thing)) +**/ +/proc/REF(input) + if(isdatum(input)) + var/datum/thing = input + if(thing.datum_flags & DF_USE_TAG) + if(!thing.tag) + stack_trace("A ref was requested of an object with DF_USE_TAG set but no tag: [thing]") + thing.datum_flags &= ~DF_USE_TAG + else + return "\[[url_encode(thing.tag)]\]" + return text_ref(input) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 965ce2e5456..74d8bbfdd01 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -21,3 +21,11 @@ DEFINE_BITFIELD(datum_flags, list( "DF_VAR_EDITED" = DF_VAR_EDITED, "DF_USE_TAG" = DF_USE_TAG, )) + +DEFINE_BITFIELD(area_flags, list( + "BLOBS_ALLOWED" = BLOBS_ALLOWED, + "CAVES_ALLOWED" = CAVES_ALLOWED, + "FLORA_ALLOWED" = FLORA_ALLOWED, + "MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED, + "MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED, +)) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 86139603b36..dd7b45868e8 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -24,8 +24,16 @@ GLOBAL_LIST_EMPTY(human_list) //all instances of /mob/living/carbon/human and GLOBAL_LIST_EMPTY(spirits) //List of all the spirits, including Masks GLOBAL_LIST_EMPTY(alive_mob_list) //List of all alive mobs, including clientless. Excludes /mob/new_player GLOBAL_LIST_EMPTY(dead_mob_list) //List of all dead mobs, including clientless. Excludes /mob/new_player +/// All alive mobs with clients. +GLOBAL_LIST_EMPTY(alive_player_list) +/// All dead mobs with clients. Does not include observers. +GLOBAL_LIST_EMPTY(dead_player_list) +/// All observers with clients that joined as observers. +GLOBAL_LIST_EMPTY(current_observers_list) GLOBAL_LIST_EMPTY(respawnable_list) //List of all mobs, dead or in mindless creatures that still be respawned. GLOBAL_LIST_EMPTY(non_respawnable_keys) //List of ckeys that are excluded from respawning for remainder of round. +/// All living mobs which can hear blob telepathy +GLOBAL_LIST_EMPTY(blob_telepathy_mobs) /// One for each AI_* status define, List of all simple animals, including clientless GLOBAL_LIST_INIT(simple_animals, list(list(), list(), list(), list())) GLOBAL_LIST_EMPTY(bots_list) //List of all bots(beepsky, medibots,etc) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 54ad01b0fe2..56bf8c5dede 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_IMMOBILIZE" = TRAIT_NO_IMMOBILIZE, "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, "TRAIT_RADSTORM_IMMUNE" = TRAIT_RADSTORM_IMMUNE, + "TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_SOLARFLARE_IMMUNE" = TRAIT_SOLARFLARE_IMMUNE, "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, @@ -36,11 +37,14 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_AI_UNTRACKABLE" = TRAIT_AI_UNTRACKABLE, "TRAIT_BADASS" = TRAIT_BADASS, "TRAIT_BLIND" = TRAIT_BLIND, + "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, "TRAIT_BLOODCRAWL" = TRAIT_BLOODCRAWL, "TRAIT_BLOODCRAWL_EAT" = TRAIT_BLOODCRAWL_EAT, "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, "TRAIT_CANT_RIDE" = TRAIT_CANT_RIDE, + "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, + "TRAIT_NO_GUNS" = TRAIT_NO_GUNS, "TRAIT_COLORBLIND" = TRAIT_COLORBLIND, "TRAIT_COMIC" = TRAIT_COMIC, "TRAIT_CLUMSY" = TRAIT_CLUMSY, diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 91bd2e9e4db..1494bf44383 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -3,7 +3,7 @@ hud_used = new /datum/hud/blob_overmind(src) /atom/movable/screen/blob - icon = 'icons/mob/blob.dmi' + icon = 'icons/hud/blob.dmi' /atom/movable/screen/blob/MouseEntered(location,control,params) openToolTip(usr,src,params,title = name,content = desc, theme = "blob") @@ -89,8 +89,14 @@ /atom/movable/screen/blob/FactoryBlob icon_state = "ui_factory" - name = "Produce Factory Blob (60)" - desc = "Производит фабрику за 60 ресурсов.
Фабрики будут производить споры каждые несколько секунд." + name = "Produce Factory Blob (ERROR)" + desc = "Производит фабрику за ERROR ресурсов.
Фабрики будут производить споры каждые несколько секунд." + + +/atom/movable/screen/blob/FactoryBlob/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Produce Factory Blob ([BLOB_STRUCTURE_FACTORY_COST])" + desc = "Производит фабрику за [BLOB_STRUCTURE_FACTORY_COST] ресурсов.
Фабрики будут производить споры каждые несколько секунд." /atom/movable/screen/blob/FactoryBlob/Click() if(isovermind(usr)) @@ -146,10 +152,7 @@ SET_PLANE_EXPLICIT(blobpwrdisplay, ABOVE_HUD_PLANE, mymob) static_inventory += blobpwrdisplay - blobhealthdisplay = new /atom/movable/screen(null, src) - blobhealthdisplay.name = "blob health" - blobhealthdisplay.icon_state = "block" - blobhealthdisplay.screen_loc = ui_internal + blobhealthdisplay = new /atom/movable/screen/healths/blob(null, src) static_inventory += blobhealthdisplay using = new /atom/movable/screen/blob/BlobHelp(null, src) diff --git a/code/_onclick/hud/blobbernaut.dm b/code/_onclick/hud/blobbernaut.dm new file mode 100644 index 00000000000..59c12a5aa0f --- /dev/null +++ b/code/_onclick/hud/blobbernaut.dm @@ -0,0 +1,5 @@ +/datum/hud/living/blobbernaut/New(mob/living/owner) + . = ..() + + blobpwrdisplay = new /atom/movable/screen/healths/blob/overmind(null, src) + infodisplay += blobpwrdisplay diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index dc4298f159c..1012e90ffe2 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -720,6 +720,18 @@ icon = 'icons/mob/screen_alien.dmi' screen_loc = ui_alien_health +/atom/movable/screen/healths/blob + name = "blob health" + icon_state = "block" + screen_loc = ui_internal + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/atom/movable/screen/healths/blob/overmind + name = "overmind health" + icon = 'icons/hud/blob.dmi' + icon_state = "corehealth" + screen_loc = ui_blobbernaut_overmind_health + /atom/movable/screen/healths/bot icon = 'icons/mob/screen_bot.dmi' screen_loc = ui_borg_health diff --git a/code/controllers/subsystem/fluids.dm b/code/controllers/subsystem/fluids.dm new file mode 100644 index 00000000000..6b68ae71722 --- /dev/null +++ b/code/controllers/subsystem/fluids.dm @@ -0,0 +1,251 @@ +// Flags indicating what parts of the fluid the subsystem processes. +/// Indicates that a fluid subsystem processes fluid spreading. +#define SS_PROCESSES_SPREADING (1<<0) +/// Indicates that a fluid subsystem processes fluid effects. +#define SS_PROCESSES_EFFECTS (1<<1) + +/** + * # Fluid Subsystem + * + * A subsystem that processes the propagation and effects of a particular fluid. + * + * Both fluid spread and effect processing are handled through a carousel system. + * Fluids being spread and fluids being processed are organized into buckets. + * Each fresh (non-resumed) fire one bucket of each is selected to be processed. + * These selected buckets are then fully processed. + * The next fresh fire selects the next bucket in each set for processing. + * If this would walk off the end of a carousel list we wrap back to the first element. + * This effectively makes each set a circular list, hence a carousel. + */ +SUBSYSTEM_DEF(fluids) + name = "Fluid" + wait = 0 // Will be autoset to whatever makes the most sense given the spread and effect waits. + flags = SS_KEEP_TIMING + runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME + priority = FIRE_PRIORITY_FLUIDS + + // Fluid spread processing: + /// The amount of time (in deciseconds) before a fluid node is created and when it spreads. + var/spread_wait = 1 SECONDS + /// The number of buckets in the spread carousel. + var/num_spread_buckets + /// The set of buckets containing fluid nodes to spread. + var/list/spread_carousel + /// The index of the spread carousel bucket currently being processed. + var/spread_bucket_index + /// The set of fluid nodes we are currently processing spreading for. + var/list/currently_spreading + + // Fluid effect processing: + /// The amount of time (in deciseconds) between effect processing ticks for each fluid node. + var/effect_wait = 1 SECONDS + /// The number of buckets in the effect carousel. + var/num_effect_buckets + /// The set of buckets containing fluid nodes to process effects for. + var/list/effect_carousel + /// The index of the currently processing bucket on the effect carousel. + var/effect_bucket_index + /// The set of fluid nodes we are currently processing effects for. + var/list/currently_processing + +/datum/controller/subsystem/fluids/Initialize() + initialize_waits() + initialize_spread_carousel() + initialize_effect_carousel() + return SS_INIT_SUCCESS + +/** + * Initializes the subsystem waits. + * + * Ensures that the subsystem's fire wait evenly splits the spread and effect waits. + */ +/datum/controller/subsystem/fluids/proc/initialize_waits() + if (spread_wait <= 0) + WARNING("[src] has the invalid spread wait [spread_wait].") + spread_wait = 1 SECONDS + if (effect_wait <= 0) + WARNING("[src] has the invalid effect wait [effect_wait].") + spread_wait = 1 SECONDS + + // Sets the overall wait of the subsystem to evenly divide both the effect and spread waits. + var/max_wait = Gcd(spread_wait, effect_wait) + if (max_wait < wait || wait <= 0) + wait = max_wait + else + // If the wait of the subsystem overall is set to a valid value make the actual wait of the subsystem evenly divide that as well. + // Makes effect bubbling possible with identical spread and effect waits. + wait = Gcd(wait, max_wait) + + +/** + * Initializes the carousel used to process fluid spreading. + * + * Synchronizes the spread delta time with the actual target spread tick rate. + * Builds the carousel buckets used to queue spreads. + */ +/datum/controller/subsystem/fluids/proc/initialize_spread_carousel() + // Make absolutely certain that the spread wait is in sync with the target spread tick rate. + num_spread_buckets = round(spread_wait / wait) + spread_wait = wait * num_spread_buckets + + spread_carousel = list() + spread_carousel.len = num_spread_buckets + for(var/i in 1 to num_spread_buckets) + spread_carousel[i] = list() + currently_spreading = list() + spread_bucket_index = 1 + +/** + * Initializes the carousel used to process fluid effects. + * + * Synchronizes the spread delta time with the actual target spread tick rate. + * Builds the carousel buckets used to bubble processing. + */ +/datum/controller/subsystem/fluids/proc/initialize_effect_carousel() + // Make absolutely certain that the effect wait is in sync with the target effect tick rate. + num_effect_buckets = round(effect_wait / wait) + effect_wait = wait * num_effect_buckets + + effect_carousel = list() + effect_carousel.len = num_effect_buckets + for(var/i in 1 to num_effect_buckets) + effect_carousel[i] = list() + currently_processing = list() + effect_bucket_index = 1 + + +/datum/controller/subsystem/fluids/fire(resumed) + var/seconds_per_tick + var/cached_bucket_index + var/list/obj/effect/particle_effect/fluid/currentrun + // Ok so like I get the lighting style splittick but why are we doing this churn thing + // It seems like a bad idea for processing to get out of step with spreading + MC_SPLIT_TICK_INIT(2) + + MC_SPLIT_TICK // Start processing fluid spread (we take a lot of cpu for ourselves, spreading is more important after all) + if(!resumed) + spread_bucket_index = WRAP_UP(spread_bucket_index, num_spread_buckets) + currently_spreading = spread_carousel[spread_bucket_index] + spread_carousel[spread_bucket_index] = list() // Reset the bucket so we don't process an _entire station's worth of foam_ spreading every 2 ticks when the foam flood event happens. + + seconds_per_tick = spread_wait / (1 SECONDS) + currentrun = currently_spreading + while(currentrun.len) + var/obj/effect/particle_effect/fluid/to_spread = currentrun[currentrun.len] + currentrun.len-- + + if(!QDELETED(to_spread)) + to_spread.spread(seconds_per_tick) + to_spread.spread_bucket = null + + if (MC_TICK_CHECK) + break + + MC_SPLIT_TICK // Start processing fluid effects: + if(!resumed) + effect_bucket_index = WRAP_UP(effect_bucket_index, num_effect_buckets) + var/list/tmp_list = effect_carousel[effect_bucket_index] + currently_processing = tmp_list.Copy() + + seconds_per_tick = effect_wait / (1 SECONDS) + cached_bucket_index = effect_bucket_index + currentrun = currently_processing + while(currentrun.len) + var/obj/effect/particle_effect/fluid/to_process = currentrun[currentrun.len] + currentrun.len-- + + if (QDELETED(to_process) || to_process.process(seconds_per_tick) == PROCESS_KILL) + effect_carousel[cached_bucket_index] -= to_process + to_process.effect_bucket = null + to_process.datum_flags &= ~DF_ISPROCESSING + + if (MC_TICK_CHECK) + break + +/** + * Queues a fluid node to spread later after one full carousel rotation. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The node to queue to spread. + */ +/datum/controller/subsystem/fluids/proc/queue_spread(obj/effect/particle_effect/fluid/node) + if (node.spread_bucket) + return + + spread_carousel[spread_bucket_index] += node + node.spread_bucket = spread_bucket_index + +/** + * Cancels a queued spread of a fluid node. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The node to cancel the spread of. + */ +/datum/controller/subsystem/fluids/proc/cancel_spread(obj/effect/particle_effect/fluid/node) + if(!node.spread_bucket) + return + + var/bucket_index = node.spread_bucket + spread_carousel[bucket_index] -= node + if (bucket_index == spread_bucket_index) + currently_spreading -= node + + node.spread_bucket = null + +/** + * Starts processing the effects of a fluid node. + * + * The fluid node will next process after one full bucket rotation. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The node to start processing. + */ +/datum/controller/subsystem/fluids/proc/start_processing(obj/effect/particle_effect/fluid/node) + if (node.datum_flags & DF_ISPROCESSING || node.effect_bucket) + return + + // Edit this value to make all fluids process effects (at the same time|offset by when they started processing| -> offset by a random amount <- ) + var/bucket_index = rand(1, num_effect_buckets) + effect_carousel[bucket_index] += node + node.effect_bucket = bucket_index + node.datum_flags |= DF_ISPROCESSING + +/** + * Stops processing the effects of a fluid node. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The node to stop processing. + */ +/datum/controller/subsystem/fluids/proc/stop_processing(obj/effect/particle_effect/fluid/node) + if(!(node.datum_flags & DF_ISPROCESSING)) + return + + var/bucket_index = node.effect_bucket + if(!bucket_index) + return + + effect_carousel[bucket_index] -= node + if (bucket_index == effect_bucket_index) + currently_processing -= node + + node.effect_bucket = null + node.datum_flags &= ~DF_ISPROCESSING + +#undef SS_PROCESSES_SPREADING +#undef SS_PROCESSES_EFFECTS + + +// Subtypes: + +/// The subsystem responsible for processing smoke propagation and effects. +FLUID_SUBSYSTEM_DEF(smoke) + name = "Smoke" + spread_wait = 0.1 SECONDS + effect_wait = 2.0 SECONDS + +/// The subsystem responsible for processing foam propagation and effects. +FLUID_SUBSYSTEM_DEF(foam) + name = "Foam" + wait = 0.1 SECONDS // Makes effect bubbling work with foam. + spread_wait = 0.2 SECONDS + effect_wait = 0.2 SECONDS diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 6d1810c47ae..a9c7733a92d 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -206,10 +206,6 @@ else // Many other things have registered here looked_up += src -/// Registers multiple signals to the same proc. -/datum/proc/RegisterSignals(datum/target, list/signal_types, proctype, override = FALSE) - for (var/signal_type in signal_types) - RegisterSignal(target, signal_type, proctype, override) /** * Stop listening to a given signal from target diff --git a/code/datums/components/blob_minion.dm b/code/datums/components/blob_minion.dm new file mode 100644 index 00000000000..253160f8806 --- /dev/null +++ b/code/datums/components/blob_minion.dm @@ -0,0 +1,154 @@ +/** + * Common behaviour shared by things which are minions to a blob + */ +/datum/component/blob_minion + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Overmind who is our boss + var/mob/camera/blob/overmind + /// Callback to run if overmind strain changes + var/datum/callback/on_strain_changed + +/datum/component/blob_minion/Initialize(mob/camera/blob/overmind, datum/callback/on_strain_changed) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.on_strain_changed = on_strain_changed + register_overlord(overmind) + +/datum/component/blob_minion/InheritComponent(datum/component/new_comp, i_am_original, mob/camera/blob/overmind, datum/callback/on_strain_changed) + if (!isnull(on_strain_changed)) + src.on_strain_changed = on_strain_changed + register_overlord(overmind) + +/datum/component/blob_minion/proc/register_overlord(mob/camera/blob/overmind) + if (isnull(overmind)) + return + src.overmind = overmind + overmind.register_new_minion(parent) + RegisterSignal(overmind, COMSIG_QDELETING, PROC_REF(overmind_deleted)) + RegisterSignal(overmind, COMSIG_BLOB_SELECTED_STRAIN, PROC_REF(overmind_properties_changed)) + overmind_properties_changed(overmind, overmind.blobstrain) + +/// Our overmind is gone, uh oh! +/datum/component/blob_minion/proc/overmind_deleted() + SIGNAL_HANDLER + overmind = null + overmind_properties_changed() + +/// Our overmind has changed colour and properties +/datum/component/blob_minion/proc/overmind_properties_changed(mob/camera/blob/overmind, datum/blobstrain/new_strain) + SIGNAL_HANDLER + var/mob/living/living_parent = parent + living_parent.update_appearance(UPDATE_ICON) + on_strain_changed?.Invoke(overmind, new_strain) + +/datum/component/blob_minion/RegisterWithParent() + var/mob/living/living_parent = parent + living_parent.pass_flags |= PASSBLOB + living_parent.faction |= ROLE_BLOB + ADD_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) + remove_verb(parent, /mob/living/verb/pulled) // No dragging people into the blob + RegisterSignal(parent, COMSIG_MOB_MIND_INITIALIZED, PROC_REF(on_mind_init)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_update_appearance)) + RegisterSignal(parent, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(on_update_status_tab)) + RegisterSignal(parent, COMSIG_ATOM_BLOB_ACT, PROC_REF(on_blob_touched)) + RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, PROC_REF(on_burned)) + RegisterSignal(parent, COMSIG_ATOM_TRIED_PASS, PROC_REF(on_attempted_pass)) + RegisterSignal(parent, COMSIG_MOVABLE_SPACEMOVE, PROC_REF(on_space_move)) + RegisterSignal(parent, COMSIG_MOB_TRY_SPEECH, PROC_REF(on_try_speech)) + RegisterSignal(parent, COMSIG_MOB_CHANGED_TYPE, PROC_REF(on_transformed)) + living_parent.update_appearance(UPDATE_ICON) + GLOB.blob_telepathy_mobs |= parent + +/datum/component/blob_minion/UnregisterFromParent() + if (!isnull(overmind)) + overmind.blob_mobs -= parent + var/mob/living/living_parent = parent + living_parent.pass_flags &= ~PASSBLOB + living_parent.faction -= ROLE_BLOB + REMOVE_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) + add_verb(parent, /mob/living/verb/pulled) + UnregisterSignal(parent, list( + COMSIG_ATOM_BLOB_ACT, + COMSIG_ATOM_FIRE_ACT, + COMSIG_ATOM_TRIED_PASS, + COMSIG_ATOM_UPDATE_ICON, + COMSIG_MOB_TRY_SPEECH, + COMSIG_MOB_CHANGED_TYPE, + COMSIG_MOB_GET_STATUS_TAB_ITEMS, + COMSIG_MOB_MIND_INITIALIZED, + COMSIG_MOVABLE_SPACEMOVE, + )) + GLOB.blob_telepathy_mobs -= parent + +/// Become blobpilled when we gain a mind +/datum/component/blob_minion/proc/on_mind_init(mob/living/minion, datum/mind/new_mind) + SIGNAL_HANDLER + if (isnull(overmind)) + return + var/datum/antagonist/blob_minion/minion_motive = new(overmind) + new_mind.add_antag_datum(minion_motive) + +/// When our icon is updated, update our colour too +/datum/component/blob_minion/proc/on_update_appearance(mob/living/minion) + SIGNAL_HANDLER + if(isnull(overmind)) + minion.remove_atom_colour(FIXED_COLOUR_PRIORITY) + return + minion.add_atom_colour(overmind.blobstrain.color, FIXED_COLOUR_PRIORITY) + +/// When our icon is updated, update our colour too +/datum/component/blob_minion/proc/on_update_status_tab(mob/living/minion, list/status_items) + SIGNAL_HANDLER + if (isnull(overmind)) + return + status_items += "Blobs to Win: [length(GLOB.blobs)]/[SSticker?.mode.blob_win_count]" + +/// If we feel the gentle caress of a blob, we feel better +/datum/component/blob_minion/proc/on_blob_touched(mob/living/minion) + SIGNAL_HANDLER + if(minion.stat == DEAD || minion.health >= minion.maxHealth) + return COMPONENT_CANCEL_BLOB_ACT // Don't hurt us in order to heal us + for(var/i in 1 to 2) + var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(parent)) // hello yes you are being healed + heal_effect.color = isnull(overmind) ? COLOR_BLACK : overmind.blobstrain.complementary_color + minion.heal_overall_damage(minion.maxHealth * BLOBMOB_HEALING_MULTIPLIER) + return COMPONENT_CANCEL_BLOB_ACT + +/// If we feel the fearsome bite of open flame, we feel worse +/datum/component/blob_minion/proc/on_burned(mob/living/minion, exposed_temperature, exposed_volume) + SIGNAL_HANDLER + if(isnull(exposed_temperature)) + minion.adjustFireLoss(5) + return + minion.adjustFireLoss(clamp(0.01 * exposed_temperature, 1, 5)) + +/// Someone is attempting to move through us, allow it if it is a blob tile +/datum/component/blob_minion/proc/on_attempted_pass(mob/living/minion, atom/movable/incoming) + SIGNAL_HANDLER + if(istype(incoming, /obj/structure/blob)) + return COMSIG_COMPONENT_PERMIT_PASSAGE + +/// If we're near a blob, stop drifting +/datum/component/blob_minion/proc/on_space_move(mob/living/minion) + SIGNAL_HANDLER + var/obj/structure/blob/blob_handhold = locate() in range(1, parent) + if (!isnull(blob_handhold)) + return COMSIG_MOVABLE_STOP_SPACEMOVE + +/// We only speak telepathically to blobs +/datum/component/blob_minion/proc/on_try_speech(mob/living/minion, message, ignore_spam, forced) + SIGNAL_HANDLER + var/spanned_message = minion.say_quote(message) + var/rendered = span_blob("\[Blob Telepathy\] [minion.real_name] [spanned_message]") + relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, minion) + return COMPONENT_CANNOT_SPEAK + +/// Called when a blob minion is transformed into something else, hopefully a spore into a zombie +/datum/component/blob_minion/proc/on_transformed(mob/living/minion, mob/living/replacement) + SIGNAL_HANDLER + overmind?.assume_direct_control(replacement) + +/datum/component/blob_minion/PostTransfer() + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 64082941e07..89f699bc59c 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -173,6 +173,9 @@ return // We're already handling this if(below_turf) + if(HAS_TRAIT(dropped_thing, TRAIT_CHASM_DESTROYED)) + qdel(dropped_thing) + return // send to the turf below dropped_thing.visible_message(span_boldwarning("[dropped_thing] falls into [atom_parent]!"), span_userdanger("[fall_message]")) below_turf.visible_message(span_boldwarning("[dropped_thing] falls from above!")) @@ -214,6 +217,10 @@ if(QDELETED(dropped_thing)) return + if(HAS_TRAIT(dropped_thing, TRAIT_CHASM_DESTROYED)) + qdel(dropped_thing) + return + if(isrobot(dropped_thing)) var/mob/living/silicon/robot/robot = dropped_thing qdel(robot.mmi) diff --git a/code/datums/components/connect_containers.dm b/code/datums/components/connect_containers.dm new file mode 100644 index 00000000000..22efc634359 --- /dev/null +++ b/code/datums/components/connect_containers.dm @@ -0,0 +1,68 @@ +/// This component behaves similar to connect_loc_behalf, but it's nested and hooks a signal onto all MOVABLES containing this atom. +/datum/component/connect_containers + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + + /// An assoc list of signal -> procpath to register to the loc this object is on. + var/list/connections + /** + * The atom the component is tracking. The component will delete itself if the tracked is deleted. + * Signals will also be updated whenever it moves. + */ + var/atom/movable/tracked + +/datum/component/connect_containers/Initialize(atom/movable/tracked, list/connections) + . = ..() + if (!ismovable(tracked)) + return COMPONENT_INCOMPATIBLE + + src.connections = connections + set_tracked(tracked) + +/datum/component/connect_containers/Destroy() + set_tracked(null) + return ..() + +/datum/component/connect_containers/InheritComponent(datum/component/component, original, atom/movable/tracked, list/connections) + // Not equivalent. Checks if they are not the same list via shallow comparison. + if(!compare_list(src.connections, connections)) + stack_trace("connect_containers component attached to [parent] tried to inherit another connect_containers component with different connections") + return + if(src.tracked != tracked) + set_tracked(tracked) + +/datum/component/connect_containers/proc/set_tracked(atom/movable/new_tracked) + if(tracked) + UnregisterSignal(tracked, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) + unregister_signals(tracked.loc) + tracked = new_tracked + if(!tracked) + return + RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(tracked, COMSIG_QDELETING, PROC_REF(handle_tracked_qdel)) + update_signals(tracked) + +/datum/component/connect_containers/proc/handle_tracked_qdel() + SIGNAL_HANDLER + qdel(src) + +/datum/component/connect_containers/proc/update_signals(atom/movable/listener) + if(!ismovable(listener.loc)) + return + + for(var/atom/movable/container as anything in get_nested_locs(listener)) + RegisterSignal(container, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + for(var/signal in connections) + parent.RegisterSignal(container, signal, connections[signal]) + +/datum/component/connect_containers/proc/unregister_signals(atom/movable/location) + if(!ismovable(location)) + return + + for(var/atom/movable/target as anything in (get_nested_locs(location) + location)) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + parent.UnregisterSignal(target, connections) + +/datum/component/connect_containers/proc/on_moved(atom/movable/listener, atom/old_loc) + SIGNAL_HANDLER + unregister_signals(old_loc) + update_signals(listener) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm new file mode 100644 index 00000000000..1ec0aadcb39 --- /dev/null +++ b/code/datums/components/stationloving.dm @@ -0,0 +1,173 @@ +/// Teleports the movable atom back to a safe turf on the station if it leaves the z-level or becomes inaccessible. +/datum/component/stationloving + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// If TRUE, notifies admins when parent is teleported back to the station. + var/inform_admins = FALSE + var/disallow_soul_imbue = TRUE + /// If FALSE, prevents parent from being qdel'd unless it's a force = TRUE qdel. + var/allow_item_destruction = FALSE + +/datum/component/stationloving/Initialize(inform_admins = FALSE, allow_item_destruction = FALSE) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + src.inform_admins = inform_admins + src.allow_item_destruction = allow_item_destruction + + // Just in case something is being created outside of station/centcom + if(!atom_in_bounds(parent)) + relocate() + +/datum/component/stationloving/RegisterWithParent() + RegisterSignal(parent, COMSIG_PREQDELETED, PROC_REF(on_parent_pre_qdeleted)) + RegisterSignal(parent, COMSIG_ITEM_MARK_RETRIEVAL, PROC_REF(check_mark_retrieval)) + // Relocate when we become unreachable + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_parent_moved)) + // Relocate when our loc, or any of our loc's locs, becomes unreachable + var/static/list/loc_connections = list( + COMSIG_MOVABLE_MOVED = PROC_REF(on_parent_moved), + SIGNAL_ADDTRAIT(TRAIT_SECLUDED_LOCATION) = PROC_REF(on_loc_secluded), + ) + AddComponent(/datum/component/connect_containers, parent, loc_connections) + +/datum/component/stationloving/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_MOVABLE_Z_CHANGED, + COMSIG_PREQDELETED, + COMSIG_ITEM_IMBUE_SOUL, + COMSIG_ITEM_MARK_RETRIEVAL, + COMSIG_MOVABLE_MOVED, + )) + + qdel(GetComponent(/datum/component/connect_containers)) + +/datum/component/stationloving/InheritComponent(datum/component/stationloving/newc, original, inform_admins, allow_death) + if (original) + if (newc) + inform_admins = newc.inform_admins + allow_death = newc.allow_item_destruction + else + inform_admins = inform_admins + +/// Teleports parent to a safe turf on the station z-level. +/datum/component/stationloving/proc/relocate() + + var/target_turf = find_safe_turf() //Fallback. Mostly for debug maps. + + if(!target_turf) + if(GLOB.blobstart.len > 0) + target_turf = get_turf(pick(GLOB.blobstart)) + else + CRASH("Unable to find a blobstart landmark for [type] to relocate [parent].") + + var/atom/movable/movable_parent = parent + playsound(movable_parent, 'sound/machines/synth_no.ogg', 5, TRUE) + + var/mob/holder = get(movable_parent, /mob) + if(holder) + to_chat(holder, span_danger("You can't help but feel that you just lost something back there...")) + holder.temporarily_remove_item_from_inventory(parent, TRUE) // prevents ghost diskie + + movable_parent.forceMove(target_turf) + + return target_turf + +/// Signal proc for [COMSIG_MOVABLE_MOVED], called when our parent moves, or our parent's loc, or our parent's loc loc... +/// To check if our disk is moving somewhere it shouldn't be, such as off Z level, or into an invalid area +/datum/component/stationloving/proc/on_parent_moved(atom/movable/source, turf/old_turf) + SIGNAL_HANDLER + + if(atom_in_bounds(source)) + return + + var/turf/current_turf = get_turf(source) + var/turf/new_destination = relocate() + // Our turf actually didn't change, so it's more likely we became secluded + if(current_turf == old_turf) + log_game("[parent] moved out of bounds at [loc_name(current_turf)], becoming inaccessible / secluded. \ + Moving it to [loc_name(new_destination)].") + + if(inform_admins) + message_admins("[parent] moved out of bounds at [ADMIN_VERBOSEJMP(current_turf)], becoming inaccessible / secluded. \ + Moving it to [ADMIN_VERBOSEJMP(new_destination)].") + + // Our locs changes, we did in fact move somewhere + else + log_game("[parent] attempted to be moved out of bounds from [loc_name(old_turf)] \ + to [loc_name(current_turf)]. Moving it to [loc_name(new_destination)].") + + if(inform_admins) + message_admins("[parent] attempted to be moved out of bounds from [ADMIN_VERBOSEJMP(old_turf)] \ + to [ADMIN_VERBOSEJMP(current_turf)]. Moving it to [ADMIN_VERBOSEJMP(new_destination)].") + +/// Signal proc for [SIGNAL_ADDTRAIT], via [TRAIT_SECLUDED_LOCATION] on our locs, to ensure nothing funky happens +/datum/component/stationloving/proc/on_loc_secluded(atom/movable/source) + SIGNAL_HANDLER + + var/turf/new_destination = relocate() + log_game("[parent] moved out of bounds at [loc_name(source)], becoming inaccessible / secluded. \ + Moving it to [loc_name(new_destination)].") + + if(inform_admins) + message_admins("[parent] moved out of bounds at [ADMIN_VERBOSEJMP(source)], becoming inaccessible / secluded. \ + Moving it to [ADMIN_VERBOSEJMP(new_destination)].") + +/datum/component/stationloving/proc/check_mark_retrieval(datum/source) + SIGNAL_HANDLER + + return COMPONENT_BLOCK_MARK_RETRIEVAL + +/// Checks whether a given atom's turf is within bounds. Returns TRUE if it is, FALSE if it isn't. +/datum/component/stationloving/proc/atom_in_bounds(atom/atom_to_check) + // Typecache of shuttles that we allow the disk to stay on + var/static/list/allowed_shuttles = typecacheof(list( + /area/shuttle/syndicate, + /area/shuttle/escape, + /area/shuttle/pod_1, + /area/shuttle/pod_2, + /area/shuttle/pod_3, + /area/shuttle/pod_4, + )) + // Typecache of areas on the centcom Z-level that we allow the disk to stay on + var/static/list/disallowed_centcom_areas = typecacheof(list( + /area/abductor_ship + )) + + // Our loc is a secluded location = not in bounds + if (atom_to_check.loc && HAS_TRAIT(atom_to_check.loc, TRAIT_SECLUDED_LOCATION)) + return FALSE + // No turf below us = nullspace = not in bounds + var/turf/destination_turf = get_turf(atom_to_check) + if (!destination_turf) + return FALSE + if (is_station_level(destination_turf.z)) + return TRUE + if(atom_to_check.onSyndieBase()) + return TRUE + + var/area/destination_area = destination_turf.loc + if (is_admin_level(destination_turf.z)) + if (is_type_in_typecache(destination_area, disallowed_centcom_areas)) + return FALSE + return TRUE + return FALSE + +/// Signal handler for before the parent is qdel'd. Can prevent the parent from being deleted where allow_item_destruction is FALSE and force is FALSE. +/datum/component/stationloving/proc/on_parent_pre_qdeleted(datum/source, force) + SIGNAL_HANDLER + + var/turf/current_turf = get_turf(parent) + + if(force && inform_admins) + message_admins("[parent] has been !!force deleted!! in [ADMIN_VERBOSEJMP(current_turf)].") + log_game("[parent] has been !!force deleted!! in [loc_name(current_turf)].") + + if(force || allow_item_destruction) + return FALSE + + var/turf/new_turf = relocate() + log_game("[parent] has been destroyed in [loc_name(current_turf)]. \ + Preventing destruction and moving it to [loc_name(new_turf)].") + if(inform_admins) + message_admins("[parent] has been destroyed in [ADMIN_VERBOSEJMP(current_turf)]. \ + Preventing destruction and moving it to [ADMIN_VERBOSEJMP(new_turf)].") + return TRUE diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 374e9206374..d2806fdcb83 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -90,7 +90,7 @@ ///This datum, if set, allows terrain generation behavior to be ran on Initialize() // This is unfinished, used in Lavaland var/datum/map_generator/cave_generator/map_generator - var/area_flags = 0 + var/area_flags = BLOBS_ALLOWED /area/New(loc, ...) if(!there_can_be_many) // Has to be done in New else the maploader will fuck up and find subtypes for the parent diff --git a/code/game/area/areas/depot-areas.dm b/code/game/area/areas/depot-areas.dm index 5d22363b9cb..40ee49953ac 100644 --- a/code/game/area/areas/depot-areas.dm +++ b/code/game/area/areas/depot-areas.dm @@ -3,6 +3,7 @@ name = "Suspicious Supply Depot" icon_state = "dark" tele_proof = 1 + area_flags = NONE /area/syndicate_depot/core icon_state = "red" diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index c62e8d3d749..fdaba5b2504 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -130,7 +130,7 @@ icon_state = "mining" has_gravity = STANDARD_GRAVITY sound_environment = SOUND_AREA_LAVALAND - area_flags = FLORA_ALLOWED + area_flags = FLORA_ALLOWED | BLOBS_ALLOWED /area/lavaland/surface name = "Lavaland" @@ -144,7 +144,7 @@ ambientsounds = MINING_SOUNDS min_ambience_cooldown = 70 SECONDS max_ambience_cooldown = 220 SECONDS - area_flags = NONE + area_flags = BLOBS_ALLOWED /area/lavaland/underground name = "Lavaland Caves" @@ -162,22 +162,22 @@ /area/lavaland/surface/outdoors name = "Lavaland Wastes" outdoors = TRUE - area_flags = FLORA_ALLOWED + area_flags = FLORA_ALLOWED | BLOBS_ALLOWED /area/lavaland/surface/outdoors/unexplored // ruins spawn here icon_state = "unexplored" /area/lavaland/surface/outdoors/unexplored/danger //megafauna will also spawn here icon_state = "cave" - area_flags = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED + area_flags = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED | BLOBS_ALLOWED map_generator = /datum/map_generator/cave_generator/lavaland /area/lavaland/surface/outdoors/explored name = "Lavaland Labor Camp" - area_flags = NONE + area_flags = BLOBS_ALLOWED /area/lavaland/surface/outdoors/necropolis name = "Necropolis" icon_state = "unexplored" tele_proof = TRUE - area_flags = NONE + area_flags = BLOBS_ALLOWED diff --git a/code/game/area/ss13_areas.dm b/code/game/area/ss13_areas.dm index bd59b00b0e7..e1439d14a5d 100644 --- a/code/game/area/ss13_areas.dm +++ b/code/game/area/ss13_areas.dm @@ -31,6 +31,7 @@ This applies to all STANDARD station areas base_lighting_alpha = 255 hide_attacklogs = TRUE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/adminconstruction @@ -42,6 +43,7 @@ This applies to all STANDARD station areas base_lighting_alpha = 255 hide_attacklogs = TRUE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/space icon_state = "space" @@ -103,6 +105,7 @@ This applies to all STANDARD station areas /area/shuttle/auxillary_base icon_state = "shuttle" + area_flags = NONE /area/shuttle/escape name = "Emergency Shuttle" @@ -198,11 +201,13 @@ This applies to all STANDARD station areas icon_state = "shuttle" name = "Alien Shuttle Base" requires_power = 1 + area_flags = NONE /area/shuttle/alien/mine icon_state = "shuttle" name = "Alien Shuttle Mine" requires_power = 1 + area_flags = NONE /area/shuttle/gamma icon_state = "shuttle" @@ -225,6 +230,7 @@ This applies to all STANDARD station areas name = "Special Ops Shuttle" icon_state = "shuttlered" parallax_movedir = EAST + area_flags = NONE /area/shuttle/specops/centcom name = "Special Ops Shuttle" @@ -239,6 +245,7 @@ This applies to all STANDARD station areas icon_state = "shuttlered" nad_allowed = TRUE parallax_movedir = SOUTH + area_flags = NONE /area/shuttle/syndicate_elite/mothership name = "Syndicate Elite Shuttle" @@ -253,6 +260,7 @@ This applies to all STANDARD station areas icon_state = "shuttlered" nad_allowed = TRUE parallax_movedir = SOUTH + area_flags = NONE /area/shuttle/assault_pod name = "Steel Rain" @@ -266,6 +274,7 @@ This applies to all STANDARD station areas name = "Nanotrasen Vessel" icon_state = "shuttlered" parallax_movedir = WEST + area_flags = NONE /area/shuttle/administration/centcom name = "Nanotrasen Vessel Centcom" @@ -277,6 +286,7 @@ This applies to all STANDARD station areas /area/shuttle/thunderdome name = "honk" + area_flags = NONE /area/shuttle/thunderdome/grnshuttle name = "Thunderdome GRN Shuttle" @@ -316,6 +326,7 @@ This applies to all STANDARD station areas /area/shuttle/vox name = "Vox Skipjack" icon_state = "shuttle" + area_flags = NONE /area/shuttle/vox/station name = "Vox Skipjack" @@ -324,6 +335,7 @@ This applies to all STANDARD station areas /area/shuttle/salvage name = "Salvage Ship" icon_state = "yellow" + area_flags = NONE /area/shuttle/salvage/start name = "Middle of Nowhere" @@ -381,27 +393,33 @@ This applies to all STANDARD station areas /area/shuttle/supply name = "Supply Shuttle" icon_state = "shuttle3" + area_flags = NONE /area/shuttle/ussp name = "USSP Shuttle" icon_state = "shuttle3" + area_flags = NONE /area/shuttle/spacebar name = "Space Bar Shuttle" icon_state = "shuttle3" + area_flags = NONE /area/shuttle/abandoned name = "Abandoned Ship" icon_state = "shuttle" + area_flags = NONE /area/shuttle/syndicate name = "Syndicate Nuclear Team Shuttle" icon_state = "shuttle" nad_allowed = TRUE + area_flags = NONE /area/shuttle/trade name = "Trade Shuttle" icon_state = "shuttle" + area_flags = NONE /area/shuttle/trade/sol name = "Sol Freighter" @@ -415,6 +433,7 @@ This applies to all STANDARD station areas /area/shuttle/pirate_corvette name = "Pirate Corvette" icon_state = "shuttle" + area_flags = NONE /area/airtunnel1/ // referenced in airtunnel.dm:759 @@ -441,6 +460,7 @@ This applies to all STANDARD station areas base_lighting_alpha = 255 nad_allowed = TRUE has_gravity = STANDARD_GRAVITY + area_flags = NONE // New CC /area/centcom/bridge @@ -513,6 +533,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE nad_allowed = TRUE ambientsounds = HIGHSEC_SOUNDS + area_flags = NONE /area/syndicate_mothership/outside name = "Syndicate Controlled Territory" @@ -552,6 +573,7 @@ This applies to all STANDARD station areas base_lighting_alpha = 255 base_lighting_color = COLOR_WHITE ambientsounds = HIGHSEC_SOUNDS + area_flags = NONE // Chrono @@ -564,6 +586,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE base_lighting_alpha = 255 nad_allowed = TRUE + area_flags = NONE //EXTRA @@ -576,6 +599,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE base_lighting_alpha = 255 nad_allowed = TRUE + area_flags = NONE /area/asteroid // -- TLE name = "Asteroid" @@ -605,6 +629,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE base_lighting_alpha = 255 hide_attacklogs = TRUE + area_flags = NONE /area/tdome/arena_source @@ -644,6 +669,7 @@ This applies to all STANDARD station areas icon_state = "green" there_can_be_many = TRUE has_gravity = STANDARD_GRAVITY + area_flags = NONE //Abductors /area/abductor_ship @@ -651,6 +677,7 @@ This applies to all STANDARD station areas icon_state = "yellow" requires_power = FALSE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/wizard_station name = "Wizard's Den" @@ -672,6 +699,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR nad_allowed = TRUE + area_flags = NONE /area/ninja/outpost name = "SpiderClan Dojo" @@ -699,6 +727,7 @@ This applies to all STANDARD station areas base_lighting_color = COLOR_WHITE base_lighting_alpha = 255 no_teleportlocs = TRUE + area_flags = NONE /area/trader_station name = "Trade Base" @@ -708,6 +737,7 @@ This applies to all STANDARD station areas static_lighting = FALSE base_lighting_alpha = 255 base_lighting_color = COLOR_WHITE + area_flags = NONE /area/trader_station/sol name = "Jupiter Station 6" @@ -720,6 +750,7 @@ This applies to all STANDARD station areas static_lighting = FALSE base_lighting_alpha = 255 base_lighting_color = COLOR_WHITE + area_flags = NONE /area/ussp_centcom/secretariat name = "Soviet secretariat" @@ -2654,6 +2685,7 @@ This applies to all STANDARD station areas icon_state = "syndie_hall" report_alerts = FALSE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/traitor/rnd name = "Syndicate Research and Development" @@ -2827,7 +2859,7 @@ This applies to all STANDARD station areas has_gravity = STANDARD_GRAVITY ambientsounds = AWAY_MISSION_SOUNDS sound_environment = SOUND_ENVIRONMENT_ROOM - + area_flags = NONE /area/awaymission/example name = "Strange Station" icon_state = "away" @@ -2855,6 +2887,7 @@ This applies to all STANDARD station areas name = "moonoutpost" has_gravity = STANDARD_GRAVITY report_alerts = FALSE + area_flags = NONE /area/moonoutpost19/mo19arrivals name = "MO19 Arrivals" @@ -2874,6 +2907,7 @@ This applies to all STANDARD station areas power_light = FALSE poweralm = FALSE outdoors = TRUE + area_flags = NONE /area/moonoutpost19/syndicateoutpost name = "Syndicate Outpost" @@ -2939,6 +2973,7 @@ This applies to all STANDARD station areas name = "space" report_alerts = FALSE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/awaycontent/a1 icon_state = "awaycontent1" @@ -3058,6 +3093,7 @@ GLOBAL_LIST_INIT(centcom_areas, list( static_lighting = TRUE report_alerts = FALSE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/special_event/alpha name = "Special event area Alpha" diff --git a/code/game/area/vision_reset_areas.dm b/code/game/area/vision_reset_areas.dm index cd8b5cbf552..c3ac0a13211 100644 --- a/code/game/area/vision_reset_areas.dm +++ b/code/game/area/vision_reset_areas.dm @@ -5,6 +5,7 @@ */ /area/vision_change_area + area_flags = NONE /area/vision_change_area/Entered(atom/movable/arrived, area/old_area) . = ..() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 755a19232bb..8194190d2b5 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -13,6 +13,7 @@ var/level = 2 var/flags = NONE var/flags_2 = NONE + var/flags_ricochet = NONE var/list/fingerprints var/list/fingerprints_time var/list/fingerprintshidden @@ -1192,8 +1193,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/ratvar_act() return -/atom/proc/handle_ricochet(obj/item/projectile/P) - return //This proc is called on the location of an atom when the atom is Destroy()'d /atom/proc/handle_atom_del(atom/A) @@ -1543,6 +1542,18 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/get_visible_gender() // Used only in /mob/living/carbon/human and /mob/living/simple_animal/hostile/morph return gender +/atom/proc/handle_ricochet(obj/item/projectile/ricocheting_projectile) + var/turf/p_turf = get_turf(ricocheting_projectile) + var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile) + var/face_angle = dir2angle(face_direction) + var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)) + var/a_incidence_s = abs(incidence_s) + if(a_incidence_s > 90 && a_incidence_s < 270) + return FALSE + var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) + ricocheting_projectile.set_angle(new_angle_s) + visible_message(span_warning("[ricocheting_projectile] reflects off [src]!")) + return TRUE /// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. /atom/proc/CanPass(atom/movable/mover, border_dir) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/blobs/_blob.dm similarity index 90% rename from code/game/gamemodes/blob/theblob.dm rename to code/game/gamemodes/blob/blobs/_blob.dm index 349298f8b1f..175c607b0e7 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/blobs/_blob.dm @@ -3,24 +3,37 @@ name = "blob" icon = 'icons/mob/blob.dmi' light_range = 3 - desc = "Some blob creature thingy" + desc = "A thick wall of writhing tendrils." density = FALSE opacity = TRUE anchored = TRUE pass_flags_self = PASSBLOB + layer = BELOW_MOB_LAYER can_astar_pass = CANASTARPASS_ALWAYS_PROC - max_integrity = 30 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. - var/health_timestamp = 0 - var/brute_resist = 0.5 //multiplies brute damage by this - var/fire_resist = 1 //multiplies burn damage by this - var/atmosblock = FALSE //if the blob blocks atmos and heat spread + creates_cover = TRUE + obj_flags = BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP // stops blob mobs from falling on multiz. + max_integrity = BLOB_REGULAR_MAX_HP + /// Multiplies brute damage by this + var/brute_resist = BLOB_BRUTE_RESIST + /// Multiplies burn damage by this + var/fire_resist = BLOB_FIRE_RESIST + /// how much health this blob regens when pulsed + var/health_regen = BLOB_REGULAR_HP_REGEN + /// How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. + var/point_return = 0 /// If a threshold is reached, resulting in shifting variables var/compromised_integrity = FALSE + /// Blob overmind var/mob/camera/blob/overmind - creates_cover = TRUE - obj_flags = BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP // stops blob mobs from falling on multiz. + /// We got pulsed when? + COOLDOWN_DECLARE(pulse_timestamp) + /// we got healed when? + COOLDOWN_DECLARE(heal_timestamp) + /// Only used by the synchronous mesh strain. If set to true, these blobs won't share or receive damage taken with others. + var/ignore_syncmesh_share = FALSE + /// If the blob blocks atmos and heat spread + var/atmosblock = FALSE /obj/structure/blob/Initialize(mapload) diff --git a/code/game/gamemodes/blob/blobs/captured_nuke.dm b/code/game/gamemodes/blob/blobs/captured_nuke.dm deleted file mode 100644 index 7256332d366..00000000000 --- a/code/game/gamemodes/blob/blobs/captured_nuke.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/structure/blob/captured_nuke //alternative to blob just straight up destroying nukes - name = "blob captured nuke" - icon_state = "blob" - desc = "A Nuclear Warhead tangled in blob tendrils pulsating with a horrific green glow." - max_integrity = 100 - point_return = 0 - -/obj/structure/blob/captured_nuke/Initialize(mapload, obj/machinery/nuclearbomb/N) - . = ..() - START_PROCESSING(SSobj, src) - N?.forceMove(src) - update_icon(UPDATE_OVERLAYS) - - -/obj/structure/blob/captured_nuke/update_overlays() - . = ..() - . += mutable_appearance('icons/mob/blob.dmi', "blob_nuke_overlay", appearance_flags = RESET_COLOR) - - -/obj/structure/blob/captured_nuke/Destroy() - for(var/obj/machinery/nuclearbomb/O in contents) - O.forceMove(loc) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/blob/captured_nuke/Life(seconds, times_fired) - obj_integrity = min(max_integrity, obj_integrity + 1) diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm deleted file mode 100644 index 6b94aa23d1a..00000000000 --- a/code/game/gamemodes/blob/blobs/core.dm +++ /dev/null @@ -1,154 +0,0 @@ -/obj/structure/blob/core - name = "blob core" - icon = 'icons/mob/blob.dmi' - icon_state = "blank_blob" - max_integrity = 400 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) - fire_resist = 2 - point_return = -1 - var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes - var/resource_delay = 0 - var/point_rate = 2 - var/is_offspring = null - var/selecting = 0 - -/obj/structure/blob/core/New(loc, var/h = 200, var/client/new_overmind = null, var/new_rate = 2, offspring) - GLOB.blob_cores += src - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - adjustcolors(color) //so it atleast appears - if(!overmind) - create_overmind(new_overmind) - if(offspring) - is_offspring = TRUE - point_rate = new_rate - ..(loc, h) - - -/obj/structure/blob/core/adjustcolors(a_color) - cut_overlays() - color = null - var/image/I = new('icons/mob/blob.dmi', "blob") - I.color = a_color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay") - add_overlay(C) - - if(blocks_emissive) - add_overlay(get_emissive_block()) - - -/obj/structure/blob/core/Destroy() - GLOB.blob_cores -= src - if(overmind) - overmind.blob_core = null - overmind = null - SSticker?.mode?.blob_died() - STOP_PROCESSING(SSobj, src) - GLOB.poi_list.Remove(src) - return ..() - -/obj/structure/blob/core/ex_act(severity) - var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity - take_damage(damage, BRUTE, "bomb", 0) - -/obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1) - . = ..() - if(obj_integrity > 0) - if(overmind) //we should have an overmind, but... - overmind.update_health_hud() - -/obj/structure/blob/core/RegenHealth() - return // Don't regen, we handle it in Life() - -/obj/structure/blob/core/Life(seconds, times_fired) - if(!overmind) - create_overmind() - else - if(resource_delay <= world.time) - resource_delay = world.time + 10 // 1 second - overmind.add_points(point_rate) - obj_integrity = min(max_integrity, obj_integrity + 1) - if(overmind) - overmind.update_health_hud() - if(overmind?.blob_reagent_datum?.color) - for(var/i = 1; i < 8; i += i) - Pulse(0, i, overmind.blob_reagent_datum.color) - else - for(var/i = 1; i < 8; i += i) - Pulse(0, i, color) - for(var/b_dir in GLOB.alldirs) - if(!prob(5)) - continue - var/obj/structure/blob/normal/B = locate() in get_step(src, b_dir) - if(B) - B.change_to(/obj/structure/blob/shield/core) - if(B && overmind?.blob_reagent_datum?.color) - B.color = overmind.blob_reagent_datum.color - else - B.color = color - color = null - ..() - - -/obj/structure/blob/core/proc/create_overmind(client/new_overmind, override_delay) - if(overmind_get_delay > world.time && !override_delay) - return - - overmind_get_delay = world.time + 5 MINUTES - - if(overmind) - qdel(overmind) - - INVOKE_ASYNC(src, PROC_REF(get_new_overmind), new_overmind) - -/obj/structure/blob/core/proc/get_new_overmind(client/new_overmind) - var/mob/C = null - var/list/candidates = list() - if(!new_overmind) - // sendit - if(is_offspring) - candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob offspring?", ROLE_BLOB, TRUE, source = src) - else - candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob?", ROLE_BLOB, TRUE, source = src) - - if(length(candidates)) - C = pick(candidates) - else - C = new_overmind - - if(C && !QDELETED(src)) - var/mob/camera/blob/B = new(loc) - B.key = C.key - B.blob_core = src - overmind = B - B.is_offspring = is_offspring - addtimer(CALLBACK(src, PROC_REF(add_datum_if_not_exist)), TIME_TO_ADD_OM_DATUM) - log_game("[B.key] has become Blob [is_offspring ? "offspring" : ""]") - -/obj/structure/blob/core/proc/lateblobtimer() - addtimer(CALLBACK(src, PROC_REF(lateblobcheck)), 50) - -/obj/structure/blob/core/proc/lateblobcheck() - if(overmind) - overmind.add_points(60) - if(!overmind.mind) - log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks a overmind.mind.") - else - log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks an overmind.") - -/obj/structure/blob/core/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer) - overmind?.forceMove(get_turf(src)) - return ..() - -/obj/structure/blob/core/proc/add_datum_if_not_exist() - overmind.select_reagent() - if(!overmind.mind.has_antag_datum(/datum/antagonist/blob_overmind)) - var/datum/antagonist/blob_overmind/overmind_datum = new - overmind_datum.add_to_mode = TRUE - overmind_datum.is_offspring = is_offspring - if(overmind.blob_reagent_datum) - overmind_datum.reagent = overmind.blob_reagent_datum - overmind.mind.add_antag_datum(overmind_datum) - color = overmind.blob_reagent_datum?.color - diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm deleted file mode 100644 index 517d6ece7fd..00000000000 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/blob/factory - name = "factory blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_factory" - max_integrity = 200 - point_return = 18 - var/list/spores = list() - var/max_spores = 3 - var/spore_delay = 0 - var/is_waiting_spawn = FALSE - -/obj/structure/blob/factory/Destroy() - for(var/mob/living/simple_animal/hostile/blob/blobspore/spore in spores) - if(spore.factory == src) - spore.factory = null - spores = null - return ..() - -/obj/structure/blob/factory/run_action() - if(spores.len >= max_spores) - return - if(spore_delay > world.time) - return - flick("blob_factory_glow", src) - spore_delay = world.time + 100 // 10 seconds - var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) - if(overmind) - BS.color = overmind?.blob_reagent_datum?.complementary_color - BS.overmind = overmind - overmind.blob_mobs.Add(BS) diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm deleted file mode 100644 index ca570996aec..00000000000 --- a/code/game/gamemodes/blob/blobs/node.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/structure/blob/node - name = "blob node" - icon = 'icons/mob/blob.dmi' - icon_state = "blank_blob" - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) - point_return = 18 - -/obj/structure/blob/node/New(loc, h = 100) - GLOB.blob_nodes += src - START_PROCESSING(SSobj, src) - ..(loc, h) - -/obj/structure/blob/node/adjustcolors(a_color) - cut_overlays() - color = null - var/image/I = new('icons/mob/blob.dmi', "blob") - I.color = a_color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") - add_overlay(C) - - if(blocks_emissive) - add_overlay(get_emissive_block()) - -/obj/structure/blob/node/Destroy() - GLOB.blob_nodes -= src - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/blob/node/Life(seconds, times_fired) - if(overmind) - for(var/i = 1; i < 8; i += i) - Pulse(5, i, overmind.blob_reagent_datum?.color) - else - for(var/i = 1; i < 8; i += i) - Pulse(5, i, color) - obj_integrity = min(max_integrity, obj_integrity + 1) - color = null diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm deleted file mode 100644 index 4ef14ed4963..00000000000 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/structure/blob/resource - name = "resource blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_resource" - max_integrity = 60 - point_return = 12 - var/resource_delay = 0 - -/obj/structure/blob/resource/run_action() - if(resource_delay > world.time) - return - flick("blob_resource_glow", src) - resource_delay = world.time + 40 // 4 seconds - if(overmind) - overmind.add_points(1) diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm deleted file mode 100644 index f95fc50b910..00000000000 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ /dev/null @@ -1,80 +0,0 @@ -/obj/structure/blob/shield - name = "strong blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_shield" - desc = "Some blob creature thingy" - max_integrity = 150 - brute_resist = 0.25 - explosion_block = 3 - explosion_vertical_block = 2 - atmosblock = TRUE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - -/obj/structure/blob/shield/core - point_return = 0 - - -/obj/structure/blob/shield/check_integrity() - var/old_compromised_integrity = compromised_integrity - if(obj_integrity < max_integrity * 0.5) - compromised_integrity = TRUE - else - compromised_integrity = FALSE - if(old_compromised_integrity != compromised_integrity) - update_state() - update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) - - -/obj/structure/blob/shield/update_state() - if(compromised_integrity) - atmosblock = FALSE - else - atmosblock = TRUE - air_update_turf(1) - - -/obj/structure/blob/shield/update_name(updates = ALL) - . = ..() - if(compromised_integrity) - name = "weakened [initial(name)]" - else - name = initial(name) - - -/obj/structure/blob/shield/update_desc(updates = ALL) - . = ..() - if(compromised_integrity) - desc = "A wall of twitching tendrils." - else - desc = initial(desc) - - -/obj/structure/blob/shield/update_icon_state() - if(compromised_integrity) - icon_state = "[initial(icon_state)]_damaged" - else - icon_state = initial(icon_state) - - -/obj/structure/blob/shield/reflective - name = "reflective blob" - desc = "A solid wall of slightly twitching tendrils with a reflective glow." - icon_state = "blob_glow" - max_integrity = 100 - brute_resist = 0.5 - explosion_block = 2 - explosion_vertical_block = 1 - point_return = 9 - flags = CHECK_RICOCHET - -/obj/structure/blob/shield/reflective/handle_ricochet(obj/item/projectile/P) - var/turf/p_turf = get_turf(P) - var/face_direction = get_dir(src, p_turf) - var/face_angle = dir2angle(face_direction) - var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180)) - if(abs(incidence_s) > 90 && abs(incidence_s) < 270) - return FALSE - var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) - P.set_angle(new_angle_s) - visible_message("[P] reflects off [src]!") - return TRUE diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index b55f4f98e5e..900b94fd7d1 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -513,9 +513,9 @@ GLOBAL_VAR(bomb_set) return if(locate(/obj/structure/blob) in T) return - var/obj/structure/blob/captured_nuke/N = new(T, src) + var/obj/structure/blob/special/captured_nuke/N = new(T, src) N.overmind = B.overmind - N.adjustcolors(B.color) + N.update_blob() /obj/machinery/nuclearbomb/tesla_act(power, explosive) ..() diff --git a/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm b/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm new file mode 100644 index 00000000000..b00198ddcc1 --- /dev/null +++ b/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm @@ -0,0 +1,156 @@ +///////////////////////////////////////////// +//// SMOKE SYSTEMS +///////////////////////////////////////////// + +/** + * A group of fluid objects. + */ +/datum/fluid_group + /// The set of fluid objects currently in this group. + var/list/nodes + /// The number of fluid object that this group wants to have contained. + var/target_size + /// The total number of fluid objects that have ever been in this group. + var/total_size = 0 + +/datum/fluid_group/New(target_size = 0) + . = ..() + src.nodes = list() + src.target_size = target_size + +/datum/fluid_group/Destroy(force) + QDEL_LAZYLIST(nodes) + return ..() + +/** + * Adds a fluid node to this fluid group. + * + * Is a noop if the node is already in the group. + * Removes the node from any other fluid groups it is in. + * Syncs the group of the node with the group it is being added to (this one). + * Increments the total size of the fluid group. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The fluid node that is going to be added to this group. + * + * Returns: + * - [TRUE]: If the node to be added is in this group by the end of the proc. + * - [FALSE]: Otherwise. + */ +/datum/fluid_group/proc/add_node(obj/effect/particle_effect/fluid/node) + if(!istype(node)) + CRASH("Attempted to add non-fluid node [isnull(node) ? "NULL" : node] to a fluid group.") + if(QDELING(node)) + CRASH("Attempted to add qdeling node to a fluid group") + + if(node.group) + if(node.group == src) + return TRUE + if(!node.group.remove_node(node)) + return FALSE + + nodes += node + node.group = src + total_size++ + return TRUE + + +/** + * Removes a fluid node from this fluid group. + * + * Is a noop if the node is not in this group. + * Nulls the nodes fluid group ref to sync it with its new state. + * DOES NOT decrement the total size of the fluid group. + * + * Arguments: + * - [node][/obj/effect/particle_effect/fluid]: The fluid node that is going to be removed from this group. + * + * Returns: + * - [TRUE]: If the node to be removed is not in the group by the end of the proc. + */ +/datum/fluid_group/proc/remove_node(obj/effect/particle_effect/fluid/node) + if(node.group != src) + return TRUE + + nodes -= node + node.group = null + return TRUE // Note: does not decrement total size since we don't want the group to expand again when it begins to dissipate or it will never stop. + + +/** + * A particle effect that belongs to a fluid group. + */ +/obj/effect/particle_effect/fluid + name = "fluid" + /// The fluid group that this particle effect belongs to. + var/datum/fluid_group/group + /// What SSfluid bucket this particle effect is currently in. + var/tmp/effect_bucket + /// The index of the fluid spread bucket this is being spread in. + var/tmp/spread_bucket + +/obj/effect/particle_effect/fluid/Initialize(mapload, datum/fluid_group/group, obj/effect/particle_effect/fluid/source) + . = ..() + if(!group) + group = source?.group || new + group.add_node(src) + source?.transfer_fingerprints_to(src) + +/obj/effect/particle_effect/fluid/Destroy() + group.remove_node(src) + return ..() + +/** + * Attempts to spread this fluid node to wherever it can spread. + * + * Exact results vary by subtype implementation. + */ +/obj/effect/particle_effect/fluid/proc/spread() + CRASH("The base fluid spread proc is not implemented and should not be called. You called it.") + + +/** + * A factory which produces fluid groups. + */ +/datum/effect_system/fluid_spread + effect_type = /obj/effect/particle_effect/fluid + /// The amount of smoke to produce. + var/amount = 10 + +/datum/effect_system/fluid_spread/set_up(range = 1, amount = DIAMOND_AREA(range), atom/holder, atom/location, ...) + src.holder = holder + src.location = location + src.amount = amount + +/datum/effect_system/fluid_spread/start(log = FALSE) + var/location = src.location || get_turf(holder) + var/obj/effect/particle_effect/fluid/flood = new effect_type(location, new /datum/fluid_group(amount)) + if (log) // Smoke is used as an aesthetic effect in a tonne of places and we don't want, say, a broken secway spamming admin chat. + help_out_the_admins(flood, holder, location) + flood.spread() + +/** + * Handles logging the beginning of a fluid flood. + * + * Arguments: + * - [flood][/obj/effect/particle_effect/fluid]: The first cell of the fluid flood. + * - [holder][/atom]: What the flood originated from. + * - [location][/atom]: Where the flood originated. + */ +/datum/effect_system/fluid_spread/proc/help_out_the_admins(obj/effect/particle_effect/fluid/flood, atom/holder, atom/location) + var/source_msg + var/blame_msg + if (holder) + holder.transfer_fingerprints_to(flood) // This is important. If this doesn't exist thermobarics are annoying to adjudicate. + + source_msg = "from inside of [ismob(holder) ? ADMIN_LOOKUPFLW(holder) : ADMIN_VERBOSEJMP(holder)]" + var/lastkey = holder.fingerprintslast + if (lastkey) + var/mob/scapegoat = get_mob_by_key(lastkey) + blame_msg = " last touched by [ADMIN_LOOKUPFLW(scapegoat)]" + else + blame_msg = " with no known fingerprints" + else + source_msg = "with no known source" + message_admins("\A [flood] flood started at [ADMIN_VERBOSEJMP(location)] [source_msg][blame_msg].") + log_game("\A [flood] flood started at [location || "nonexistant location"] [holder ? "from [holder] last touched by [holder || "N/A"]" : "with no known source"].") diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm new file mode 100644 index 00000000000..fcd37e80a65 --- /dev/null +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -0,0 +1,461 @@ +/** + * A fluid which spreads through the air affecting every mob it engulfs. + */ +/obj/effect/particle_effect/fluid/smoke + name = "smoke" + icon = 'icons/effects/96x96.dmi' + icon_state = "smoke" + pixel_x = -32 + pixel_y = -32 + opacity = TRUE + plane = ABOVE_GAME_PLANE + layer = FLY_LAYER + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + animate_movement = FALSE + /// How long the smoke sticks around before it dissipates. + var/lifetime = 10 SECONDS + /// Makes the smoke react to changes on/of its turf. + var/static/loc_connections = list( + COMSIG_TURF_CALCULATED_ADJACENT_ATMOS = PROC_REF(react_to_atmos_adjacency_changes) + ) + +/obj/effect/particle_effect/fluid/smoke/Initialize(mapload, datum/fluid_group/group, ...) + . = ..() + create_reagents(1000) + setDir(pick(GLOB.cardinal)) + AddElement(/datum/element/connect_loc, loc_connections) + SSsmoke.start_processing(src) + +/obj/effect/particle_effect/fluid/smoke/Destroy() + SSsmoke.stop_processing(src) + if (spread_bucket) + SSsmoke.cancel_spread(src) + return ..() + + +/** + * Makes the smoke fade out and then deletes it. + */ +/obj/effect/particle_effect/fluid/smoke/proc/kill_smoke() + SSsmoke.stop_processing(src) + if (spread_bucket) + SSsmoke.cancel_spread(src) + INVOKE_ASYNC(src, PROC_REF(fade_out)) + QDEL_IN(src, 1 SECONDS) + +/** + * Animates the smoke gradually fading out of visibility. + * Also makes the smoke turf transparent as it passes 160 alpha. + * + * Arguments: + * - frames = 0.8 [SECONDS]: The amount of time the smoke should fade out over. + */ +/obj/effect/particle_effect/fluid/smoke/proc/fade_out(frames = 0.8 SECONDS) + if(alpha == 0) //Handle already transparent case + if(opacity) + set_opacity(FALSE) + return + + if(frames == 0) + set_opacity(FALSE) + alpha = 0 + return + + var/time_to_transparency = round(((alpha - 160) / alpha) * frames) + if(time_to_transparency >= 1) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, set_opacity), FALSE), time_to_transparency) + else + set_opacity(FALSE) + animate(src, time = frames, alpha = 0) + + +/obj/effect/particle_effect/fluid/smoke/spread(seconds_per_tick = 0.1 SECONDS) + if(group.total_size > group.target_size) + return + var/turf/t_loc = get_turf(src) + if(!t_loc) + return + + for(var/turf/spread_turf in t_loc.GetAtmosAdjacentTurfs()) + if(group.total_size > group.target_size) + break + if(locate(type) in spread_turf) + continue // Don't spread smoke where there's already smoke! + for(var/mob/living/smoker in spread_turf) + smoke_mob(smoker, seconds_per_tick) + + var/obj/effect/particle_effect/fluid/smoke/spread_smoke = new type(spread_turf, group, src) + reagents.copy_to(spread_smoke, reagents.total_volume) + spread_smoke.add_atom_colour(color, FIXED_COLOUR_PRIORITY) + spread_smoke.lifetime = lifetime + + SSsmoke.queue_spread(spread_smoke) + + +/obj/effect/particle_effect/fluid/smoke/process(seconds_per_tick) + lifetime -= seconds_per_tick SECONDS + if(lifetime <= 0) + kill_smoke() + return FALSE + for(var/mob/living/smoker in loc) // In case smoke somehow winds up in a locker or something this should still behave sanely. + smoke_mob(smoker, seconds_per_tick) + return TRUE + +/** + * Handles the effects of this smoke on any mobs it comes into contact with. + * + * Arguments: + * - [smoker][/mob/living/carbon]: The mob that is being exposed to this smoke. + * - seconds_per_tick: A scaling factor for the effects this has. Primarily based off of tick rate to normalize effects to units of rate/sec. + * + * Returns whether the smoke effect was applied to the mob. + */ +/obj/effect/particle_effect/fluid/smoke/proc/smoke_mob(mob/living/carbon/smoker, seconds_per_tick) + if(!istype(smoker)) + return FALSE + if(lifetime < 1) + return FALSE + if(smoker.internal != null || smoker.can_breathe_gas()) + return FALSE + if(smoker.smoke_delay) + return FALSE + + smoker.smoke_delay = TRUE + addtimer(VARSET_CALLBACK(smoker, smoke_delay, FALSE), 1 SECONDS) + return TRUE + +/** + * Makes the smoke react to nearby opening/closing airlocks and the like. + * Makes it possible for smoke to spread through airlocks that open after the edge of the smoke cloud has already spread past them. + * + * Arguments: + * - [source][/turf]: The turf that has been touched by an atmos adjacency change. + */ +/obj/effect/particle_effect/fluid/smoke/proc/react_to_atmos_adjacency_changes(turf/source) + SIGNAL_HANDLER + if(!group) + return NONE + if (spread_bucket) + return NONE + SSsmoke.queue_spread(src) + +/// A factory which produces clouds of smoke. +/datum/effect_system/fluid_spread/smoke + effect_type = /obj/effect/particle_effect/fluid/smoke + +///////////////////////////////////////////// +// Transparent smoke +///////////////////////////////////////////// + +/// Same as the base type, but the smoke produced is not opaque +/datum/effect_system/fluid_spread/smoke/transparent + effect_type = /obj/effect/particle_effect/fluid/smoke/transparent + +/// Same as the base type, but is not opaque. +/obj/effect/particle_effect/fluid/smoke/transparent + opacity = FALSE + +/** + * A helper proc used to spawn small puffs of smoke. + * + * Arguments: + * - range: The amount of smoke to produce as number of steps from origin covered. + * - amount: The amount of smoke to produce as the total desired coverage area. Autofilled from the range arg if not set. + * - location: Where to produce the smoke cloud. + * - smoke_type: The smoke typepath to spawn. + */ +/proc/do_smoke(range = 0, amount = DIAMOND_AREA(range), atom/holder = null, location = null, smoke_type = /obj/effect/particle_effect/fluid/smoke, log = FALSE) + var/datum/effect_system/fluid_spread/smoke/smoke = new + smoke.effect_type = smoke_type + smoke.set_up(amount = amount, holder = holder, location = location) + smoke.start(log = log) + +///////////////////////////////////////////// +// Quick smoke +///////////////////////////////////////////// + +/// Smoke that dissipates as quickly as possible. +/obj/effect/particle_effect/fluid/smoke/quick + lifetime = 1 SECONDS + opacity = FALSE + +/// A factory which produces smoke that dissipates as quickly as possible. +/datum/effect_system/fluid_spread/smoke/quick + effect_type = /obj/effect/particle_effect/fluid/smoke/quick + +///////////////////////////////////////////// +// Bad smoke +///////////////////////////////////////////// + +/// Smoke that makes you cough and reduces the power of lasers. +/obj/effect/particle_effect/fluid/smoke/bad + lifetime = 16 SECONDS + +/obj/effect/particle_effect/fluid/smoke/bad/Initialize(mapload) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/effect/particle_effect/fluid/smoke/bad/smoke_mob(mob/living/carbon/smoker) + . = ..() + if(!.) + return + + smoker.drop_from_hands() + smoker.adjustOxyLoss(1) + smoker.emote("cough") + +/** + * Reduces the power of any beam projectile that passes through the smoke. + * + * Arguments: + * - [source][/datum]: The location that has just been entered. If [/datum/element/connect_loc] is working this is [src.loc][/atom/var/loc]. + * - [arrived][/atom/movable]: The atom that has just entered the source location. + * - [old_loc][/atom]: The location the entering atom just was in. + * - [old_locs][/list/atom]: The set of locations the entering atom was just in. + */ +/obj/effect/particle_effect/fluid/smoke/bad/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + if(istype(arrived, /obj/item/projectile/beam)) + var/obj/item/projectile/beam/beam = arrived + beam.damage *= 0.5 + +/// A factory which produces smoke that makes you cough. +/datum/effect_system/fluid_spread/smoke/bad + effect_type = /obj/effect/particle_effect/fluid/smoke/bad + +///////////////////////////////////////////// +// Bad Smoke (But Green (and Black)) +///////////////////////////////////////////// + +/// Green smoke that makes you cough. +/obj/effect/particle_effect/fluid/smoke/bad/green + name = "green smoke" + color = COLOR_LIME + opacity = FALSE + +/// A factory which produces green smoke that makes you cough. +/datum/effect_system/fluid_spread/smoke/bad/green + effect_type = /obj/effect/particle_effect/fluid/smoke/bad/green + +/// Black smoke that makes you cough. (Actually dark grey) +/obj/effect/particle_effect/fluid/smoke/bad/black + name = "black smoke" + color = "#383838" + opacity = FALSE + +/// A factory which produces black smoke that makes you cough. +/datum/effect_system/fluid_spread/smoke/bad/black + effect_type = /obj/effect/particle_effect/fluid/smoke/bad/black + +///////////////////////////////////////////// +// Nanofrost smoke +///////////////////////////////////////////// + +/// Light blue, transparent smoke which is usually paired with a blast that chills every turf in the area. +/obj/effect/particle_effect/fluid/smoke/freezing + name = "nanofrost smoke" + color = "#B2FFFF" + opacity = FALSE + +/// A factory which produces light blue, transparent smoke and a blast that chills every turf in the area. +/datum/effect_system/fluid_spread/smoke/freezing + effect_type = /obj/effect/particle_effect/fluid/smoke/freezing + /// The radius in which to chill every open turf. + var/blast = 0 + /// The temperature to set the turfs air temperature to. + var/temperature = 2 + /// Whether to weld every vent and air scrubber in the affected area shut. + var/weldvents = TRUE + /// Whether to make sure each affected turf is actually within range before cooling it. + var/distcheck = TRUE + +/** + * Chills an open turf. + * + * Forces the air temperature to a specific value. + * Transmutes all of the plasma in the air into nitrogen. + * Extinguishes all fires and burning objects/mobs in the turf. + * May freeze all vents and vent scrubbers shut. + * + * Arguments: + * - [chilly][/turf/open]: The open turf to chill + */ +/datum/effect_system/fluid_spread/smoke/freezing/proc/Chilled(turf/simulated/chilly) + if(!istype(chilly)) + return + + if(chilly.air) + var/datum/gas_mixture/air = chilly.air + if(!distcheck || get_dist(location, chilly) < blast) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air + air.temperature = temperature + + if(air.toxins) + air.nitrogen += air.toxins + air.toxins = 0 + + for(var/obj/effect/hotspot/fire in chilly) + qdel(fire) + chilly.air_update_turf(FALSE, FALSE) + + if(weldvents) + for(var/obj/machinery/atmospherics/unary/comp in chilly) + if(!isnull(comp.welded) && !comp.welded) //must be an unwelded vent pump or vent scrubber. + comp.welded = TRUE + comp.update_appearance() + comp.visible_message(span_danger("[comp] is frozen shut!")) + + // Extinguishes everything in the turf + for(var/mob/living/potential_tinder in chilly) + potential_tinder.ExtinguishMob() + for(var/obj/item/potential_tinder in chilly) + potential_tinder.extinguish() + +/datum/effect_system/fluid_spread/smoke/freezing/set_up(range = 5, amount = DIAMOND_AREA(range), atom/holder, atom/location, blast_radius = 0) + . = ..() + blast = blast_radius + +/datum/effect_system/fluid_spread/smoke/freezing/start(log = FALSE) + if(blast) + for(var/turf/T in RANGE_TURFS(blast, location)) + Chilled(T) + return ..() + +/// A variant of the base freezing smoke formerly used by the vent decontamination event. +/datum/effect_system/fluid_spread/smoke/freezing/decon + temperature = T20C + distcheck = FALSE + weldvents = FALSE + + +///////////////////////////////////////////// +// Sleep smoke +///////////////////////////////////////////// + +/// Smoke which knocks you out if you breathe it in. +/obj/effect/particle_effect/fluid/smoke/sleeping + color = "#9C3636" + lifetime = 20 SECONDS + +/obj/effect/particle_effect/fluid/smoke/sleeping/smoke_mob(mob/living/carbon/smoker, seconds_per_tick) + if(..()) + smoker.Sleeping(20 SECONDS) + smoker.emote("cough") + return TRUE + +/// A factory which produces sleeping smoke. +/datum/effect_system/fluid_spread/smoke/sleeping + effect_type = /obj/effect/particle_effect/fluid/smoke/sleeping + +///////////////////////////////////////////// +// Chem smoke +///////////////////////////////////////////// + +/** + * Smoke which contains reagents which it applies to everything it comes into contact with. + */ +/obj/effect/particle_effect/fluid/smoke/chem + lifetime = 20 SECONDS + +/obj/effect/particle_effect/fluid/smoke/chem/process(seconds_per_tick) + . = ..() + if(!.) + return + + var/turf/location = get_turf(src) + var/fraction = (seconds_per_tick SECONDS) / initial(lifetime) + for(var/atom/movable/thing as anything in location) + if(thing == src) + continue + reagents.reaction(thing, REAGENT_TOUCH, fraction) + + reagents.reaction(location, REAGENT_TOUCH, fraction) + return TRUE + +/obj/effect/particle_effect/fluid/smoke/chem/smoke_mob(mob/living/carbon/smoker, seconds_per_tick) + if(lifetime < 1) + return FALSE + if(!istype(smoker)) + return FALSE + if(smoker.internal != null || smoker.can_breathe_gas()) + return FALSE + + var/fraction = (seconds_per_tick SECONDS) / initial(lifetime) + reagents.copy_to(smoker, reagents.total_volume, fraction) + reagents.reaction(smoker, REAGENT_INGEST, fraction) + return TRUE + +/// Helper to quickly create a cloud of reagent smoke +/proc/do_chem_smoke(range = 0, amount = DIAMOND_AREA(range), atom/holder = null, location = null, reagent_type = /datum/reagent/water, reagent_volume = 10, log = FALSE) + var/datum/reagents/smoke_reagents = new/datum/reagents(reagent_volume) + smoke_reagents.add_reagent(reagent_type, reagent_volume) + + var/datum/effect_system/fluid_spread/smoke/chem/smoke = new + smoke.attach(location) + smoke.set_up(amount = amount, holder = holder, location = location, carry = smoke_reagents, silent = TRUE) + smoke.start(log = log) + +/// A factory which produces clouds of chemical bearing smoke. +/datum/effect_system/fluid_spread/smoke/chem + /// Evil evil hack so we have something to "hold" our reagents + var/datum/reagents/chemholder + effect_type = /obj/effect/particle_effect/fluid/smoke/chem + +/datum/effect_system/fluid_spread/smoke/chem/New() + ..() + chemholder = new(1000) + +/datum/effect_system/fluid_spread/smoke/chem/Destroy() + QDEL_NULL(chemholder) + return ..() + + +/datum/effect_system/fluid_spread/smoke/chem/set_up(range = 1, amount = DIAMOND_AREA(range), atom/holder, atom/location = null, datum/reagents/carry = null, silent = FALSE) + . = ..() + carry?.copy_to(chemholder, carry.total_volume) + + if(silent) + return + + var/list/contained_reagents = list() + for(var/datum/reagent/reagent as anything in chemholder.reagent_list) + contained_reagents += "[reagent.volume]u [reagent]" + + var/where = "[AREACOORD(location)]" + var/contained = length(contained_reagents) ? "\[[contained_reagents.Join(", ")]\] @ [chemholder.chem_temp]K" : null + if(carry.my_atom?.fingerprintslast) //Some reagents don't have a my_atom in some cases + var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) + var/more = "" + if(M) + more = "[ADMIN_LOOKUPFLW(M)] " + message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. Key: [more ? more : carry.my_atom.fingerprintslast].") + log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last touched by [carry.my_atom.fingerprintslast].") + else + message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. No associated key.") + log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") + +/datum/effect_system/fluid_spread/smoke/chem/start(log = FALSE) + var/start_loc = holder ? get_turf(holder) : src.location + var/mixcolor = mix_color_from_reagents(chemholder.reagent_list) + var/obj/effect/particle_effect/fluid/smoke/chem/smoke = new effect_type(start_loc, new /datum/fluid_group(amount)) + chemholder.copy_to(smoke, chemholder.total_volume) + + if(mixcolor) + smoke.add_atom_colour(mixcolor, FIXED_COLOUR_PRIORITY) // give the smoke color, if it has any to begin with + if (log) + help_out_the_admins(smoke, holder, location) + smoke.spread() // Making the smoke spread immediately. + +/** + * A version of chemical smoke with a very short lifespan. + */ +/obj/effect/particle_effect/fluid/smoke/chem/quick + lifetime = 4 SECONDS + opacity = FALSE + alpha = 100 + +/datum/effect_system/fluid_spread/smoke/chem/quick + effect_type = /obj/effect/particle_effect/fluid/smoke/chem/quick diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 71a661b567e..e5cc272d6ca 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -235,6 +235,13 @@ icon_state = "explosionfast" duration = 4 +/obj/effect/temp_visual/blob + name = "blob" + icon_state = "blob_attack" + alpha = 140 + randomdir = 0 + duration = 6 + /obj/effect/temp_visual/explosion/florawave icon_state = "florawave" duration = 4 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 747d07928ab..724ff60f546 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -127,8 +127,8 @@ robot.key = ghost.key robot.set_stat(CONSCIOUS) - GLOB.dead_mob_list -= robot //please never forget this ever kthx - GLOB.alive_mob_list += robot + robot.remove_from_dead_mob_list() //please never forget this ever kthx + robot.add_to_alive_mob_list() robot.notify_ai(ROBOT_NOTIFY_AI_CONNECTED) return TRUE diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index a122e3cb4f5..7c6624d3bc8 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -35,6 +35,44 @@ armor_protection = clamp(armor_protection - armour_penetration, min(armor_protection, 0), 100) return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION) + +/// Proc for recovering atom_integrity. Returns the amount repaired by +/obj/proc/repair_damage(amount) + if(amount <= 0) // We only recover here + return + var/new_integrity = min(max_integrity, obj_integrity + amount) + . = new_integrity - obj_integrity + + update_integrity(new_integrity) + + +/// Handles the integrity of an obj changing. This must be called instead of changing integrity directly. +/obj/proc/update_integrity(new_value) + SHOULD_NOT_OVERRIDE(TRUE) + var/old_value = obj_integrity + new_value = max(0, new_value) + if(obj_integrity == new_value) + return + obj_integrity = new_value + on_update_integrity(old_value, new_value) + return new_value + +/// Handle updates to your obj's integrity +/obj/proc/on_update_integrity(old_value, new_value) + SHOULD_NOT_SLEEP(TRUE) + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_OBJ_INTEGRITY_CHANGED, old_value, new_value) + +/// This mostly exists to keep obj_integrity private. Might be useful in the future. +/obj/proc/get_integrity() + SHOULD_BE_PURE(TRUE) + return obj_integrity + +/// Similar to get_integrity, but returns the percentage as [0-1] instead. +/obj/proc/get_integrity_percentage() + SHOULD_BE_PURE(TRUE) + return round(obj_integrity / max_integrity, 0.01) + ///the sound played when the obj is damaged. /obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 87f06272e8a..ec23bc71d5b 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -8,7 +8,7 @@ anchored = TRUE max_integrity = 200 integrity_failure = 100 - flags = CHECK_RICOCHET + flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD var/list/ui_users = list() /obj/structure/mirror/Initialize(mapload, newdir = SOUTH, building = FALSE) @@ -93,17 +93,9 @@ return FALSE else if(prob(70)) return FALSE + + return ..() - var/turf/p_turf = get_turf(P) - var/face_direction = get_dir(get_turf(src), p_turf) - var/face_angle = dir2angle(face_direction) - var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180)) - if(abs(incidence_s) > 90 && abs(incidence_s) < 270) - return FALSE - var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) - P.set_angle(new_angle_s) - visible_message("[P] reflects off [src]!") - return TRUE /obj/item/mounted/mirror name = "mirror" diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 3dc4787b133..18a93c46b46 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -136,16 +136,6 @@ if(radiated_temperature > max_temperature) take_damage(rand(10, 20) * (radiated_temperature / max_temperature)) -/turf/simulated/wall/handle_ricochet(obj/item/projectile/P) //A huge pile of shitcode! - var/turf/p_turf = get_turf(P) - var/face_direction = get_dir(src, p_turf) - var/face_angle = dir2angle(face_direction) - var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180)) - if(abs(incidence_s) > 90 && abs(incidence_s) < 270) - return FALSE - var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) - P.set_angle(new_angle_s) - return TRUE /turf/simulated/wall/dismantle_wall(devastated = FALSE, explode = FALSE) if(devastated) diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 4a886c24c34..43c89d59964 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -235,7 +235,7 @@ icon_state = "shuttle-0" base_icon_state = "shuttle" explosion_block = 3 - flags = CHECK_RICOCHET + flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS canSmoothWith = SMOOTH_GROUP_TITANIUM_WALLS + SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE + SMOOTH_GROUP_AIRLOCK diff --git a/code/modules/antagonists/blob/blob_actions.dm b/code/modules/antagonists/blob/blob_actions.dm index 5d33c989256..cfa4a9edab4 100644 --- a/code/modules/antagonists/blob/blob_actions.dm +++ b/code/modules/antagonists/blob/blob_actions.dm @@ -35,19 +35,12 @@ return /proc/blob_talk(mob/living/user, message) - add_say_logs(user, message, language = "BLOB") message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message) return - var/rendered = "Blob Telepathy, [user.name] states, \"[message]\"" - for(var/mob/M in GLOB.mob_list) - if(isovermind(M) || isblobbernaut(M) || isblobinfected(M.mind)) - M.show_message(rendered, 2) - else if(isobserver(M) && !isnewplayer(M)) - var/rendered_ghost = "Blob Telepathy, [user.name] \ - (F) states, \"[message]\"" - M.show_message(rendered_ghost, 2) - + add_say_logs(user, message, language = "BLOB") + var/rendered = span_big(span_blob("\[Blob Telepathy\] [user.name] states, [message]")) + relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, user) \ No newline at end of file diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm new file mode 100644 index 00000000000..755b4bd9ff6 --- /dev/null +++ b/code/modules/antagonists/blob/blob_antag.dm @@ -0,0 +1,114 @@ +/datum/antagonist/blob + name = "\improper Blob" + roundend_category = "blobs" + antagpanel_category = ANTAG_GROUP_BIOHAZARDS + show_to_ghosts = TRUE + show_in_antagpanel = FALSE + job_rank = ROLE_BLOB + ui_name = "AntagInfoBlob" + stinger_sound = 'sound/ambience/antag/blobalert.ogg' + /// Action to release a blob infection + var/datum/action/innate/blobpop/pop_action + /// Initial points for a human blob + var/starting_points_human_blob = OVERMIND_STARTING_POINTS + /// Has the blob already popped inside of the round? This is here to prevent blobs from "respawning" + var/has_already_popped = FALSE + +/datum/antagonist/blob/roundend_report() + var/basic_report = ..() + //Display max blobpoints for blebs that lost + if(isovermind(owner.current)) //embarrasing if not + var/mob/camera/blob/overmind = owner.current + if(!overmind.victory_in_progress) //if it won this doesn't really matter + var/point_report = "
[owner.name] took over [overmind.max_count] tiles at the height of its growth." + return basic_report+point_report + return basic_report + +/datum/antagonist/blob/greet() + . = ..() + owner.announce_objectives() + if(!isovermind(owner.current)) + to_chat(owner.current, span_notice("Use the pop ability to place your blob core! It is recommended you do this away from anyone else, as you'll be taking on the entire crew!")) + else + has_already_popped = TRUE + +/datum/antagonist/blob/on_gain() + create_objectives() + . = ..() + +/datum/antagonist/blob/remove_innate_effects() + QDEL_NULL(pop_action) + return ..() + +/datum/antagonist/blob/get_preview_icon() + var/datum/blobstrain/reagent/reactive_spines/reactive_spines = /datum/blobstrain/reagent/reactive_spines + + var/icon/icon = icon('icons/mob/nonhuman-player/blob.dmi', "blob_core") + icon.Blend(initial(reactive_spines.color), ICON_MULTIPLY) + icon.Blend(icon('icons/mob/nonhuman-player/blob.dmi', "blob_core_overlay"), ICON_OVERLAY) + icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE) + + return icon + + +/datum/antagonist/blob/ui_data(mob/user) + var/list/data = list() + + data["objectives"] = get_objectives() + + if(!isovermind(user)) + return data + var/mob/camera/blob/blob = user + var/datum/blobstrain/reagent/blobstrain = blob.blobstrain + + if(!blobstrain) + return data + + data["color"] = blobstrain.color + data["description"] = blobstrain.description + data["effects"] = blobstrain.effectdesc + data["name"] = blobstrain.name + + return data + +/datum/antagonist/blob/proc/create_objectives() + var/datum/objective/blob_takeover/main = new + main.owner = owner + objectives += main + +/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override) + if(isovermind(owner.current) || has_already_popped) + return FALSE + if(!pop_action) + pop_action = new + pop_action.Grant(owner.current) + +/datum/objective/blob_takeover + explanation_text = "Reach critical mass!" + +//Non-overminds get this on blob antag assignment +/datum/action/innate/blobpop + name = "Pop" + desc = "Unleash the blob!" + button_icon = 'icons/mob/blob.dmi' + button_icon_state = "blob" + + /// The time taken before this ability is automatically activated. + var/autoplace_time = OVERMIND_STARTING_AUTO_PLACE_TIME + +/datum/action/innate/blobpop/Grant(Target) + . = ..() + if(owner) + addtimer(CALLBACK(src, PROC_REF(Activate), TRUE), autoplace_time, TIMER_UNIQUE|TIMER_OVERRIDE) + to_chat(owner, span_boldannounce("You will automatically pop and place your blob core in [DisplayTimeText(autoplace_time)].")) + + +/datum/antagonist/blob/antag_listing_status() + . = ..() + if(owner?.current) + var/mob/camera/blob/blob_cam = owner.current + if(istype(blob_cam)) + . += "(Progress: [length(blob_cam.blobs_legit)]/[blob_cam.blobwincount])" + + + diff --git a/code/modules/antagonists/blob/blob_infected_datum.dm b/code/modules/antagonists/blob/blob_infected_datum.dm index 4c41c1fb572..71f433bc4e2 100644 --- a/code/modules/antagonists/blob/blob_infected_datum.dm +++ b/code/modules/antagonists/blob/blob_infected_datum.dm @@ -251,18 +251,22 @@ if(blob_client && location) mode.bursted_blobs_count++ C.was_bursted = TRUE - - var/datum/antagonist/blob_overmind/overmind = transform_to_overmind() - owner.remove_antag_datum(/datum/antagonist/blob_infected) kill_borer_inside() C.gib() - var/obj/structure/blob/core/core = new(location, 200, blob_client, SSticker.mode.blob_point_rate) + var/obj/structure/blob/special/core/core = new(location, blob_client) if(!(core.overmind && core.overmind.mind)) return + var/datum/antagonist/blob_overmind/overmind = transform_to_overmind() core.overmind.mind.add_antag_datum(overmind) core.lateblobtimer() + notify_ghosts( + "A Blob host has burst in [get_area_name(core)]", + source = core, + title = "Blob Awakening!", + ) SSticker?.mode?.process_blob_stages() mode.update_blob_objective() + owner.remove_antag_datum(/datum/antagonist/blob_infected) /datum/antagonist/blob_infected/proc/transform_to_overmind() diff --git a/code/modules/antagonists/blob/blob_minion.dm b/code/modules/antagonists/blob/blob_minion.dm new file mode 100644 index 00000000000..9bf37e961d5 --- /dev/null +++ b/code/modules/antagonists/blob/blob_minion.dm @@ -0,0 +1,36 @@ +/datum/antagonist/blob_minion + name = "\improper Blob Minion" + antagpanel_category = ANTAG_GROUP_BIOHAZARDS + show_name_in_check_antagonists = TRUE + show_to_ghosts = TRUE + show_in_antagpanel = FALSE + /// The blob core that this minion is attached to + var/datum/weakref/overmind + +/datum/antagonist/blob_minion/New(mob/camera/blob/overmind) + . = ..() + src.overmind = WEAKREF(overmind) + +/datum/antagonist/blob_minion/on_gain() + forge_objectives() + . = ..() + +/datum/antagonist/blob_minion/greet() + . = ..() + owner.announce_objectives() +/datum/objective/blob_minion + name = "protect the blob core" + explanation_text = "Protect the blob core at all costs." + var/datum/weakref/overmind + +/datum/objective/blob_minion/check_completion() + var/mob/camera/blob/resolved_overmind = overmind.resolve() + if(!resolved_overmind) + return FALSE + return resolved_overmind.stat != DEAD + +/datum/antagonist/blob_minion/forge_objectives() + var/datum/objective/blob_minion/objective = new + objective.owner = owner + objective.overmind = overmind + objectives += objective diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm new file mode 100644 index 00000000000..fa5802ba415 --- /dev/null +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -0,0 +1,38 @@ +/// Root of shared behaviour for mobs spawned by blobs, is abstract and should not be spawned +/mob/living/simple_animal/hostile/blob_minion + name = "Blob Error" + desc = "A nonfunctional fungal creature created by bad code or celestial mistake. Point and laugh." + icon = 'icons/mob/blob.dmi' + icon_state = "blob_head" + unique_name = TRUE + pass_flags = PASSBLOB + faction = list(ROLE_BLOB) + combat_mode = TRUE + bubble_icon = "blob" + speak_emote = null + habitable_atmos = null + minbodytemp = 0 + maxbodytemp = INFINITY + lighting_cutoff_red = 20 + lighting_cutoff_green = 40 + lighting_cutoff_blue = 30 + initial_language_holder = /datum/language_holder/empty + can_buckle_to = FALSE + +/mob/living/simple_animal/hostile/blob_minion/Initialize(mapload) + . = ..() + add_traits(list(TRAIT_BLOB_ALLY, TRAIT_MUTE), INNATE_TRAIT) + AddComponent(/datum/component/blob_minion, on_strain_changed = CALLBACK(src, PROC_REF(on_strain_updated))) + +/// Called when our blob overmind changes their variant, update some of our mob properties +/mob/living/simple_animal/hostile/blob_minion/proc/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) + return + +/// Associates this mob with a specific blob factory node +/mob/living/simple_animal/hostile/blob_minion/proc/link_to_factory(obj/structure/blob/special/factory/factory) + RegisterSignal(factory, COMSIG_QDELETING, PROC_REF(on_factory_destroyed)) + +/// Called when our factory is destroyed +/mob/living/simple_animal/hostile/blob_minion/proc/on_factory_destroyed() + SIGNAL_HANDLER + to_chat(src, span_userdanger("Your factory was destroyed! You feel yourself dying!")) diff --git a/code/modules/antagonists/blob/blob_minions/blob_spore.dm b/code/modules/antagonists/blob/blob_minions/blob_spore.dm new file mode 100644 index 00000000000..c22910a881f --- /dev/null +++ b/code/modules/antagonists/blob/blob_minions/blob_spore.dm @@ -0,0 +1,121 @@ +/** + * A floating fungus which turns people into zombies and explodes into reagent clouds upon death. + */ +/mob/living/simple_animal/hostile/blob_minion/spore + name = "blob spore" + desc = "A floating, fragile spore." + icon = 'icons/mob/blob.dmi' + icon_state = "blobpod" + icon_living = "blobpod" + health_doll_icon = "blobpod" + health = BLOBMOB_SPORE_HEALTH + maxHealth = BLOBMOB_SPORE_HEALTH + verb_say = "psychically pulses" + verb_ask = "psychically probes" + verb_exclaim = "psychically yells" + verb_yell = "psychically screams" + melee_damage_lower = BLOBMOB_SPORE_DMG_LOWER + melee_damage_upper = BLOBMOB_SPORE_DMG_UPPER + obj_damage = 0 + attack_verb_continuous = "batters" + attack_verb_simple = "batter" + attack_sound = 'sound/weapons/genhit1.ogg' + death_message = "explodes into a cloud of gas!" + gold_core_spawnable = HOSTILE_SPAWN + del_on_death = TRUE + /// Size of cloud produced from a dying spore + var/death_cloud_size = 1 + /// Type of mob to create + var/mob/living/zombie_type = /mob/living/basic/blob_minion/zombie + +/mob/living/simple_animal/hostile/blob_minion/spore/Initialize(mapload) + . = ..() + AddElement(/datum/element/simple_flying) + +/mob/living/simple_animal/hostile/blob_minion/spore/death(gibbed) + . = ..() + death_burst() + +/mob/living/simple_animal/hostile/blob_minion/spore/on_factory_destroyed() + death() + +/// Create an explosion of spores on death +/mob/living/simple_animal/hostile/blob_minion/spore/proc/death_burst() + do_chem_smoke(range = death_cloud_size, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) + + +/mob/living/simple_animal/hostile/blob_minion/spore/melee_attack(mob/living/carbon/human/target, list/modifiers, ignore_cooldown) + . = ..() + if (!ishuman(target) || target.stat != DEAD) + return + zombify(target) + +/// Become a zombie +/mob/living/simple_animal/hostile/blob_minion/spore/proc/zombify(mob/living/carbon/human/target) + visible_message(span_warning("The corpse of [target.name] suddenly rises!")) + var/mob/living/basic/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name)) + blombie.set_name() + if (istype(blombie)) // In case of badmin + blombie.consume_corpse(target) + SEND_SIGNAL(src, COMSIG_BLOB_ZOMBIFIED, blombie) + qdel(src) + +/// Variant of the blob spore which is actually spawned by blob factories +/mob/living/simple_animal/hostile/blob_minion/spore/minion + gold_core_spawnable = NO_SPAWN + zombie_type = /mob/living/basic/blob_minion/zombie/controlled + /// We die if we leave the same turf as this z level + var/turf/z_turf + +/mob/living/simple_animal/hostile/blob_minion/spore/minion/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_z_changed)) + +/// When we z-move check that we're on the same z level as our factory was +/mob/living/simple_animal/hostile/blob_minion/spore/minion/proc/on_z_changed() + SIGNAL_HANDLER + if (isnull(z_turf)) + return + if (!is_valid_z_level(get_turf(src), z_turf)) + death() + +/// Mark the turf we need to track from our factory +/mob/living/simple_animal/hostile/blob_minion/spore/minion/link_to_factory(obj/structure/blob/special/factory/factory) + . = ..() + z_turf = get_turf(factory) + +/// If the blob changes to distributed neurons then you can control the spores +/mob/living/simple_animal/hostile/blob_minion/spore/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) + if (isnull(overmind)) + REMOVE_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) + else + ADD_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) + + if (istype(new_strain, /datum/blobstrain/reagent/distributed_neurons)) + AddComponent(\ + /datum/component/ghost_direct_control,\ + ban_type = ROLE_BLOB_INFECTION,\ + poll_candidates = TRUE,\ + poll_ignore_key = POLL_IGNORE_BLOB,\ + ) + else + qdel(GetComponent(/datum/component/ghost_direct_control)) + +/mob/living/simple_animal/hostile/blob_minion/spore/minion/death_burst() + return // This behaviour is superceded by the overmind's intervention + + +/// Weakened spore spawned by distributed neurons, can't zombify people and makes a teeny explosion +/mob/living/simple_animal/hostile/blob_minion/spore/minion/weak + name = "fragile blob spore" + health = 15 + maxHealth = 15 + melee_damage_lower = 1 + melee_damage_upper = 2 + death_cloud_size = 0 + +/mob/living/simple_animal/hostile/blob_minion/spore/minion/weak/zombify() + return + +/mob/living/simple_animal/hostile/blob_minion/spore/minion/weak/on_strain_updated() + return diff --git a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm new file mode 100644 index 00000000000..312891dd287 --- /dev/null +++ b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm @@ -0,0 +1,98 @@ +/// A shambling mob made out of a crew member +/mob/living/simple_animal/hostile/blob_minion/zombie + name = "blob zombie" + desc = "A shambling corpse animated by the blob." + icon_state = "zombie" + icon_living = "zombie" + health_doll_icon = "blobpod" + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID + health = 70 + maxHealth = 70 + verb_say = "gurgles" + verb_ask = "demands" + verb_exclaim = "roars" + verb_yell = "bellows" + melee_damage_lower = 10 + melee_damage_upper = 15 + melee_attack_cooldown = CLICK_CD_MELEE + obj_damage = 20 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/genhit1.ogg' + death_message = "collapses to the ground!" + gold_core_spawnable = NO_SPAWN + basic_mob_flags = DEL_ON_DEATH + /// The dead body we have inside + var/mob/living/carbon/human/corpse + +/mob/living/simple_animal/hostile/blob_minion/zombie/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) // This mob doesn't function visually without a corpse and wouldn't respawn with one + +/mob/living/simple_animal/hostile/hostile/blob_minion/zombie/death(gibbed) + corpse?.forceMove(loc) + death_burst() + return ..() + +/mob/living/simple_animal/hostile/blob_minion/zombie/Exited(atom/movable/gone, direction) + . = ..() + if (gone != corpse) + return + corpse = null + death() + +/mob/living/simple_animal/hostile/blob_minion/zombie/Destroy() + QDEL_NULL(corpse) + return ..() + +/mob/living/simple_animal/hostile/blob_minion/zombie/on_factory_destroyed() + . = ..() + death() + +//Sets up our appearance +/mob/living/simple_animal/hostile/blob_minion/zombie/proc/set_up_zombie_appearance() + copy_overlays(corpse, TRUE) + var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") + blob_head_overlay.color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_WHITE + color = initial(color) // reversing what our component did lol, but we needed the value for the overlay + overlays += blob_head_overlay + +/// Create an explosion of spores on death +/mob/living/basic/blob_minion/zombie/proc/death_burst() + do_chem_smoke(range = 0, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) + +/// Store a body so that we can drop it on death +/mob/living/simple_animal/hostile/blob_minion/zombie/proc/consume_corpse(mob/living/carbon/human/new_corpse) + if(new_corpse.wear_suit) + maxHealth += new_corpse.get_armor_rating(MELEE) + health = maxHealth + new_corpse.set_facial_hairstyle("Shaved", update = FALSE) + new_corpse.set_hairstyle("Bald", update = TRUE) + new_corpse.forceMove(src) + corpse = new_corpse + update_appearance(UPDATE_ICON) + set_up_zombie_appearance() + RegisterSignal(corpse, COMSIG_LIVING_REVIVE, PROC_REF(on_corpse_revived)) + +/// Dynamic changeling reentry +/mob/living/simple_animal/hostile/blob_minion/zombie/proc/on_corpse_revived() + SIGNAL_HANDLER + visible_message(span_boldwarning("[src] bursts from the inside!")) + death() + +/// Blob-created zombies will ping for player control when they make a zombie +/mob/living/simple_animal/hostile/blob_minion/zombie/controlled + +/mob/living/simple_animal/hostile/blob_minion/zombie/controlled/consume_corpse(mob/living/carbon/human/new_corpse) + . = ..() + if (!isnull(client) || SSticker.current_state == GAME_STATE_FINISHED) + return + AddComponent(\ + /datum/component/ghost_direct_control,\ + ban_type = ROLE_BLOB,\ + poll_candidates = TRUE,\ + poll_ignore_key = POLL_IGNORE_BLOB,\ + ) + +/mob/living/simple_animal/hostile/blob_minion/zombie/controlled/death_burst() + return diff --git a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm new file mode 100644 index 00000000000..b32962715f4 --- /dev/null +++ b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm @@ -0,0 +1,107 @@ +/** + * Player-piloted brute mob. Mostly just a "move and click" kind of guy. + * Has a variant which takes damage when away from blob tiles + */ +/mob/living/simple_animal/hostile/blob_minion/blobbernaut + name = "blobbernaut" + desc = "A hulking, mobile chunk of blobmass." + icon_state = "blobbernaut" + icon_living = "blobbernaut" + icon_dead = "blobbernaut_dead" + health = BLOBMOB_BLOBBERNAUT_HEALTH + maxHealth = BLOBMOB_BLOBBERNAUT_HEALTH + damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) + melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER + melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_SOLO_UPPER + melee_attack_cooldown = CLICK_CD_MELEE + obj_damage = BLOBMOB_BLOBBERNAUT_DMG_OBJ + attack_verb_continuous = "slams" + attack_verb_simple = "slam" + attack_sound = 'sound/effects/blobattack.ogg' + verb_say = "gurgles" + verb_ask = "demands" + verb_exclaim = "roars" + verb_yell = "bellows" + pressure_resistance = 50 + mob_size = MOB_SIZE_LARGE + hud_type = /datum/hud/living/blobbernaut + gold_core_spawnable = HOSTILE_SPAWN + +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/Initialize(mapload) + . = ..() + AddElement(/datum/element/damage_threshold, 10) + +/mob/living/basic/blob_minion/blobbernaut/death(gibbed) + flick("blobbernaut_death", src) + return ..() + +/// This variant is the one actually spawned by blob factories, takes damage when away from blob tiles +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion + gold_core_spawnable = NO_SPAWN + /// Is our factory dead? + var/orphaned = FALSE + +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/Life(seconds_per_tick, times_fired) + . = ..() + if (!.) + return FALSE + var/damage_sources = 0 + var/list/blobs_in_area = range(2, src) + + if (!(locate(/obj/structure/blob) in blobs_in_area)) + damage_sources++ + + if (orphaned) + damage_sources++ + else + var/particle_colour = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_BLACK + if (locate(/obj/structure/blob/special/core) in blobs_in_area) + heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_CORE * seconds_per_tick) + var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) + heal_effect.color = particle_colour + + if (locate(/obj/structure/blob/special/node) in blobs_in_area) + heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_NODE * seconds_per_tick) + var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) + heal_effect.color = particle_colour + + if (damage_sources == 0) + return FALSE + + // take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both + apply_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALTH_DECAY * damage_sources * seconds_per_tick, damagetype = TOX) // We reduce brute damage + var/mutable_appearance/harming = mutable_appearance('icons/mob/blob.dmi', "nautdamage", MOB_LAYER + 0.01) + harming.appearance_flags = RESET_COLOR + harming.color = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_WHITE + harming.dir = dir + flick_overlay_view(harming, 0.8 SECONDS) + return TRUE + +/// Called by the blob creation power to give us a mind and a basic task orientation +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/proc/assign_key(ckey, datum/blobstrain/blobstrain) + key = ckey + flick("blobbernaut_produce", src) + health = maxHealth / 2 // Start out injured to encourage not beelining away from the blob + SEND_SOUND(src, sound('sound/effects/blobattack.ogg')) + SEND_SOUND(src, sound('sound/effects/attackblob.ogg')) + to_chat(src, span_infoplain("You are powerful, hard to kill, and slowly regenerate near nodes and cores, [span_cult_large("but will slowly die if not near the blob")] or if the factory that made you is killed.")) + to_chat(src, span_infoplain("You can communicate with other blobbernauts and overminds telepathically by attempting to speak normally")) + to_chat(src, span_infoplain("Your overmind's blob reagent is: [blobstrain.name]!")) + to_chat(src, span_infoplain("The [blobstrain.name] reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]")) + +/// Set our attack damage based on blob's properties +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) + if (isnull(overmind)) + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + attack_verb_continuous = initial(attack_verb_continuous) + return + melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_LOWER + melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_UPPER + attack_verb_continuous = new_strain.blobbernaut_message + +/// Called by our factory to inform us that it's not going to support us financially any more +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/on_factory_destroyed() + . = ..() + orphaned = TRUE + throw_alert("nofactory", /atom/movable/screen/alert/nofactory) diff --git a/code/modules/antagonists/blob/blob_overmind_datum.dm b/code/modules/antagonists/blob/blob_overmind_datum.dm index ecd9631f335..b31fb351f8a 100644 --- a/code/modules/antagonists/blob/blob_overmind_datum.dm +++ b/code/modules/antagonists/blob/blob_overmind_datum.dm @@ -13,14 +13,17 @@ var/is_offspring = FALSE /// Was the blob with this datum bursted blob_infected. var/is_tranformed = FALSE - /// Link to the datum of the selected blob reagent. - var/datum/reagent/blob/reagent + //Link to the datum of the selected blob reagent. + var/datum/blobstrain/strain + +/datum/antagonist/blob_overmind/can_be_owned(datum/mind/new_owner) + . = ..() && isovermind(new_owner?.current) /datum/antagonist/blob_overmind/on_gain() - if(!reagent) - var/reagent_type = pick(subtypesof(/datum/reagent/blob)) - reagent = new reagent_type - return ..() + var/mob/camera/blob/camera = owner.current + strain = camera.blobstrain + . = ..() + /datum/antagonist/blob_overmind/add_owner_to_gamemode() var/datum/game_mode/mode = SSticker.mode @@ -54,12 +57,12 @@ /datum/antagonist/blob_overmind/greet() var/list/messages = list() messages.Add("Вы Блоб!") - for(var/message in get_blob_help_messages(reagent)) + for(var/message in get_blob_help_messages(strain)) messages.Add(message) SEND_SOUND(owner.current, 'sound/magic/mutate.ogg') return messages -/proc/get_blob_help_messages(datum/reagent/blob/blob_reagent_datum) +/proc/get_blob_help_messages(datum/blobstrain/blob_reagent_datum) var/list/messages = list() messages += "Как надразум, вы можете управлять блобом!" messages += "Ваш реагент: [blob_reagent_datum.name] - [blob_reagent_datum.description]" diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blobs/blob_mobs.dm similarity index 99% rename from code/game/gamemodes/blob/blobs/blob_mobs.dm rename to code/modules/antagonists/blob/blobs/blob_mobs.dm index 24c3898a7cb..905735665f9 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/modules/antagonists/blob/blobs/blob_mobs.dm @@ -1,4 +1,5 @@ +/* //////////////// // BASE TYPE // //////////////// @@ -260,3 +261,4 @@ var/rendered_ghost = "Blob Telepathy, [name]([overmind]) \ (F) states, \"[message]\"" M.show_message(rendered_ghost, 2) +*/ \ No newline at end of file diff --git a/code/modules/antagonists/blob/blobs_attack.dm b/code/modules/antagonists/blob/blobs_attack.dm new file mode 100644 index 00000000000..32d39cad009 --- /dev/null +++ b/code/modules/antagonists/blob/blobs_attack.dm @@ -0,0 +1,11 @@ +/atom/proc/can_blob_attack() + return !(HAS_TRAIT(src, TRAIT_MAGICALLY_PHASED)) + +/mob/living/can_blob_attack() + . = ..() + if(!.) + return + return !incorporeal_move + +/obj/effect/dummy/phased_mob/can_blob_attack() + return FALSE \ No newline at end of file diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm new file mode 100644 index 00000000000..8a880baecae --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -0,0 +1,171 @@ +GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/blobstrain/reagent, /datum/blobstrain/multiplex)) + +/datum/blobstrain + var/name + var/description + var/color = COLOR_BLACK + /// The color that stuff like healing effects and the overmind camera gets + var/complementary_color = COLOR_BLACK + /// A short description of the power and its effects + var/shortdesc = null + /// Any long, blob-tile specific effects + var/effectdesc = null + /// Short descriptor of what the strain does damage-wise, generally seen in the reroll menu + var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp." + /// Short descriptor of what the strain does in general, generally seen in the reroll menu + var/analyzerdesceffect + /// Blobbernaut attack verb + var/blobbernaut_message = "slams" + /// Message sent to any mob hit by the blob + var/message = "The blob strikes you" + /// Gets added onto 'message' if the mob stuck is of type living + var/message_living = null + /// Stores world.time to figure out when to next give resources + var/resource_delay = 0 + /// For blob-mobs and extinguishing-based effects + var/fire_based = FALSE + var/mob/camera/blob/overmind + /// The amount of health regenned on core_process + var/base_core_regen = BLOB_CORE_HP_REGEN + /// The amount of points gained on core_process + var/point_rate = BLOB_BASE_POINT_RATE + + // Various vars that strains can buff the blob with + /// HP regen bonus added by strain + var/core_regen_bonus = 0 + /// resource point bonus added by strain + var/point_rate_bonus = 0 + + /// Adds to claim, pulse, and expand range + var/core_range_bonus = 0 + /// Extra range up to which the core reinforces blobs + var/core_strong_reinforcement_range_bonus = 0 + /// Extra range up to which the core reinforces blobs into reflectors + var/core_reflector_reinforcement_range_bonus = 0 + + /// Adds to claim, pulse, and expand range + var/node_range_bonus = 0 + /// Nodes can sustain this any extra spores with this strain + var/node_spore_bonus = 0 + /// Extra range up to which the node reinforces blobs + var/node_strong_reinforcement_range_bonus = 0 + /// Extra range up to which the node reinforces blobs into reflectors + var/node_reflector_reinforcement_range_bonus = 0 + + /// Extra spores produced by factories with this strain + var/factory_spore_bonus = 0 + + /// Multiplies the max and current health of every blob with this value upon selecting this strain. + var/max_structure_health_multiplier = 1 + /// Multiplies the max and current health of every mob with this value upon selecting this strain. + var/max_mob_health_multiplier = 1 + + /// Makes blobbernauts inject a bonus amount of reagents, making their attacks more powerful + var/blobbernaut_reagentatk_bonus = 0 + +/datum/blobstrain/New(mob/camera/blob/new_overmind) + if (!istype(new_overmind)) + stack_trace("blobstrain created without overmind") + overmind = new_overmind + +/datum/blobstrain/Destroy() + overmind = null + return ..() + +/datum/blobstrain/proc/on_gain() + overmind.color = complementary_color + + if(overmind.blob_core) + overmind.blob_core.claim_range += core_range_bonus + overmind.blob_core.pulse_range += core_range_bonus + overmind.blob_core.expand_range += core_range_bonus + overmind.blob_core.strong_reinforce_range += core_strong_reinforcement_range_bonus + overmind.blob_core.reflector_reinforce_range += core_reflector_reinforcement_range_bonus + + for(var/obj/structure/blob/special/node/N as anything in overmind.node_blobs) + N.claim_range += node_range_bonus + N.pulse_range += node_range_bonus + N.expand_range += node_range_bonus + N.strong_reinforce_range += node_strong_reinforcement_range_bonus + N.reflector_reinforce_range += node_reflector_reinforcement_range_bonus + + for(var/obj/structure/blob/special/factory/F as anything in overmind.factory_blobs) + F.max_spores += factory_spore_bonus + + for(var/obj/structure/blob/B as anything in overmind.all_blobs) + B.modify_max_integrity(B.max_integrity * max_structure_health_multiplier) + B.update_appearance() + + for(var/mob/living/blob_mob as anything in overmind.blob_mobs) + blob_mob.maxHealth *= max_mob_health_multiplier + blob_mob.health *= max_mob_health_multiplier + blob_mob.update_icons() //If it's getting a new strain, tell it what it does! + to_chat(blob_mob, "Your overmind's blob strain is now: [name]!") + to_chat(blob_mob, "The [name] strain [shortdesc ? "[shortdesc]" : "[description]"]") + +/datum/blobstrain/proc/on_lose() + if(overmind.blob_core) + overmind.blob_core.claim_range -= core_range_bonus + overmind.blob_core.expand_range -= core_range_bonus + overmind.blob_core.strong_reinforce_range -= core_strong_reinforcement_range_bonus + overmind.blob_core.reflector_reinforce_range -= core_reflector_reinforcement_range_bonus + + for(var/obj/structure/blob/special/node/N as anything in overmind.node_blobs) + N.claim_range -= node_range_bonus + N.expand_range -= node_range_bonus + N.strong_reinforce_range -= node_strong_reinforcement_range_bonus + N.reflector_reinforce_range -= node_reflector_reinforcement_range_bonus + + for(var/obj/structure/blob/special/factory/F as anything in overmind.factory_blobs) + F.max_spores -= factory_spore_bonus + + for(var/obj/structure/blob/B as anything in overmind.all_blobs) + B.modify_max_integrity(B.max_integrity / max_structure_health_multiplier) + + for(var/mob/living/blob_mob as anything in overmind.blob_mobs) + blob_mob.maxHealth /= max_mob_health_multiplier + blob_mob.health /= max_mob_health_multiplier + + +/datum/blobstrain/proc/on_sporedeath(mob/living/spore) + +/datum/blobstrain/proc/send_message(mob/living/M) + var/totalmessage = message + if(message_living && !issilicon(M)) + totalmessage += message_living + totalmessage += "!" + to_chat(M, span_userdanger("[totalmessage]")) + +/datum/blobstrain/proc/core_process() + if(resource_delay <= world.time) + resource_delay = world.time + 10 // 1 second + overmind.add_points(point_rate+point_rate_bonus) + overmind.blob_core.repair_damage(base_core_regen + core_regen_bonus) + +/datum/blobstrain/proc/attack_living(mob/living/L, list/nearby_blobs) // When the blob attacks people + send_message(L) + +/// When this blob's blobbernaut attacks any atom +/datum/blobstrain/proc/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) + return + +/datum/blobstrain/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this + return coefficient*damage + +/datum/blobstrain/proc/death_reaction(obj/structure/blob/B, damage_flag, coefficient = 1) //when a blob dies, do this + return + +/datum/blobstrain/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this + return + +/datum/blobstrain/proc/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this + return TRUE //return 0 to ignore damage + +/datum/blobstrain/proc/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this + return + +/datum/blobstrain/proc/emp_reaction(obj/structure/blob/B, severity, coefficient = 1) //when the blob is hit with an emp, do this + return + +/datum/blobstrain/proc/examine(mob/user) + return list("Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm new file mode 100644 index 00000000000..4a860d8bd9b --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -0,0 +1,44 @@ +/datum/blobstrain/reagent // Blobs that mess with reagents, all "legacy" ones // what do you mean "legacy" you never added an alternative + var/datum/reagent/reagent + +/datum/blobstrain/reagent/New(mob/camera/blob/new_overmind) + . = ..() + reagent = new reagent() + + +/datum/blobstrain/reagent/attack_living(mob/living/L) + var/mob_protection = L.getarmor(null, BIO) * 0.01 + reagent.reaction_mob(L, REAGENT_INGEST, BLOB_REAGENTATK_VOL, TRUE, mob_protection, overmind) + send_message(L) + +/datum/blobstrain/reagent/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) + if(!isliving(attacking)) + return + + var/mob/living/living_attacking = attacking + var/mob_protection = living_attacking.getarmor(null, BIO) * 0.01 + reagent.expose_mob(living_attacking, VAPOR, BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL+blobbernaut_reagentatk_bonus, FALSE, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. + +/datum/blobstrain/reagent/on_sporedeath(mob/living/basic/spore) + var/burst_range = (spore.type == /mob/living/basic/blob_minion/spore) ? 1 : 0 + do_chem_smoke(range = burst_range, holder = spore, location = get_turf(spore), reagent_type = reagent.type) + +// These can only be applied by blobs. They are what (reagent) blobs are made out of. +/datum/reagent/blob + name = "Unknown" + description = "shouldn't exist and you should adminhelp immediately." + color = COLOR_WHITE + taste_description = "bad code and slime" + chemical_flags = NONE + penetrates_skin = NONE + +/// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. +/datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) + return 0 //the dead, and blob mobs, don't cause reactions + return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. + +/// Exists to earmark the new overmind arg used by blob reagents. +/datum/reagent/blob/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + return ..() diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm new file mode 100644 index 00000000000..ded3be1458e --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -0,0 +1,43 @@ + +//sets you on fire, does burn damage, explodes into flame when burnt, weak to water +/datum/blobstrain/reagent/blazing_oil + name = "Blazing Oil" + description = "will do medium-high burn damage ignoring armor, and set targets on fire." + effectdesc = "will also release bursts of flame when burnt, but takes damage from water." + analyzerdescdamage = "Does medium-high burn damage and sets targets on fire." + analyzerdesceffect = "Releases fire when burnt, but takes damage from water and other extinguishing liquids." + color = "#B68D00" + complementary_color = "#BE5532" + blobbernaut_message = "splashes" + message = "The blob splashes you with burning oil" + message_living = ", and you feel your skin char and melt" + reagent = /datum/reagent/blob/blazing_oil + fire_based = TRUE + +/datum/blobstrain/reagent/blazing_oil/extinguish_reaction(obj/structure/blob/B) + B.take_damage(4.5, BURN, ENERGY) + +/datum/blobstrain/reagent/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_type == BURN && damage_flag != ENERGY) + for(var/turf/open/T in range(1, B)) + var/obj/structure/blob/C = locate() in T + if(!(C && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) && prob(80)) + new /obj/effect/hotspot(T) + if(damage_flag == FIRE) + return 0 + return ..() + +/datum/reagent/blob/blazing_oil + name = "Blazing Oil" + taste_description = "burning oil" + color = "#B68D00" + +/datum/reagent/blob/blazing_oil/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.adjust_fire_stacks(round(reac_volume/10)) + exposed_mob.ignite_mob() + if(exposed_mob) + exposed_mob.apply_damage(0.8*reac_volume, BURN, wound_bonus=CANT_WOUND) + if(iscarbon(exposed_mob)) + exposed_mob.emote("scream") diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm new file mode 100644 index 00000000000..a18d802ff7d --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -0,0 +1,35 @@ +//does brute, burn, and toxin damage, and cools targets down +/datum/blobstrain/reagent/cryogenic_poison + name = "Cryogenic Poison" + description = "will inject targets with a freezing poison, applying little impact damage but dealing high damage over time." + analyzerdescdamage = "Injects targets with a freezing poison that will gradually solidify the target's internal organs." + color = "#8BA6E9" + complementary_color = "#7D6EB4" + blobbernaut_message = "injects" + message = "The blob stabs you" + message_living = ", and you feel like your insides are solidifying" + reagent = /datum/reagent/blob/cryogenic_poison + +/datum/reagent/blob/cryogenic_poison + name = "Cryogenic Poison" + description = "will inject targets with a freezing poison that does high damage over time." + color = "#8BA6E9" + taste_description = "brain freeze" + +/datum/reagent/blob/cryogenic_poison/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + if(exposed_mob.reagents) + exposed_mob.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume) + exposed_mob.reagents.add_reagent(/datum/reagent/consumable/ice, 0.3*reac_volume) + exposed_mob.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume) + exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + +/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/exposed_mob, seconds_per_tick, times_fired) + . = ..() + var/need_mob_update + need_mob_update = exposed_mob.adjustBruteLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE) + need_mob_update += exposed_mob.adjustFireLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE) + need_mob_update += exposed_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE) + if(need_mob_update) + . = UPDATE_MOB_HEALTH diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm new file mode 100644 index 00000000000..352d7c230a4 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -0,0 +1,63 @@ +#define DEBRIS_DENSITY (length(core.contents) / (length(overmind.blobs_legit) * 0.25)) // items per blob + +// Accumulates junk liberally +/datum/blobstrain/debris_devourer + name = "Debris Devourer" + description = "will launch accumulated debris into targets. Does very low brute damage without debris-launching." + analyzerdescdamage = "Does very low brute damage and may grab onto melee weapons." + analyzerdesceffect = "Devours loose items left on the station, and releases them when attacking or attacked." + color = "#8B1000" + complementary_color = "#00558B" + blobbernaut_message = "blasts" + message = "The blob blasts you" + + +/datum/blobstrain/debris_devourer/attack_living(mob/living/L, list/nearby_blobs) + send_message(L) + for (var/obj/structure/blob/blob in nearby_blobs) + debris_attack(L, blob) + +/datum/blobstrain/debris_devourer/on_sporedeath(mob/living/spore) + var/obj/structure/blob/special/core/core = overmind.blob_core + for(var/i in 1 to 3) + var/obj/item/I = pick(core.contents) + if (I && !QDELETED(I)) + I.forceMove(get_turf(spore)) + I.throw_at(get_edge_target_turf(spore,pick(GLOB.alldirs)), 6, 5, spore, TRUE, FALSE, null, 3) + +/datum/blobstrain/debris_devourer/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this + for (var/obj/item/I in T) + I.forceMove(overmind.blob_core) + +/datum/blobstrain/debris_devourer/proc/debris_attack(atom/attacking, atom/source) + var/obj/structure/blob/special/core/core = overmind.blob_core + if (prob(40 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. + var/obj/item/I = length(core.contents) ? pick(core.contents) : null + if (!QDELETED(I)) + I.forceMove(get_turf(source)) + I.throw_at(attacking, 6, 5, overmind, TRUE, FALSE, null, 3) + +/datum/blobstrain/debris_devourer/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) + debris_attack(attacking, blobbernaut) + +/datum/blobstrain/debris_devourer/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this + var/obj/structure/blob/special/core/core = overmind.blob_core + return round(max((coefficient*damage)-min(coefficient*DEBRIS_DENSITY, 10), 0)) // reduce damage taken by items per blob, up to 10 + +/datum/blobstrain/debris_devourer/examine(mob/user) + . = ..() + var/obj/structure/blob/special/core/core = overmind.blob_core + if (isobserver(user)) + . += span_notice("Absorbed debris is currently reducing incoming damage by [round(max(min(DEBRIS_DENSITY, 10),0))]") + else + switch (round(max(min(DEBRIS_DENSITY, 10),0))) + if (0) + . += span_notice("There is not currently enough absorbed debris to reduce damage.") + if (1 to 3) + . += span_notice("Absorbed debris is currently reducing incoming damage by a very low amount.") // these roughly correspond with force description strings + if (4 to 7) + . += span_notice("Absorbed debris is currently reducing incoming damage by a low amount.") + if (8 to 10) + . += span_notice("Absorbed debris is currently reducing incoming damage by a medium amount.") + +#undef DEBRIS_DENSITY diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm new file mode 100644 index 00000000000..ea2bf54d769 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -0,0 +1,37 @@ +//kills unconscious targets and turns them into blob zombies, produces fragile spores when killed. Spore produced by factories are sentient. +/datum/blobstrain/reagent/distributed_neurons + name = "Distributed Neurons" + description = "will do medium-low toxin damage and turns unconscious targets into blob zombies." + effectdesc = "will also produce fragile spores when killed. Spores produced by factories are sentient." + shortdesc = "will do medium-low toxin damage and will kill any unconscious targets when attacked. Spores produced by factories are sentient." + analyzerdescdamage = "Does medium-low toxin damage and kills unconscious humans." + analyzerdesceffect = "Produces spores when killed. Spores produced by factories are sentient." + color = "#E88D5D" + complementary_color = "#823ABB" + message_living = ", and you feel tired" + reagent = /datum/reagent/blob/distributed_neurons + +/datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/blob_tile, damage, damage_type, damage_flag) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && blob_tile.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. + blob_tile.visible_message(span_boldwarning("A spore floats free of the blob!")) + blob_tile.overmind.create_spore(blob_tile.loc, /mob/living/basic/blob_minion/spore/minion/weak) + return ..() + +/datum/reagent/blob/distributed_neurons + name = "Distributed Neurons" + color = "#E88D5D" + taste_description = "fizzing" + +/datum/reagent/blob/distributed_neurons/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.6*reac_volume, TOX) + if(overmind && ishuman(exposed_mob)) + if(exposed_mob.stat == UNCONSCIOUS || exposed_mob.stat == HARD_CRIT) + exposed_mob.investigate_log("has been killed by distributed neurons (blob).", INVESTIGATE_DEATHS) + exposed_mob.death() //sleeping in a fight? bad plan. + if(exposed_mob.stat == DEAD && overmind.can_buy(5)) + var/mob/living/basic/blob_minion/spore/minion/spore = overmind.create_spore(get_turf(exposed_mob)) + spore.zombify(exposed_mob) + overmind.add_points(-5) + to_chat(overmind, span_notice("Spent 5 resources for the zombification of [exposed_mob].")) diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm new file mode 100644 index 00000000000..4a5c49d851a --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm @@ -0,0 +1,32 @@ +//does burn damage and EMPs, slightly fragile +/datum/blobstrain/reagent/electromagnetic_web + name = "Electromagnetic Web" + color = "#83ECEC" + complementary_color = "#EC8383" + description = "will do high burn damage and EMP targets." + effectdesc = "will also take massively increased damage and release an EMP when killed." + analyzerdescdamage = "Does low burn damage and EMPs targets." + analyzerdesceffect = "Is fragile to all types of damage, but takes massive damage from brute. In addition, releases a small EMP when killed." + reagent = /datum/reagent/blob/electromagnetic_web + +/datum/blobstrain/reagent/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_type == BRUTE) // take full brute, divide by the multiplier to get full value + return damage / B.brute_resist + return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob + +/datum/blobstrain/reagent/electromagnetic_web/death_reaction(obj/structure/blob/B, damage_flag) + if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) + empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it + +/datum/reagent/blob/electromagnetic_web + name = "Electromagnetic Web" + taste_description = "pop rocks" + color = "#83ECEC" + +/datum/reagent/blob/electromagnetic_web/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + if(prob(reac_volume*2)) + exposed_mob.emp_act(EMP_LIGHT) + if(exposed_mob) + exposed_mob.apply_damage(reac_volume, BURN, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm new file mode 100644 index 00000000000..9fa5ed9ab96 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -0,0 +1,35 @@ +//does tons of oxygen damage and a little stamina, immune to tesla bolts, weak to EMP +/datum/blobstrain/reagent/energized_jelly + name = "Energized Jelly" + description = "will cause high stamina and medium oxygen damage, and cause targets to be unable to breathe." + effectdesc = "will also conduct electricity, but takes damage from EMPs." + analyzerdescdamage = "Does high stamina damage, medium oxygen damage, and prevents targets from breathing." + analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs." + color = "#EFD65A" + complementary_color = "#00E5B1" + reagent = /datum/reagent/blob/energized_jelly + +/datum/blobstrain/reagent/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.get_integrity() - damage <= 0 && prob(10)) + do_sparks(rand(2, 4), FALSE, B) + return ..() + +/datum/blobstrain/reagent/energized_jelly/tesla_reaction(obj/structure/blob/B, power) + return FALSE + +/datum/blobstrain/reagent/energized_jelly/emp_reaction(obj/structure/blob/B, severity) + var/damage = rand(30, 50) - severity * rand(10, 15) + B.take_damage(damage, BURN, ENERGY) + +/datum/reagent/blob/energized_jelly + name = "Energized Blob Jelly" + taste_description = "gelatin" + color = "#EFD65A" + +/datum/reagent/blob/energized_jelly/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.losebreath += round(0.2*reac_volume) + exposed_mob.adjustStaminaLoss(reac_volume * 1.2) + if(exposed_mob) + exposed_mob.apply_damage(0.6*reac_volume, OXY) diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm new file mode 100644 index 00000000000..e1ae8294df3 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm @@ -0,0 +1,74 @@ +//does aoe brute damage when hitting targets, is immune to explosions +/datum/blobstrain/reagent/explosive_lattice + name = "Explosive Lattice" + description = "will attack with small explosions, dealing a medium mix of brute and burn damage to everyone nearby. Spores explode on death." + effectdesc = "will also resist explosions, but takes increased damage from fire and other energy sources." + analyzerdescdamage = "Does a medium mix of brute and burn damage in a small explosion around its targets. Spores explode on death." + analyzerdesceffect = "Is highly resistant to explosions, but takes increased damage from fire and other energy sources." + color = "#8B2500" + complementary_color = "#00668B" + blobbernaut_message = "blasts" + message = "The blob blasts you" + reagent = /datum/reagent/blob/explosive_lattice + +/datum/blobstrain/reagent/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_flag == BOMB) + return 0 + else if(damage_flag != MELEE && damage_flag != BULLET && damage_flag != LASER) + return damage * 1.5 + return ..() + +/datum/blobstrain/reagent/explosive_lattice/on_sporedeath(mob/living/spore) + var/obj/effect/temp_visual/explosion/fast/effect = new /obj/effect/temp_visual/explosion/fast(get_turf(spore)) + effect.alpha = 150 + for(var/mob/living/actor in orange(get_turf(spore), 1)) + if(ROLE_BLOB in actor.faction) // No friendly fire + continue + actor.take_overall_damage(10, 10) + +/datum/reagent/blob/explosive_lattice + name = "Explosive Lattice" + taste_description = "the bomb" + color = "#8B2500" + +/datum/reagent/blob/explosive_lattice/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + var/brute_loss = 0 + var/burn_loss = 0 + var/bomb_armor = 0 + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + + if(reac_volume >= 10) // If it's not coming from a sporecloud, AOE 'explosion' damage + var/epicenter_turf = get_turf(exposed_mob) + var/obj/effect/temp_visual/explosion/fast/ex_effect = new /obj/effect/temp_visual/explosion/fast(get_turf(exposed_mob)) + ex_effect.alpha = 150 + + // Total damage to epicenter mob of 0.7*reac_volume, like a mid-tier strain + brute_loss = reac_volume*0.35 + + bomb_armor = exposed_mob.getarmor(null, BOMB) + if(bomb_armor) // Same calculation and proc that ex_act uses on mobs + brute_loss = brute_loss*(2 - round(bomb_armor*0.01, 0.05)) + + burn_loss = brute_loss + + exposed_mob.take_overall_damage(brute_loss, burn_loss) + + for(var/mob/living/nearby_mob in orange(epicenter_turf, 1)) + if(ROLE_BLOB in nearby_mob.faction) // No friendly fire. + continue + if(nearby_mob == exposed_mob) // We've already hit the epicenter mob + continue + // AoE damage of 0.5*reac_volume to everyone in a 1 tile range + brute_loss = reac_volume*0.25 + burn_loss = brute_loss + + bomb_armor = nearby_mob.getarmor(null, BOMB) + if(bomb_armor) // Same calculation and prod that ex_act uses on mobs + brute_loss = brute_loss*(2 - round(bomb_armor*0.01, 0.05)) + burn_loss = brute_loss + + nearby_mob.take_overall_damage(brute_loss, burn_loss) + + else + exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/multiplex.dm b/code/modules/antagonists/blob/blobstrains/multiplex.dm new file mode 100644 index 00000000000..aaebf1d0526 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/multiplex.dm @@ -0,0 +1,40 @@ +/datum/blobstrain/multiplex + var/list/blobstrains + var/typeshare + +/datum/blobstrain/multiplex/New(mob/camera/blob/new_overmind, list/blobstrains) + . = ..() + for (var/bt in blobstrains) + if (ispath(bt, /datum/blobstrain)) + src.blobstrains += new bt(overmind) + else if (istype(bt, /datum/blobstrain)) + var/datum/blobstrain/bts = bt + bts.overmind = overmind + src.blobstrains += bt + typeshare = (0.8 * length(src.blobstrains)) - (length(src.blobstrains)-1) // 1 is 80%, 2 are 60% etc + +/datum/blobstrain/multiplex/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.damage_reaction(B, damage, damage_type, damage_flag, coefficient*typeshare) + +/datum/blobstrain/multiplex/death_reaction(obj/structure/blob/B, damage_flag, coefficient = 1) //when a blob dies, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.death_reaction(B, damage_flag, coefficient*typeshare) + +/datum/blobstrain/multiplex/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.expand_reaction(B, newB, T, O, coefficient*typeshare) + +/datum/blobstrain/multiplex/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.tesla_reaction(B, power, coefficient*typeshare) + if (prob(. / length(blobstrains) * 100)) + return 1 + +/datum/blobstrain/multiplex/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.extinguish_reaction(B, coefficient*typeshare) + +/datum/blobstrain/multiplex/emp_reaction(obj/structure/blob/B, severity, coefficient = 1) //when the blob is hit with an emp, do this + for (var/datum/blobstrain/bt in blobstrains) + . += bt.emp_reaction(B, severity, coefficient*typeshare) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm new file mode 100644 index 00000000000..4c84eb639d7 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -0,0 +1,41 @@ +//does massive brute and burn damage, but can only expand manually +/datum/blobstrain/reagent/networked_fibers + name = "Networked Fibers" + description = "will do a high mix of brute and burn damage, and will generate resources quicker, but can only expand manually using the core or nodes." + shortdesc = "will do a high mix of brute and burn damage." + effectdesc = "will move your core or node when manually expanding near it." + analyzerdescdamage = "Does a high mix of brute and burn damage." + analyzerdesceffect = "Is mobile and generates resources rapidly." + color = "#4F4441" + complementary_color = "#414C4F" + reagent = /datum/reagent/blob/networked_fibers + core_regen_bonus = 3 + +/datum/blobstrain/reagent/networked_fibers/expand_reaction(obj/structure/blob/spawning_blob, obj/structure/blob/new_blob, turf/chosen_turf, mob/camera/blob/overmind) + if(!overmind && new_blob.overmind) + new_blob.overmind.add_points(1) + qdel(new_blob) + return + if(isspaceturf(chosen_turf)) + return + for(var/obj/structure/blob/possible_expander in range(1, new_blob)) + if(possible_expander.overmind == overmind && (istype(possible_expander, /obj/structure/blob/special/core) || istype(possible_expander, /obj/structure/blob/special/node))) + new_blob.forceMove(get_turf(possible_expander)) + possible_expander.forceMove(chosen_turf) + possible_expander.setDir(get_dir(new_blob, possible_expander)) + return + overmind.add_points(4) + qdel(new_blob) + +//does massive brute and burn damage, but can only expand manually +/datum/reagent/blob/networked_fibers + name = "Networked Fibers" + taste_description = "efficiency" + color = "#4F4441" + +/datum/reagent/blob/networked_fibers/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + if(!QDELETED(exposed_mob)) + exposed_mob.apply_damage(0.6*reac_volume, BURN, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm new file mode 100644 index 00000000000..d035319219d --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -0,0 +1,52 @@ +//does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged +/datum/blobstrain/reagent/pressurized_slime + name = "Pressurized Slime" + description = "will do low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery." + effectdesc = "will also make tiles slippery near attacked blobs." + analyzerdescdamage = "Does low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery, extinguishing them. Is resistant to brute attacks." + analyzerdesceffect = "When attacked or killed, lubricates nearby tiles, extinguishing anything on them." + color = "#AAAABB" + complementary_color = "#BBBBAA" + blobbernaut_message = "emits slime at" + message = "The blob splashes into you" + message_living = ", and you gasp for breath" + reagent = /datum/reagent/blob/pressurized_slime + +/datum/blobstrain/reagent/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) || damage_type != BURN) + extinguisharea(B, damage) + if(damage_type == BRUTE) + return damage * 0.5 + return ..() + +/datum/blobstrain/reagent/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag) + if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) + B.visible_message(span_boldwarning("The blob ruptures, spraying the area with liquid!")) + extinguisharea(B, 50) + +/datum/blobstrain/reagent/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance) + for(var/turf/open/T in range(1, B)) + if(prob(probchance)) + T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + for(var/obj/O in T) + O.extinguish() + for(var/mob/living/L in T) + L.adjust_wet_stacks(2.5) + L.extinguish_mob() + +/datum/reagent/blob/pressurized_slime + name = "Pressurized Slime" + taste_description = "a sponge" + color = "#AAAABB" + +/datum/reagent/blob/pressurized_slime/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + var/turf/open/location_turf = get_turf(exposed_mob) + if(istype(location_turf) && prob(reac_volume)) + location_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + exposed_mob.adjust_wet_stacks(reac_volume / 10) + exposed_mob.apply_damage(0.4*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + if(exposed_mob) + exposed_mob.adjustStaminaLoss(reac_volume, FALSE) + exposed_mob.apply_damage(0.4 * reac_volume, OXY) diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm new file mode 100644 index 00000000000..1c8cb893df8 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -0,0 +1,45 @@ +//does brute damage through armor and bio resistance +/datum/blobstrain/reagent/reactive_spines + name = "Reactive Spines" + description = "will do high brute damage through armor and bio resistance." + effectdesc = "will also react when attacked with burn or brute damage, attacking everything in melee range." + analyzerdescdamage = "Does high brute damage, ignoring armor and bio resistance." + analyzerdesceffect = "When attacked with burn or brute damage it violently lashes out, attacking everything nearby." + color = "#9ACD32" + complementary_color = "#FFA500" + blobbernaut_message = "stabs" + message = "The blob stabs you" + reagent = /datum/reagent/blob/reactive_spines + COOLDOWN_DECLARE(retaliate_cooldown) + +/datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.get_integrity() - damage > 0 && COOLDOWN_FINISHED(src, retaliate_cooldown)) // Is there any damage, is it burn or brute, will we be alive, and has the cooldown finished? + COOLDOWN_START(src, retaliate_cooldown, 2.5 SECONDS) // 2.5 seconds before auto-retaliate can whack everything within 1 tile again + B.visible_message(span_boldwarning("The blob retaliates, lashing out!")) + for(var/atom/thing in range(1, B)) + if(!thing.can_blob_attack()) + continue + var/attacked_turf = get_turf(thing) + if(isliving(thing) && !HAS_TRAIT(thing, TRAIT_BLOB_ALLY)) // Make sure to inject strain-reagents with automatic attacks when needed. + B.blob_attack_animation(attacked_turf, overmind) + attack_living(thing) + + else if(thing.blob_act(B)) // After checking for mobs, whack everything else with the standard attack + B.blob_attack_animation(attacked_turf, overmind) // Only play the animation if the attack did something meaningful + + return ..() + +/datum/reagent/blob/reactive_spines + name = "Reactive Spines" + taste_description = "rock" + color = "#9ACD32" + +/datum/reagent/blob/reactive_spines/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) + return 0 //the dead, and blob mobs, don't cause reactions + return reac_volume + +/datum/reagent/blob/reactive_spines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.adjustBruteLoss(reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm new file mode 100644 index 00000000000..a62895ae6c4 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -0,0 +1,39 @@ +//does toxin damage, hallucination, targets think they're not hurt at all +/datum/blobstrain/reagent/regenerative_materia + name = "Regenerative Materia" + description = "will do medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. The core regenerates much faster." + analyzerdescdamage = "Does medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. Core regenerates much faster." + color = "#A88FB7" + complementary_color = "#AF7B8D" + message_living = ", and you feel alive" + reagent = /datum/reagent/blob/regenerative_materia + core_regen_bonus = 18 + point_rate_bonus = 1 + +/datum/reagent/blob/regenerative_materia + name = "Regenerative Materia" + taste_description = "heaven" + color = "#A88FB7" + +/datum/reagent/blob/regenerative_materia/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + if(iscarbon(exposed_mob)) + exposed_mob.adjust_drugginess(reac_volume * 2 SECONDS) + if(exposed_mob.reagents) + exposed_mob.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume) + exposed_mob.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume) + exposed_mob.apply_damage(0.7*reac_volume, TOX) + +/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) + . = ..() + if(metabolizer.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH + +/datum/reagent/blob/regenerative_materia/on_mob_metabolize(mob/living/metabolizer) + . = ..() + metabolizer.apply_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type) + +/datum/reagent/blob/regenerative_materia/on_mob_end_metabolize(mob/living/metabolizer) + . = ..() + metabolizer.remove_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type) diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm new file mode 100644 index 00000000000..83d84618da5 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -0,0 +1,36 @@ +/datum/blobstrain/reagent/replicating_foam + name = "Replicating Foam" + description = "will do medium brute damage and occasionally expand again when expanding." + shortdesc = "will do medium brute damage." + effectdesc = "will also expand when attacked with burn damage, but takes more brute damage." + color = "#7B5A57" + complementary_color = "#57787B" + analyzerdescdamage = "Does medium brute damage." + analyzerdesceffect = "Expands when attacked with burn damage, will occasionally expand again when expanding, and is fragile to brute damage." + reagent = /datum/reagent/blob/replicating_foam + + +/datum/blobstrain/reagent/replicating_foam/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_type == BRUTE) + damage = damage * 2 + else if(damage_type == BURN && damage > 0 && B.get_integrity() - damage > 0 && prob(60)) + var/obj/structure/blob/newB = B.expand(null, null, 0) + if(newB) + newB.update_integrity(B.get_integrity() - damage) + newB.update_appearance() + return ..() + + +/datum/blobstrain/reagent/replicating_foam/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) + if(prob(30)) + newB.expand(null, null, 0) //do it again! + +/datum/reagent/blob/replicating_foam + name = "Replicating Foam" + taste_description = "duplication" + color = "#7B5A57" + +/datum/reagent/blob/replicating_foam/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm new file mode 100644 index 00000000000..3db0041b310 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -0,0 +1,37 @@ +//does brute damage, shifts away when damaged +/datum/blobstrain/reagent/shifting_fragments + name = "Shifting Fragments" + description = "will do medium brute damage." + effectdesc = "will also cause blob parts to shift away when attacked." + analyzerdescdamage = "Does medium brute damage." + analyzerdesceffect = "When attacked, may shift away from the attacker." + color = "#C8963C" + complementary_color = "#3C6EC8" + reagent = /datum/reagent/blob/shifting_fragments + +/datum/blobstrain/reagent/shifting_fragments/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) + if(istype(B, /obj/structure/blob/normal) || (istype(B, /obj/structure/blob/shield))) + newB.forceMove(get_turf(B)) + B.forceMove(T) + +/datum/blobstrain/reagent/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.get_integrity() - damage > 0 && prob(60-damage)) + var/list/blobstopick = list() + for(var/obj/structure/blob/OB in orange(1, B)) + if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blobstrain.type == B.overmind.blobstrain.type) + blobstopick += OB //as long as the blob picked is valid; ie, a normal or shield blob that has the same chemical as we do, we can swap with it + if(blobstopick.len) + var/obj/structure/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left + var/turf/T = get_turf(targeted) + targeted.forceMove(get_turf(B)) + B.forceMove(T) //swap the blobs + return ..() + +/datum/reagent/blob/shifting_fragments + name = "Shifting Fragments" + color = "#C8963C" + +/datum/reagent/blob/shifting_fragments/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm new file mode 100644 index 00000000000..825104ddcc1 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm @@ -0,0 +1,41 @@ +//does brute damage, bonus damage for each nearby blob, and spreads damage out +/datum/blobstrain/reagent/synchronous_mesh + name = "Synchronous Mesh" + description = "will do low brute damage, but each blob nearby attacks the target as well with stacking damage." + effectdesc = "will also spread damage between each blob near the attacked blob." + analyzerdescdamage = "Does low brute damage, increasing for each blob near the target." + analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob." + color = "#65ADA2" + complementary_color = "#AD6570" + blobbernaut_message = "synchronously strikes" + message = "The blobs strike you" + reagent = /datum/reagent/blob/synchronous_mesh + +/datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) //the cause isn't fire or bombs, so split the damage + var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs + var/list/blob_structures = orange(1, B) + for(var/obj/structure/blob/C in blob_structures) + if(!C.ignore_syncmesh_share && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //if it doesn't have the same chemical or is a core or node, don't split damage to it + damagesplit += 1 + for(var/obj/structure/blob/C in blob_structures) + if(!C.ignore_syncmesh_share && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //only hurt blobs that have the same overmind chemical and aren't cores or nodes + C.take_damage(damage/damagesplit, damage_type, 0, 0) + return damage / damagesplit + else + return damage * 1.25 + +/datum/reagent/blob/synchronous_mesh + name = "Synchronous Mesh" + taste_description = "toxic mold" + color = "#65ADA2" + +/datum/reagent/blob/synchronous_mesh/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + if(exposed_mob && reac_volume) + for(var/obj/structure/blob/nearby_blob in range(1, exposed_mob)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume + if(exposed_mob) + nearby_blob.blob_attack_animation(exposed_mob) //show them they're getting a bad time + exposed_mob.apply_damage(0.3*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/modules/antagonists/blob/overmind copy.dm similarity index 51% rename from code/game/gamemodes/blob/overmind.dm rename to code/modules/antagonists/blob/overmind copy.dm index d060d2c7890..e51954dd12e 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind copy.dm @@ -1,26 +1,4 @@ /mob/camera/blob - name = "Blob Overmind" - real_name = "Blob Overmind" - icon = 'icons/mob/blob.dmi' - icon_state = "marker" - nightvision = 8 - sight = SEE_TURFS|SEE_MOBS|SEE_OBJS - invisibility = INVISIBILITY_OBSERVER - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - mouse_opacity = MOUSE_OPACITY_OPAQUE - see_invisible = SEE_INVISIBLE_LIVING - pass_flags = PASSBLOB - faction = list(ROLE_BLOB) - - var/obj/structure/blob/core/blob_core = null // The blob overmind's core - var/blob_points = 0 - var/max_blob_points = 100 - var/last_attack = 0 - var/nodes_required = TRUE //if the blob needs nodes to place resource and factory blobs - var/split_used = FALSE - var/is_offspring = FALSE - var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() - var/list/blob_mobs = list() /mob/camera/blob/New() var/new_name = "[initial(name)] ([rand(1, 999)])" @@ -48,13 +26,6 @@ if(blob_core && hud_used) hud_used.blobhealthdisplay.maptext = "
[round(blob_core.obj_integrity)]
" -/mob/camera/blob/proc/add_points(var/points) - if(points != 0) - blob_points = clamp(blob_points + points, 0, max_blob_points) - if(hud_used) - hud_used.blobpwrdisplay.maptext = "
[round(src.blob_points)]
" - - /mob/camera/blob/memory() SSticker.mode.update_blob_objective() ..() @@ -84,13 +55,13 @@ if(!message) return - var/rendered = "Blob Telepathy, [name]([blob_reagent_datum.name]) states, \"[message]\"" + var/rendered = "Blob Telepathy, [name]([blobstrain.name]) states, \"[message]\"" for(var/mob/M in GLOB.mob_list) if(isovermind(M) || isblobbernaut(M) || isblobinfected(M.mind)) M.show_message(rendered, 2) else if(isobserver(M) && !isnewplayer(M)) - var/rendered_ghost = "Blob Telepathy, \ - [name]([blob_reagent_datum.name]) \ + var/rendered_ghost = "Blob Telepathy, \ + [name]([blobstrain.name]) \ (F) states, \"[message]\"" M.show_message(rendered_ghost, 2) @@ -99,22 +70,13 @@ return /mob/camera/blob/get_status_tab_items() - var/list/status_tab_data = ..() - . = status_tab_data + . = ..() if(blob_core) - status_tab_data[++status_tab_data.len] = list("Core Health:", "[blob_core.obj_integrity]") - status_tab_data[++status_tab_data.len] = list("Power Stored:", "[blob_points]/[max_blob_points]") - -/mob/camera/blob/Move(atom/newloc, direct = NONE, glide_size_override = 0, update_dir = TRUE) - if(world.time < last_movement) - return - last_movement = world.time + 0.5 // cap to 20fps - - var/obj/structure/blob/B = locate() in range("3x3", newloc) - if(B) - loc = newloc - else - return 0 + . += "Core Health[blob_core.obj_integrity]" + . += "Power Stored: [blob_points]/[max_blob_points]" + . += "Blobs to Win: [GLOB.blobs.len]/[SSticker?.mode.blob_win_count]" + if(free_strain_rerolls) + . += "You have [free_strain_rerolls] Free Strain Reroll\s Remaining" /mob/camera/blob/proc/can_attack() return (world.time > (last_attack + CLICK_CD_RANGE)) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm new file mode 100644 index 00000000000..c3b3f9c140d --- /dev/null +++ b/code/modules/antagonists/blob/overmind.dm @@ -0,0 +1,244 @@ +GLOBAL_LIST_EMPTY(overminds) + + +/mob/camera/blob + name = "Blob Overmind" + real_name = "Blob Overmind" + desc = "The overmind. It controls the blob." + icon = 'icons/mob/blob.dmi' + icon_state = "marker" + nightvision = 8 + sight = SEE_TURFS|SEE_MOBS|SEE_OBJS + invisibility = INVISIBILITY_OBSERVER + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + mouse_opacity = MOUSE_OPACITY_OPAQUE + see_invisible = SEE_INVISIBLE_LIVING + pass_flags = PASSBLOB + faction = list(ROLE_BLOB) + mouse_opacity = MOUSE_OPACITY_ICON + move_on_shuttle = TRUE + layer = FLY_LAYER + plane = ABOVE_GAME_PLANE + pass_flags = PASSBLOB + faction = list(ROLE_BLOB) + // Vivid blue green, would be cool to make this change with strain + lighting_cutoff_red = 0 + lighting_cutoff_green = 35 + lighting_cutoff_blue = 20 + hud_type = /datum/hud/blob_overmind + var/obj/structure/blob/special/core/blob_core = null // The blob overmind's core + var/blob_points = 0 + var/max_blob_points = OVERMIND_MAX_POINTS_DEFAULT + var/last_attack = 0 + var/datum/blobstrain/reagent/blobstrain + var/list/blob_mobs = list() + /// A list of all blob structures + var/list/all_blobs = list() + var/list/resource_blobs = list() + var/list/factory_blobs = list() + var/list/node_blobs = list() + var/free_strain_rerolls = OVERMIND_STARTING_REROLLS + var/last_reroll_time = 0 //time since we last rerolled, used to give free rerolls + var/nodes_required = TRUE //if the blob needs nodes to place resource and factory blobs + var/list/blobs_legit = list() + var/max_count = 0 //The biggest it got before death + var/rerolling = FALSE + /// The list of strains the blob can reroll for. + var/list/strain_choices + var/split_used = FALSE + var/is_offspring = FALSE + + +/mob/camera/blob/Initialize(mapload, starting_points = OVERMIND_STARTING_POINTS) + ADD_TRAIT(src, TRAIT_BLOB_ALLY, INNATE_TRAIT) + blob_points = starting_points + GLOB.overminds += src + var/new_name = "[initial(name)] ([rand(1, 999)])" + name = new_name + real_name = new_name + last_attack = world.time + var/datum/blobstrain/BS = pick(GLOB.valid_blobstrains) + set_strain(BS) + color = blobstrain.complementary_color + if(blob_core) + blob_core.update_appearance() + . = ..() + START_PROCESSING(SSobj, src) + GLOB.blob_telepathy_mobs |= src + + + +/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain) + if (!ispath(new_strain)) + return FALSE + + var/had_strain = FALSE + if (istype(blobstrain)) + blobstrain.on_lose() + qdel(blobstrain) + had_strain = TRUE + + blobstrain = new new_strain(src) + blobstrain.on_gain() + + if (had_strain) + to_chat(src, span_notice("Your strain is now: [blobstrain.name]!")) + to_chat(src, span_notice("The [blobstrain.name] strain [blobstrain.description]")) + if(blobstrain.effectdesc) + to_chat(src, span_notice("The [blobstrain.name] strain [blobstrain.effectdesc]")) + SEND_SIGNAL(src, COMSIG_BLOB_SELECTED_STRAIN, blobstrain) + +/mob/camera/blob/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) + if(placed) // The blob can't expand vertically (yet) + return FALSE + . = ..() + if(!.) + return + var/turf/target_turf = . + if(!is_valid_turf(target_turf)) // Allows unplaced blobs to travel through station z-levels + if(z_move_flags & ZMOVE_FEEDBACK) + to_chat(src, span_warning("Your destination is invalid. Move somewhere else and try again.")) + return null + +/mob/camera/blob/proc/is_valid_turf(turf/tile) + var/area/area = get_area(tile) + if((area && !(area.area_flags & BLOBS_ALLOWED)) || !tile || !is_station_level(tile.z) || isgroundlessturf(tile)) + return FALSE + return TRUE + +/mob/camera/blob/process() + if(!free_strain_rerolls && (last_reroll_time + BLOB_POWER_REROLL_FREE_TIME < world.time)) + to_chat(src, span_boldnotice("You have gained another free strain re-roll.")) + free_strain_rerolls = TRUE + +/// Create a blob spore and link it to us +/mob/camera/blob/proc/create_spore(turf/spore_turf, spore_type = /mob/living/simple_animal/hostile/blob_minion/spore/minion) + var/mob/living/simple_animal/hostile/blob_minion/spore/spore = new spore_type(spore_turf) + assume_direct_control(spore) + return spore + +/// Give our new minion the properties of a minion +/mob/camera/blob/proc/assume_direct_control(mob/living/minion) + minion.AddComponent(/datum/component/blob_minion, src) + +/// Add something to our list of mobs and wait for it to die +/mob/camera/blob/proc/register_new_minion(mob/living/minion) + blob_mobs |= minion + if (!istype(minion, /mob/living/basic/blob_minion/blobbernaut)) + RegisterSignal(minion, COMSIG_LIVING_DEATH, PROC_REF(on_minion_death)) + +/// When a spore (or zombie) dies then we do this +/mob/camera/blob/proc/on_minion_death(mob/living/spore) + SIGNAL_HANDLER + blobstrain.on_sporedeath(spore) + + +/mob/camera/blob/Destroy() + QDEL_NULL(blobstrain) + for(var/BL in GLOB.blobs) + var/obj/structure/blob/B = BL + if(B && B.overmind == src) + B.overmind = null + B.update_appearance() //reset anything that was ours + for(var/obj/structure/blob/blob_structure as anything in all_blobs) + blob_structure.overmind = null + all_blobs = null + resource_blobs = null + factory_blobs = null + node_blobs = null + blob_mobs = null + GLOB.overminds -= src + QDEL_LIST_ASSOC_VAL(strain_choices) + + STOP_PROCESSING(SSobj, src) + GLOB.blob_telepathy_mobs -= src + + return ..() + +/mob/camera/blob/proc/can_attack() + return (world.time > (last_attack + CLICK_CD_RANGE)) + +/mob/camera/blob/Move(atom/newloc, direct = NONE, glide_size_override = 0, update_dir = TRUE) + if(world.time < last_movement) + return + last_movement = world.time + 0.5 // cap to 20fps + + var/obj/structure/blob/B = locate() in range(OVERMIND_MAX_CAMERA_STRAY, newloc) + if(B) + loc = newloc + else + return FALSE + +/mob/camera/blob/Login() + . = ..() + if(!. || !client) + return FALSE + update_health_hud() + add_points(0) + +/mob/camera/blob/examine(mob/user) + . = ..() + if(blobstrain) + . += "Its strain is [blobstrain.name]." + +/mob/camera/blob/update_health_hud() + if(!blob_core) + return FALSE + var/current_health = round((blob_core.obj_integrity / blob_core.max_integrity) * 100) + hud_used.blobhealthdisplay.maptext = MAPTEXT("
[current_health]%
") + for(var/mob/living/basic/blob_minion/blobbernaut/blobbernaut in blob_mobs) + var/datum/hud/using_hud = blobbernaut.hud_used + if(!using_hud?.blobpwrdisplay) + continue + using_hud.blobpwrdisplay.maptext = MAPTEXT("
[current_health]%
") + +/mob/camera/blob/proc/add_points(points) + blob_points = clamp(blob_points + points, 0, max_blob_points) + hud_used.blobpwrdisplay.maptext = MAPTEXT("
[round(blob_points)]
") + +/mob/camera/blob/say( + message, + bubble_type, + list/spans = list(), + sanitize = TRUE, + datum/language/language, + ignore_spam = FALSE, + forced, + filterproof = FALSE, + message_range = 7, + list/message_mods = list(), +) + if (!message) + return + + if (src.client) + if(GLOB.admin_mutes_assoc[ckey] & MUTE_IC) + to_chat(src, span_boldwarning("You cannot send IC messages (muted).")) + return + if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message, MUTE_IC)) + return + + if (stat) + return + + blob_talk_overmind(message) + +/mob/camera/blob/proc/blob_talk_overmind(message) + + message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) + + if (!message) + return + + add_say_logs(src, message, language = "BLOB") + + var/message_a = say_quote(message) + var/rendered = span_big(span_blob("\[Blob Telepathy\] [name]([blobstrain.name]) [message_a]")) + relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, src) + + +/mob/camera/blob/mind_initialize() + . = ..() + var/datum/antagonist/blob/blob = mind.has_antag_datum(/datum/antagonist/blob) + if(!blob) + mind.add_antag_datum(/datum/antagonist/blob) diff --git a/code/game/gamemodes/blob/powers.dm b/code/modules/antagonists/blob/powers copy.dm similarity index 93% rename from code/game/gamemodes/blob/powers.dm rename to code/modules/antagonists/blob/powers copy.dm index f2ec8f7c9ac..72309e461df 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/modules/antagonists/blob/powers copy.dm @@ -1,4 +1,4 @@ -// Point controlling procs +/*// Point controlling procs /mob/camera/blob/proc/can_buy(var/cost = 15) if(blob_points < cost) @@ -251,7 +251,7 @@ to_chat(blobber, "Вы блобернаут! Вы должны помочь всем формам блоба в их миссии по уничтожению всего!") to_chat(blobber, "Вы исцеляетесь, стоя на плитках блоба, однако вы будете медленно разлагаться, если получите урон за пределами блоба.") - blobber.color = blob_reagent_datum.complementary_color + blobber.color = blobstrain.complementary_color blobber.overmind = src blob_mobs.Add(blobber) blobber.AIStatus = AI_OFF @@ -323,7 +323,7 @@ var/turf/T = get_turf(src) expand_blob(T) -/mob/camera/blob/proc/expand_blob(var/turf/T) +/mob/camera/blob/proc/expand_blob(turf/T) if(!T) return @@ -347,14 +347,14 @@ if(!((locate(/mob/living) in T) || can_buy(5))) return last_attack = world.time - OB.expand(T, 0, blob_reagent_datum.color) + OB.expand(T, 0, blobstrain.color) for(var/mob/living/L in T) if(ROLE_BLOB in L.faction) //no friendly/dead fire continue var/mob_protection = L.get_permeability_protection() - blob_reagent_datum.reaction_mob(L, REAGENT_TOUCH, 25, 1, mob_protection) - blob_reagent_datum.send_message(L) - OB.color = blob_reagent_datum.color + blobstrain.reaction_mob(L, REAGENT_TOUCH, 25, 1, mob_protection) + blobstrain.send_message(L) + OB.color = blobstrain.color return @@ -469,29 +469,17 @@ set name = "Reactive Chemical Adaptation (50)" set desc = "Заменяет ваш химикат на другой случайным образом." - if(!can_buy(50)) - return - - var/datum/reagent/blob/B = pick((subtypesof(/datum/reagent/blob) - blob_reagent_datum.type)) - blob_reagent_datum = new B - var/datum/antagonist/blob_overmind/overmind_datum = mind.has_antag_datum(/datum/antagonist/blob_overmind) - if(overmind_datum) - overmind_datum.reagent = blob_reagent_datum - color = blob_reagent_datum.complementary_color - - for(var/obj/structure/blob/BL in GLOB.blobs) - BL.adjustcolors(blob_reagent_datum.color) + //var/datum/antagonist/blob_overmind/overmind_datum = mind.has_antag_datum(/datum/antagonist/blob_overmind) + //if(overmind_datum) + // overmind_datum.reagent = blob_reagent_datum - for(var/mob/living/simple_animal/hostile/blob/BLO) - BLO.adjustcolors(blob_reagent_datum.complementary_color) - - to_chat(src, "Ваш новый реагент: [blob_reagent_datum.name] - [blob_reagent_datum.description]") + //to_chat(src, "Ваш новый реагент: [blob_reagent_datum.name] - [blob_reagent_datum.description]") /mob/camera/blob/verb/blob_help() set category = "Blob" set name = "*Blob Help*" set desc = "Help on how to blob." - for (var/message in get_blob_help_messages(blob_reagent_datum)) + for (var/message in get_blob_help_messages(blobstrain)) to_chat(src, message) - +*/ diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm new file mode 100644 index 00000000000..7db851c564a --- /dev/null +++ b/code/modules/antagonists/blob/powers.dm @@ -0,0 +1,379 @@ +#define BLOB_REROLL_RADIUS 60 + +/** Simple price check */ +/mob/camera/blob/proc/can_buy(cost = 15) + if(blob_points < cost) + to_chat(src, span_warning("You cannot afford this, you need at least [cost] resources!")) + balloon_alert(src, "need [cost-blob_points] more resource\s!") + return FALSE + add_points(-cost) + return TRUE + + +/** Checks proximity for mobs */ +/mob/camera/blob/proc/check_core_visibility() + for(var/mob/living/player in range(7, src)) + if(ROLE_BLOB in player.faction) + continue + if(player.client) + to_chat(src, span_warning("There is someone too close to place your blob core!")) + return FALSE + + for(var/mob/living/player in view(13, src)) + if(ROLE_BLOB in player.faction) + continue + if(player.client) + to_chat(src, span_warning("Someone could see your blob core from here!")) + return FALSE + + return TRUE + + +/** Checks for previous blobs or denose objects on the tile. */ +/mob/camera/blob/proc/check_objects_tile(turf/placement) + for(var/obj/object in placement) + if(istype(object, /obj/structure/blob)) + if(istype(object, /obj/structure/blob/normal)) + qdel(object) + else + to_chat(src, span_warning("There is already a blob here!")) + return FALSE + else + if(object.density) + to_chat(src, span_warning("This spot is too dense to place a blob core on!")) + return FALSE + + return TRUE + +/** Moves the core elsewhere. */ +/mob/camera/blob/proc/transport_core() + if(blob_core) + forceMove(blob_core.drop_location()) + +/** Jumps to a node */ +/mob/camera/blob/proc/jump_to_node() + if(!length(GLOB.blob_nodes)) + return FALSE + + var/list/nodes = list() + for(var/index in 1 to length(GLOB.blob_nodes)) + var/obj/structure/blob/special/node/blob = GLOB.blob_nodes[index] + nodes["Blob Node #[index] ([get_area_name(blob)])"] = blob + + var/node_name = tgui_input_list(src, "Choose a node to jump to", "Node Jump", nodes) + if(isnull(node_name) || isnull(nodes[node_name])) + return FALSE + + var/obj/structure/blob/special/node/chosen_node = nodes[node_name] + if(chosen_node) + forceMove(chosen_node.loc) + +/** Places important blob structures */ +/mob/camera/blob/proc/create_special(price, blobstrain, min_separation, needs_node, turf/tile) + if(!tile) + tile = get_turf(src) + var/obj/structure/blob/blob = (locate(/obj/structure/blob) in tile) + if(!blob) + to_chat(src, span_warning("There is no blob here!")) + balloon_alert(src, "no blob here!") + return FALSE + if(!istype(blob, /obj/structure/blob/normal)) + to_chat(src, span_warning("Unable to use this blob, find a normal one.")) + balloon_alert(src, "need normal blob!") + return FALSE + if(needs_node) + var/area/area = get_area(src) + if(!(area.area_flags & BLOBS_ALLOWED)) //factory and resource blobs must be legit + to_chat(src, span_warning("This type of blob must be placed on the station!")) + balloon_alert(src, "can't place off-station!") + return FALSE + if(nodes_required && !(locate(/obj/structure/blob/special/node) in orange(BLOB_NODE_PULSE_RANGE, tile)) && !(locate(/obj/structure/blob/special/core) in orange(BLOB_CORE_PULSE_RANGE, tile))) + to_chat(src, span_warning("You need to place this blob closer to a node or core!")) + balloon_alert(src, "too far from node or core!") + return FALSE //handholdotron 2000 + if(min_separation) + for(var/obj/structure/blob/other_blob in orange(min_separation, tile)) + if(other_blob.type == blobstrain) + to_chat(src, span_warning("There is a similar blob nearby, move more than [min_separation] tiles away from it!")) + other_blob.balloon_alert(src, "too close!") + return FALSE + if(!can_buy(price)) + return FALSE + var/obj/structure/blob/node = blob.change_to(blobstrain, src) + return node + +/** Toggles requiring nodes */ +/mob/camera/blob/proc/toggle_node_req() + nodes_required = !nodes_required + if(nodes_required) + to_chat(src, span_warning("You now require a nearby node or core to place factory and resource blobs.")) + else + to_chat(src, span_warning("You no longer require a nearby node or core to place factory and resource blobs.")) + +/** Creates a shield to reflect projectiles */ +/mob/camera/blob/proc/create_shield(turf/tile) + var/obj/structure/blob/shield/shield = locate(/obj/structure/blob/shield) in tile + if(!shield) + shield = create_special(BLOB_UPGRADE_STRONG_COST, /obj/structure/blob/shield, 0, FALSE, tile) + shield?.balloon_alert(src, "upgraded to [shield.name]!") + return FALSE + + if(!can_buy(BLOB_UPGRADE_REFLECTOR_COST)) + return FALSE + + if(shield.get_integrity() < shield.max_integrity * 0.5) + add_points(BLOB_UPGRADE_REFLECTOR_COST) + to_chat(src, span_warning("This shield blob is too damaged to be modified properly!")) + return FALSE + + to_chat(src, span_warning("You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced integrity.")) + shield = shield.change_to(/obj/structure/blob/shield/reflective, src) + shield.balloon_alert(src, "upgraded to [shield.name]!") + +/** Preliminary check before polling ghosts. */ +/mob/camera/blob/proc/create_blobbernaut() + var/turf/current_turf = get_turf(src) + var/obj/structure/blob/special/factory/factory = locate(/obj/structure/blob/special/factory) in current_turf + if(!factory) + to_chat(src, span_warning("You must be on a factory blob!")) + return FALSE + if(factory.blobbernaut || factory.is_creating_blobbernaut) //if it already made or making a blobbernaut, it can't do it again + to_chat(src, span_warning("This factory blob is already sustaining a blobbernaut.")) + return FALSE + if(factory.get_integrity() < factory.max_integrity * 0.5) + to_chat(src, span_warning("This factory blob is too damaged to sustain a blobbernaut.")) + return FALSE + if(!can_buy(BLOBMOB_BLOBBERNAUT_RESOURCE_COST)) + return FALSE + + factory.is_creating_blobbernaut = TRUE + to_chat(src, span_notice("You attempt to produce a blobbernaut.")) + pick_blobbernaut_candidate(factory) + +/// Polls ghosts to get a blobbernaut candidate. +/mob/camera/blob/proc/pick_blobbernaut_candidate(obj/structure/blob/special/factory/factory) + if(isnull(factory)) + return + var/icon/blobbernaut_icon = icon(icon, "blobbernaut") + blobbernaut_icon.Blend(blobstrain.color, ICON_MULTIPLY) + var/image/blobbernaut_image = image(blobbernaut_icon) + var/mob/chosen_one = SSpolling.poll_ghosts_for_target( + check_jobban = ROLE_BLOB, + poll_time = 20 SECONDS, + checked_target = factory, + ignore_category = POLL_IGNORE_BLOB, + alert_pic = blobbernaut_image, + jump_target = factory, + role_name_text = "blobbernaut", + chat_text_border_icon = blobbernaut_image, + ) + on_poll_concluded(factory, chosen_one) + +/// Called when the ghost poll concludes +/mob/camera/blob/proc/on_poll_concluded(obj/structure/blob/special/factory/factory, mob/dead/observer/ghost) + if(isnull(ghost)) + to_chat(src, span_warning("You could not conjure a sentience for your blobbernaut. Your points have been refunded. Try again later.")) + add_points(BLOBMOB_BLOBBERNAUT_RESOURCE_COST) + factory.assign_blobbernaut(null) + return FALSE + + var/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/blobber = new(get_turf(factory)) + assume_direct_control(blobber) + factory.assign_blobbernaut(blobber) + blobber.assign_key(ghost.key, blobstrain) + RegisterSignal(blobber, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(on_blobbernaut_attacked)) + +/// When one of our boys attacked something, we sometimes want to perform extra effects +/mob/camera/blob/proc/on_blobbernaut_attacked(mob/living/basic/blobbynaut, atom/target, success) + SIGNAL_HANDLER + if (!success) + return + blobstrain.blobbernaut_attack(target, blobbynaut) + +/** Moves the core */ +/mob/camera/blob/proc/relocate_core() + var/turf/tile = get_turf(src) + var/obj/structure/blob/special/node/blob = locate(/obj/structure/blob/special/node) in tile + + if(!blob) + to_chat(src, span_warning("You must be on a blob node!")) + return FALSE + + if(!blob_core) + to_chat(src, span_userdanger("You have no core and are about to die! May you rest in peace.")) + return FALSE + + var/area/area = get_area(tile) + if(isspaceturf(tile) || area && !(area.area_flags & BLOBS_ALLOWED)) + to_chat(src, span_warning("You cannot relocate your core here!")) + return FALSE + + if(!can_buy(BLOB_POWER_RELOCATE_COST)) + return FALSE + + var/turf/old_turf = get_turf(blob_core) + var/old_dir = blob_core.dir + blob_core.forceMove(tile) + blob_core.setDir(blob.dir) + blob.forceMove(old_turf) + blob.setDir(old_dir) + +/** Searches the tile for a blob and removes it. */ +/mob/camera/blob/proc/remove_blob(turf/tile) + var/obj/structure/blob/blob = locate() in tile + + if(!blob) + to_chat(src, span_warning("There is no blob there!")) + return FALSE + + if(blob.point_return < 0) + to_chat(src, span_warning("Unable to remove this blob.")) + return FALSE + + if(max_blob_points < blob.point_return + blob_points) + to_chat(src, span_warning("You have too many resources to remove this blob!")) + return FALSE + + if(blob.point_return) + add_points(blob.point_return) + to_chat(src, span_notice("Gained [blob.point_return] resources from removing \the [blob].")) + blob.balloon_alert(src, "+[blob.point_return] resource\s") + + qdel(blob) + + return TRUE + +/** Expands to nearby tiles */ +/mob/camera/blob/proc/expand_blob(turf/tile) + if(world.time < last_attack) + return FALSE + var/list/possible_blobs = list() + + for(var/obj/structure/blob/blob in range(tile, 1)) + possible_blobs += blob + + if(!length(possible_blobs)) + to_chat(src, span_warning("There is no blob adjacent to the target tile!")) + return FALSE + + if(!can_buy(BLOB_EXPAND_COST)) + return FALSE + + var/attack_success + for(var/mob/living/player in tile) + if(!player.can_blob_attack()) + continue + if(ROLE_BLOB in player.faction) //no friendly/dead fire + continue + if(player.stat != DEAD) + attack_success = TRUE + blobstrain.attack_living(player, possible_blobs) + + var/obj/structure/blob/blob = locate() in tile + + if(blob) + if(attack_success) //if we successfully attacked a turf with a blob on it, only give an attack refund + blob.blob_attack_animation(tile, src) + add_points(BLOB_ATTACK_REFUND) + else + to_chat(src, span_warning("There is a blob there!")) + add_points(BLOB_EXPAND_COST) //otherwise, refund all of the cost + else + directional_attack(tile, possible_blobs, attack_success) + + if(attack_success) + last_attack = world.time + CLICK_CD_MELEE + else + last_attack = world.time + CLICK_CD_RAPID + + +/** Finds cardinal and diagonal attack directions */ +/mob/camera/blob/proc/directional_attack(turf/tile, list/possible_blobs, attack_success = FALSE) + var/list/cardinal_blobs = list() + var/list/diagonal_blobs = list() + + for(var/obj/structure/blob/blob in possible_blobs) + if(get_dir(blob, tile) in GLOB.cardinal) + cardinal_blobs += blob + else + diagonal_blobs += blob + + var/obj/structure/blob/attacker + if(length(cardinal_blobs)) + attacker = pick(cardinal_blobs) + if(!attacker.expand(tile, src)) + add_points(BLOB_ATTACK_REFUND) //assume it's attacked SOMETHING, possibly a structure + else + attacker = pick(diagonal_blobs) + if(attack_success) + attacker.blob_attack_animation(tile, src) + playsound(attacker, 'sound/effects/splat.ogg', 50, TRUE) + add_points(BLOB_ATTACK_REFUND) + else + add_points(BLOB_EXPAND_COST) //if we're attacking diagonally and didn't hit anything, refund + return TRUE + +/** Rally spores to a location */ +/mob/camera/blob/proc/rally_spores(turf/tile) + to_chat(src, "You rally your spores.") + var/list/surrounding_turfs = TURF_NEIGHBORS(tile) + if(!length(surrounding_turfs)) + return FALSE + for(var/mob/living/basic/blob_mob as anything in blob_mobs) + if(!isturf(blob_mob.loc) || get_dist(blob_mob, tile) > 35 || blob_mob.key) + continue + blob_mob.ai_controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) + blob_mob.ai_controller.set_blackboard_key(BB_TRAVEL_DESTINATION, pick(surrounding_turfs)) + +/** Opens the reroll menu to change strains */ +/mob/camera/blob/proc/strain_reroll() + if (!free_strain_rerolls && blob_points < BLOB_POWER_REROLL_COST) + to_chat(src, span_warning("You need at least [BLOB_POWER_REROLL_COST] resources to reroll your strain again!")) + return FALSE + + open_reroll_menu() + +/** Controls changing strains */ +/mob/camera/blob/proc/open_reroll_menu() + if (!strain_choices) + strain_choices = list() + + var/list/new_strains = GLOB.valid_blobstrains.Copy() - blobstrain.type + for (var/unused in 1 to BLOB_POWER_REROLL_CHOICES) + var/datum/blobstrain/strain = pick_n_take(new_strains) + + var/image/strain_icon = image('icons/mob/blob.dmi', "blob_core") + strain_icon.color = initial(strain.color) + + var/info_text = span_boldnotice("[initial(strain.name)]") + info_text += "
[span_notice("[initial(strain.analyzerdescdamage)]")]" + if (!isnull(initial(strain.analyzerdesceffect))) + info_text += "
[span_notice("[initial(strain.analyzerdesceffect)]")]" + + var/datum/radial_menu_choice/choice = new + choice.image = strain_icon + choice.info = info_text + + strain_choices[initial(strain.name)] = choice + + var/strain_result = show_radial_menu(src, src, strain_choices, radius = BLOB_REROLL_RADIUS, tooltips = TRUE) + if (isnull(strain_result)) + return + + if (!free_strain_rerolls && !can_buy(BLOB_POWER_REROLL_COST)) + return + + for (var/_other_strain in GLOB.valid_blobstrains) + var/datum/blobstrain/other_strain = _other_strain + if (initial(other_strain.name) == strain_result) + set_strain(other_strain) + + if (free_strain_rerolls) + free_strain_rerolls -= 1 + + last_reroll_time = world.time + strain_choices = null + + return + +#undef BLOB_REROLL_RADIUS diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm new file mode 100644 index 00000000000..994257159b4 --- /dev/null +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -0,0 +1,421 @@ +//I will need to recode parts of this but I am way too tired atm +/obj/structure/blob + name = "blob" + icon = 'icons/mob/blob.dmi' + light_range = 3 + desc = "A thick wall of writhing tendrils." + density = FALSE + opacity = TRUE + anchored = TRUE + pass_flags_self = PASSBLOB + layer = BELOW_MOB_LAYER + can_astar_pass = CANASTARPASS_ALWAYS_PROC + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + creates_cover = TRUE + obj_flags = BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP // stops blob mobs from falling on multiz. + max_integrity = BLOB_REGULAR_MAX_HP + /// Multiplies brute damage by this + var/brute_resist = BLOB_BRUTE_RESIST + /// Multiplies burn damage by this + var/fire_resist = BLOB_FIRE_RESIST + /// how much health this blob regens when pulsed + var/health_regen = BLOB_REGULAR_HP_REGEN + /// How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. + var/point_return = 0 + /// If a threshold is reached, resulting in shifting variables + var/compromised_integrity = FALSE + /// Blob overmind + var/mob/camera/blob/overmind + /// We got pulsed when? + COOLDOWN_DECLARE(pulse_timestamp) + /// we got healed when? + COOLDOWN_DECLARE(heal_timestamp) + /// Only used by the synchronous mesh strain. If set to true, these blobs won't share or receive damage taken with others. + var/ignore_syncmesh_share = FALSE + /// If the blob blocks atmos and heat spread + var/atmosblock = FALSE + + +/obj/structure/blob/Initialize(mapload, owner_overmind) + . = ..() + ADD_TRAIT(src, TRAIT_CHASM_DESTROYED, INNATE_TRAIT) + GLOB.blobs += src + if(owner_overmind && isovermind(owner_overmind)) + overmind = owner_overmind + overmind.all_blobs += src + setDir(pick(GLOB.cardinal)) + if(atmosblock) + air_update_turf(TRUE) + ConsumeTile() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + update_blob() + + +/obj/structure/blob/proc/creation_action() //When it's created by the overmind, do this. + return + + +/obj/structure/blob/Destroy() + if(atmosblock) + atmosblock = FALSE + air_update_turf(1) + GLOB.blobs -= src + if(overmind) + overmind.all_blobs -= src + overmind.blobs_legit -= src //if it was in the legit blobs list, it isn't now + overmind = null + if(isturf(loc)) //Necessary because Expand() is screwed up and spawns a blob and then deletes it + playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) + return ..() + +/obj/structure/blob/obj_destruction(damage_flag) + if(overmind) + overmind.blobstrain.death_reaction(src, damage_flag) + . = ..() + +/obj/structure/blob/Adjacent(atom/neighbour) + . = ..() + if(.) + var/result = 0 + var/direction = get_dir(src, neighbour) + var/list/dirs = list("[NORTHWEST]" = list(NORTH, WEST), "[NORTHEAST]" = list(NORTH, EAST), "[SOUTHEAST]" = list(SOUTH, EAST), "[SOUTHWEST]" = list(SOUTH, WEST)) + for(var/A in dirs) + if(direction == text2num(A)) + for(var/B in dirs[A]) + var/C = locate(/obj/structure/blob) in get_step(src, B) + if(C) + result++ + . -= result - 1 + + +/obj/structure/blob/BlockSuperconductivity() + return atmosblock + + +/obj/structure/blob/CanAtmosPass(turf/T, vertical) + return !atmosblock + + +/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. + . = ..() + if(overmind) + add_atom_colour(overmind.blobstrain.color, FIXED_COLOUR_PRIORITY) + var/area/A = get_area(src) + if(!(A.area_flags & BLOBS_ALLOWED)) + add_atom_colour(BlendRGB(overmind.blobstrain.color, COLOR_WHITE, 0.5), FIXED_COLOUR_PRIORITY) //lighten it to indicate an off-station blob + else + remove_atom_colour(FIXED_COLOUR_PRIORITY) + + +/obj/structure/blob/proc/Be_Pulsed() + if(COOLDOWN_FINISHED(src, pulse_timestamp)) + ConsumeTile() + if(COOLDOWN_FINISHED(src, heal_timestamp)) + RegenHealth() + COOLDOWN_START(src, heal_timestamp, 20) + update_blob() + COOLDOWN_START(src, pulse_timestamp, 10) + return TRUE//we did it, we were pulsed! + return FALSE //oh no we failed + + +/obj/structure/blob/proc/RegenHealth() + obj_integrity = min(max_integrity, obj_integrity + health_regen) + update_blob() + + +/obj/structure/blob/proc/ConsumeTile() + for(var/atom/thing in loc) + if(!thing.can_blob_attack()) + continue + if(isliving(thing) && overmind && !HAS_TRAIT(thing, TRAIT_BLOB_ALLY)) // Make sure to inject strain-reagents with automatic attacks when needed. + overmind.blobstrain.attack_living(thing) + continue // Don't smack them twice though + thing.blob_act(src) + if(iswallturf(loc)) + loc.blob_act(src) //don't ask how a wall got on top of the core, just eat it + + +/obj/structure/blob/proc/blob_attack_animation(atom/A = null, controller) //visually attacks an atom + var/obj/effect/temp_visual/blob/O = new /obj/effect/temp_visual/blob(src.loc) + O.setDir(dir) + var/area/my_area = get_area(src) + if(controller) + var/mob/camera/blob/BO = controller + O.color = BO.blobstrain.color + if(!(my_area.area_flags & BLOBS_ALLOWED)) + O.color = BlendRGB(O.color, COLOR_WHITE, 0.5) //lighten it to indicate an off-station blob + O.alpha = 200 + else if(overmind) + O.color = overmind.blobstrain.color + if(!(my_area.area_flags & BLOBS_ALLOWED)) + O.color = BlendRGB(O.color, COLOR_WHITE, 0.5) //lighten it to indicate an off-station blob + if(A) + O.do_attack_animation(A) //visually attack the whatever + return O //just in case you want to do something to the animation. + + +/obj/structure/blob/proc/expand(turf/T = null, controller = null, expand_reaction = 1) + if(!T) + var/list/dirs = list(1,2,4,8) + for(var/i = 1 to 4) + var/dirn = pick(dirs) + dirs.Remove(dirn) + T = get_step(src, dirn) + if(!(locate(/obj/structure/blob) in T)) + break + else + T = null + if(!T) + return + + if(!is_location_within_transition_boundaries(T)) + return + var/make_blob = TRUE //can we make a blob? + + if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) + make_blob = FALSE + playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it + + ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us + if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable + make_blob = FALSE + T.blob_act(src) //hit the turf if it is + for(var/atom/A in T) + if(!A.CanPass(src, get_dir(T, src))) //is anything in the turf impassable + make_blob = FALSE + if(!A.can_blob_attack()) + continue + if(isliving(A) && overmind && !controller) // Make sure to inject strain-reagents with automatic attacks when needed. + overmind.blobstrain.attack_living(A) + continue // Don't smack them twice though + A.blob_act(src) //also hit everything in the turf + + if(make_blob) //well, can we? + var/obj/structure/blob/B = new /obj/structure/blob/normal(src.loc, (controller || overmind)) + B.set_density(TRUE) + if(T.Enter(B)) //NOW we can attempt to move into the tile + B.set_density(initial(B.density)) + B.forceMove(T) + var/area/Ablob = get_area(B) + if(Ablob.area_flags & BLOBS_ALLOWED) //Is this area allowed for winning as blob? + overmind.blobs_legit += B + else if(controller) + B.balloon_alert(overmind, "off-station, won't count!") + B.update_blob() + if(B.overmind && expand_reaction) + B.overmind.blobstrain.expand_reaction(src, B, T, controller) + return B + else + blob_attack_animation(T, controller) + T.blob_act(src) //if we can't move in hit the turf again + qdel(B) //we should never get to this point, since we checked before moving in. destroy the blob so we don't have two blobs on one tile + return + else + blob_attack_animation(T, controller) //if we can't, animate that we attacked + return + + +/obj/structure/blob/CanAllowThrough(atom/movable/mover, border_dir) + . = ..() + return checkpass(mover, PASSBLOB) + + +/obj/structure/blob/CanAStarPass(to_dir, datum/can_pass_info/pass_info) + return pass_info.pass_flags == PASSEVERYTHING || (pass_info.pass_flags & PASSBLOB) + + +/obj/structure/blob/emp_act(severity) + . = ..() + // tgstation emp protection + //if(. & EMP_PROTECT_SELF) + //return + if(severity > 0) + if(overmind) + overmind.blobstrain.emp_reaction(src, severity) + if(prob(100 - severity * 30)) + new /obj/effect/temp_visual/emp(get_turf(src)) + + +/obj/structure/blob/tesla_act(power) + if(overmind) + if(overmind.blobstrain.tesla_reaction(src, power)) + take_damage(power * 1.25e-3, BURN, ENERGY) + else + take_damage(power * 1.25e-3, BURN, ENERGY) + power -= power * 2.5e-3 //You don't get to do it for free + return ..() //You don't get to do it for free + + +/obj/structure/blob/blob_act(obj/structure/blob/B) + return + + +/obj/structure/blob/extinguish() + . = ..() + if(overmind) + overmind.blobstrain.extinguish_reaction(src) + + +/obj/structure/blob/hit_by_thrown_carbon(mob/living/carbon/human/C, datum/thrownthing/throwingdatum, damage, mob_hurt, self_hurt) + damage *= 0.25 // Lets not have sorium be too much of a blender / rapidly kill itself + return ..() + + +/obj/structure/blob/attack_animal(mob/living/simple_animal/M) + if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut + return + ..() + + +/obj/structure/blob/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = NONE) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/effects/attackblob.ogg', 50, TRUE) + else + playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + if(BURN) + playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + + +/obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + switch(damage_type) + if(BRUTE) + damage_amount *= brute_resist + if(BURN) + damage_amount *= fire_resist + else + return 0 + var/armor_protection = 0 + if(damage_flag) + armor_protection = armor.getRating(damage_flag) + damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) + if(overmind && damage_flag) + damage_amount = overmind.blobstrain.damage_reaction(src, damage_amount, damage_type, damage_flag) + return damage_amount + + +/obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + if(QDELETED(src)) + return + . = ..() + if(. && obj_integrity > 0) + update_blob() + + +/obj/structure/blob/has_prints() + return FALSE + +/obj/structure/blob/proc/update_state() + return + +/obj/structure/blob/proc/update_blob() + update_state() + update_appearance() + +/obj/structure/blob/proc/Life() + return + +/obj/structure/blob/proc/run_action() + return FALSE + +/obj/structure/blob/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + + arrived.blob_act(src) + + +/obj/structure/blob/proc/change_to(type, controller) + if(!ispath(type)) + CRASH("change_to(): invalid type for blob") + var/obj/structure/blob/B = new type(src.loc, controller) + B.creation_action() + B.update_blob() + B.setDir(dir) + qdel(src) + return B + + +/obj/structure/blob/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_ANALYZER) + user.changeNext_move(CLICK_CD_MELEE) + to_chat(user, "The analyzer beeps once, then reports:
") + SEND_SOUND(user, sound('sound/machines/ping.ogg')) + if(overmind) + to_chat(user, "Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") + to_chat(user, chemeffectreport(user).Join("\n")) + else + to_chat(user, "Blob core neutralized. Critical mass no longer attainable.") + to_chat(user, typereport(user).Join("\n")) + else + return ..() + + +/obj/structure/blob/examine(mob/user) + . = ..() + var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + if(user.research_scanner || hud_to_check.hudusers[user]) + . += "Your HUD displays an extensive report...
" + if(overmind) + . += overmind.blobstrain.examine(user) + else + . += "Core neutralized. Critical mass no longer attainable." + . += chemeffectreport(user) + . += typereport(user) + else + if((user == overmind || isobserver(user)) && overmind) + . += overmind.blobstrain.examine(user) + . += "It seems to be made of [get_chem_name()]." + + +/obj/structure/blob/proc/scannerreport() + return "A generic blob. Looks like someone forgot to override this proc, adminhelp this." + + +/obj/structure/blob/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_ANALYZER) + user.changeNext_move(CLICK_CD_MELEE) + to_chat(user, "The analyzer beeps once, then reports:
") + SEND_SOUND(user, sound('sound/machines/ping.ogg')) + if(overmind) + to_chat(user, "Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") + to_chat(user, chemeffectreport(user).Join("\n")) + else + to_chat(user, "Blob core neutralized. Critical mass no longer attainable.") + to_chat(user, typereport(user).Join("\n")) + else + return ..() + + +/obj/structure/blob/proc/chemeffectreport(mob/user) + RETURN_TYPE(/list) + . = list() + if(overmind) + . += list("Material: [overmind.blobstrain.name][span_notice(".")]", + "Material Effects: [span_notice("[overmind.blobstrain.analyzerdescdamage]")]", + "Material Properties: [span_notice("[overmind.blobstrain.analyzerdesceffect || "N/A"]")]") + else + . += "No Material Detected!" + +/obj/structure/blob/proc/typereport(mob/user) + RETURN_TYPE(/list) + return list("Blob Type: [span_notice("[uppertext(initial(name))]")]", + "Health: [span_notice("[obj_integrity]/[max_integrity]")]", + "Effects: [span_notice("[scannerreport()]")]") + + +/obj/structure/blob/proc/get_chem_name() + if(overmind) + return overmind.blobstrain.name + return "some kind of organic tissue" + + +/obj/structure/blob/proc/get_chem_desc() + if(overmind) + return overmind.blobstrain.description + return "something unknown" + diff --git a/code/modules/antagonists/blob/structures/captured_nuke.dm b/code/modules/antagonists/blob/structures/captured_nuke.dm new file mode 100644 index 00000000000..879c9c610ff --- /dev/null +++ b/code/modules/antagonists/blob/structures/captured_nuke.dm @@ -0,0 +1,31 @@ +/obj/structure/blob/special/captured_nuke //alternative to blob just straight up destroying nukes + name = "blob captured nuke" + icon_state = "blob" + desc = "A Nuclear Warhead tangled in blob tendrils pulsating with a horrific green glow." + max_integrity = BLOB_CAP_NUKE_MAX_HP + health_regen = BLOB_CAP_NUKE_HP_REGEN + point_return = BLOB_REFUND_CAP_NUKE_COST + +/obj/structure/blob/special/captured_nuke/Initialize(mapload, obj/machinery/nuclearbomb/N) + . = ..() + START_PROCESSING(SSobj, src) + N?.forceMove(src) + update_icon(UPDATE_OVERLAYS) + + +/obj/structure/blob/special/captured_nuke/update_overlays() + . = ..() + . += mutable_appearance('icons/mob/blob.dmi', "blob_nuke_overlay", appearance_flags = RESET_COLOR) + + +/obj/structure/blob/special/captured_nuke/Destroy() + for(var/obj/machinery/nuclearbomb/O in contents) + O.forceMove(loc) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/blob/special/captured_nuke/process() + if(COOLDOWN_FINISHED(src, heal_timestamp)) + RegenHealth() + COOLDOWN_START(src, heal_timestamp, 20) + diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm new file mode 100644 index 00000000000..3f36ba68159 --- /dev/null +++ b/code/modules/antagonists/blob/structures/core.dm @@ -0,0 +1,157 @@ +/obj/structure/blob/special/core + name = "blob core" + icon = 'icons/mob/blob.dmi' + icon_state = "blank_blob" + desc = "A huge, pulsating yellow mass." + max_integrity = BLOB_CORE_MAX_HP + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 90) + explosion_block = 6 + explosion_vertical_block = 5 + point_return = BLOB_REFUND_CORE_COST + fire_resist = BLOB_CORE_FIRE_RESIST + health_regen = BLOB_CORE_HP_REGEN + resistance_flags = LAVA_PROOF + strong_reinforce_range = BLOB_CORE_STRONG_REINFORCE_RANGE + reflector_reinforce_range = BLOB_CORE_REFLECTOR_REINFORCE_RANGE + claim_range = BLOB_CORE_CLAIM_RANGE + pulse_range = BLOB_CORE_PULSE_RANGE + expand_range = BLOB_CORE_EXPAND_RANGE + ignore_syncmesh_share = TRUE + var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes + var/is_offspring = null + var/selecting = 0 + + +/obj/structure/blob/special/core/Initialize(mapload, client/new_overmind = null, offspring) + GLOB.blob_cores += src + START_PROCESSING(SSobj, src) + GLOB.poi_list |= src + update_blob() //so it atleast appears + if(!overmind) + create_overmind(new_overmind) + is_offspring = offspring + if(overmind) + overmind.blobstrain.on_gain() + update_blob() + AddComponent(/datum/component/stationloving, FALSE, TRUE) + return ..() + +/obj/structure/blob/special/core/Destroy() + GLOB.blob_cores -= src + if(overmind) + overmind.blob_core = null + overmind = null + SSticker?.mode?.blob_died() + STOP_PROCESSING(SSobj, src) + GLOB.poi_list.Remove(src) + return ..() + +/obj/structure/blob/special/core/scannerreport() + return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." + +/obj/structure/blob/special/core/update_overlays() + . = ..() + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") + if(overmind) + blob_overlay.color = overmind.blobstrain.color + . += blob_overlay + . += mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay") + if(blocks_emissive) + add_overlay(get_emissive_block()) + +/obj/structure/blob/special/core/update_icon() + . = ..() + color = null + +/obj/structure/blob/special/core/ex_act(severity, target) + var/damage = 10 * (severity + 1) //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity + take_damage(damage, BRUTE, BOMB, 0) + return TRUE + + +/obj/structure/blob/special/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1) + . = ..() + if(obj_integrity > 0) + if(overmind) //we should have an overmind, but... + overmind.update_health_hud() + +/obj/structure/blob/special/core/RegenHealth() + return // Don't regen, we handle it in Life() + +/obj/structure/blob/special/core/process(seconds_per_tick) + if(QDELETED(src)) + return + if(!overmind) + create_overmind() + if(overmind) + overmind.blobstrain.core_process() + overmind.update_health_hud() + pulse_area(overmind, claim_range, pulse_range, expand_range) + reinforce_area(seconds_per_tick) + ..() + +/obj/structure/blob/special/core/proc/create_overmind(client/new_overmind, override_delay) + if(overmind_get_delay > world.time && !override_delay) + return + + overmind_get_delay = world.time + 5 MINUTES + + if(overmind) + qdel(overmind) + if(new_overmind) + get_new_overmind(new_overmind) + else + INVOKE_ASYNC(src, PROC_REF(get_new_overmind)) + + +/obj/structure/blob/special/core/proc/get_new_overmind(client/new_overmind) + var/mob/C = null + var/list/candidates = list() + if(!new_overmind) + // sendit + if(is_offspring) + candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob offspring?", ROLE_BLOB, TRUE, source = src) + else + candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob?", ROLE_BLOB, TRUE, source = src) + + if(length(candidates)) + C = pick(candidates) + else + C = new_overmind + + if(C && !QDELETED(src)) + var/mob/camera/blob/B = new(loc) + B.mind_initialize() + B.key = C.key + B.blob_core = src + overmind = B + B.is_offspring = is_offspring + overmind.select_reagent() + addtimer(CALLBACK(src, PROC_REF(add_datum_if_not_exist)), TIME_TO_ADD_OM_DATUM) + log_game("[B.key] has become Blob [is_offspring ? "offspring" : ""]") + + +/obj/structure/blob/special/core/proc/add_datum_if_not_exist() + if(!overmind.mind.has_antag_datum(/datum/antagonist/blob_overmind)) + var/datum/antagonist/blob_overmind/overmind_datum = new + overmind_datum.add_to_mode = TRUE + overmind_datum.is_offspring = is_offspring + if(overmind.blobstrain) + overmind_datum.strain = overmind.blobstrain + overmind.mind.add_antag_datum(overmind_datum) + +/obj/structure/blob/special/core/proc/lateblobtimer() + addtimer(CALLBACK(src, PROC_REF(lateblobcheck)), 50) + +/obj/structure/blob/special/core/proc/lateblobcheck() + if(overmind) + overmind.add_points(BLOB_BONUS_POINTS) + if(!overmind.mind) + log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks a overmind.mind.") + else + log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks an overmind.") + +/obj/structure/blob/special/core/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer) + if(overmind && is_station_level(new_turf?.z)) + overmind.forceMove(get_turf(src)) + return ..() diff --git a/code/modules/antagonists/blob/structures/factory.dm b/code/modules/antagonists/blob/structures/factory.dm new file mode 100644 index 00000000000..bc74f192e57 --- /dev/null +++ b/code/modules/antagonists/blob/structures/factory.dm @@ -0,0 +1,97 @@ +/obj/structure/blob/special/factory + name = "factory blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_factory" + desc = "A thick spire of tendrils." + max_integrity = BLOB_FACTORY_MAX_HP + health_regen = BLOB_FACTORY_HP_REGEN + point_return = BLOB_REFUND_FACTORY_COST + resistance_flags = LAVA_PROOF + armor = list("melee" = 0, "bullet" = 0, "laser" = 25, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + ///How many spores this factory can have. + var/max_spores = BLOB_FACTORY_MAX_SPORES + ///The list of spores and zombies + var/list/spores_and_zombies = list() + COOLDOWN_DECLARE(spore_delay) + var/spore_cooldown = BLOBMOB_SPORE_SPAWN_COOLDOWN + ///Its Blobbernaut, if it has spawned any. + var/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/blobbernaut + ///Used in blob/powers.dm, checks if it's already trying to spawn a blobbernaut to prevent issues. + var/is_creating_blobbernaut = FALSE + + +/obj/structure/blob/special/factory/scannerreport() + if(blobbernaut) + return "It is currently sustaining a blobbernaut, making it fragile and unable to produce blob spores." + return "Will produce a blob spore every few seconds." + +/obj/structure/blob/special/factory/creation_action() + if(overmind) + overmind.factory_blobs += src + +/obj/structure/blob/special/factory/Destroy() + spores_and_zombies = null + blobbernaut = null + if(overmind) + overmind.factory_blobs -= src + return ..() + +/obj/structure/blob/special/factory/Be_Pulsed() + . = ..() + if(blobbernaut) + return + if(length(spores_and_zombies) >= max_spores) + return + if(!COOLDOWN_FINISHED(src, spore_delay)) + return + COOLDOWN_START(src, spore_delay, spore_cooldown) + flick("blob_factory_glow", src) + var/mob/living/basic/blob_minion/created_spore = (overmind) ? overmind.create_spore(loc) : new(loc) + register_mob(created_spore) + RegisterSignal(created_spore, COMSIG_BLOB_ZOMBIFIED, PROC_REF(on_zombie_created)) + +/// Tracks the existence of a mob in our mobs list +/obj/structure/blob/special/factory/proc/register_mob(mob/living/simple_animal/hostile/blob_minion/blob_mob) + spores_and_zombies |= blob_mob + blob_mob.link_to_factory(src) + RegisterSignal(blob_mob, COMSIG_LIVING_DEATH, PROC_REF(on_spore_died)) + RegisterSignal(blob_mob, COMSIG_QDELETING, PROC_REF(on_spore_lost)) + +/// When a spore or zombie dies reset our spawn cooldown so we don't instantly replace it +/obj/structure/blob/special/factory/proc/on_spore_died(mob/living/dead_spore) + SIGNAL_HANDLER + COOLDOWN_START(src, spore_delay, spore_cooldown) + +/// When a spore is deleted remove it from our list +/obj/structure/blob/special/factory/proc/on_spore_lost(mob/living/dead_spore) + SIGNAL_HANDLER + spores_and_zombies -= dead_spore + +/// When a spore makes a zombie add it to our mobs list +/obj/structure/blob/special/factory/proc/on_zombie_created(mob/living/spore, mob/living/zombie) + SIGNAL_HANDLER + register_mob(zombie) + +/// Produce a blobbernaut +/obj/structure/blob/special/factory/proc/assign_blobbernaut(mob/living/new_naut) + is_creating_blobbernaut = FALSE + if (isnull(new_naut)) + return + + modify_max_integrity(initial(max_integrity) * 0.25) //factories that produced a blobbernaut have much lower health + visible_message(span_boldwarning("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!")) + playsound(loc, 'sound/effects/splat.ogg', 50, TRUE) + + blobbernaut = new_naut + blobbernaut.link_to_factory(src) + RegisterSignal(new_naut, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(on_blobbernaut_death)) + update_appearance(UPDATE_ICON) + +/// When our brave soldier dies, reset our max integrity +/obj/structure/blob/special/factory/proc/on_blobbernaut_death(mob/living/death_naut) + SIGNAL_HANDLER + if (isnull(blobbernaut) || blobbernaut != death_naut) + return + blobbernaut = null + max_integrity = initial(max_integrity) + update_appearance(UPDATE_ICON) diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm new file mode 100644 index 00000000000..0b7a6b180ba --- /dev/null +++ b/code/modules/antagonists/blob/structures/node.dm @@ -0,0 +1,56 @@ +/obj/structure/blob/special/node + name = "blob node" + icon = 'icons/mob/blob.dmi' + icon_state = "blank_blob" + desc = "A large, pulsating yellow mass." + max_integrity = BLOB_NODE_MAX_HP + health_regen = BLOB_NODE_HP_REGEN + armor = list("melee" = 0, "bullet" = 0, "laser" = 25, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) + point_return = BLOB_REFUND_NODE_COST + claim_range = BLOB_NODE_CLAIM_RANGE + pulse_range = BLOB_NODE_PULSE_RANGE + expand_range = BLOB_NODE_EXPAND_RANGE + resistance_flags = LAVA_PROOF + ignore_syncmesh_share = TRUE + +/obj/structure/blob/special/node/Initialize(mapload) + GLOB.blob_nodes += src + START_PROCESSING(SSobj, src) + . = ..() + + +/obj/structure/blob/special/node/scannerreport() + return "Gradually expands and sustains nearby blob spores and blobbernauts." + +/obj/structure/blob/special/node/update_icon() + . = ..() + color = null + +/obj/structure/blob/special/node/update_overlays() + . = ..() + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") + if(overmind) + blob_overlay.color = overmind.blobstrain.color + var/area/A = get_area(src) + if(!(A.area_flags & BLOBS_ALLOWED)) + blob_overlay.color = BlendRGB(overmind.blobstrain.color, COLOR_WHITE, 0.5) //lighten it to indicate an off-station blob + . += blob_overlay + . += mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay") + if(blocks_emissive) + add_overlay(get_emissive_block()) + +/obj/structure/blob/special/node/creation_action() + if(overmind) + overmind.node_blobs += src + +/obj/structure/blob/special/node/Destroy() + GLOB.blob_nodes -= src + STOP_PROCESSING(SSobj, src) + if(overmind) + overmind.node_blobs -= src + return ..() + +/obj/structure/blob/special/node/process(seconds_per_tick) + if(overmind) + pulse_area(overmind, claim_range, pulse_range, expand_range) + reinforce_area(seconds_per_tick) diff --git a/code/modules/antagonists/blob/structures/normal.dm b/code/modules/antagonists/blob/structures/normal.dm new file mode 100644 index 00000000000..50cbb13631c --- /dev/null +++ b/code/modules/antagonists/blob/structures/normal.dm @@ -0,0 +1,49 @@ +/obj/structure/blob/normal + name = "normal blob" + icon_state = "blob" + light_range = 0 + max_integrity = BLOB_REGULAR_MAX_HP + var/initial_integrity = BLOB_REGULAR_HP_INIT + health_regen = BLOB_REGULAR_HP_REGEN + brute_resist = BLOB_BRUTE_RESIST * 0.5 + + +/obj/structure/blob/normal/Initialize(mapload, owner_overmind) + . = ..() + update_integrity(initial_integrity) + +/obj/structure/blob/normal/scannerreport() + if(compromised_integrity) + return "Currently weak to brute damage." + return "N/A" + +/obj/structure/blob/normal/update_name() + . = ..() + name = "[(compromised_integrity) ? "fragile " : (overmind ? null : "dead ")][initial(name)]" + +/obj/structure/blob/normal/update_desc() + . = ..() + if(compromised_integrity) + desc = "A thin lattice of slightly twitching tendrils." + else if(overmind) + desc = "A thick wall of writhing tendrils." + else + desc = "A thick wall of lifeless tendrils." + +/obj/structure/blob/normal/update_icon_state() + icon_state = "blob[(compromised_integrity) ? "_damaged" : null]" + return ..() + + +/obj/structure/blob/normal/update_state() + if(obj_integrity <= 15) + compromised_integrity = TRUE + else + compromised_integrity = FALSE + + if(compromised_integrity) + brute_resist = BLOB_BRUTE_RESIST + else if (overmind) + brute_resist = BLOB_BRUTE_RESIST * 0.5 + else + brute_resist = BLOB_BRUTE_RESIST * 0.5 diff --git a/code/modules/antagonists/blob/structures/resource.dm b/code/modules/antagonists/blob/structures/resource.dm new file mode 100644 index 00000000000..92a81039e45 --- /dev/null +++ b/code/modules/antagonists/blob/structures/resource.dm @@ -0,0 +1,35 @@ +/obj/structure/blob/special/resource + name = "resource blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_resource" + desc = "A thin spire of slightly swaying tendrils." + max_integrity = BLOB_RESOURCE_MAX_HP + point_return = BLOB_REFUND_RESOURCE_COST + resistance_flags = LAVA_PROOF + armor = list("melee" = 0, "bullet" = 0, "laser" = 25, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + var/resource_delay = 0 + var/point_rate = BLOB_RESOURCE_POINT_RATE + +/obj/structure/blob/special/resource/scannerreport() + return "Gradually supplies the blob with resources, increasing the rate of expansion." + +/obj/structure/blob/special/resource/creation_action() + if(overmind) + overmind.resource_blobs += src + +/obj/structure/blob/special/resource/Destroy() + if(overmind) + overmind.resource_blobs -= src + return ..() + +/obj/structure/blob/special/resource/Be_Pulsed() + . = ..() + if(resource_delay > world.time) + return + flick("blob_resource_glow", src) + if(overmind) + overmind.add_points(point_rate) + balloon_alert(overmind, "+[point_rate] resource\s") + resource_delay = world.time + BLOB_RESOURCE_GATHER_DELAY + overmind.resource_blobs.len * BLOB_RESOURCE_GATHER_ADDED_DELAY //4 seconds plus a quarter second for each resource blob the overmind has + else + resource_delay = world.time + BLOB_RESOURCE_GATHER_DELAY diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm new file mode 100644 index 00000000000..550555e3244 --- /dev/null +++ b/code/modules/antagonists/blob/structures/shield.dm @@ -0,0 +1,68 @@ +/obj/structure/blob/shield + name = "strong blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_shield" + desc = "A solid wall of slightly twitching tendrils." + var/damaged_desc = "A wall of twitching tendrils." + max_integrity = BLOB_STRONG_MAX_HP + health_regen = BLOB_STRONG_HP_REGEN + brute_resist = BLOB_STRONG_BRUTE_RESIST + explosion_block = 3 + explosion_vertical_block = 2 + point_return = BLOB_REFUND_STRONG_COST + atmosblock = TRUE + armor = list("melee" = 0, "bullet" = 0, "laser" = 25, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + +/obj/structure/blob/shield/scannerreport() + if(atmosblock) + return "Will prevent the spread of atmospheric changes." + return "N/A" + +/obj/structure/blob/shield/core // Automatically generated by the core + point_return = 0 + +/obj/structure/blob/shield/update_name(updates) + . = ..() + name = "[(compromised_integrity) ? "weakened " : null][initial(name)]" + +/obj/structure/blob/shield/update_desc(updates) + . = ..() + desc = (compromised_integrity) ? "[damaged_desc]" : initial(desc) + +/obj/structure/blob/shield/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir) + . = ..() + if(. && obj_integrity > 0) + atmosblock = compromised_integrity + air_update_turf(TRUE, atmosblock) + +/obj/structure/blob/shield/update_icon_state() + icon_state = "[initial(icon_state)][(compromised_integrity) ? "_damaged" : null]" + return ..() + +/obj/structure/blob/shield/update_state() + if(obj_integrity < max_integrity * 0.5) + compromised_integrity = TRUE + else + compromised_integrity = FALSE + if(compromised_integrity) + atmosblock = FALSE + else + atmosblock = TRUE + air_update_turf(1) + + +/obj/structure/blob/shield/reflective + name = "reflective blob" + desc = "A solid wall of slightly twitching tendrils with a reflective glow." + damaged_desc = "A wall of twitching tendrils with a reflective glow." + icon_state = "blob_glow" + flags_ricochet = RICOCHET_SHINY + point_return = BLOB_REFUND_REFLECTOR_COST + explosion_block = 2 + explosion_vertical_block = 1 + max_integrity = BLOB_REFLECTOR_MAX_HP + health_regen = BLOB_REFLECTOR_HP_REGEN + brute_resist = BLOB_BRUTE_RESIST + +/obj/structure/blob/shield/reflective/core // Automatically generated by the core + point_return = 0 diff --git a/code/modules/antagonists/blob/structures/special.dm b/code/modules/antagonists/blob/structures/special.dm new file mode 100644 index 00000000000..1093bbbb46c --- /dev/null +++ b/code/modules/antagonists/blob/structures/special.dm @@ -0,0 +1,58 @@ +/obj/structure/blob/special // Generic type for nodes/factories/cores/resource + // Core and node vars: claiming, pulsing and expanding + /// The radius inside which (previously dead) blob tiles are 'claimed' again by the pulsing overmind. Very rarely used. + var/claim_range = 0 + /// The radius inside which blobs are pulsed by this overmind. Does stuff like expanding, making blob spores from factories, make resources from nodes etc. + var/pulse_range = 0 + /// The radius up to which this special structure naturally grows normal blobs. + var/expand_range = 0 + + // Area reinforcement vars: used by cores and nodes, for strains to modify + /// Range this blob free upgrades to strong blobs at: for the core, and for strains + var/strong_reinforce_range = 0 + /// Range this blob free upgrades to reflector blobs at: for the core, and for strains + var/reflector_reinforce_range = 0 + +/obj/structure/blob/special/proc/reinforce_area(seconds_per_tick) // Used by cores and nodes to upgrade their surroundings + if(strong_reinforce_range) + for(var/obj/structure/blob/normal/B in range(strong_reinforce_range, src)) + if(SPT_PROB(BLOB_REINFORCE_CHANCE, seconds_per_tick)) + B.change_to(/obj/structure/blob/shield/core, overmind) + if(reflector_reinforce_range) + for(var/obj/structure/blob/shield/B in range(reflector_reinforce_range, src)) + if(SPT_PROB(BLOB_REINFORCE_CHANCE, seconds_per_tick)) + B.change_to(/obj/structure/blob/shield/reflective/core, overmind) + +/obj/structure/blob/special/proc/pulse_area(mob/camera/blob/pulsing_overmind, claim_range = 10, pulse_range = 3, expand_range = 2) + if(QDELETED(pulsing_overmind)) + pulsing_overmind = overmind + Be_Pulsed() + var/expanded = FALSE + if(prob(70*(1/BLOB_EXPAND_CHANCE_MULTIPLIER)) && expand()) + expanded = TRUE + var/list/blobs_to_affect = list() + for(var/obj/structure/blob/B in urange(claim_range, src, 1)) + blobs_to_affect += B + shuffle_inplace(blobs_to_affect) + for(var/L in blobs_to_affect) + var/obj/structure/blob/B = L + if(!is_location_within_transition_boundaries(get_turf(B))) + continue + if(!B.overmind && prob(30)) + B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. + B.update_blob() + var/distance = get_dist(get_turf(src), get_turf(B)) + var/expand_probablity = max(20 - distance * 8, 1) + if(B.Adjacent(src)) + expand_probablity = 20 + if(distance <= expand_range) + var/can_expand = TRUE + if(blobs_to_affect.len >= 120 && !(COOLDOWN_FINISHED(B, heal_timestamp))) + can_expand = FALSE + if(can_expand && COOLDOWN_FINISHED(B, pulse_timestamp) && prob(expand_probablity*BLOB_EXPAND_CHANCE_MULTIPLIER)) + if(!expanded) + var/obj/structure/blob/newB = B.expand(null, null, !expanded) //expansion falls off with range but is faster near the blob causing the expansion + if(newB) + expanded = TRUE + if(distance <= pulse_range) + B.Be_Pulsed() diff --git a/code/game/gamemodes/blob/blobs/storage.dm b/code/modules/antagonists/blob/structures/storage.dm similarity index 59% rename from code/game/gamemodes/blob/blobs/storage.dm rename to code/modules/antagonists/blob/structures/storage.dm index b9052b3601a..7aae6c6d0c7 100644 --- a/code/game/gamemodes/blob/blobs/storage.dm +++ b/code/modules/antagonists/blob/structures/storage.dm @@ -2,15 +2,15 @@ name = "storage blob" icon = 'icons/mob/blob.dmi' icon_state = "blob_resource" - max_integrity = 30 - fire_resist = 2 - point_return = 12 + max_integrity = BLOB_STORAGE_MAX_HP + fire_resist = BLOB_STORAGE_FIRE_RESIST + point_return = BLOB_REFUND_STORAGE_COST /obj/structure/blob/storage/obj_destruction(damage_flag) if(overmind) overmind.max_blob_points -= 50 ..() -/obj/structure/blob/storage/proc/update_max_blob_points(var/new_point_increase) +/obj/structure/blob/storage/proc/update_max_blob_points(new_point_increase) if(overmind) overmind.max_blob_points += new_point_increase diff --git a/code/modules/antagonists/space_ninja/ninja_shuttle.dm b/code/modules/antagonists/space_ninja/ninja_shuttle.dm index 32a38a7411b..619c97e1d41 100644 --- a/code/modules/antagonists/space_ninja/ninja_shuttle.dm +++ b/code/modules/antagonists/space_ninja/ninja_shuttle.dm @@ -31,3 +31,4 @@ name = "\improper Spider Clan \"Ombra\" Shuttle" parallax_movedir = SOUTH nad_allowed = TRUE + area_flags = NONE diff --git a/code/modules/awaymissions/mission_code/ruins/ussplaboratory.dm b/code/modules/awaymissions/mission_code/ruins/ussplaboratory.dm index ab5a4c7d973..bae929942c1 100644 --- a/code/modules/awaymissions/mission_code/ruins/ussplaboratory.dm +++ b/code/modules/awaymissions/mission_code/ruins/ussplaboratory.dm @@ -3,6 +3,7 @@ /area/ruin/ussp_xeno atmosalm = ATMOS_ALARM_NONE has_gravity = STANDARD_GRAVITY + area_flags = NONE /area/ruin/ussp_xeno/engi name = "Engineering" diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index 777c180bd57..9d0605f5dde 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -16,7 +16,7 @@ flick("gibbed-a", animation) xgibs(loc) - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() QDEL_IN(animation, 15) QDEL_IN(src, 15) @@ -30,7 +30,7 @@ invisibility = INVISIBILITY_ABSTRACT dust_animation() new /obj/effect/decal/remains/xeno(loc) - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() QDEL_IN(src, 15) return TRUE @@ -42,7 +42,7 @@ animation.master = src flick("dust-a", animation) new /obj/effect/decal/remains/xeno(loc) - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() QDEL_IN(animation, 15) /mob/living/carbon/alien/death(gibbed) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 7bf60ec50dc..1b92f72d71c 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -186,7 +186,7 @@ brainmob.container = null//Reset brainmob mmi var. brainmob.forceMove(held_brain) //Throw mob into brain. GLOB.respawnable_list += brainmob - GLOB.alive_mob_list -= brainmob//Get outta here + brainmob.remove_from_alive_mob_list()//Get outta here held_brain.brainmob = brainmob//Set the brain to use the brainmob held_brain.brainmob.cancel_camera() REMOVE_TRAIT(brainmob, TRAIT_NO_SPELLS, UNIQUE_TRAIT_SOURCE(src)) diff --git a/code/modules/mob/living/carbon/brain/robotic_brain.dm b/code/modules/mob/living/carbon/brain/robotic_brain.dm index 6a5b1baf56e..a3f7db308b6 100644 --- a/code/modules/mob/living/carbon/brain/robotic_brain.dm +++ b/code/modules/mob/living/carbon/brain/robotic_brain.dm @@ -265,7 +265,7 @@ brainmob.dna.species = new /datum/species/machine() // Else it will default to human. And we don't want to clone IRC humans now do we? brainmob.dna.ResetSE() brainmob.dna.ResetUI() - GLOB.dead_mob_list -= brainmob + brainmob.remove_from_dead_mob_list() ..() /obj/item/mmi/robotic_brain/attack_ghost(mob/dead/observer/O) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f966df04963..411377f6d3a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2165,8 +2165,8 @@ update_blind_effects() update_blurry_effects() update_unconscious_overlay() - GLOB.alive_mob_list += src - GLOB.dead_mob_list -= src + add_to_alive_mob_list() + remove_from_dead_mob_list() switch(stat) //Current stat. if(CONSCIOUS) @@ -2179,8 +2179,8 @@ SetLoseBreath(0) SetDisgust(0) SetEyeBlurry(0) - GLOB.alive_mob_list -= src - GLOB.dead_mob_list += src + remove_from_alive_mob_list() + add_to_dead_mob_list() /// Updates hands HUD element. diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index e3383f980b5..df12411bfd4 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -16,7 +16,7 @@ drop_hat() - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() spawn(15) if(animation) qdel(animation) if(src) qdel(src) @@ -28,7 +28,7 @@ icon = null invisibility = INVISIBILITY_ABSTRACT dust_animation() - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() QDEL_IN(src, 15) return TRUE diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index b58059c48a3..3ce665ce098 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -22,8 +22,8 @@ drop_hat() - GLOB.alive_mob_list -= src - GLOB.dead_mob_list -= src + remove_from_alive_mob_list() + remove_from_dead_mob_list() QDEL_IN(animation, 15) QDEL_IN(src, 15) return TRUE @@ -36,7 +36,7 @@ invisibility = INVISIBILITY_ABSTRACT if(mmi) qdel(mmi) //Delete the MMI first so that it won't go popping out. - GLOB.dead_mob_list -= src + remove_from_dead_mob_list() QDEL_IN(src, 15) return TRUE diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index d4134aae515..0e9bd6c5f23 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -29,8 +29,7 @@ if(!client) return FALSE canon_client = client - GLOB.player_list |= src - GLOB.keyloop_list |= src + add_to_player_list() last_known_ckey = ckey update_Login_details() world.update_status() diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 44d97c84b3a..4ad2bd7fd1f 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -3,8 +3,7 @@ set_typing_indicator(FALSE) SStgui.on_logout(src) // Cleanup any TGUIs the user has open unset_machine() - GLOB.player_list -= src - GLOB.keyloop_list -= src + remove_from_player_list() log_access_out(src) add_game_logs("OWNERSHIP: [key_name(src)] is no longer owning mob [src]([src.type])") // `holder` is nil'd out by now, so we check the `admin_datums` array directly diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d1020156e82..42f00349255 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,7 +1,7 @@ /mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. - GLOB.mob_list -= src - GLOB.dead_mob_list -= src - GLOB.alive_mob_list -= src + remove_from_mob_list() + remove_from_alive_mob_list() + remove_from_dead_mob_list() focus = null QDEL_NULL(hud_used) if(mind && mind.current == src) @@ -25,11 +25,11 @@ return ..() /mob/Initialize(mapload) - GLOB.mob_list += src + add_to_mob_list() if(stat == DEAD) - GLOB.dead_mob_list += src + add_to_dead_mob_list() else - GLOB.alive_mob_list += src + add_to_alive_mob_list() set_focus(src) prepare_huds() . = ..() @@ -591,8 +591,8 @@ /mob/proc/get_status_tab_items() SHOULD_CALL_PARENT(TRUE) - var/list/status_tab_data = list() - return status_tab_data + . = list(" ") + return . // facing verbs /mob/proc/canface() diff --git a/code/modules/mob/mob_lists.dm b/code/modules/mob/mob_lists.dm new file mode 100644 index 00000000000..5d793ee56bd --- /dev/null +++ b/code/modules/mob/mob_lists.dm @@ -0,0 +1,93 @@ +///Adds the mob reference to the list and directory of all mobs. Called on Initialize(). +/mob/proc/add_to_mob_list() + GLOB.mob_list |= src + +///Removes the mob reference from the list and directory of all mobs. Called on Destroy(). +/mob/proc/remove_from_mob_list() + GLOB.mob_list -= src + +///Adds the mob reference to the list of all mobs alive. If mob is cliented, it adds it to the list of all living player-mobs. +/mob/proc/add_to_alive_mob_list() + if(QDELETED(src)) + return + GLOB.alive_mob_list |= src + if(client) + add_to_current_living_players() + +///Removes the mob reference from the list of all mobs alive. If mob is cliented, it removes it from the list of all living player-mobs. +/mob/proc/remove_from_alive_mob_list() + GLOB.alive_mob_list -= src + if(client) + remove_from_current_living_players() + +///Adds the mob reference to the list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs. +/mob/proc/add_to_dead_mob_list() + if(QDELETED(src)) + return + GLOB.dead_mob_list |= src + if(client) + add_to_current_dead_players() + +///Remvoes the mob reference from list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs. +/mob/proc/remove_from_dead_mob_list() + GLOB.dead_mob_list -= src + if(client) + remove_from_current_dead_players() + + +///Adds the cliented mob reference to the list of all player-mobs, besides to either the of dead or alive player-mob lists, as appropriate. Called on Login(). +/mob/proc/add_to_player_list() + SHOULD_CALL_PARENT(TRUE) + GLOB.player_list |= src + if(client.holder) + GLOB.keyloop_list |= src + else if(stat != DEAD) + GLOB.keyloop_list |= src + if(stat == DEAD) + add_to_current_dead_players() + else + add_to_current_living_players() + +///Removes the mob reference from the list of all player-mobs, besides from either the of dead or alive player-mob lists, as appropriate. Called on Logout(). +/mob/proc/remove_from_player_list() + SHOULD_CALL_PARENT(TRUE) + GLOB.player_list -= src + GLOB.keyloop_list -= src + if(stat == DEAD) + remove_from_current_dead_players() + else + remove_from_current_living_players() + + +///Adds the cliented mob reference to either the list of dead player-mobs or to the list of observers, depending on how they joined the game. +/mob/proc/add_to_current_dead_players() + GLOB.dead_player_list |= src + +/mob/dead/observer/add_to_current_dead_players() + if(started_as_observer) + GLOB.current_observers_list |= src + return + return ..() + +/mob/dead/new_player/add_to_current_dead_players() + return + +///Removes the mob reference from either the list of dead player-mobs or from the list of observers, depending on how they joined the game. +/mob/proc/remove_from_current_dead_players() + GLOB.dead_player_list -= src + +/mob/dead/observer/remove_from_current_dead_players() + if(started_as_observer) + GLOB.current_observers_list -= src + return + return ..() + + +///Adds the cliented mob reference to the list of living player-mobs. If the mob is an antag, it adds it to the list of living antag player-mobs. +/mob/proc/add_to_current_living_players() + GLOB.alive_player_list |= src + +///Removes the mob reference from the list of living player-mobs. If the mob is an antag, it removes it from the list of living antag player-mobs. +/mob/proc/remove_from_current_living_players() + GLOB.alive_player_list -= src + diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2068742e1f8..f8881204de1 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -16,7 +16,7 @@ if(flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") flags |= INITIALIZED - GLOB.mob_list += src + add_to_mob_list() return INITIALIZE_HINT_NORMAL /mob/new_player/proc/privacy_consent() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 2973373acc0..3954a0bb1d7 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -355,7 +355,7 @@ consume(user) -/obj/machinery/power/supermatter_shard/proc/get_integrity() +/obj/machinery/power/supermatter_shard/proc/get_internal_integrity() var/integrity = damage / explosion_point integrity = round(100 - integrity * 100) integrity = integrity < 0 ? 0 : integrity @@ -541,16 +541,16 @@ if(!air) return SUPERMATTER_ERROR - if(get_integrity() < 25) + if(get_internal_integrity() < 25) return SUPERMATTER_DELAMINATING - if(get_integrity() < 50) + if(get_internal_integrity() < 50) return SUPERMATTER_EMERGENCY - if(get_integrity() < 75) + if(get_internal_integrity() < 75) return SUPERMATTER_DANGER - if((get_integrity() < 100) || (air.temperature > CRITICAL_TEMPERATURE)) + if((get_internal_integrity() < 100) || (air.temperature > CRITICAL_TEMPERATURE)) return SUPERMATTER_WARNING if(air.temperature > (CRITICAL_TEMPERATURE * 0.8)) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 2c68d8c9cb3..edce723f9f8 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -456,8 +456,12 @@ /obj/item/projectile/proc/check_ricochet_flag(atom/A) - if(A.flags & CHECK_RICOCHET) + if((flag in list(ENERGY, LASER)) && (A.flags_ricochet & RICOCHET_SHINY)) return TRUE + + if((flag in list(BOMB, BULLET)) && (A.flags_ricochet & RICOCHET_HARD)) + return TRUE + return FALSE diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm index cb4ac6913f4..6b7f98c6f1b 100644 --- a/code/modules/ruins/ruin_areas.dm +++ b/code/modules/ruins/ruin_areas.dm @@ -9,6 +9,9 @@ ambientsounds = RUINS_SOUNDS sound_environment = SOUND_ENVIRONMENT_STONEROOM +/area/ruin/space + area_flags = NONE + /area/ruin/unpowered always_unpowered = FALSE @@ -31,6 +34,7 @@ /area/ruin/powered/space_bar name = "Space Bar" + area_flags = NONE /area/ruin/powered/shuttle name = "Shuttle" @@ -56,3 +60,4 @@ /area/ruin/spaceprison name = "Space Prison" icon_state = "spaceprison" + area_flags = NONE diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 2419f889047..041ead235b6 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -291,7 +291,7 @@ update_icons() -/obj/spacepod/proc/repair_damage(var/repair_amount) +/obj/spacepod/repair_damage(repair_amount) if(health) health = min(initial(health), health + repair_amount) update_icons() diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index e825e8555733ac155ee4b3793ea400334fc48b35..e87749c72423e2509484a576c3c62ede325b85f1 100644 GIT binary patch literal 597054 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%0D#7^(J|m$~(woWN}$% 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[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

P@30b(G`cS%}lrTjXu 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 literal 457750 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�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

    Tz(UDJSzDIQl5aXdF8Sr?!{jMCc*=p^lD{enm@h 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
    [round(blob_core.obj_integrity)]
    " - -/mob/camera/blob/memory() - SSticker.mode.update_blob_objective() - ..() - -/mob/camera/blob/say(message) - if(!message) - return - - if(client) - if(check_mute(client.ckey, MUTE_IC)) - to_chat(src, "You cannot send IC messages (muted).") - return - if(client.handle_spam_prevention(message, MUTE_IC)) - return - - if(stat) - return - - blob_talk(message) - - -/mob/camera/blob/proc/blob_talk(message) - add_say_logs(src, message, language = "BLOB") - - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if(!message) - return - - var/rendered = "Blob Telepathy, [name]([blobstrain.name]) states, \"[message]\"" - for(var/mob/M in GLOB.mob_list) - if(isovermind(M) || isblobbernaut(M) || isblobinfected(M.mind)) - M.show_message(rendered, 2) - else if(isobserver(M) && !isnewplayer(M)) - var/rendered_ghost = "Blob Telepathy, \ - [name]([blobstrain.name]) \ - (F) states, \"[message]\"" - M.show_message(rendered_ghost, 2) - - -/mob/camera/blob/blob_act(obj/structure/blob/B) - return - -/mob/camera/blob/get_status_tab_items() - . = ..() - if(blob_core) - . += "Core Health[blob_core.obj_integrity]" - . += "Power Stored: [blob_points]/[max_blob_points]" - . += "Blobs to Win: [GLOB.blobs.len]/[SSticker?.mode.blob_win_count]" - if(free_strain_rerolls) - . += "You have [free_strain_rerolls] Free Strain Reroll\s Remaining" - -/mob/camera/blob/proc/can_attack() - return (world.time > (last_attack + CLICK_CD_RANGE)) - -/mob/camera/blob/proc/select_reagent() - var/list/possible_reagents = list() - var/datum/antagonist/blob_overmind/overmind_datum = mind?.has_antag_datum(/datum/antagonist/blob_overmind) - if(!overmind_datum) - for(var/type in subtypesof(/datum/reagent/blob)) - possible_reagents.Add(new type) - blob_reagent_datum = pick(possible_reagents) - else - blob_reagent_datum = overmind_datum.reagent - if(blob_core) - blob_core.adjustcolors(blob_reagent_datum.color) - - color = blob_reagent_datum.complementary_color diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index c3b3f9c140d..ec7d68bfd50 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -21,10 +21,7 @@ GLOBAL_LIST_EMPTY(overminds) plane = ABOVE_GAME_PLANE pass_flags = PASSBLOB faction = list(ROLE_BLOB) - // Vivid blue green, would be cool to make this change with strain - lighting_cutoff_red = 0 - lighting_cutoff_green = 35 - lighting_cutoff_blue = 20 + hud_type = /datum/hud/blob_overmind var/obj/structure/blob/special/core/blob_core = null // The blob overmind's core var/blob_points = 0 @@ -45,103 +42,37 @@ GLOBAL_LIST_EMPTY(overminds) var/rerolling = FALSE /// The list of strains the blob can reroll for. var/list/strain_choices + /// Whether the blob split var/split_used = FALSE + /// Is blob offspring of another blob var/is_offspring = FALSE + /// Does the blob have an infinite resource? + var/is_infinity = FALSE -/mob/camera/blob/Initialize(mapload, starting_points = OVERMIND_STARTING_POINTS) +/mob/camera/blob/Initialize(mapload, core = null, starting_points = OVERMIND_STARTING_POINTS) ADD_TRAIT(src, TRAIT_BLOB_ALLY, INNATE_TRAIT) blob_points = starting_points + blob_core = core GLOB.overminds += src var/new_name = "[initial(name)] ([rand(1, 999)])" name = new_name real_name = new_name last_attack = world.time - var/datum/blobstrain/BS = pick(GLOB.valid_blobstrains) - set_strain(BS) + select_strain(TRUE) color = blobstrain.complementary_color if(blob_core) - blob_core.update_appearance() + blob_core.update_blob() . = ..() START_PROCESSING(SSobj, src) GLOB.blob_telepathy_mobs |= src - -/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain) - if (!ispath(new_strain)) - return FALSE - - var/had_strain = FALSE - if (istype(blobstrain)) - blobstrain.on_lose() - qdel(blobstrain) - had_strain = TRUE - - blobstrain = new new_strain(src) - blobstrain.on_gain() - - if (had_strain) - to_chat(src, span_notice("Your strain is now: [blobstrain.name]!")) - to_chat(src, span_notice("The [blobstrain.name] strain [blobstrain.description]")) - if(blobstrain.effectdesc) - to_chat(src, span_notice("The [blobstrain.name] strain [blobstrain.effectdesc]")) - SEND_SIGNAL(src, COMSIG_BLOB_SELECTED_STRAIN, blobstrain) - -/mob/camera/blob/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) - if(placed) // The blob can't expand vertically (yet) - return FALSE - . = ..() - if(!.) - return - var/turf/target_turf = . - if(!is_valid_turf(target_turf)) // Allows unplaced blobs to travel through station z-levels - if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(src, span_warning("Your destination is invalid. Move somewhere else and try again.")) - return null - -/mob/camera/blob/proc/is_valid_turf(turf/tile) - var/area/area = get_area(tile) - if((area && !(area.area_flags & BLOBS_ALLOWED)) || !tile || !is_station_level(tile.z) || isgroundlessturf(tile)) - return FALSE - return TRUE - -/mob/camera/blob/process() - if(!free_strain_rerolls && (last_reroll_time + BLOB_POWER_REROLL_FREE_TIME < world.time)) - to_chat(src, span_boldnotice("You have gained another free strain re-roll.")) - free_strain_rerolls = TRUE - -/// Create a blob spore and link it to us -/mob/camera/blob/proc/create_spore(turf/spore_turf, spore_type = /mob/living/simple_animal/hostile/blob_minion/spore/minion) - var/mob/living/simple_animal/hostile/blob_minion/spore/spore = new spore_type(spore_turf) - assume_direct_control(spore) - return spore - -/// Give our new minion the properties of a minion -/mob/camera/blob/proc/assume_direct_control(mob/living/minion) - minion.AddComponent(/datum/component/blob_minion, src) - -/// Add something to our list of mobs and wait for it to die -/mob/camera/blob/proc/register_new_minion(mob/living/minion) - blob_mobs |= minion - if (!istype(minion, /mob/living/basic/blob_minion/blobbernaut)) - RegisterSignal(minion, COMSIG_LIVING_DEATH, PROC_REF(on_minion_death)) - -/// When a spore (or zombie) dies then we do this -/mob/camera/blob/proc/on_minion_death(mob/living/spore) - SIGNAL_HANDLER - blobstrain.on_sporedeath(spore) - - /mob/camera/blob/Destroy() QDEL_NULL(blobstrain) - for(var/BL in GLOB.blobs) - var/obj/structure/blob/B = BL - if(B && B.overmind == src) - B.overmind = null - B.update_appearance() //reset anything that was ours for(var/obj/structure/blob/blob_structure as anything in all_blobs) blob_structure.overmind = null + blob_structure.update_blob() all_blobs = null resource_blobs = null factory_blobs = null @@ -155,6 +86,25 @@ GLOBAL_LIST_EMPTY(overminds) return ..() + +/mob/camera/blob/process() + if(!blob_core) + qdel(src) + return + if(!free_strain_rerolls && (last_reroll_time + BLOB_POWER_REROLL_FREE_TIME < world.time)) + to_chat(src, span_boldnotice("You have gained another free strain re-roll.")) + free_strain_rerolls = TRUE + + +/mob/camera/blob/Login() + . = ..() + if(!. || !client) + return FALSE + sync_mind() + update_health_hud() + sync_lighting_plane_alpha() + add_points(0) + /mob/camera/blob/proc/can_attack() return (world.time > (last_attack + CLICK_CD_RANGE)) @@ -169,61 +119,66 @@ GLOBAL_LIST_EMPTY(overminds) else return FALSE -/mob/camera/blob/Login() + +/mob/camera/blob/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) . = ..() - if(!. || !client) + if(!.) + return + var/turf/target_turf = . + if(!is_valid_turf(target_turf)) // Allows unplaced blobs to travel through station z-levels + if(z_move_flags & ZMOVE_FEEDBACK) + to_chat(src, span_warning("Your destination is invalid. Move somewhere else and try again.")) + return null + +/mob/camera/blob/proc/is_valid_turf(turf/tile) + var/area/area = get_area(tile) + if((area && !(area.area_flags & BLOBS_ALLOWED)) || !tile || !is_station_level(tile.z) || isgroundlessturf(tile)) return FALSE - update_health_hud() - add_points(0) + return TRUE -/mob/camera/blob/examine(mob/user) + +/mob/camera/blob/get_status_tab_items() . = ..() - if(blobstrain) - . += "Its strain is [blobstrain.name]." + if(blob_core) + . += list("Core Health:", "[blob_core.obj_integrity]") + . += list("Power Stored:", "[(is_infinity || SSticker?.mode?.is_blob_infinity_points)? "INF" : blob_points]/[max_blob_points]") + . += list("Blobs to Win:", "[GLOB.blobs.len]/[SSticker?.mode.blob_win_count]") + if(free_strain_rerolls) + . += list("You have [free_strain_rerolls] Free Strain Reroll\s Remaining") /mob/camera/blob/update_health_hud() if(!blob_core) return FALSE var/current_health = round((blob_core.obj_integrity / blob_core.max_integrity) * 100) hud_used.blobhealthdisplay.maptext = MAPTEXT("
    [current_health]%
    ") - for(var/mob/living/basic/blob_minion/blobbernaut/blobbernaut in blob_mobs) + for(var/mob/living/simple_animal/hostile/blob_minion/blobbernaut/blobbernaut in blob_mobs) var/datum/hud/using_hud = blobbernaut.hud_used if(!using_hud?.blobpwrdisplay) continue using_hud.blobpwrdisplay.maptext = MAPTEXT("
    [current_health]%
    ") -/mob/camera/blob/proc/add_points(points) - blob_points = clamp(blob_points + points, 0, max_blob_points) - hud_used.blobpwrdisplay.maptext = MAPTEXT("
    [round(blob_points)]
    ") /mob/camera/blob/say( message, bubble_type, - list/spans = list(), sanitize = TRUE, - datum/language/language, - ignore_spam = FALSE, - forced, - filterproof = FALSE, - message_range = 7, - list/message_mods = list(), ) if (!message) return - if (src.client) + if (client) if(GLOB.admin_mutes_assoc[ckey] & MUTE_IC) to_chat(src, span_boldwarning("You cannot send IC messages (muted).")) return - if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message, MUTE_IC)) + if (client.handle_spam_prevention(message, MUTE_IC)) return if (stat) return - blob_talk_overmind(message) + blob_talk(message) -/mob/camera/blob/proc/blob_talk_overmind(message) +/mob/camera/blob/proc/blob_talk(message) message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) @@ -233,12 +188,75 @@ GLOBAL_LIST_EMPTY(overminds) add_say_logs(src, message, language = "BLOB") var/message_a = say_quote(message) - var/rendered = span_big(span_blob("\[Blob Telepathy\] [name]([blobstrain.name]) [message_a]")) + var/rendered = span_big(span_blob("\[Blob Telepathy\] [name]([blobstrain.name]) [message_a], [message]")) relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, src) +/mob/camera/blob/proc/add_points(points) + blob_points = clamp(blob_points + points, 0, max_blob_points) + hud_used.blobpwrdisplay.maptext = MAPTEXT("
    [(is_infinity || SSticker?.mode?.is_blob_infinity_points)? "INF" : round(blob_points)]
    ") + + +/mob/camera/blob/proc/select_strain(first_select = FALSE) + var/reagent_type = pick(GLOB.valid_blobstrains) + set_strain(reagent_type, first_select) + + -/mob/camera/blob/mind_initialize() +/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain, first_select = FALSE) + if (!ispath(new_strain)) + return FALSE + + var/had_strain = FALSE + if (istype(blobstrain)) + blobstrain.on_lose() + qdel(blobstrain) + had_strain = TRUE + + blobstrain = new new_strain(src) + var/datum/antagonist/blob_overmind/overmind_datum = mind?.has_antag_datum(/datum/antagonist/blob_overmind) + if(overmind_datum) + overmind_datum.strain = blobstrain + blobstrain.on_gain() + + if (had_strain && !first_select) + var/list/messages = get_strain_info() + to_chat(src, chat_box_red(messages.Join("
    "))) + SEND_SIGNAL(src, COMSIG_BLOB_SELECTED_STRAIN, blobstrain) + + +/mob/camera/blob/proc/get_strain_info() + . = list() + . += span_notice("Your strain is now: [blobstrain.name]!") + . += span_notice("The [blobstrain.name] strain [blobstrain.description]") + if(blobstrain.effectdesc) + . += span_notice("The [blobstrain.name] strain [blobstrain.effectdesc]") + return . + +/mob/camera/blob/examine(mob/user) . = ..() - var/datum/antagonist/blob/blob = mind.has_antag_datum(/datum/antagonist/blob) - if(!blob) - mind.add_antag_datum(/datum/antagonist/blob) + if(blobstrain) + . += "Its strain is [blobstrain.name]." + +/mob/camera/blob/blob_act(obj/structure/blob/B) + return + +/// Create a blob spore and link it to us +/mob/camera/blob/proc/create_spore(turf/spore_turf, spore_type = /mob/living/simple_animal/hostile/blob_minion/spore/minion) + var/mob/living/simple_animal/hostile/blob_minion/spore/spore = new spore_type(spore_turf) + assume_direct_control(spore) + return spore + +/// Give our new minion the properties of a minion +/mob/camera/blob/proc/assume_direct_control(mob/living/minion) + minion.AddComponent(/datum/component/blob_minion, src) + +/// Add something to our list of mobs and wait for it to die +/mob/camera/blob/proc/register_new_minion(mob/living/minion) + blob_mobs |= minion + if (!istype(minion, /mob/living/simple_animal/hostile/blob_minion/blobbernaut)) + RegisterSignal(minion, COMSIG_LIVING_DEATH, PROC_REF(on_minion_death)) + +/// When a spore (or zombie) dies then we do this +/mob/camera/blob/proc/on_minion_death(mob/living/spore) + SIGNAL_HANDLER + blobstrain.on_sporedeath(spore) diff --git a/code/modules/antagonists/blob/powers copy.dm b/code/modules/antagonists/blob/powers copy.dm deleted file mode 100644 index 72309e461df..00000000000 --- a/code/modules/antagonists/blob/powers copy.dm +++ /dev/null @@ -1,485 +0,0 @@ -/*// Point controlling procs - -/mob/camera/blob/proc/can_buy(var/cost = 15) - if(blob_points < cost) - to_chat(src, "Вы не можете себе это позволить!") - return 0 - add_points(-cost) - return 1 - -// Power verbs - -/mob/camera/blob/verb/transport_core() - set category = "Blob" - set name = "Jump to Core" - set desc = "Возвращает вас к вашему ядру." - - if(blob_core) - src.loc = blob_core.loc - -/mob/camera/blob/verb/jump_to_node() - set category = "Blob" - set name = "Jump to Node" - set desc = "Перемещает вас к выбранному узлу." - - if(GLOB.blob_nodes.len) - var/list/nodes = list() - for(var/i = 1; i <= GLOB.blob_nodes.len; i++) - var/obj/structure/blob/node/B = GLOB.blob_nodes[i] - nodes["Blob Node #[i] ([get_location_name(B)])"] = B - var/node_name = input(src, "Выберете.", "Перемещение к узлу") in nodes - var/obj/structure/blob/node/chosen_node = nodes[node_name] - if(chosen_node) - src.loc = chosen_node.loc - -/mob/camera/blob/verb/toggle_node_req() - set category = "Blob" - set name = "Toggle Node Requirement" - set desc = "Переключить требование узла для размещения ресурсной плитки и фабрики." - nodes_required = !nodes_required - if(nodes_required) - to_chat(src, "Теперь вам необходимо иметь узел или ядро рядом ​​для размещения фабрики и ресурсной плитки.") - else - to_chat(src, "Теперь вам не нужно иметь узел или ядро рядом ​​для размещения фабрики и ресурсной плитки.") - -/mob/camera/blob/verb/create_shield_power() - set category = "Blob" - set name = "Create/Upgrade Shield Blob (15)" - set desc = "Создайте/улучшите крепкую плитку. Использование на существующей крепкой плитке превращает её в отражающую плитку, способную отражать большинство энергетических снарядов, но делая её намного слабее для остальных атак." - - var/turf/T = get_turf(src) - create_shield(T) - -/mob/camera/blob/proc/create_shield(var/turf/T) - - var/obj/structure/blob/B = locate(/obj/structure/blob) in T - var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T - - if(!S) - if(!B)//We are on a blob - to_chat(src, "Тут нет плитки!") - return - - else if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Невозможно использовать на этой плитке. Найдите обычную плитку.") - return - - else if(!can_buy(15)) - return - - B.color = blob_reagent_datum.color - B.change_to(/obj/structure/blob/shield) - else - - if(istype(S, /obj/structure/blob/shield/reflective)) - to_chat(src, "Здесь уже отражающая плитка!") - return - - - else if(S.obj_integrity < S.max_integrity * 0.5) - to_chat(src, "Эта крепкая плитка слишком повреждена, чтобы ее можно было модифицировать!") - return - - else if (!can_buy(15)) - return - - to_chat(src, "Вы выделяете отражающую слизь на крепкую плитку, позволяя ей отражать энергетические снаряды ценой снижения прочности.") - - S.change_to(/obj/structure/blob/shield/reflective) - S.color = blob_reagent_datum.color - return - -/mob/camera/blob/verb/create_resource() - set category = "Blob" - set name = "Create Resource Blob (40)" - set desc = "Создайте ресурсную плитку, которая будет приносить вам ресурсы." - - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/B = (locate(/obj/structure/blob) in T) - - if(!B)//We are on a blob - to_chat(src, "Тут нет плитки!") - return - - if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Невозможно использовать на этой плитке. Найдите обычную плитку.") - return - for(var/obj/structure/blob/resource/blob in orange(4, T)) - to_chat(src, "Поблизости находится ресурсная плитка, отойдите на расстояние более 4 плиток от неё!") - return - - if(nodes_required) - if(!(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T))) - to_chat(src, "Вам нужно разместить этот объект ближе к узлу или ядру!") - return //handholdotron 2000 - - if(!can_buy(40)) - return - - B.color = blob_reagent_datum.color - B.change_to(/obj/structure/blob/resource) - var/obj/structure/blob/resource/R = locate() in T - if(R) - R.overmind = src - - return - -/mob/camera/blob/verb/create_node() - set category = "Blob" - set name = "Create Node Blob (60)" - set desc = "Создает узел." - - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/B = (locate(/obj/structure/blob) in T) - - if(!B)//We are on a blob - to_chat(src, "Тут нет плитки блоба!") - return - - if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Невозможно использовать на этой плитке. Найдите обычную плитку.") - return - - for(var/obj/structure/blob/node/blob in orange(5, T)) - to_chat(src, "Поблизости находится узел, отойдите на расстояние более 5 плиток от него!") - return - - if(!can_buy(60)) - return - - B.change_to(/obj/structure/blob/node) - var/obj/structure/blob/node/R = locate() in T - if(R) - R.adjustcolors(blob_reagent_datum.color) - R.overmind = src - return - - -/mob/camera/blob/verb/create_factory() - set category = "Blob" - set name = "Create Factory Blob (60)" - set desc = "Создает плитку, производящую споры." - - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/B = locate(/obj/structure/blob) in T - if(!B) - to_chat(src, "Тут нет плитки!") - return - - if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Невозможно использовать на этой плитке. Найдите обычную плитку.") - return - - for(var/obj/structure/blob/factory/blob in orange(7, T)) - to_chat(src, "Поблизости находится фабрика, отойдите на расстояние более 7 плиток от неё!") - return - - if(nodes_required) - if(!(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T))) - to_chat(src, "Вам нужно разместить этот объект ближе к узлу или ядру!") - return //handholdotron 2000 - - if(!can_buy(60)) - return - - B.change_to(/obj/structure/blob/factory) - B.color = blob_reagent_datum.color - var/obj/structure/blob/factory/R = locate() in T - if(R) - R.overmind = src - return - - -/mob/camera/blob/verb/create_blobbernaut() - set category = "Blob" - set name = "Create Blobbernaut (60)" - set desc = "Создает сильное порождение блоба. Блобернаута!" - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/B = locate(/obj/structure/blob) in T - if(!B) - to_chat(src, "Вы должны быть на плитке блоба!") - return FALSE - - if(!istype(B, /obj/structure/blob/factory)) - to_chat(src, "Невозможно использовать эту плитку, найдите фабрику.") - return FALSE - var/obj/structure/blob/factory/b_fac = B - - if(b_fac.is_waiting_spawn) - return FALSE - - if(!can_buy(60)) - return FALSE - - spawn() - var/mob/C - b_fac.is_waiting_spawn = TRUE - - var/list/candidates = SSghost_spawns.poll_candidates("Вы хотите сыграть за блобернаута?", ROLE_BLOB, TRUE, 10 SECONDS, source = /mob/living/simple_animal/hostile/blob/blobbernaut) - if(length(candidates)) - C = pick(candidates) - - if(!C) - add_points(60) - b_fac.is_waiting_spawn = FALSE - - if(b_fac && b_fac.is_waiting_spawn) //Если фабрика цела и её не разрушили во время голосования - var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new (get_turf(b_fac)) - qdel(b_fac) - blobber.key = C.key - log_game("[blobber.key] has spawned as Blobbernaut") - to_chat(blobber, "Вы блобернаут! Вы должны помочь всем формам блоба в их миссии по уничтожению всего!") - to_chat(blobber, "Вы исцеляетесь, стоя на плитках блоба, однако вы будете медленно разлагаться, если получите урон за пределами блоба.") - - blobber.color = blobstrain.complementary_color - blobber.overmind = src - blob_mobs.Add(blobber) - blobber.AIStatus = AI_OFF - blobber.LoseTarget() - addtimer(CALLBACK(blobber, TYPE_PROC_REF(/mob/living/simple_animal/hostile/blob/blobbernaut/, add_to_gamemode)), TIME_TO_ADD_OM_DATUM) - return TRUE - - -/mob/camera/blob/verb/relocate_core() - set category = "Blob" - set name = "Relocate Core (80)" - set desc = "Перемещает ваше ядро ​​на узел, на котором вы находитесь, ваше старое ядро ​​будет превращено в узел." - - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/node/B = locate(/obj/structure/blob/node) in T - if(!B) - to_chat(src, "Вы должны быть на узле!") - return - - if(!can_buy(80)) - return - - // The old switcharoo. - var/turf/old_turf = blob_core.loc - blob_core.loc = T - B.loc = old_turf - return - - -/mob/camera/blob/verb/revert() - set category = "Blob" - set name = "Remove Blob" - set desc = "Удаляет плитку. Вы получите 30 % возмещение стоимости специальных структур блоба." - - var/turf/T = get_turf(src) - remove_blob(T) - -/mob/camera/blob/proc/remove_blob(var/turf/T) - - var/obj/structure/blob/B = locate(/obj/structure/blob) in T - if(!T) - return - if(!B) - to_chat(src, "Тут нет плитки блоба!") - return - if(B.point_return < 0) - to_chat(src, "Невозможно удалить эту плитку!") - return - if(max_blob_points < B.point_return + blob_points) - to_chat(src, "У вас слишком много ресурсов для удаления этой плитки!") - return - if(B.point_return) - add_points(B.point_return) - to_chat(src, "Получено [B.point_return] ресурса после удаления \the [B].") - qdel(B) - return - - -/mob/camera/blob/verb/expand_blob_power() - set category = "Blob" - set name = "Expand/Attack Blob (5)" - set desc = "Пытается создать новую плитку блоба в этом тайле. Если тайл не чист, мы наносим урон объекту, находящемуся в нем, что может его очистить." - - var/turf/T = get_turf(src) - expand_blob(T) - -/mob/camera/blob/proc/expand_blob(turf/T) - if(!T) - return - - if(!can_attack()) - return - - if(!is_location_within_transition_boundaries(T)) - to_chat(src, "Вы не можете расширяться сюда...") - return - - var/obj/structure/blob/B = locate() in T - if(B) - to_chat(src, "Здесь уже есть плитка!") - return - - var/obj/structure/blob/OB = locate() in circlerange(T, 1) - if(!OB) - to_chat(src, "Рядом с вами нет ни одной плитки.") - return - - if(!((locate(/mob/living) in T) || can_buy(5))) - return - last_attack = world.time - OB.expand(T, 0, blobstrain.color) - for(var/mob/living/L in T) - if(ROLE_BLOB in L.faction) //no friendly/dead fire - continue - var/mob_protection = L.get_permeability_protection() - blobstrain.reaction_mob(L, REAGENT_TOUCH, 25, 1, mob_protection) - blobstrain.send_message(L) - OB.color = blobstrain.color - return - - -/mob/camera/blob/verb/rally_spores_power() - set category = "Blob" - set name = "Rally Spores" - set desc = "Направьте споры, чтоб они переместились в выбранное место." - - var/turf/T = get_turf(src) - rally_spores(T) - -/mob/camera/blob/proc/rally_spores(var/turf/T) - to_chat(src, "Вы направляете свои споры.") - - var/list/surrounding_turfs = block(T.x - 1, T.y - 1, T.z, T.x + 1, T.y + 1, T.z) - if(!surrounding_turfs.len) - return - - for(var/mob/living/simple_animal/hostile/blob/blobspore/BS in GLOB.alive_mob_list) - if(isturf(BS.loc) && get_dist(BS, T) <= 35) - BS.LoseTarget() - BS.Goto(pick(surrounding_turfs), BS.move_to_delay) - return - -/mob/camera/blob/verb/split_consciousness() - set category = "Blob" - set name = "Split consciousness (100) (One use)" - set desc = "Тратьте ресурсы, чтобы попытаться создать еще одного блоба." - - var/turf/T = get_turf(src) - if(!T) - return - if(split_used) - to_chat(src, "Вы уже произвели потомка.") - return - if(is_offspring) - to_chat(src, "Потомки блоба не могут производить потомков.") - return - - var/obj/structure/blob/N = (locate(/obj/structure/blob) in T) - if(!N) - to_chat(src, "Для создания вашего потомка необходим узел.") - return - if(!istype(N, /obj/structure/blob/node)) - to_chat(src, "Для создания вашего потомка необходим узел.") - return - if(!can_buy(100)) - return - - split_used = TRUE - - new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, offspring = TRUE) - qdel(N) - - -/mob/camera/blob/verb/blob_broadcast() - set category = "Blob" - set name = "Blob Broadcast" - set desc = "Говорите, используя споры и блобернаутов в качестве рупоров. Это действие бесплатно." - - var/speak_text = clean_input("Что вы хотите сказать от лица ваших созданий?", "Blob Broadcast", null) - - if(!speak_text) - return - else - to_chat(usr, "Вы говорите от лица ваших созданий, [speak_text]") - for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs) - if(blob_minion.stat == CONSCIOUS) - blob_minion.say(speak_text) - return - -/mob/camera/blob/verb/create_storage() - set category = "Blob" - set name = "Create Storage Blob (40)" - set desc = "Создаёт хранилище, которая будет накапливать дополнительные ресурсы для вас. Это увеличивает ваш максимальный предел ресурсов на 50." - - - var/turf/T = get_turf(src) - - if(!T) - return - - var/obj/structure/blob/B = (locate(/obj/structure/blob) in T) - - if(!B)//We are on a blob - to_chat(src, "Тут нет плитки блоба!") - return - - if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Невозможно использовать эту плитку, найдите обычную.") - return - - for(var/obj/structure/blob/storage/blob in orange(3, T)) - to_chat(src, "Поблизости находится хранилище, отойдите на расстояние более 4 плиток от него!") - return - - if(!can_buy(40)) - return - - B.color = blob_reagent_datum.color - B.change_to(/obj/structure/blob/storage) - var/obj/structure/blob/storage/R = locate() in T - if(R) - R.overmind = src - R.update_max_blob_points(50) - - return - - -/mob/camera/blob/verb/chemical_reroll() - set category = "Blob" - set name = "Reactive Chemical Adaptation (50)" - set desc = "Заменяет ваш химикат на другой случайным образом." - - //var/datum/antagonist/blob_overmind/overmind_datum = mind.has_antag_datum(/datum/antagonist/blob_overmind) - //if(overmind_datum) - // overmind_datum.reagent = blob_reagent_datum - - //to_chat(src, "Ваш новый реагент: [blob_reagent_datum.name] - [blob_reagent_datum.description]") - -/mob/camera/blob/verb/blob_help() - set category = "Blob" - set name = "*Blob Help*" - set desc = "Help on how to blob." - for (var/message in get_blob_help_messages(blobstrain)) - to_chat(src, message) - -*/ diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 7db851c564a..5985603a2dc 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -2,49 +2,16 @@ /** Simple price check */ /mob/camera/blob/proc/can_buy(cost = 15) + if(is_infinity || SSticker?.mode?.is_blob_infinity_points) + return TRUE if(blob_points < cost) - to_chat(src, span_warning("You cannot afford this, you need at least [cost] resources!")) - balloon_alert(src, "need [cost-blob_points] more resource\s!") + to_chat(src, span_warning("Вам не хватает рескрсов, вам нужно как минимум [cost]!")) + balloon_alert(src, "нужно еще [cost-blob_points]!") return FALSE add_points(-cost) return TRUE -/** Checks proximity for mobs */ -/mob/camera/blob/proc/check_core_visibility() - for(var/mob/living/player in range(7, src)) - if(ROLE_BLOB in player.faction) - continue - if(player.client) - to_chat(src, span_warning("There is someone too close to place your blob core!")) - return FALSE - - for(var/mob/living/player in view(13, src)) - if(ROLE_BLOB in player.faction) - continue - if(player.client) - to_chat(src, span_warning("Someone could see your blob core from here!")) - return FALSE - - return TRUE - - -/** Checks for previous blobs or denose objects on the tile. */ -/mob/camera/blob/proc/check_objects_tile(turf/placement) - for(var/obj/object in placement) - if(istype(object, /obj/structure/blob)) - if(istype(object, /obj/structure/blob/normal)) - qdel(object) - else - to_chat(src, span_warning("There is already a blob here!")) - return FALSE - else - if(object.density) - to_chat(src, span_warning("This spot is too dense to place a blob core on!")) - return FALSE - - return TRUE - /** Moves the core elsewhere. */ /mob/camera/blob/proc/transport_core() if(blob_core) @@ -58,9 +25,9 @@ var/list/nodes = list() for(var/index in 1 to length(GLOB.blob_nodes)) var/obj/structure/blob/special/node/blob = GLOB.blob_nodes[index] - nodes["Blob Node #[index] ([get_area_name(blob)])"] = blob + nodes["Узел #[index] ([get_area_name(blob)])"] = blob - var/node_name = tgui_input_list(src, "Choose a node to jump to", "Node Jump", nodes) + var/node_name = tgui_input_list(src, "Выберите узел для перемещения", "Выбор узла", nodes) if(isnull(node_name) || isnull(nodes[node_name])) return FALSE @@ -68,54 +35,64 @@ if(chosen_node) forceMove(chosen_node.loc) + /** Places important blob structures */ /mob/camera/blob/proc/create_special(price, blobstrain, min_separation, needs_node, turf/tile) if(!tile) tile = get_turf(src) var/obj/structure/blob/blob = (locate(/obj/structure/blob) in tile) if(!blob) - to_chat(src, span_warning("There is no blob here!")) - balloon_alert(src, "no blob here!") + to_chat(src, span_warning("Тут нет плитки!")) + balloon_alert(src, "тут нет плитки!") return FALSE if(!istype(blob, /obj/structure/blob/normal)) - to_chat(src, span_warning("Unable to use this blob, find a normal one.")) - balloon_alert(src, "need normal blob!") + to_chat(src, span_warning("Невозможно использовать на этой плитке. Найдите обычную плитку.")) + balloon_alert(src, "нужна обычная плитка!") return FALSE if(needs_node) var/area/area = get_area(src) if(!(area.area_flags & BLOBS_ALLOWED)) //factory and resource blobs must be legit - to_chat(src, span_warning("This type of blob must be placed on the station!")) - balloon_alert(src, "can't place off-station!") + to_chat(src, span_warning("Эта плитка должна быть размещена на станции!")) + balloon_alert(src, "нельзя поставить вне станции!") return FALSE if(nodes_required && !(locate(/obj/structure/blob/special/node) in orange(BLOB_NODE_PULSE_RANGE, tile)) && !(locate(/obj/structure/blob/special/core) in orange(BLOB_CORE_PULSE_RANGE, tile))) - to_chat(src, span_warning("You need to place this blob closer to a node or core!")) - balloon_alert(src, "too far from node or core!") + to_chat(src, span_warning("Вам нужно разместить эту плитку ближе к узлу или ядру!")) + balloon_alert(src, "слишком далеко от узла или ядра!") return FALSE //handholdotron 2000 if(min_separation) for(var/obj/structure/blob/other_blob in orange(min_separation, tile)) if(other_blob.type == blobstrain) - to_chat(src, span_warning("There is a similar blob nearby, move more than [min_separation] tiles away from it!")) - other_blob.balloon_alert(src, "too close!") + to_chat(src, span_warning("Поблизости находится ресурсная плитка, отойдите на расстояние более [min_separation] плиток от неё!")) + other_blob.balloon_alert(src, "слишком близко!") return FALSE if(!can_buy(price)) return FALSE var/obj/structure/blob/node = blob.change_to(blobstrain, src) return node -/** Toggles requiring nodes */ -/mob/camera/blob/proc/toggle_node_req() - nodes_required = !nodes_required - if(nodes_required) - to_chat(src, span_warning("You now require a nearby node or core to place factory and resource blobs.")) - else - to_chat(src, span_warning("You no longer require a nearby node or core to place factory and resource blobs.")) /** Creates a shield to reflect projectiles */ /mob/camera/blob/proc/create_shield(turf/tile) - var/obj/structure/blob/shield/shield = locate(/obj/structure/blob/shield) in tile - if(!shield) - shield = create_special(BLOB_UPGRADE_STRONG_COST, /obj/structure/blob/shield, 0, FALSE, tile) - shield?.balloon_alert(src, "upgraded to [shield.name]!") + var/obj/structure/blob/blob = (locate(/obj/structure/blob) in tile) + if(!blob) + to_chat(src, span_warning("Тут нет плитки!")) + balloon_alert(src, "тут нет плитки!") + return FALSE + + if(istype(blob, /obj/structure/blob/special)) + to_chat(src, span_warning("Невозможно использовать на этой плитке. Найдите обычную плитку.")) + balloon_alert(src, "нужна обычная плитка!") + return FALSE + + var/obj/structure/blob/shield/shield = blob + if(!istype(shield) && can_buy(BLOB_UPGRADE_STRONG_COST)) + shield = shield.change_to(/obj/structure/blob/shield, src) + shield?.balloon_alert(src, "улучшено в [shield.name]!") + return FALSE + + if(istype(shield, /obj/structure/blob/shield/reflective)) + to_chat(src, span_warning("Невозможно использовать на этой плитке. Ее больше некуда улучшать.")) + balloon_alert(src, "улучшено на максимум!") return FALSE if(!can_buy(BLOB_UPGRADE_REFLECTOR_COST)) @@ -123,31 +100,31 @@ if(shield.get_integrity() < shield.max_integrity * 0.5) add_points(BLOB_UPGRADE_REFLECTOR_COST) - to_chat(src, span_warning("This shield blob is too damaged to be modified properly!")) + to_chat(src, span_warning("Эта крепкая плитка слишком повреждена, чтобы ее можно было улучшить!")) return FALSE - to_chat(src, span_warning("You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced integrity.")) + to_chat(src, span_warning("Вы выделяете отражающую слизь на крепкую плитку, позволяя ей отражать энергетические снаряды ценой снижения прочности.")) shield = shield.change_to(/obj/structure/blob/shield/reflective, src) - shield.balloon_alert(src, "upgraded to [shield.name]!") + shield.balloon_alert(src, "улучшено в [shield.name]!") /** Preliminary check before polling ghosts. */ /mob/camera/blob/proc/create_blobbernaut() var/turf/current_turf = get_turf(src) var/obj/structure/blob/special/factory/factory = locate(/obj/structure/blob/special/factory) in current_turf if(!factory) - to_chat(src, span_warning("You must be on a factory blob!")) + to_chat(src, span_warning("Вы должны быть на фабрике блоба!")) return FALSE if(factory.blobbernaut || factory.is_creating_blobbernaut) //if it already made or making a blobbernaut, it can't do it again - to_chat(src, span_warning("This factory blob is already sustaining a blobbernaut.")) + to_chat(src, span_warning("Эта фабрика уже создает блобернаута.")) return FALSE if(factory.get_integrity() < factory.max_integrity * 0.5) - to_chat(src, span_warning("This factory blob is too damaged to sustain a blobbernaut.")) + to_chat(src, span_warning("Эта фабрика уже создала и поддерживает блобернаута.")) return FALSE if(!can_buy(BLOBMOB_BLOBBERNAUT_RESOURCE_COST)) return FALSE factory.is_creating_blobbernaut = TRUE - to_chat(src, span_notice("You attempt to produce a blobbernaut.")) + to_chat(src, span_notice("Вы пытаетесь создать блоббернаута.")) pick_blobbernaut_candidate(factory) /// Polls ghosts to get a blobbernaut candidate. @@ -157,38 +134,40 @@ var/icon/blobbernaut_icon = icon(icon, "blobbernaut") blobbernaut_icon.Blend(blobstrain.color, ICON_MULTIPLY) var/image/blobbernaut_image = image(blobbernaut_icon) - var/mob/chosen_one = SSpolling.poll_ghosts_for_target( - check_jobban = ROLE_BLOB, + var/list/candidates = SSghost_spawns.poll_candidates( + question = "Вы хотите сыграть за блобернаута?", + role = ROLE_BLOB, poll_time = 20 SECONDS, - checked_target = factory, - ignore_category = POLL_IGNORE_BLOB, - alert_pic = blobbernaut_image, - jump_target = factory, - role_name_text = "blobbernaut", - chat_text_border_icon = blobbernaut_image, + antag_age_check = TRUE, + check_antaghud = TRUE, + source = blobbernaut_image, + role_cleanname = "blobbernaut", ) - on_poll_concluded(factory, chosen_one) - -/// Called when the ghost poll concludes -/mob/camera/blob/proc/on_poll_concluded(obj/structure/blob/special/factory/factory, mob/dead/observer/ghost) - if(isnull(ghost)) - to_chat(src, span_warning("You could not conjure a sentience for your blobbernaut. Your points have been refunded. Try again later.")) + if(candidates.len) + var/mob/chosen_one = pick(candidates) + on_poll_concluded(factory, chosen_one) + else + to_chat(src, span_warning("Вы не смогли создать блобернаута. Ваши ресурсы были возвращены. Повторите попытку позже.")) add_points(BLOBMOB_BLOBBERNAUT_RESOURCE_COST) factory.assign_blobbernaut(null) - return FALSE +/// Called when the ghost poll concludes +/mob/camera/blob/proc/on_poll_concluded(obj/structure/blob/special/factory/factory, mob/dead/observer/ghost) var/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/blobber = new(get_turf(factory)) assume_direct_control(blobber) factory.assign_blobbernaut(blobber) blobber.assign_key(ghost.key, blobstrain) + blobber.AIStatus = AI_OFF + blobber.LoseTarget() RegisterSignal(blobber, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(on_blobbernaut_attacked)) /// When one of our boys attacked something, we sometimes want to perform extra effects -/mob/camera/blob/proc/on_blobbernaut_attacked(mob/living/basic/blobbynaut, atom/target, success) +/mob/camera/blob/proc/on_blobbernaut_attacked(mob/living/simple_animal/hostile/blobbynaut, atom/target, success) SIGNAL_HANDLER if (!success) return - blobstrain.blobbernaut_attack(target, blobbynaut) + if(!QDELETED(src)) + blobstrain.blobbernaut_attack(target, blobbynaut) /** Moves the core */ /mob/camera/blob/proc/relocate_core() @@ -196,16 +175,16 @@ var/obj/structure/blob/special/node/blob = locate(/obj/structure/blob/special/node) in tile if(!blob) - to_chat(src, span_warning("You must be on a blob node!")) + to_chat(src, span_warning("Вы должны быть на узле!")) return FALSE if(!blob_core) - to_chat(src, span_userdanger("You have no core and are about to die! May you rest in peace.")) + to_chat(src, span_userdanger("У вас нет ядра и вы на пороге смерти. Покойтесь с миром!")) return FALSE var/area/area = get_area(tile) if(isspaceturf(tile) || area && !(area.area_flags & BLOBS_ALLOWED)) - to_chat(src, span_warning("You cannot relocate your core here!")) + to_chat(src, span_warning("Вы не можете переместить свое ядро сюда!")) return FALSE if(!can_buy(BLOB_POWER_RELOCATE_COST)) @@ -223,21 +202,21 @@ var/obj/structure/blob/blob = locate() in tile if(!blob) - to_chat(src, span_warning("There is no blob there!")) + to_chat(src, span_warning("Тут нет плитки блоба!")) return FALSE if(blob.point_return < 0) - to_chat(src, span_warning("Unable to remove this blob.")) + to_chat(src, span_warning("Невозможно удалить эту плитку.")) return FALSE if(max_blob_points < blob.point_return + blob_points) - to_chat(src, span_warning("You have too many resources to remove this blob!")) + to_chat(src, span_warning("У вас слишком много ресурсов для удаления этой плитки!")) return FALSE if(blob.point_return) add_points(blob.point_return) - to_chat(src, span_notice("Gained [blob.point_return] resources from removing \the [blob].")) - blob.balloon_alert(src, "+[blob.point_return] resource\s") + to_chat(src, span_notice("Получено [blob.point_return] за удаление [blob].")) + blob.balloon_alert(src, "+[blob.point_return]") qdel(blob) @@ -253,7 +232,7 @@ possible_blobs += blob if(!length(possible_blobs)) - to_chat(src, span_warning("There is no blob adjacent to the target tile!")) + to_chat(src, span_warning("Рядом с целью нету плиток блоба!")) return FALSE if(!can_buy(BLOB_EXPAND_COST)) @@ -276,7 +255,7 @@ blob.blob_attack_animation(tile, src) add_points(BLOB_ATTACK_REFUND) else - to_chat(src, span_warning("There is a blob there!")) + to_chat(src, span_warning("Здесь уже есть плитка!")) add_points(BLOB_EXPAND_COST) //otherwise, refund all of the cost else directional_attack(tile, possible_blobs, attack_success) @@ -315,20 +294,45 @@ /** Rally spores to a location */ /mob/camera/blob/proc/rally_spores(turf/tile) - to_chat(src, "You rally your spores.") + to_chat(src, "Вы направляете свои споры.") var/list/surrounding_turfs = TURF_NEIGHBORS(tile) if(!length(surrounding_turfs)) return FALSE - for(var/mob/living/basic/blob_mob as anything in blob_mobs) + for(var/mob/living/simple_animal/hostile/blob_mob as anything in blob_mobs) if(!isturf(blob_mob.loc) || get_dist(blob_mob, tile) > 35 || blob_mob.key) continue - blob_mob.ai_controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) - blob_mob.ai_controller.set_blackboard_key(BB_TRAVEL_DESTINATION, pick(surrounding_turfs)) + blob_mob.LoseTarget() + blob_mob.Goto(pick(surrounding_turfs), blob_mob.move_to_delay) + + +/mob/camera/blob/proc/split_consciousness() + var/turf/T = get_turf(src) + if(!T) + return + if(split_used) + to_chat(src, span_warning("Вы уже произвели потомка.")) + return + if(is_offspring) + to_chat(src, span_warning("Потомки блоба не могут производить потомков.")) + return + + var/obj/structure/blob/N = (locate(/obj/structure/blob) in T) + if(N && !istype(N, /obj/structure/blob/special/node)) + to_chat(src, span_warning("Для создания вашего потомка необходим узел.")) + return + + if(!can_buy(BLOB_CORE_SPLIT_COST)) + return + + split_used = TRUE + new /obj/structure/blob/special/core/ (get_turf(N), null, TRUE) + qdel(N) + /** Opens the reroll menu to change strains */ /mob/camera/blob/proc/strain_reroll() if (!free_strain_rerolls && blob_points < BLOB_POWER_REROLL_COST) - to_chat(src, span_warning("You need at least [BLOB_POWER_REROLL_COST] resources to reroll your strain again!")) + to_chat(src, span_warning("Вам нужно как минимум [BLOB_POWER_REROLL_COST], чтобы снова изменить свой штамм!")) return FALSE open_reroll_menu() @@ -345,18 +349,14 @@ var/image/strain_icon = image('icons/mob/blob.dmi', "blob_core") strain_icon.color = initial(strain.color) - var/info_text = span_boldnotice("[initial(strain.name)]") - info_text += "
    [span_notice("[initial(strain.analyzerdescdamage)]")]" - if (!isnull(initial(strain.analyzerdesceffect))) - info_text += "
    [span_notice("[initial(strain.analyzerdesceffect)]")]" - - var/datum/radial_menu_choice/choice = new - choice.image = strain_icon - choice.info = info_text + //var/info_text = span_boldnotice("[initial(strain.name)]") + //info_text += "
    [span_notice("[initial(strain.analyzerdescdamage)]")]" + //if (!isnull(initial(strain.analyzerdesceffect))) + //info_text += "
    [span_notice("[initial(strain.analyzerdesceffect)]")]" - strain_choices[initial(strain.name)] = choice + strain_choices[initial(strain.name)] = strain_icon - var/strain_result = show_radial_menu(src, src, strain_choices, radius = BLOB_REROLL_RADIUS, tooltips = TRUE) + var/strain_result = show_radial_menu(src, src, strain_choices, radius = BLOB_REROLL_RADIUS) if (isnull(strain_result)) return diff --git a/code/modules/antagonists/blob/powers_verbs.dm b/code/modules/antagonists/blob/powers_verbs.dm new file mode 100644 index 00000000000..ad75b9ec3b2 --- /dev/null +++ b/code/modules/antagonists/blob/powers_verbs.dm @@ -0,0 +1,34 @@ +/** Toggles requiring nodes */ +/mob/camera/blob/verb/toggle_node_req() + set category = "Blob" + set name = "Переключить требование узла" + set desc = "Переключить требование узла для размещения ресурсной плитки и фабрики." + + nodes_required = !nodes_required + if(nodes_required) + to_chat(src, span_warning("Теперь вам необходимо иметь узел или ядро рядом ​​для размещения фабрики и ресурсной плитки.")) + else + to_chat(src, span_warning("Теперь вам не нужно иметь узел или ядро рядом ​​для размещения фабрики и ресурсной плитки.")) + +/mob/camera/blob/verb/blob_help() + set category = "Blob" + set name = "*Помощь*" + set desc = "Подсказывает, как быть блобом." + var/list/messages = get_blob_help_messages(blobstrain) + to_chat(src, chat_box_regular(messages.Join("
    "))) + +/mob/camera/blob/verb/blob_broadcast() + set category = "Blob" + set name = "Ретрянсляция блоба" + set desc = "Говорите, используя споры и блобернаутов в качестве рупоров. Это действие бесплатно." + + var/speak_text = tgui_input_text(usr, "Что вы хотите сказать от лица ваших созданий?", "Ретрянсляция блоба", null) + + if(!speak_text) + return + else + to_chat(usr, "Вы говорите от лица ваших созданий, [speak_text]") + for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs) + if(blob_minion.stat == CONSCIOUS) + blob_minion.atom_say(speak_text) + return \ No newline at end of file diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 994257159b4..f51927f93b8 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -35,27 +35,29 @@ /// If the blob blocks atmos and heat spread var/atmosblock = FALSE +/obj/structure/blob/ComponentInitialize() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + /obj/structure/blob/Initialize(mapload, owner_overmind) . = ..() ADD_TRAIT(src, TRAIT_CHASM_DESTROYED, INNATE_TRAIT) GLOB.blobs += src if(owner_overmind && isovermind(owner_overmind)) - overmind = owner_overmind - overmind.all_blobs += src + link_to_overmind(owner_overmind) setDir(pick(GLOB.cardinal)) if(atmosblock) air_update_turf(TRUE) ConsumeTile() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) update_blob() -/obj/structure/blob/proc/creation_action() //When it's created by the overmind, do this. - return +/obj/structure/blob/proc/link_to_overmind(mob/camera/blob/owner_overmind) + overmind = owner_overmind + overmind.all_blobs += src /obj/structure/blob/Destroy() @@ -176,14 +178,16 @@ return var/make_blob = TRUE //can we make a blob? - if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) - make_blob = FALSE - playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it + if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T)) + if(SEND_SIGNAL(T, COMSIG_TRY_CONSUME_TURF) & COMPONENT_CANT_CONSUME) + make_blob = FALSE + playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable - make_blob = FALSE - T.blob_act(src) //hit the turf if it is + if(SEND_SIGNAL(T, COMSIG_TRY_CONSUME_TURF) & COMPONENT_CANT_CONSUME) + make_blob = FALSE + T.blob_act(src) //hit the turf if it is for(var/atom/A in T) if(!A.CanPass(src, get_dir(T, src))) //is anything in the turf impassable make_blob = FALSE @@ -333,7 +337,6 @@ if(!ispath(type)) CRASH("change_to(): invalid type for blob") var/obj/structure/blob/B = new type(src.loc, controller) - B.creation_action() B.update_blob() B.setDir(dir) qdel(src) diff --git a/code/modules/antagonists/blob/structures/captured_nuke.dm b/code/modules/antagonists/blob/structures/captured_nuke.dm index 879c9c610ff..123c9b88467 100644 --- a/code/modules/antagonists/blob/structures/captured_nuke.dm +++ b/code/modules/antagonists/blob/structures/captured_nuke.dm @@ -6,7 +6,7 @@ health_regen = BLOB_CAP_NUKE_HP_REGEN point_return = BLOB_REFUND_CAP_NUKE_COST -/obj/structure/blob/special/captured_nuke/Initialize(mapload, obj/machinery/nuclearbomb/N) +/obj/structure/blob/special/captured_nuke/Initialize(mapload, owner_overmind, obj/machinery/nuclearbomb/N) . = ..() START_PROCESSING(SSobj, src) N?.forceMove(src) diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index 3f36ba68159..468e90bb843 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -7,7 +7,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 90) explosion_block = 6 explosion_vertical_block = 5 - point_return = BLOB_REFUND_CORE_COST + point_return = BLOB_REFUND_CORE_COST fire_resist = BLOB_CORE_FIRE_RESIST health_regen = BLOB_CORE_HP_REGEN resistance_flags = LAVA_PROOF @@ -17,11 +17,17 @@ pulse_range = BLOB_CORE_PULSE_RANGE expand_range = BLOB_CORE_EXPAND_RANGE ignore_syncmesh_share = TRUE + COOLDOWN var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes var/is_offspring = null var/selecting = 0 +/obj/structure/blob/special/core/ComponentInitialize() + . = ..() + AddComponent(/datum/component/stationloving, FALSE, TRUE) + + /obj/structure/blob/special/core/Initialize(mapload, client/new_overmind = null, offspring) GLOB.blob_cores += src START_PROCESSING(SSobj, src) @@ -33,9 +39,9 @@ if(overmind) overmind.blobstrain.on_gain() update_blob() - AddComponent(/datum/component/stationloving, FALSE, TRUE) return ..() + /obj/structure/blob/special/core/Destroy() GLOB.blob_cores -= src if(overmind) @@ -90,6 +96,7 @@ reinforce_area(seconds_per_tick) ..() + /obj/structure/blob/special/core/proc/create_overmind(client/new_overmind, override_delay) if(overmind_get_delay > world.time && !override_delay) return @@ -120,16 +127,15 @@ C = new_overmind if(C && !QDELETED(src)) - var/mob/camera/blob/B = new(loc) + var/mob/camera/blob/B = new(loc, src) + B.blob_core = src B.mind_initialize() B.key = C.key - B.blob_core = src overmind = B B.is_offspring = is_offspring - overmind.select_reagent() addtimer(CALLBACK(src, PROC_REF(add_datum_if_not_exist)), TIME_TO_ADD_OM_DATUM) log_game("[B.key] has become Blob [is_offspring ? "offspring" : ""]") - + /obj/structure/blob/special/core/proc/add_datum_if_not_exist() if(!overmind.mind.has_antag_datum(/datum/antagonist/blob_overmind)) diff --git a/code/modules/antagonists/blob/structures/factory.dm b/code/modules/antagonists/blob/structures/factory.dm index bc74f192e57..375a2e19d10 100644 --- a/code/modules/antagonists/blob/structures/factory.dm +++ b/code/modules/antagonists/blob/structures/factory.dm @@ -25,9 +25,15 @@ return "It is currently sustaining a blobbernaut, making it fragile and unable to produce blob spores." return "Will produce a blob spore every few seconds." -/obj/structure/blob/special/factory/creation_action() - if(overmind) - overmind.factory_blobs += src +/obj/structure/blob/special/factory/link_to_overmind(mob/camera/blob/owner_overmind) + . = ..() + owner_overmind.factory_blobs += src + if(!owner_overmind.blobstrain) + return . + for(var/mob in spores_and_zombies) + owner_overmind.assume_direct_control(mob) + if(blobbernaut) + owner_overmind.assume_direct_control(blobbernaut) /obj/structure/blob/special/factory/Destroy() spores_and_zombies = null @@ -46,7 +52,7 @@ return COOLDOWN_START(src, spore_delay, spore_cooldown) flick("blob_factory_glow", src) - var/mob/living/basic/blob_minion/created_spore = (overmind) ? overmind.create_spore(loc) : new(loc) + var/mob/living/simple_animal/hostile/blob_minion/created_spore = (overmind) ? overmind.create_spore(loc) : new(loc) register_mob(created_spore) RegisterSignal(created_spore, COMSIG_BLOB_ZOMBIFIED, PROC_REF(on_zombie_created)) diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm index 0b7a6b180ba..1403bae6c3a 100644 --- a/code/modules/antagonists/blob/structures/node.dm +++ b/code/modules/antagonists/blob/structures/node.dm @@ -39,9 +39,10 @@ if(blocks_emissive) add_overlay(get_emissive_block()) -/obj/structure/blob/special/node/creation_action() - if(overmind) - overmind.node_blobs += src + +/obj/structure/blob/special/node/link_to_overmind(mob/camera/blob/owner_overmind) + . = ..() + overmind.node_blobs += src /obj/structure/blob/special/node/Destroy() GLOB.blob_nodes -= src diff --git a/code/modules/antagonists/blob/structures/resource.dm b/code/modules/antagonists/blob/structures/resource.dm index 92a81039e45..127c7591645 100644 --- a/code/modules/antagonists/blob/structures/resource.dm +++ b/code/modules/antagonists/blob/structures/resource.dm @@ -13,9 +13,9 @@ /obj/structure/blob/special/resource/scannerreport() return "Gradually supplies the blob with resources, increasing the rate of expansion." -/obj/structure/blob/special/resource/creation_action() - if(overmind) - overmind.resource_blobs += src +/obj/structure/blob/special/resource/link_to_overmind(mob/camera/blob/owner_overmind) + . = ..() + overmind.resource_blobs += src /obj/structure/blob/special/resource/Destroy() if(overmind) diff --git a/code/modules/antagonists/blob/structures/special.dm b/code/modules/antagonists/blob/structures/special.dm index 1093bbbb46c..2ba83b7672f 100644 --- a/code/modules/antagonists/blob/structures/special.dm +++ b/code/modules/antagonists/blob/structures/special.dm @@ -39,7 +39,7 @@ if(!is_location_within_transition_boundaries(get_turf(B))) continue if(!B.overmind && prob(30)) - B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. + B.link_to_overmind(pulsing_overmind) //reclaim unclaimed, non-core blobs. B.update_blob() var/distance = get_dist(get_turf(src), get_turf(B)) var/expand_probablity = max(20 - distance * 8, 1) diff --git a/code/modules/antagonists/blob/structures/storage.dm b/code/modules/antagonists/blob/structures/storage.dm index 7aae6c6d0c7..76e1b7c7e9b 100644 --- a/code/modules/antagonists/blob/structures/storage.dm +++ b/code/modules/antagonists/blob/structures/storage.dm @@ -4,11 +4,19 @@ icon_state = "blob_resource" max_integrity = BLOB_STORAGE_MAX_HP fire_resist = BLOB_STORAGE_FIRE_RESIST - point_return = BLOB_REFUND_STORAGE_COST + point_return = BLOB_REFUND_STORAGE_COST + +/obj/structure/blob/storage/Initialize(mapload, owner_overmind) + . = ..() + update_max_blob_points(BLOB_STORAGE_MAX_POINTS_BONUS) + +/obj/structure/blob/storage/link_to_overmind(mob/camera/blob/owner_overmind) + . = ..() + update_max_blob_points(BLOB_STORAGE_MAX_POINTS_BONUS) /obj/structure/blob/storage/obj_destruction(damage_flag) if(overmind) - overmind.max_blob_points -= 50 + overmind.max_blob_points -= BLOB_STORAGE_MAX_POINTS_BONUS ..() /obj/structure/blob/storage/proc/update_max_blob_points(new_point_increase) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d2ff4cd36de..96186efcf5c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -21,6 +21,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) light_system = NO_LIGHT_SUPPORT invisibility = INVISIBILITY_OBSERVER pass_flags = PASSEVERYTHING + hud_type = /datum/hud/ghost var/can_reenter_corpse var/bootime = FALSE var/started_as_observer //This variable is set to 1 when you enter the game as an observer. diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index c1549ff71f2..e7152362946 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -14,7 +14,12 @@ var/nightvision_enabled = FALSE nightvision = 4 - + + verb_say = "hisses" + verb_ask = "hisses curiously" + verb_exclaim = "roars" + verb_yell = "roars" + var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = FALSE var/move_delay_add = 0 // movement delay to add @@ -97,17 +102,12 @@ return GLOB.all_languages[LANGUAGE_XENOS] /mob/living/carbon/alien/say_quote(var/message, var/datum/language/speaking = null) - var/verb = "hisses" var/ending = copytext(message, length(message)) - + if(speaking && (speaking.name != "Galactic Common")) //this is so adminbooze xenos speaking common have their custom verbs, - verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages + return speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages else - if(ending=="!") - verb = "roars" - else if(ending=="?") - verb = "hisses curiously" - return verb + return ..() /mob/living/carbon/alien/adjustToxLoss( diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 98ecfb25b87..4883f40950a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -97,6 +97,7 @@ update_inv_l_hand() update_inv_pockets() update_fire() + update_wet() if(blocks_emissive) add_overlay(get_emissive_block()) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 1026d476882..b34ba7137e1 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -5,6 +5,7 @@ max_grab = GRAB_KILL slowed_by_pull_and_push = FALSE butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 5, /obj/item/stack/sheet/animalhide/xeno = 1) + hud_type = /datum/hud/alien var/obj/item/r_store = null var/obj/item/l_store = null var/caste = "" diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index c8f34c6e826..c871e951ce2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -85,6 +85,7 @@ update_inv_l_hand() update_inv_pockets() update_fire() + update_wet() if(blocks_emissive) add_overlay(get_emissive_block()) diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 2ec18501a06..9b3ce1de6f1 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -38,6 +38,7 @@ update_inv_hands() update_inv_pockets() update_fire() + update_wet() if(blocks_emissive) add_overlay(get_emissive_block()) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 0ac6d286628..28317409c6e 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -18,6 +18,8 @@ death_message = "с тошнотворным шипением выдыха%(ет,ют)% воздух и пада%(ет,ют)% на пол..." death_sound = null + hud_type = /datum/hud/larva + var/datum/action/innate/hide/alien_larva/hide_action diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b0d89a6afa2..f7e356b1b25 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -28,8 +28,8 @@ if(stat == DEAD) return else - show_message("Блоб атакует!") - adjustBruteLoss(10) + show_message(span_userdanger("Блоб атакует!")) + adjustBruteLoss(10) /mob/living/carbon/Move(atom/newloc, direct = NONE, glide_size_override = 0, update_dir = TRUE) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8c4e4cd1eb0..77eda152187 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -335,7 +335,7 @@ if(stat == DEAD) return SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B) - show_message("The blob attacks you!") + show_message(span_userdanger("The blob attacks you!")) var/dam_zone = list( BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, @@ -350,8 +350,7 @@ BODY_ZONE_PRECISE_R_FOOT, ) var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee")) - + apply_damage(5, BRUTE, affecting, run_armor_check(affecting, MELEE)) // Get rank from ID from hands, wear_id, pda, and then from uniform /mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index b4059f4a60f..040145b9b64 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -15,6 +15,7 @@ num_hands = 0 //Populated on init through list/bodyparts usable_hands = 0 //Populated on init through list/bodyparts status_flags = parent_type::status_flags|CANSTAMCRIT + hud_type = /datum/hud/human //Marking colour and style var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000. var/list/m_styles = DEFAULT_MARKING_STYLES //All markings set to None. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 17ab8f338e9..05a2af564e0 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -518,6 +518,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) add_overlay(get_emissive_block()) update_halo_layer() update_fire() + update_wet() update_ssd_overlay() update_unconscious_overlay() SEND_SIGNAL(src, COMSIG_HUMAN_REGENERATE_ICONS) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 3d8ab5a1387..cf013ce2c08 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -283,6 +283,8 @@ if(healths) if(stat != DEAD) . = TRUE + if(SEND_SIGNAL(src, COMSIG_CARBON_UPDATING_HEALTH_HUD, shown_health_amount) & COMPONENT_OVERRIDE_HEALTH_HUD) + return if(shown_health_amount == null) shown_health_amount = health if(shown_health_amount >= maxHealth) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 765ff34e0f8..f205344f1b0 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -53,6 +53,7 @@ handle_environment(environment) handle_fire() + handle_wet() var/datum/antagonist/vampire/vamp = mind?.has_antag_datum(/datum/antagonist/vampire) if(vamp) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 411377f6d3a..fdccc42a358 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -7,6 +7,8 @@ faction += "\ref[src]" determine_move_and_pull_forces() gravity_setup() + if(unique_name) + set_name() if(ventcrawler_trait) var/static/list/ventcrawler_sanity = list( TRAIT_VENTCRAWLER_ALWAYS, @@ -756,7 +758,9 @@ ExtinguishMob() CureAllDiseases(FALSE) fire_stacks = 0 + fire_stacks = 0 on_fire = 0 + is_wet = FALSE suiciding = 0 if(buckled) //Unbuckle the mob and clear the alerts. buckled.unbuckle_mob(src, force = TRUE) @@ -788,6 +792,7 @@ get_up(instant = TRUE) update_fire() + update_wet() regenerate_icons() restore_blood() if(human_mob) @@ -1838,6 +1843,9 @@ return TRUE return FALSE +/mob/living/examine(mob/user, infix, suffix) + . = ..() + SEND_SIGNAL(src, COMSIG_LIVING_EXAMINE, user, .) /** * Sets the mob's direction lock towards a given atom. @@ -2322,3 +2330,9 @@ . |= RECHARGE_SUCCESSFUL to_chat(src, span_notice("You feel [(. & RECHARGE_SUCCESSFUL) ? "raw magical energy flowing through you, it feels good!" : "very strange for a moment, but then it passes."]")) + +/mob/living/proc/set_name() + if(numba == 0) + numba = rand(1, 1000) + name = "[name] ([numba])" + real_name = name diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 26a49da0a8e..035cde36c50 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -185,8 +185,8 @@ /mob/living/proc/IgniteMob() if(fire_stacks > 0 && !on_fire) on_fire = TRUE - visible_message("[src.declent_ru(NOMINATIVE)] загора[pluralize_ru(src.gender,"ется","ются")]!", \ - "[pluralize_ru(src.gender,"Ты загораешься","Вы загораетесь")]!") + visible_message(span_warning("[src.declent_ru(NOMINATIVE)] загора[pluralize_ru(src.gender,"ется","ются")]!"), \ + span_userdanger("[pluralize_ru(src.gender,"Ты загораешься","Вы загораетесь")]!")) set_light_range(light_range + 3) set_light_color("#ED9200") throw_alert("fire", /atom/movable/screen/alert/fire) @@ -212,6 +212,8 @@ /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person SEND_SIGNAL(src, COMSIG_MOB_ADJUST_FIRE) fire_stacks = clamp(fire_stacks + add_fire_stacks, -20, 20) + if(wet_stacks) + combine_wet_and_fire() if(on_fire && fire_stacks <= 0) ExtinguishMob() @@ -239,6 +241,63 @@ SEND_SIGNAL(src, COMSIG_LIVING_FIRE_TICK) return TRUE +/mob/living/proc/update_wet() + if(is_wet) + if(wet_effect) + return + wet_effect = new(src, /particles/droplets) + else + qdel(wet_effect) + wet_effect = null + + +/mob/living/proc/adjust_wet_stacks(add_wet_stacks) //Adjusting the amount of fire_stacks we have on person + if(wet_immunity) + return + SEND_SIGNAL(src, COMSIG_MOB_ADJUST_WET) + wet_stacks = clamp(wet_stacks + add_wet_stacks, -20, 20) + if(fire_stacks) + combine_wet_and_fire() + if(is_wet && wet_stacks <= 0) + DryMob() + +/mob/living/proc/combine_wet_and_fire() + var/buf_stacks = wet_stacks + wet_stacks = clamp(buf_stacks - fire_stacks, 0, 20) + fire_stacks = clamp(fire_stacks - buf_stacks, 0, 20) + +/mob/living/proc/WetMob() + if(!wet_immunity && wet_stacks > 0 && !is_wet ) + is_wet = TRUE + visible_message(span_warning("[src.declent_ru(NOMINATIVE)] намока[pluralize_ru(src.gender,"ет","ют")]!"), \ + span_userdanger("[pluralize_ru(src.gender,"Ты намокаешь","Вы намокаете")]!")) + update_wet() + SEND_SIGNAL(src, COMSIG_LIVING_WET) + return TRUE + return FALSE + +/mob/living/proc/DryMob() + if(is_wet) + is_wet = FALSE + wet_stacks = 0 + update_wet() + +/** + * Burns a mob and slowly puts the fires out. Returns TRUE if the mob is on fire + */ +/mob/living/proc/handle_wet() + if(wet_stacks < 0) //If we've doused ourselves in water to avoid wet, dry off slowly + wet_stacks = min(0, wet_stacks + 1)//So we dry ourselves back to default, nonflammable. + if(!is_wet) + return FALSE + if(wet_stacks > 0) + adjust_wet_stacks(-0.1) //the wet is slowly consumed + else + DryMob() + return FALSE + SEND_SIGNAL(src, COMSIG_LIVING_WET_TICK) + return TRUE + /mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() adjust_fire_stacks(3) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 0ee33dffb53..79fc76328c7 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -38,6 +38,13 @@ var/on_fire = 0 //The "Are we on fire?" var var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20 + /// The "Are we wet?" var + var/is_wet = 0 + /// Tracks how many stacks of wet we have on, max is usually 20 + var/wet_stacks = 0 + var/wet_immunity = FALSE + + var/mob_size = MOB_SIZE_HUMAN var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature.. var/digestion_ratio = 1 //controls how quickly reagents metabolize; largely governered by species attributes. @@ -66,6 +73,9 @@ var/gene_stability = DEFAULT_GENE_STABILITY var/ignore_gene_stability = 0 + /// the id a mob gets when it's created + var/numba = 0 + var/unique_name = FALSE /// A log of what we've said, plain text, no spans or junk, essentially just each individual "message" var/list/say_log @@ -141,3 +151,5 @@ /// Famous last words -- if succumbing, what the user's last words were var/last_words + + var/obj/effect/abstract/particle_holder/wet_effect diff --git a/code/modules/mob/living/living_infected_blob_mobs.dm b/code/modules/mob/living/living_infected_blob_mobs.dm index 65970863476..b86bf2aac47 100644 --- a/code/modules/mob/living/living_infected_blob_mobs.dm +++ b/code/modules/mob/living/living_infected_blob_mobs.dm @@ -101,6 +101,10 @@ return FALSE +/mob/living/simple_animal/hostile/illusion/can_be_blob() + return FALSE + + /mob/living/simple_animal/hostile/asteroid/can_be_blob() return FALSE diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index be1a0129fd8..1600c935e10 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -205,6 +205,10 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) if(check_mute(client.ckey, MUTE_IC)) to_chat(src, span_danger("You cannot speak in IC (Muted).")) return FALSE + + var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_TRY_SPEECH, message) + if(sigreturn & COMPONENT_CANNOT_SPEAK) + return FALSE if(sanitize) message = trim_strip_html_properly(message, 512) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 74bb56e8bd9..c2f2b0ed6cd 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -47,6 +47,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( sight = SEE_TURFS | SEE_MOBS | SEE_OBJS nightvision = 8 can_buckle_to = FALSE + hud_type = /datum/hud/ai var/list/network = list("SS13","Telecomms","Research Outpost","Mining Outpost") var/obj/machinery/camera/current = null var/list/connected_robots = list() @@ -659,9 +660,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( /mob/living/silicon/ai/blob_act(obj/structure/blob/B) if(stat != DEAD) adjustBruteLoss(60) - return 1 - return 0 - + return TRUE + return TRUE /mob/living/silicon/ai/emp_act(severity) ..() @@ -1351,7 +1351,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( return TRUE -/mob/living/silicon/ai/proc/can_see(atom/A) +/mob/living/silicon/ai/can_see(atom/A) if(isturf(loc)) //AI in core, check if on cameras //get_turf_pixel() is because APCs in maint aren't actually in view of the inner camera //apc_override is needed here because AIs use their own APC when depowered diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 61126bd3c84..3fe628bf378 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -204,8 +204,8 @@ /mob/living/silicon/pai/blob_act() if(stat != DEAD) adjustBruteLoss(60) - return 1 - return 0 + return TRUE + return FALSE /mob/living/silicon/pai/emp_act(severity) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index dbe4d67f6b1..9083e45418b 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( var/updating = 0 //portable camera camerachunk update hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD) + hud_type = /datum/hud/robot var/default_cell_type = /obj/item/stock_parts/cell/high ///Jetpack-like effect. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f9e36b98105..2fa0e767f9a 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -4,6 +4,7 @@ bubble_icon = "machine" has_unlimited_silicon_privilege = 1 weather_immunities = list(TRAIT_WEATHER_IMMUNE) + wet_immunity = TRUE var/syndicate = 0 var/obj/item/gps/cyborg/gps = new var/const/MAIN_CHANNEL = "Main Frequency" diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 70bdf1172f2..2c7a527d58f 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -156,7 +156,10 @@ adjustBruteLoss(bloss) /mob/living/simple_animal/blob_act(obj/structure/blob/B) - adjustBruteLoss(20) + var/result = ..() + if(result) + adjustBruteLoss(20) + return result /mob/living/simple_animal/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect) if(!no_effect && !visual_effect_icon && melee_damage_upper) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index d5f7031309d..7d72a880884 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -24,6 +24,10 @@ light_system = MOVABLE_LIGHT + hud_type = /datum/hud/bot + + wet_immunity = TRUE + var/obj/machinery/bot_core/bot_core = null var/bot_core_type = /obj/machinery/bot_core var/list/users = list() //for dialog updates diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index c33d9aba886..51b63222c84 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -127,6 +127,7 @@ force_threshold = 11 playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \ create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." + hud_type = /datum/hud/construct/armoured /mob/living/simple_animal/hostile/construct/armoured/hostile //actually hostile, will move around, hit things AIStatus = AI_ON @@ -177,6 +178,7 @@ retreat_distance = 2 //AI wraiths will move in and out of combat playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls." tts_seed = "Kelthuzad" + hud_type = /datum/hud/construct/wraith /mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things AIStatus = AI_ON @@ -228,6 +230,7 @@ use magic missile, repair allied constructs (by clicking on them), \ and, most important of all, create new constructs by producing soulstones to capture souls, \ and shells to place those soulstones into.
    " + hud_type = /datum/hud/construct/builder /mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? @@ -309,6 +312,7 @@ attack_sound = 'sound/weapons/punch4.ogg' force_threshold = 11 construct_type = "behemoth" + hud_type = /datum/hud/construct/armoured var/energy = 0 var/max_energy = 1000 @@ -341,6 +345,7 @@ retreat_distance = 2 //AI harvesters will move in and out of combat, like wraiths, but shittier playstyle_string = "You are a Harvester. You are not strong, but your powers of domination will assist you in your role: \ Bring those who still cling to this world of illusion back to the master so they may know Truth." + hud_type = /datum/hud/construct/harvester /mob/living/simple_animal/hostile/construct/harvester/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 1b3978b8299..84c6470ba4e 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -25,6 +25,7 @@ turns_per_move = 10 mob_size = MOB_SIZE_SMALL gold_core_spawnable = FRIENDLY_SPAWN + hud_type = /datum/hud/corgi var/bark_sound = list('sound/creatures/dog_bark1.ogg','sound/creatures/dog_bark2.ogg') //Used in emote. var/bark_emote = list("ла%(ет,ют)%.", "гавка%(ет,ют)%.") // used in emote. var/growl_sound = list('sound/creatures/dog_grawl1.ogg','sound/creatures/dog_grawl2.ogg') //Used in emote. diff --git a/code/modules/mob/living/simple_animal/friendly/slugcat.dm b/code/modules/mob/living/simple_animal/friendly/slugcat.dm index 3f51d2c7fd3..8e770fbf9c0 100644 --- a/code/modules/mob/living/simple_animal/friendly/slugcat.dm +++ b/code/modules/mob/living/simple_animal/friendly/slugcat.dm @@ -136,6 +136,7 @@ add_overlay(head_icon) update_fire() + update_wet() if(blocks_emissive) add_overlay(get_emissive_block()) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 55d751ee2b4..5a6d250ae59 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -41,6 +41,7 @@ var/busy = 0 footstep_type = FOOTSTEP_MOB_CLAW AI_delay_max = 0.5 SECONDS + hud_type = /datum/hud/simple_animal/spider /mob/living/simple_animal/hostile/poison/giant_spider/ComponentInitialize() AddComponent( \ diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index ebf48eaaa54..dfdc09d7ef9 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -171,16 +171,39 @@ if(!search_objects) . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod)) - - for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) - if(can_see(targets_from, HM, vision_range)) + var/static/possible_targets = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod, /mob/living)) + for(var/HM in typecache_filter_list(range(vision_range, targets_from), possible_targets)) + if(targets_from.can_see(HM, vision_range)) . += HM else . = oview(vision_range, targets_from) if(retaliate_only) return . &= enemies // Remove all entries that aren't in enemies +/mob/living/simple_animal/hostile/can_see(atom/target, length) + if(!target || target.invisibility > see_invisible) + return FALSE + var/turf/current_turf = get_turf(src) + var/turf/target_turf = get_turf(target) + if(!current_turf || !target_turf) // nullspace + return FALSE + if(get_dist(current_turf, target_turf) > length) + return FALSE + if(current_turf == target_turf)//they are on the same turf, source can see the target + return TRUE + if(isliving(target) && (sight & SEE_MOBS))//if a mob sees mobs through walls, it always sees the target mob within line of sight + return TRUE + var/steps = 1 + current_turf = get_step_towards(current_turf, target_turf) + while(current_turf != target_turf) + if(steps > length) + return FALSE + if(IS_OPAQUE_TURF(current_turf)) + return FALSE + current_turf = get_step_towards(current_turf, target_turf) + steps++ + return TRUE + /mob/living/simple_animal/hostile/proc/FindTarget(list/possible_targets)//Step 2, filter down possible targets to things we actually care about if(QDELETED(src)) @@ -306,7 +329,7 @@ if(L in friends) return FALSE else - if((faction_check && !attack_same) || L.stat) + if((faction_check && !attack_same) || L.stat > stat_attack) return FALSE return TRUE @@ -453,7 +476,9 @@ SEND_SIGNAL(src, COMSIG_HOSTILE_ATTACKINGTARGET, target) if(!client) mob_attack_logs += "[time_stamp()] Attacked [target] at [COORD(src)]" - return target.attack_animal(src) + var/result = target.attack_animal(src) + SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result) + return result /mob/living/simple_animal/hostile/proc/Aggro() diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index d3437761665..fdfdbf8bae4 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -18,6 +18,7 @@ var/multiply_chance = 0 //if we multiply on hit deathmessage = "vanishes into thin air! It was a fake!" del_on_death = 1 + wet_immunity = TRUE /mob/living/simple_animal/hostile/illusion/Life() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm index 833ef4de31a..71c05d106ec 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm @@ -20,4 +20,5 @@ unique_pet = TRUE atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 2, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) gender = FEMALE + hud_type = /datum/hud/simple_animal/spider diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 593dbc8434b..9f5dda6e667 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -88,6 +88,9 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_TURFS|SEE_MOBS|SEE_OBJS + // HUD + hud_type = /datum/hud/simple_animal/spider + // AI aggression settings var/ai_target_method = TS_DAMAGE_SIMPLE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0538a1d6465..73eee1a1e8e 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -9,6 +9,8 @@ universal_speak = 0 status_flags = CANPUSH + hud_type = /datum/hud/simple_animal + var/icon_living = "" var/icon_dead = "" var/icon_resting = "" @@ -359,12 +361,9 @@ /mob/living/simple_animal/say_quote(message) - var/verb = "says" - - if(speak_emote.len) - verb = pick(speak_emote) - - return verb + if(speak_emote?.len) + return get_verb(speak_emote) + return ..() /mob/living/simple_animal/proc/set_varspeed(var_value) @@ -680,6 +679,7 @@ add_overlay("[collar_type]tag") update_fire() + update_wet() if(blocks_emissive) add_overlay(get_emissive_block()) diff --git a/code/modules/mob/living/simple_animal/slime/say.dm b/code/modules/mob/living/simple_animal/slime/say.dm index 8679d64a699..5c3ccd7558d 100644 --- a/code/modules/mob/living/simple_animal/slime/say.dm +++ b/code/modules/mob/living/simple_animal/slime/say.dm @@ -1,14 +1,3 @@ -/mob/living/simple_animal/slime/say_quote(text, datum/language/speaking) - var/verb = "blorbles" - var/ending = copytext(text, length(text)) - - if(ending == "?") - verb = "inquisitively blorbles" - else if(ending == "!") - verb = "loudly blorbles" - - return verb - /mob/living/simple_animal/slime/hear_say(list/message_pieces, verb = "says", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol, sound_frequency, use_voice = TRUE) if(speaker != src && !stat) if(speaker in Friends) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 6b51b2320a1..997dc6e86ad 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -20,7 +20,10 @@ response_disarm = "shoos" response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") - speak_emote = list("blorbles") + verb_say = "blorbles" + verb_ask = "inquisitively blorbles" + verb_exclaim = "loudly blorbles" + verb_yell = "loudly blorbles" bubble_icon = "slime" tts_seed = "Chen" @@ -40,6 +43,8 @@ footstep_type = FOOTSTEP_MOB_SLIME + hud_type = /datum/hud/slime + var/cores = 1 // the number of /obj/item/slime_extract's the slime has left inside var/mutation_chance = 30 // Chance of mutating, should be between 25 and 35 var/chance_reproduce = 80 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 42f00349255..813c0221ef2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -592,6 +592,7 @@ /mob/proc/get_status_tab_items() SHOULD_CALL_PARENT(TRUE) . = list(" ") + SEND_SIGNAL(src, COMSIG_MOB_GET_STATUS_TAB_ITEMS, .) return . // facing verbs @@ -638,7 +639,7 @@ return FALSE /mob/proc/can_use_machinery(obj/machinery/mach) - return IsAdvancedToolUser() + return IsAdvancedToolUser() /mob/proc/swap_hand() return @@ -673,7 +674,7 @@ var/mob/living/picked = tgui_input_list(usr, "Please select an NPC to respawn as", "Respawn as NPC", allowed_creatures) if(!picked) return - + if(picked == "Mouse") become_mouse() return @@ -684,7 +685,7 @@ if(QDELETED(picked_mob) || picked_mob.key || picked_mob.stat == DEAD) to_chat(usr, span_warning("[capitalize(picked_mob)] is no longer available to respawn!")) return - + if(istype(picked_mob, /mob/living/simple_animal/borer)) var/mob/living/simple_animal/borer/borer = picked_mob borer.transfer_personality(usr.client) @@ -693,7 +694,7 @@ to_chat(usr, span_notify(message)) GLOB.respawnable_list -= usr picked_mob.key = key - + /mob/proc/become_mouse() var/timedifference = world.time - client.time_joined_as_mouse diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a76ad7796fa..66ecf8a68a2 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -93,7 +93,11 @@ var/list/datum/language/languages /// For reagents that grant language knowlege. var/list/temporary_languages - var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null. + var/list/speak_emote = list() // Verbs used when speaking. Defaults to 'say' if speak_emote is null. + var/verb_say = "says" + var/verb_ask = "asks" + var/verb_exclaim = list("exclaims", "shouts") + var/verb_yell = "yells" /// Define emote default type, EMOTE_VISIBLE for seen emotes, EMOTE_AUDIBLE for heard emotes. var/emote_type = EMOTE_VISIBLE var/name_archive //For admin things like possession @@ -123,6 +127,8 @@ var/obj/item/clothing/mask/wear_mask = null //Carbon var/datum/hud/hud_used = null + /// Mob hud type + var/hud_type = /datum/hud hud_possible = list(SPECIALROLE_HUD) diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 34adbed0045..50f0010cdf2 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -121,17 +121,23 @@ /mob/proc/say_quote(message, datum/language/speaking = null) - var/verb = "says" - var/ending = copytext(message, length(message)) - + var/ending = copytext_char(message, -1) if(speaking) - verb = genderize_decode(src, speaking.get_spoken_verb(ending)) - else - if(ending == "!") - verb = pick("exclaims", "shouts", "yells") - else if(ending == "?") - verb = "asks" - return verb + return genderize_decode(src, speaking.get_spoken_verb(ending)) + else if(ending == "!") + return get_verb(verb_exclaim) + else if(ending == "?") + return get_verb(verb_ask) + else if(copytext_char(message, -2) == "!!") + return get_verb(verb_yell) + return get_verb(verb_say) + +/mob/proc/get_verb(list/verbs) + if(!verbs) + return "" + if(!istype(verbs)) + return verbs + return pick(verbs) /// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags #define ENCODE_HTML_EMPHASIS(input, char, html, varname) \ diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index 5e66d1a35f4..4f22cfe517f 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -47,7 +47,9 @@ mind.transfer_to(M) else M.key = key - + + SEND_SIGNAL(src, COMSIG_MOB_CHANGED_TYPE, M) + if(delete_old_mob) spawn(1) qdel(src) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 598647c2b75..f8dc37b811a 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -14,6 +14,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne #define GRAV_NEEDS_PLASTEEL 2 #define GRAV_NEEDS_WRENCH 3 +#define BLOB_HITS_NEED 4 + // // Abstract Generator // @@ -27,6 +29,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne use_power = NO_POWER_USE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | NO_MALF_EFFECT var/sprite_number = 0 + /// Number of successful blob hits + var/blob_hits = 0 /obj/machinery/gravity_generator/ex_act(severity) @@ -35,7 +39,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator/blob_act(obj/structure/blob/B) - if(prob(20)) + blob_hits++ + if(blob_hits >= BLOB_HITS_NEED) set_broken() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 0ed692764d0..75371cdce4f 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -146,7 +146,7 @@ field_generator power level display /obj/machinery/field/generator/blob_act(obj/structure/blob/B) if(active) - return 0 + return FALSE else ..() diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index bcd6b2b01ab..61f5602019e 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -134,10 +134,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin master.toggle_power() investigate_log("was moved whilst active; it powered down.", INVESTIGATE_ENGINE) -/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B) - if(prob(50) && !QDELETED(src)) - qdel(src) - /obj/structure/particle_accelerator/update_icon_state() switch(construction_state) if(ACCELERATOR_UNWRENCHED, ACCELERATOR_WRENCHED) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index d18fdc5ecb4..3fd5b46c338 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -137,9 +137,12 @@ /datum/reagents/proc/copy_to(obj/target, amount = 1, multiplier = 1, preserve_data = TRUE, safety = FALSE) if(!target) return - if(!target.reagents || total_volume <= 0) + if(total_volume <= 0) + return + + var/datum/reagents/R =(istype(target, /datum/reagents))? target : target?.reagents + if(!R || !istype(R)) return - var/datum/reagents/R = target.reagents amount = min(min(amount, total_volume), R.maximum_volume - R.total_volume) var/part = amount / total_volume var/trans_data = null @@ -648,7 +651,7 @@ handle_reactions() return FALSE - var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] + var/datum/reagent/D = (ispath(reagent))? new reagent() : GLOB.chemical_reagents_list[reagent] if(D) var/datum/reagent/R = new D.type() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 3348df63932..150cfbdf9c4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -112,10 +112,6 @@ if(powered()) . += "waitlight" -/obj/machinery/chem_master/blob_act(obj/structure/blob/B) - if(prob(50) && !QDELETED(src)) - qdel(src) - /obj/machinery/chem_master/power_change() if(!..()) return diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 628fb17c603..49d1a74bd46 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -66,6 +66,8 @@ return /datum/reagent/proc/on_mob_life(mob/living/M) + if(current_cycle == 1) + on_mob_start_metabolize(M) current_cycle++ var/total_depletion_rate = metabolization_rate * M.metabolism_efficiency * M.digestion_ratio // Cache it @@ -73,8 +75,16 @@ sate_addiction(M) holder.remove_reagent(id, total_depletion_rate) //By default it slowly disappears. + if(volume <= 0) + on_mob_end_metabolize(M) return STATUS_UPDATE_NONE +/datum/reagent/proc/on_mob_start_metabolize(mob/living/metabolizer) + return + +/datum/reagent/proc/on_mob_end_metabolize(mob/living/metabolizer) + return + /datum/reagent/proc/handle_addiction(mob/living/M, consumption_rate) if(addiction_chance && count_by_type(M.reagents.addiction_list, addict_supertype) < 1) var/datum/reagent/new_reagent = new addict_supertype() diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 7b31c15b90c..6493762f690 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -6,10 +6,11 @@ color = "#CF3600" // rgb: 207, 54, 0 taste_mult = 1.2 taste_description = "bitterness" + var/toxpwr = 2 /datum/reagent/toxin/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE - update_flags |= M.adjustToxLoss(2, FALSE) + update_flags |= M.adjustToxLoss(toxpwr, FALSE) return ..() | update_flags /datum/reagent/spider_venom @@ -502,19 +503,35 @@ return ..() | update_flags -/datum/reagent/spore +/datum/reagent/toxin/spore name = "Spore Toxin" - id = "spore" description = "A natural toxin produced by blob spores that inhibits vision when ingested." color = "#9ACD32" + id = "spore" + toxpwr = 1 + can_synth = FALSE taste_description = "bitterness" -/datum/reagent/spore/on_mob_life(mob/living/M) - var/update_flags = STATUS_UPDATE_NONE - update_flags |= M.adjustToxLoss(1, FALSE) - M.damageoverlaytemp = 60 - M.EyeBlurry(6 SECONDS) - return ..() | update_flags +/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.damageoverlaytemp = 60 + affected_mob.update_damage_hud() + affected_mob.EyeBlurry(6 SECONDS * REM * seconds_per_tick) + +/datum/reagent/toxin/spore_burning + name = "Burning Spore Toxin" + description = "A natural toxin produced by blob spores that induces combustion in its victim." + color = "#9ACD32" + id = "spore_burn" + toxpwr = 0.5 + taste_description = "burning" + can_synth = FALSE + +/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_fire_stacks(2 * REM * seconds_per_tick) + affected_mob.IgniteMob() + /datum/reagent/beer2 //disguised as normal beer for use by emagged service borgs name = "Beer" diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 4eacc7768a4..b06c1aa65eb 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -438,6 +438,9 @@ return update_state() +/obj/item/organ/external/blob_act() + external_receive_damage(max_damage, forced = TRUE) + /obj/item/organ/external/emp_act(severity) if(!is_robotic() || emp_proof) return diff --git a/icons/effects/particles/bonfire.dmi b/icons/effects/particles/bonfire.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e8e2e36346da6f79c4d11b44ab900d4b3f709b29 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQbGYfA+84w8~`%^Gu(M};n4pu z#{VbzKHvGq4-{f73GxeOaCmkj4amu_3W+FjNi9w;$}A|!%+F(BsF)KRR!~&>{Y!Ac z$FEPcymhtCojD)8A=Kca@qluf>eFc^InpDfgLc1{wpcHu7|F46*1< z4q#$(RA{)!^CF=|!(kfBMP+Zs&CEWGeGN&fOBz}yFtJDoaj_MqTnuJpNH#V;yJ)HW QY@luiPgg&ebxsLQ0F~=xWdHyG literal 0 HcmV?d00001 diff --git a/icons/effects/particles/echo.dmi b/icons/effects/particles/echo.dmi new file mode 100644 index 0000000000000000000000000000000000000000..60a243a8a7bed3e694df859871c44566a83a30a6 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-t_Kbr05bnG-1-0izsX{^ z6+jMSNswPKgTu2MX+Ta%RY*jMOKNd)QD#9&W_}(6L&conu!5q}?_YuoK7M_o<*loA z?#%h%4WR}XjUPPHIq#!+lA)-lcZY>>knv?>FNHaeCLNg+q7dxa*=?-4d4>9u`1XYA9cSdc9?xQPk(8hEKReTty-vVPp(5(>F1N!X@@t<)JiZmPzr0p6HLLEy zgSZ!r^X4)pur)|Bq%q6@G0yh?n_K_>msI`PuZusk9N=LvW;nxOzzkwIw4eF&cJJ{& zFYf;=zt8THxo&&Pv#4y>d+K-0{!f`1m~ETC_xuI*hFgDbZ$2+r`0D1Lj)Tk>s?6;V zF<5~0gABUQe!zwiVjRre*kDUEzGzy{g2uU$f6UnpG`kfAO@OA?F1{ p^&iJ3vyuj71DK@=h$DEoX8uK^iz&!?rMT;!9hi9Hx1av@! zr;B5VM`v;X6O*Gt!$qDK2`w59(^xJ#dope|WMoy-WBVc6vV-LT|B8fUCawr)$q(8N z4T=jB1l-MIMSGeY`2}vubM;(g0aB|DvW7C8D0d4y@QO*FKY`2VqKL&}%>uXJgq)s5 o3@aHLn=S-|*lA1Ei}0{AFch=eO|;Qn017V#Pgg&ebxsLQ0CTr}cmMzZ literal 0 HcmV?d00001 diff --git a/icons/effects/particles/pollen.dmi b/icons/effects/particles/pollen.dmi new file mode 100644 index 0000000000000000000000000000000000000000..559c4d1846f68871390b7a0243abdd020947f766 GIT binary patch literal 346 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 Ef<@}j_W%F@ delta 12706 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 diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi index 3a73ccf099438bb9c5ba944b4058563d8b9e3331..6313a92db0febed96785544e0461b3e35bf700da 100644 GIT binary patch delta 23775 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 x>k-7ST3h2B) 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 delta 56424 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 w0d5-o8aDH<>7$&O z0bk$sA2VEtACdPEOV2{8fiLztpxUa+gG!>`br44ou5^L_QdM}sFTKpTBf8V5WMl_E zy$|MGUh=oYpz3#7|M&hnny1J`$cLg{$Y42nIzUZ2sv0kq@!dlUtHY=c#vjKV&l(JujU^t|HEha1yDk^5f+(y)ax7XaOHO-V)cFxVwv} zImk%I{1tZZnim(KO>PYYWg(dYH!OcoKd4N*JhGx4x@Y>w8}S7jOjZA??>ez>6yB__ zOvWa#j54YkV*qg5Jo!`z_pcaYZZ?`{Vyo6)&aPU)X~vb1%Q%tnbZwQx#>+pLpUy^?ygi-^N=9Uoq>pDfS=5Bk%7`4^=u-_e$Uk}? zqw8u5XUNp~NI9wJJ>R9jiFElachyCh$sjXMnEue*kJtDKnm3U63Mx7IYC%6~Ec8*i z$@pVZ2=EnF8|1T8;5oTVkWq@ghmlDOK|b#@baEpj&tpNF2Z5bEli{C5}Z2 z9L0wbW-zppM3fJ&!Qs8vG`$IVuA4WcCb-TwsYe_FCp9E27Hfd)s5vV~ES;auMVlr^(~zqcwUt!=x}FbKk578dLisdB=@b?XHUwM=x~)`_K5F5> zsvYM!Nqo`2TAlUYb3{B5Z376_pX{a;UP|??IqoWPH`?kiX|$SHmq+qV;m^84lNxJ2c$O?*|5I7Q#iw8v#5WksG)i2A)hW9|88khmJ#aiwR^F zaSI5T^jOZ^F{><@OTG5#rHoWwJd4iMk8jr#nv70?!?UZA`RwIcF15OpR~<&!-tK9XWwv>W|6i16^T$ zxXtzk>_<-EW0I>G_ZV_|UcWaCj$%W|)sxd&vu`3OtGJp#LXmNNH(LEMgcUv=^2Zj+q{*ti>TeO$oy^;_um$=I3dYozC~{^F#} z!<617gDifRxw!Y5 zlbp;fUGj}jh)d-7ohzm6+24CO4F16a<+oW`pX$B6kp0R5PvZjkRiE~?j04K@+G)S+ zMC_l4r@1|?R{l}5t%3+2nf(g<;B#UY7i5+yOF<0a;X$}nw)J)5!aqrm+@xS8rQ3=yy{EKn7jfL`u9ye^Fm23;X zHLjGzmhK_8kHa_KN%>xvK7G>eG=ylE!~B`MdrLj(Mz^J@vCH>=z(&rS6h2Sjt^)`g zhj4Z5kOEp9M;s{U&dZTZUr@x8-r4AFyV72}NH!r@eDRwkfa(hvXQF`ozy8k6^8>hA z8gB~hykF_JE;B1&D2r9){5`^?-99VqIqzL^)vqMYmd0!3^8=L90VN>XSj6>nmGpQ3 zp!vs*E3uQ^;UR0rQJFvSuSS}IS?ao3__5$*fVF)8lAx?kb`?0(j8y7BVAqCMzccx3 zNj@sE;RE^HQ+W)&7EBrq@~rawAy@5^3P%9Pb}qVila&9DL;L?3 av{yjUX{)@PL2Vo!?od(Ckgt+84gMc-WBnum diff --git a/paradise.dme b/paradise.dme index 4795c3f5f9c..2b84dec9a0d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -50,7 +50,6 @@ #include "code\__DEFINES\combat.dm" #include "code\__DEFINES\configuration.dm" #include "code\__DEFINES\construction.dm" -#include "code\__DEFINES\spells.dm" #include "code\__DEFINES\contractors.dm" #include "code\__DEFINES\contracts.dm" #include "code\__DEFINES\cooldowns.dm" @@ -69,6 +68,7 @@ #include "code\__DEFINES\footstep.dm" #include "code\__DEFINES\game.dm" #include "code\__DEFINES\gamemode.dm" +#include "code\__DEFINES\generators.dm" #include "code\__DEFINES\genetics.dm" #include "code\__DEFINES\gravity.dm" #include "code\__DEFINES\hud.dm" @@ -104,6 +104,7 @@ #include "code\__DEFINES\obj_flags.dm" #include "code\__DEFINES\organ_defines.dm" #include "code\__DEFINES\overlays.dm" +#include "code\__DEFINES\particles.dm" #include "code\__DEFINES\path.dm" #include "code\__DEFINES\pda.dm" #include "code\__DEFINES\pipes.dm" @@ -117,9 +118,9 @@ #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\rolebans.dm" #include "code\__DEFINES\rust_g.dm" -#include "code\__DEFINES\secret_documents.dm" #include "code\__DEFINES\rust_g_overrides.dm" #include "code\__DEFINES\say.dm" +#include "code\__DEFINES\secret_documents.dm" #include "code\__DEFINES\sensor_devices.dm" #include "code\__DEFINES\shuttle.dm" #include "code\__DEFINES\sibyl.dm" @@ -129,6 +130,7 @@ #include "code\__DEFINES\span.dm" #include "code\__DEFINES\speech_channels.dm" #include "code\__DEFINES\speech_controller.dm" +#include "code\__DEFINES\spells.dm" #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\stat_tracking.dm" #include "code\__DEFINES\station_goals.dm" @@ -432,9 +434,10 @@ #include "code\datums\cinematics\nuke_cinematics.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\after_attacks_hub.dm" -#include "code\datums\components\aura_healing.dm" #include "code\datums\components\animal_temperature.dm" +#include "code\datums\components\aura_healing.dm" #include "code\datums\components\blob_minion.dm" +#include "code\datums\components\blob_turf_consuming.dm" #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" #include "code\datums\components\caltrop.dm" @@ -456,6 +459,7 @@ #include "code\datums\components\examine_override.dm" #include "code\datums\components\force_move.dm" #include "code\datums\components\fullauto.dm" +#include "code\datums\components\ghost_direct_control.dm" #include "code\datums\components\hide_highest_offset.dm" #include "code\datums\components\jackboots.dm" #include "code\datums\components\jetpack.dm" @@ -485,10 +489,10 @@ #include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\berserker.dm" #include "code\datums\diseases\critical.dm" +#include "code\datums\diseases\ectoplasmic.dm" #include "code\datums\diseases\food_poisoning.dm" #include "code\datums\diseases\kuru.dm" #include "code\datums\diseases\vampire.dm" -#include "code\datums\diseases\ectoplasmic.dm" #include "code\datums\diseases\viruses\_virus.dm" #include "code\datums\diseases\viruses\anxiety.dm" #include "code\datums\diseases\viruses\babylon_fever.dm" @@ -686,6 +690,7 @@ #include "code\datums\status_effects\debuffs.dm" #include "code\datums\status_effects\gas.dm" #include "code\datums\status_effects\neutral.dm" +#include "code\datums\status_effects\screwy_hud.dm" #include "code\datums\status_effects\status_effect.dm" #include "code\datums\status_effects\status_effects_absorption.dm" #include "code\datums\weather\weather.dm" @@ -1074,6 +1079,7 @@ #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" +#include "code\game\objects\effects\particle_holder.dm" #include "code\game\objects\effects\portals.dm" #include "code\game\objects\effects\snowcloud.dm" #include "code\game\objects\effects\spiders.dm" @@ -1106,6 +1112,7 @@ #include "code\game\objects\effects\effect_system\effects_water.dm" #include "code\game\objects\effects\effect_system\fluid_spread\_fluid_spread.dm" #include "code\game\objects\effects\effect_system\fluid_spread\effects_smoke.dm" +#include "code\game\objects\effects\particles\water.dm" #include "code\game\objects\effects\spawners\airlock_spawner.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" @@ -1574,20 +1581,17 @@ #include "code\modules\antagonists\_common\antag_spawner.dm" #include "code\modules\antagonists\_common\antag_team.dm" #include "code\modules\antagonists\blob\blob_actions.dm" -#include "code\modules\antagonists\blob\blob_antag.dm" #include "code\modules\antagonists\blob\blob_infected_datum.dm" #include "code\modules\antagonists\blob\blob_minion.dm" #include "code\modules\antagonists\blob\blob_overmind_datum.dm" #include "code\modules\antagonists\blob\blobs_attack.dm" -#include "code\modules\antagonists\blob\overmind copy.dm" #include "code\modules\antagonists\blob\overmind.dm" -#include "code\modules\antagonists\blob\powers copy.dm" #include "code\modules\antagonists\blob\powers.dm" +#include "code\modules\antagonists\blob\powers_verbs.dm" #include "code\modules\antagonists\blob\blob_minions\blob_mob.dm" #include "code\modules\antagonists\blob\blob_minions\blob_spore.dm" #include "code\modules\antagonists\blob\blob_minions\blob_zombie.dm" #include "code\modules\antagonists\blob\blob_minions\blobbernaut.dm" -#include "code\modules\antagonists\blob\blobs\blob_mobs.dm" #include "code\modules\antagonists\blob\blobstrains\_blobstrain.dm" #include "code\modules\antagonists\blob\blobstrains\_reagent.dm" #include "code\modules\antagonists\blob\blobstrains\blazing_oil.dm" @@ -1615,6 +1619,12 @@ #include "code\modules\antagonists\blob\structures\shield.dm" #include "code\modules\antagonists\blob\structures\special.dm" #include "code\modules\antagonists\blob\structures\storage.dm" +#include "code\modules\antagonists\borer\borer_action.dm" +#include "code\modules\antagonists\borer\borer_datum.dm" +#include "code\modules\antagonists\borer\borer_focus.dm" +#include "code\modules\antagonists\borer\borer_rank.dm" +#include "code\modules\antagonists\borer\borer_reagent.dm" +#include "code\modules\antagonists\borer\borer_spell.dm" #include "code\modules\antagonists\changeling\changeling_datum.dm" #include "code\modules\antagonists\changeling\changeling_power.dm" #include "code\modules\antagonists\changeling\evolution_menu.dm" @@ -1641,12 +1651,6 @@ #include "code\modules\antagonists\changeling\powers\swap_form.dm" #include "code\modules\antagonists\changeling\powers\tiny_prick.dm" #include "code\modules\antagonists\changeling\powers\transform.dm" -#include "code\modules\antagonists\borer\borer_datum.dm" -#include "code\modules\antagonists\borer\borer_rank.dm" -#include "code\modules\antagonists\borer\borer_focus.dm" -#include "code\modules\antagonists\borer\borer_reagent.dm" -#include "code\modules\antagonists\borer\borer_action.dm" -#include "code\modules\antagonists\borer\borer_spell.dm" #include "code\modules\antagonists\malf_ai\malf_ai_datum.dm" #include "code\modules\antagonists\space_dragon\action.dm" #include "code\modules\antagonists\space_dragon\carp.dm" @@ -2930,7 +2934,6 @@ #include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" #include "code\modules\reagents\chemistry\reagents\admin.dm" #include "code\modules\reagents\chemistry\reagents\alcohol.dm" -#include "code\modules\reagents\chemistry\reagents\blob.dm" #include "code\modules\reagents\chemistry\reagents\disease.dm" #include "code\modules\reagents\chemistry\reagents\drink_base.dm" #include "code\modules\reagents\chemistry\reagents\drink_cold.dm" From 310f7434476c1da74b6800d0a380c41bb9971fd3 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:35:06 +0500 Subject: [PATCH 03/11] some small improves, multiz blob support, bugfixes and translates --- code/__DEFINES/blob.dm | 16 ++- code/__DEFINES/dcs/signals.dm | 8 +- code/__DEFINES/misc.dm | 9 ++ code/__DEFINES/traits/declarations.dm | 2 + code/__DEFINES/traits/sources.dm | 6 +- code/__HELPERS/unsorted.dm | 23 ++++ code/_onclick/click.dm | 2 +- code/_onclick/hud/blobbernaut.dm | 2 +- code/_onclick/overmind.dm | 4 +- code/datums/components/blob_minion.dm | 4 +- .../datums/components/ghost_direct_control.dm | 6 + code/datums/mind.dm | 21 ++- code/datums/spawners_menu.dm | 5 +- code/datums/status_effects/screwy_hud.dm | 45 ++++++- code/game/area/areas/mining.dm | 11 +- code/game/atoms.dm | 3 + code/game/gamemodes/blob/blob.dm | 14 +- code/game/objects/items.dm | 5 + .../items/devices/scanners/gas_analyzer.dm | 1 + .../objects/items/devices/transfer_valve.dm | 4 + .../items/weapons/grenades/clusterbuster.dm | 14 +- .../items/weapons/grenades/flashbang.dm | 4 +- .../objects/items/weapons/grenades/grenade.dm | 3 + code/modules/admin/player_panel.dm | 2 +- code/modules/antagonists/blob/blob_actions.dm | 2 +- code/modules/antagonists/blob/blob_minion.dm | 10 +- .../antagonists/blob/blob_minions/blob_mob.dm | 38 +++++- .../blob/blob_minions/blob_spore.dm | 16 ++- .../blob/blob_minions/blob_zombie.dm | 23 ++-- .../blob/blob_minions/blobbernaut.dm | 25 ++-- .../antagonists/blob/blob_overmind_datum.dm | 1 - .../blob/blobstrains/_blobstrain.dm | 14 +- .../antagonists/blob/blobstrains/_reagent.dm | 6 +- .../blob/blobstrains/blazing_oil.dm | 20 +-- .../blob/blobstrains/blob_sorium.dm | 69 ++++++++++ .../blob/blobstrains/cryogenic_poison.dm | 16 +-- .../blob/blobstrains/debris_devourer.dm | 31 +++-- .../blob/blobstrains/distributed_neurons.dm | 20 +-- .../blob/blobstrains/electromagnetic_web.dm | 14 +- .../blob/blobstrains/energized_jelly.dm | 27 ++-- .../blob/blobstrains/explosive_lattice.dm | 16 +-- .../blob/blobstrains/networked_fibers.dm | 35 ++--- .../blob/blobstrains/old_blob_reagents.dm | 120 ------------------ .../blob/blobstrains/pressurized_slime.dm | 20 +-- .../blob/blobstrains/radioactive_gel.dm | 34 +++++ .../blob/blobstrains/reactive_spines.dm | 18 +-- .../blob/blobstrains/regenerative_materia.dm | 14 +- .../blob/blobstrains/replicating_foam.dm | 17 +-- .../blob/blobstrains/shifting_fragments.dm | 18 +-- .../blob/blobstrains/synchronous_mesh.dm | 21 +-- code/modules/antagonists/blob/overmind.dm | 40 ++++-- code/modules/antagonists/blob/powers.dm | 72 ++++++++--- code/modules/antagonists/blob/powers_verbs.dm | 1 + .../antagonists/blob/structures/_blob.dm | 75 ++++++----- .../blob/structures/captured_nuke.dm | 2 +- .../antagonists/blob/structures/core.dm | 12 +- .../antagonists/blob/structures/factory.dm | 8 +- .../antagonists/blob/structures/node.dm | 4 +- .../antagonists/blob/structures/normal.dm | 8 +- .../antagonists/blob/structures/resource.dm | 4 +- .../antagonists/blob/structures/shield.dm | 4 +- .../antagonists/blob/structures/special.dm | 35 +++-- .../antagonists/blob/structures/storage.dm | 1 + code/modules/mob/dead/dead.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 3 +- code/modules/mob/living/life.dm | 12 +- code/modules/mob/living/living.dm | 29 ----- code/modules/mob/living/living_defense.dm | 9 ++ .../mob/living/simple_animal/simple_animal.dm | 5 + code/modules/mob/mob.dm | 42 +++++- .../research/xenobiology/xenobiology.dm | 4 + paradise.dme | 2 + 72 files changed, 760 insertions(+), 473 deletions(-) create mode 100644 code/modules/antagonists/blob/blobstrains/blob_sorium.dm delete mode 100644 code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm create mode 100644 code/modules/antagonists/blob/blobstrains/radioactive_gel.dm diff --git a/code/__DEFINES/blob.dm b/code/__DEFINES/blob.dm index 84bca9a0573..26959191424 100644 --- a/code/__DEFINES/blob.dm +++ b/code/__DEFINES/blob.dm @@ -50,6 +50,9 @@ #define isblobbernaut(M) istype((M), /mob/living/simple_animal/hostile/blob_minion/blobbernaut) +#define TOTAL_BLOB_MASS SSticker?.mode?.legit_blobs?.len +#define NEEDED_BLOB_MASS SSticker?.mode?.blob_win_count + //Few global vars to track the blob GLOBAL_LIST_EMPTY(blobs) GLOBAL_LIST_EMPTY(blob_cores) @@ -141,7 +144,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_CORE_SPLIT_COST 100 #define BLOB_REFUND_STRONG_COST 4 // Points refunded when destroying the structure -#define BLOB_REFUND_REFLECTOR_COST 8 +#define BLOB_REFUND_REFLECTOR_COST 4 #define BLOB_REFUND_RESOURCE_COST 15 #define BLOB_REFUND_FACTORY_COST 25 #define BLOB_REFUND_NODE_COST 25 @@ -162,8 +165,15 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOBMOB_HEALING_MULTIPLIER 0.0125 // Multiplies by -maxHealth and heals the blob by this amount every blob_act #define BLOBMOB_SPORE_HEALTH 30 // Base spore health #define BLOBMOB_SPORE_SPAWN_COOLDOWN (8 SECONDS) -#define BLOBMOB_SPORE_DMG_LOWER 2 -#define BLOBMOB_SPORE_DMG_UPPER 4 +#define BLOBMOB_SPORE_DMG_LOWER 3 +#define BLOBMOB_SPORE_DMG_UPPER 7 +#define BLOBMOB_SPORE_OBJ_DMG 20 +#define BLOBMOB_SPORE_SPEED_MOD -1.5 +#define BLOBMOB_ZOMBIE_HEALTH 70 // Base spore health +#define BLOBMOB_ZOMBIE_DMG_LOWER 10 +#define BLOBMOB_ZOMBIE_DMG_UPPER 15 +#define BLOBMOB_ZOMBIE_OBJ_DMG 20 +#define BLOBMOB_ZOMBIE_SPEED_MOD -1 #define BLOBMOB_BLOBBERNAUT_RESOURCE_COST 40 // Purchase price for making a blobbernaut #define BLOBMOB_BLOBBERNAUT_HEALTH 200 // Base blobbernaut health #define BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER 20 // Damage without active overmind (core dead or xenobio mob) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index c62145f7011..371ee6eee6e 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -699,9 +699,9 @@ ///Called from remove_overlay(cache_index, overlay) #define COMSIG_CARBON_REMOVE_OVERLAY "carbon_remove_overlay" #define COMSIG_CARBON_UPDATING_HEALTH_HUD "carbon_health_hud_update" - /// Return if you override the carbon's health hud with something else +#define COMSIG_HUMAN_UPDATING_HEALTH_HUD "human_health_hud_update" + /// Return if you override the carbon's or human's health hud with something else #define COMPONENT_OVERRIDE_HEALTH_HUD (1<<0) - // /mob/living/simple_animal signals ///from /mob/living/attack_animal(): (mob/living/simple_animal/M) #define COMSIG_SIMPLE_ANIMAL_ATTACKEDBY "simple_animal_attackedby" @@ -1227,3 +1227,7 @@ #define COMSIG_BORER_ENTERED_HOST "borer_on_enter" // when borer entered host #define COMSIG_BORER_LEFT_HOST "borer_on_leave" // when borer left host +///from /datum/spawners_menu/ui_act(): (mob/user) +#define COMSIG_IS_GHOST_CONTROLABLE "is_ghost_controllable" + /// Return this to signal that the mob can be controlled by ghosts + #define COMPONENT_GHOST_CONTROLABLE (1<<0) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 0bf66ff143d..3a42c078107 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -109,6 +109,15 @@ min(CENTER.x + (H_RADIUS), world.maxx), min(CENTER.y + (V_RADIUS), world.maxy), CENTER.z \ ) +#define RANGE_TURFS_MULTIZ(RADIUS, CENTER, Z_MIN, Z_MAX) \ + RECT_TURFS_MULTIZ(RADIUS, RADIUS, Z_MIN, Z_MAX, CENTER) + +#define RECT_TURFS_MULTIZ(H_RADIUS, V_RADIUS, Z_MIN, Z_MAX, CENTER) \ + block( \ + max(CENTER.x - (H_RADIUS), 1), max(CENTER.y - (V_RADIUS), 1), Z_MIN, \ + min(CENTER.x + (H_RADIUS), world.maxx), min(CENTER.y + (V_RADIUS), world.maxy), Z_MAX \ + ) + /// Returns the turfs on the edge of a square with CENTER in the middle and with the given RADIUS. If used near the edge of the map, will still work fine. // order of the additions: top edge + bottom edge + left edge + right edge #define RANGE_EDGE_TURFS(RADIUS, CENTER)\ diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 928427afda0..62445dfd3fb 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -277,3 +277,5 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SPECIES_LIMBS "only_species_limbs" /// Phohibits using the "Book Of Babel" #define TRAIT_NO_BABEL "cannot_use_babel" + +#define TRAIT_BLOB_ZOMBIFIED "blob_zombified" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 92565ab1354..e7a5d9d1837 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -153,7 +153,11 @@ /// inherited from riding vehicles #define VEHICLE_TRAIT "vehicle" -// blob trait sourses +/// blob trait sourses #define BLOB_INFECTED_TRAIT "blob_infected" #define VENDOR_FLATTENING_TRAIT "vendor_flattening" + +#define WET_TRAIT "wet" + +#define BLOB_ZOMBIE_TRAIT "blob_zombie_trait" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 850216a9547..37a664d8b2f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1581,6 +1581,29 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) if(areas) . |= T.loc +/proc/urange_multiz(dist=0, atom/center=usr, orange=0, areas=0) + if(!dist) + if(!orange) + return list(center) + else + return list() + var/list/stations_z = levels_by_trait(STATION_LEVEL) + var/min_z = max(center.z - dist, stations_z[1]) + var/max_z = min(center.z + dist, stations_z[length(stations_z)]) + var/list/turfs = RANGE_TURFS_MULTIZ(dist, center, min_z, max_z) + if(orange) + turfs -= get_turf(center) + . = list() + for(var/V in turfs) + var/turf/T = V + . += T + . += T.contents + if(areas) + . |= T.loc + +/proc/is_there_multiz() + return SSmapping?.map_datum?.traits?.len > 1 + /proc/screen_loc2turf(scr_loc, turf/origin) var/tX = splittext(scr_loc, ",") diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 05573f539c5..9b900e5a0af 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -44,7 +44,7 @@ Note that this proc can be overridden, and is in the case of screen objects. */ /atom/Click(location,control,params) - usr.ClickOn(src, params) + usr.ClickOn(src, params, location) /atom/DblClick(location,control,params) usr.DblClickOn(src,params) diff --git a/code/_onclick/hud/blobbernaut.dm b/code/_onclick/hud/blobbernaut.dm index e11d0b0f357..5cb785537a7 100644 --- a/code/_onclick/hud/blobbernaut.dm +++ b/code/_onclick/hud/blobbernaut.dm @@ -1,4 +1,4 @@ -/datum/hud/blobbernaut/New(mob/living/owner) +/datum/hud/simple_animal/blobbernaut/New(mob/living/owner) . = ..() blobpwrdisplay = new /atom/movable/screen/healths/blob/overmind(null, src) diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm index 419524c8711..881b3b06410 100644 --- a/code/_onclick/overmind.dm +++ b/code/_onclick/overmind.dm @@ -1,7 +1,7 @@ // Blob Overmind Controls -/mob/camera/blob/ClickOn(var/atom/A, var/params) //Expand blob +/mob/camera/blob/ClickOn(var/atom/A, var/params, atom/location) //Expand blob var/list/modifiers = params2list(params) if(modifiers["middle"]) MiddleClickOn(A) @@ -17,7 +17,7 @@ return var/turf/T = get_turf(A) if(T) - expand_blob(T) + expand_blob(T, location) /mob/camera/blob/MiddleClickOn(atom/A) //Rally spores var/turf/T = get_turf(A) diff --git a/code/datums/components/blob_minion.dm b/code/datums/components/blob_minion.dm index 406b6747efe..99925936677 100644 --- a/code/datums/components/blob_minion.dm +++ b/code/datums/components/blob_minion.dm @@ -103,7 +103,7 @@ SIGNAL_HANDLER if (isnull(overmind)) return - status_items += list("Blobs to Win:", "[length(GLOB.blobs)]/[SSticker?.mode.blob_win_count]") + status_items += list(list("Критическая Масса:", "[TOTAL_BLOB_MASS]/[NEEDED_BLOB_MASS]")) /// If we feel the gentle caress of a blob, we feel better /datum/component/blob_minion/proc/on_blob_touched(mob/living/minion) @@ -114,6 +114,8 @@ var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(parent)) // hello yes you are being healed heal_effect.color = isnull(overmind) ? COLOR_BLACK : overmind.blobstrain.complementary_color minion.heal_overall_damage(minion.maxHealth * BLOBMOB_HEALING_MULTIPLIER) + if(minion.on_fire) + minion.adjust_fire_stacks(-1) return COMPONENT_CANCEL_BLOB_ACT /// If we feel the fearsome bite of open flame, we feel worse diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index 9c6a0ce4ba2..c2de270b540 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -45,6 +45,7 @@ RegisterSignal(parent, COMSIG_ATOM_ATTACK_GHOST, PROC_REF(on_ghost_clicked)) RegisterSignal(parent, COMSIG_LIVING_EXAMINE, PROC_REF(on_examined)) RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_login)) + RegisterSignal(parent, COMSIG_IS_GHOST_CONTROLABLE, PROC_REF(on_ghost_controlable_check)) /datum/component/ghost_direct_control/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_LIVING_EXAMINE, COMSIG_MOB_LOGIN)) @@ -148,3 +149,8 @@ to_chat(harbinger, span_boldnotice(assumed_control_message)) after_assumed_control?.Invoke(harbinger) qdel(src) + + +/datum/component/ghost_direct_control/proc/on_ghost_controlable_check(mob/user) + SIGNAL_HANDLER + return COMPONENT_GHOST_CONTROLABLE \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 79f632fca72..eeaf21750f1 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -542,9 +542,11 @@ . += "|burst blob" else if(isblobovermind(src)) var/mob/camera/blob/blob_overmind = current - . += "|BLOB Overmind|" - . += "
    Total points: [blob_overmind.blob_points]/[blob_overmind.max_blob_points]" - . += "
    Infinity points: [(blob_overmind.is_infinity)? "OFF" : "ON"]" + if(istype(blob_overmind)) + . += "|BLOB Overmind|" + . += "
    Total points: [blob_overmind.blob_points]/[blob_overmind.max_blob_points]" + . += "
    Infinity points: [(blob_overmind.is_infinity)? "ON" : "OFF"]" + . += "
    Blob strain: [blob_overmind.blobstrain? "[blob_overmind?.blobstrain?.name]" : "None"]" else if(isblobminion(src)) . += "|BLOB Minion|" else if(current.can_be_blob()) @@ -2485,7 +2487,18 @@ blob_overmind.is_infinity = !blob_overmind.is_infinity log_admin("[key_name(usr)] make blob points [blob_overmind.is_infinity? "infinity" : "not infinity"] to [key_name(current)]") message_admins("[key_name_admin(usr)] make blob points [blob_overmind.is_infinity? "infinity" : "not infinity"] to [key_name_admin(current)]") - + + if("select_strain") + if(!isblobovermind(src)) + return + var/mob/camera/blob/blob_overmind = current + if(QDELETED(current) || current.stat == DEAD) + return + var/strain = tgui_input_list(usr, "Выберите штамм", "Выбор штамма", GLOB.valid_blobstrains, null) + if(ispath(strain)) + blob_overmind.set_strain(strain) + log_admin("[key_name(usr)] changed the strain to [strain] for [key_name(current)]") + message_admins("[key_name_admin(usr)] changed the strain to [strain] for [key_name_admin(current)]") else if(href_list["common"]) switch(href_list["common"]) diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index 934ef447204..daac771c9f0 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -47,7 +47,10 @@ if(!length(possible_spawners)) return var/obj/effect/mob_spawn/MS = locate(pick(possible_spawners)) - if(!MS || !istype(MS)) + if(!MS) + log_runtime(EXCEPTION("A ghost tried to interact with an invalid spawner, or the spawner didn't exist.")) + return + if(!istype(MS) && !(SEND_SIGNAL(MS, COMSIG_IS_GHOST_CONTROLABLE, usr) & COMPONENT_GHOST_CONTROLABLE)) log_runtime(EXCEPTION("A ghost tried to interact with an invalid spawner, or the spawner didn't exist.")) return switch(action) diff --git a/code/datums/status_effects/screwy_hud.dm b/code/datums/status_effects/screwy_hud.dm index 63872a17478..09b736d7c22 100644 --- a/code/datums/status_effects/screwy_hud.dm +++ b/code/datums/status_effects/screwy_hud.dm @@ -13,17 +13,23 @@ var/priority = -1 /// The icon we override our owner's healths.icon_state with var/override_icon + /// The icon prefix we override our owner's healthdoll + var/override_prefix + /// Сhange only species overlays + var/only_species = FALSE /datum/status_effect/grouped/screwy_hud/on_apply() if(!iscarbon(owner)) return FALSE RegisterSignal(owner, COMSIG_CARBON_UPDATING_HEALTH_HUD, PROC_REF(on_health_hud_updated)) + if(ishuman(owner)) + RegisterSignal(owner, COMSIG_HUMAN_UPDATING_HEALTH_HUD, PROC_REF(on_human_health_hud_updated)) owner.update_health_hud() return TRUE /datum/status_effect/grouped/screwy_hud/on_remove() - UnregisterSignal(owner, COMSIG_CARBON_UPDATING_HEALTH_HUD) + UnregisterSignal(owner, list(COMSIG_CARBON_UPDATING_HEALTH_HUD, COMSIG_HUMAN_UPDATING_HEALTH_HUD)) owner.update_health_hud() /datum/status_effect/grouped/screwy_hud/proc/on_health_hud_updated(mob/living/carbon/source, shown_health_amount) @@ -42,17 +48,54 @@ source.healths.icon_state = override_icon return COMPONENT_OVERRIDE_HEALTH_HUD +/datum/status_effect/grouped/screwy_hud/proc/on_human_health_hud_updated(mob/living/carbon/human/source, shown_health_amount) + SIGNAL_HANDLER + + // Shouldn't even be running if we're dead, but just in case... + if(source.stat == DEAD) + return + + // It's entirely possible we have multiple screwy huds on one mob. + // Defer to priority to determine which to show. If our's is lower, don't show it. + for(var/datum/status_effect/grouped/screwy_hud/other_screwy_hud in source.status_effects) + if(other_screwy_hud.priority > priority) + return + + source.healths.icon_state = override_icon + if(source.healthdoll) + var/list/new_overlays = list() + + var/list/cached_overlays = source.healthdoll.cached_healthdoll_overlays + // Use the dead health doll as the base, since we have proper "healthy" overlays now + for(var/obj/item/organ/external/bodypart as anything in source.bodyparts) + var/icon_num = override_prefix + if(istype(bodypart, /obj/item/organ/external/tail) && bodypart.dna?.species.tail) + new_overlays |= "[bodypart.dna.species.tail][icon_num]" + if(istype(bodypart, /obj/item/organ/external/wing) && bodypart.dna?.species.tail) + new_overlays |= "[bodypart.dna.species.wing][icon_num]" + else if(!only_species) + new_overlays |= "[bodypart.limb_zone][icon_num]" + + source.healthdoll.add_overlay(new_overlays - cached_overlays) + source.healthdoll.cut_overlay(cached_overlays - new_overlays) + source.healthdoll.cached_healthdoll_overlays = new_overlays + return COMPONENT_OVERRIDE_HEALTH_HUD + /datum/status_effect/grouped/screwy_hud/fake_dead id = "fake_hud_dead" priority = 100 // death is absolute override_icon = "health7" + override_prefix = "_DEAD" + only_species = TRUE /datum/status_effect/grouped/screwy_hud/fake_crit id = "fake_hud_crit" priority = 90 // crit is almost death, and death is absolute override_icon = "health6" + override_prefix = 5 /datum/status_effect/grouped/screwy_hud/fake_healthy id = "fake_hud_healthy" priority = 10 // fully healthy is the opposite of death, which is absolute override_icon = "health0" + override_prefix = 0 diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index fdaba5b2504..77a6ff31241 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -4,6 +4,7 @@ icon_state = "mining" has_gravity = STANDARD_GRAVITY sound_environment = SOUND_AREA_STANDARD_STATION + area_flags = NONE /area/mine/explored name = "Mine" @@ -130,7 +131,7 @@ icon_state = "mining" has_gravity = STANDARD_GRAVITY sound_environment = SOUND_AREA_LAVALAND - area_flags = FLORA_ALLOWED | BLOBS_ALLOWED + area_flags = FLORA_ALLOWED /area/lavaland/surface name = "Lavaland" @@ -144,7 +145,7 @@ ambientsounds = MINING_SOUNDS min_ambience_cooldown = 70 SECONDS max_ambience_cooldown = 220 SECONDS - area_flags = BLOBS_ALLOWED + area_flags = NONE /area/lavaland/underground name = "Lavaland Caves" @@ -169,15 +170,15 @@ /area/lavaland/surface/outdoors/unexplored/danger //megafauna will also spawn here icon_state = "cave" - area_flags = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED | BLOBS_ALLOWED + area_flags = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED map_generator = /datum/map_generator/cave_generator/lavaland /area/lavaland/surface/outdoors/explored name = "Lavaland Labor Camp" - area_flags = BLOBS_ALLOWED + area_flags = NONE /area/lavaland/surface/outdoors/necropolis name = "Necropolis" icon_state = "unexplored" tele_proof = TRUE - area_flags = BLOBS_ALLOWED + area_flags = NONE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8572b941ad1..8d42650e8e7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -643,6 +643,9 @@ return FALSE return TRUE +/atom/proc/blob_vore_act(obj/structure/blob/special/core/voring_core) + return TRUE + /atom/proc/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) if(reagents) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 5123f7cd85e..c6edcea67f2 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -17,6 +17,8 @@ var/off_auto_nuke_codes = FALSE /// Is all blobs have infinity points var/is_blob_infinity_points = FALSE + /// Is all blobs have infinity points + var/list/legit_blobs = list() /// Total blobs objective var/datum/objective/blob_critical_mass/blob_objective @@ -112,7 +114,7 @@ /datum/game_mode/proc/update_blob_objective() if(blob_objective && !blob_objective.completed) - blob_objective.critical_mass = GLOB.blobs.len + blob_objective.critical_mass = legit_blobs.len blob_objective.needed_critical_mass = blob_win_count blob_objective.set_target() @@ -198,24 +200,24 @@ return if(blob_stage == BLOB_STAGE_NONE) blob_stage = BLOB_STAGE_ZERO - if(blob_stage == BLOB_STAGE_ZERO && GLOB.blobs.len >= min(FIRST_STAGE_COEF * blob_win_count, FIRST_STAGE_THRESHOLD)) + if(blob_stage == BLOB_STAGE_ZERO && legit_blobs.len >= min(FIRST_STAGE_COEF * blob_win_count, FIRST_STAGE_THRESHOLD)) blob_stage = BLOB_STAGE_FIRST send_intercept(BLOB_FIRST_REPORT) SSshuttle?.emergency?.cancel() SSshuttle?.lockdown_escape() - if(blob_stage == BLOB_STAGE_FIRST && GLOB.blobs.len >= min(SECOND_STAGE_COEF * blob_win_count, SECOND_STAGE_THRESHOLD)) + if(blob_stage == BLOB_STAGE_FIRST && legit_blobs.len >= min(SECOND_STAGE_COEF * blob_win_count, SECOND_STAGE_THRESHOLD)) blob_stage = BLOB_STAGE_SECOND GLOB.event_announcement.Announce("Подтверждена вспышка биологической угрозы пятого уровня на борту [station_name()]. Весь персонал обязан локализовать угрозу.", - "ВНИМАНИЕ: БИОЛОГИЧЕСКАЯ УГРОЗА.", 'sound/AI/outbreak5.ogg') + "ВНИМАНИЕ: БИОЛОГИЧЕСКАЯ УГРОЗА.", 'sound/AI/outbreak5.ogg') if(!off_auto_gamma) addtimer(CALLBACK(GLOBAL_PROC, /proc/set_security_level, SEC_LEVEL_GAMMA), TIME_TO_SWITCH_CODE) - if(blob_stage == BLOB_STAGE_SECOND && GLOB.blobs.len >= THIRD_STAGE_COEF * blob_win_count) + if(blob_stage == BLOB_STAGE_SECOND && legit_blobs.len >= THIRD_STAGE_COEF * blob_win_count) blob_stage = BLOB_STAGE_THIRD send_intercept(BLOB_SECOND_REPORT) - if(GLOB.blobs.len >= blob_win_count && blob_stage < BLOB_STAGE_STORM) + if(legit_blobs.len >= blob_win_count && blob_stage < BLOB_STAGE_STORM) if(SSweather) blob_stage = BLOB_STAGE_STORM SSweather.run_weather(/datum/weather/blob_storm) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 323be8cfed2..de76cbef570 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -274,6 +274,11 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/g if(B && B.loc == loc && !QDELETED(src) && !(obj_flags & IGNORE_BLOB_ACT)) obj_destruction(MELEE) +/obj/item/blob_vore_act(obj/structure/blob/special/core/voring_core) + . = ..() + if(QDELETED(src)) + return FALSE + forceMove(voring_core) /obj/item/examine(mob/user) var/size diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 7777e398187..689c457e535 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -18,6 +18,7 @@ throw_range = 7 materials = list(MAT_METAL=30, MAT_GLASS=20) origin_tech = "magnets=1;engineering=1" + tool_behaviour = TOOL_ANALYZER var/cooldown = FALSE var/cooldown_time = 250 var/accuracy // 0 is the best accuracy. diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 0fd811edcde..004741b1225 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -226,3 +226,7 @@ sleep(1 SECONDS) update_icon() + +/obj/item/transfer_valve/blob_vore_act(obj/structure/blob/special/core/voring_core) + obj_destruction(MELEE) + diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index fd4195a4093..00d901d9de8 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -1,3 +1,5 @@ +#define CLUSTERBUSTER_PAYLOAD_POWER 0.9 +#define SEGMENTATION_PAYLOAD_DECREASE 1.5 //////////////////// //Clusterbang //////////////////// @@ -7,6 +9,7 @@ icon = 'icons/obj/weapons/grenade.dmi' icon_state = "clusterbang" var/payload = /obj/item/grenade/flashbang/cluster + var/payload_power = CLUSTERBUSTER_PAYLOAD_POWER /obj/item/grenade/clusterbuster/prime() update_mob() @@ -21,7 +24,7 @@ for(var/loop = again ,loop > 0, loop--) new /obj/item/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads - new /obj/effect/payload_spawner(loc, payload, numspawned)//Launches payload + new /obj/effect/payload_spawner(loc, payload, numspawned, payload_power)//Launches payload playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) @@ -37,19 +40,20 @@ icon = 'icons/obj/weapons/grenade.dmi' icon_state = "clusterbang_segment" -/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster) +/obj/item/grenade/clusterbuster/segment/New(loc, payload_type = /obj/item/grenade/flashbang/cluster) ..() icon_state = "clusterbang_segment_active" payload = payload_type active = 1 SSmove_manager.move_away(src, loc, rand(1,4), 1) + payload_power /= SEGMENTATION_PAYLOAD_DECREASE spawn(rand(15,60)) prime() /obj/item/grenade/clusterbuster/segment/prime() - new /obj/effect/payload_spawner(loc, payload, rand(4,8)) + new /obj/effect/payload_spawner(loc, payload, rand(4,8), payload_power) playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) @@ -58,7 +62,7 @@ ////////////////////////////////// //The payload spawner effect ///////////////////////////////// -/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num) +/obj/effect/payload_spawner/New(turf/newloc,type, numspawned as num, power) . = ..() for(var/loop = numspawned ,loop > 0, loop--) var/obj/item/grenade/P = new type(loc) @@ -69,7 +73,7 @@ spawn(rand(15,60)) if(!QDELETED(P)) if(istype(P, /obj/item/grenade)) - P.prime() + P.prime(power) qdel(src) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index b6e3db3eefa..511f7cc5fa4 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -10,7 +10,7 @@ var/light_time = 0.2 SECONDS // The duration the area is illuminated var/range = 7 // The range in tiles of the flashbang -/obj/item/grenade/flashbang/prime() +/obj/item/grenade/flashbang/prime(power = 1) update_mob() var/turf/T = get_turf(src) if(T) @@ -21,7 +21,7 @@ // Blob damage for(var/obj/structure/blob/B in hear(range + 1, T)) var/damage = round(30 / (get_dist(B, T) + 1)) - B.take_damage(damage, BURN, "melee", FALSE) + B.take_damage(damage * power, BURN, MELEE, FALSE) // Stunning & damaging mechanic bang(T, src, range) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 8e27a202b85..122d22285e5 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -102,3 +102,6 @@ SSmove_manager.stop_looping(src) . = ..() + +/obj/item/grenade/blob_vore_act(obj/structure/blob/special/core/voring_core) + obj_destruction(MELEE) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 107739609db..edb592b03cc 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -425,7 +425,7 @@ if(blob_infected && blob_infected.len) var/datum/game_mode/mode = SSticker.mode dat += "
    " - dat += "" + dat += "" dat += "" dat += "" dat += "" diff --git a/code/modules/antagonists/blob/blob_actions.dm b/code/modules/antagonists/blob/blob_actions.dm index 07e9e8230d2..b1f5d8abc56 100644 --- a/code/modules/antagonists/blob/blob_actions.dm +++ b/code/modules/antagonists/blob/blob_actions.dm @@ -23,7 +23,7 @@ return add_say_logs(usr, message, language = "BLOB") - var/rendered = span_big(span_blob("\[Blob Telepathy\] [usr.name] states, [message]")) + var/rendered = span_blob("\[Blob Telepathy\] [usr.name] states, [message]") relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, usr) /datum/action/innate/blob/self_burst diff --git a/code/modules/antagonists/blob/blob_minion.dm b/code/modules/antagonists/blob/blob_minion.dm index 86f22d36925..0acf9a5108d 100644 --- a/code/modules/antagonists/blob/blob_minion.dm +++ b/code/modules/antagonists/blob/blob_minion.dm @@ -51,14 +51,14 @@ var/mob/camera/blob/blob = overmind var/datum/blobstrain/blobstrain = blob.blobstrain . += span_dangerbigger("Вы блобернаут! Вы должны помогать всем формам блоба в их миссии по уничтожению всего!") - . += span_info("You are powerful, hard to kill, and slowly regenerate near nodes and cores, [span_cultlarge("but will slowly die if not near the blob")] or if the factory that made you is killed.") - . += span_info("You can communicate with other blobbernauts and overminds telepathically by attempting to speak normally") - . += span_info("Your overmind's blob reagent is: [blobstrain.name]!") - . += span_info("The [blobstrain.name] reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]") + . += span_info("Вы сильны, крепки, и медленно регенерируете в пределах плиток блоба, [span_cultlarge("но вы будете медленно умирать, если их рядом нету")] или если фабрика, создавшая вас, будет разрушена.") + . += span_info("Вы можете общаться с другими бернаутами, миньенами, зараженными и надразумами телепатически заместо обычного общения.") + . += span_info("Штамм вашего надразума: [blobstrain.name]!") + . += span_info("Штамм [blobstrain.name] [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]") /datum/objective/blob_minion name = "protect the blob core" - explanation_text = "Protect the blob core at all costs." + explanation_text = "Защищайте ядро блоба и исполняйте приказы надразумов. Любой ценой." var/datum/weakref/overmind /datum/objective/blob_minion/check_completion() diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm index 87cc96e2c2a..524b6587dbc 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_mob.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -1,7 +1,7 @@ /// Root of shared behaviour for mobs spawned by blobs, is abstract and should not be spawned /mob/living/simple_animal/hostile/blob_minion name = "Blob Error" - desc = "A nonfunctional fungal creature created by bad code or celestial mistake. Point and laugh." + desc = "Нефункциональное грибковое существо, созданное плохим кодом или небесной ошибкой. Показывайте и смейтесь." icon = 'icons/mob/blob.dmi' icon_state = "blob_head" unique_name = TRUE @@ -23,6 +23,7 @@ fire_damage = 3 tts_seed = "Earth" tts_atom_say_effect = SOUND_EFFECT_NONE + a_intent = INTENT_HARM /mob/living/simple_animal/hostile/blob_minion/ComponentInitialize() @@ -41,10 +42,45 @@ /mob/living/simple_animal/hostile/blob_minion/proc/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) return +/mob/living/simple_animal/hostile/blob_minion/can_z_move(direction, turf/start, turf/destination, z_move_flags, mob/living/rider) + var/obj/structure/blob/s_blob = locate(/obj/structure/blob) in start + var/obj/structure/blob/d_blob = locate(/obj/structure/blob) in destination + var/check = !(z_move_flags & ZMOVE_FALL_CHECKS) + if(s_blob && d_blob) + return check + . = ..() + +/mob/living/simple_animal/hostile/blob_minion/move_up() + var/turf/current_turf = get_turf(src) + var/turf/above_turf = GET_TURF_ABOVE(current_turf) + if((locate(/obj/structure/blob) in current_turf) && (locate(/obj/structure/blob) in above_turf)) + if(zMove(UP, above_turf, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK)) + to_chat(src, span_notice("You move upwards.")) + return + . = ..() + +/mob/living/simple_animal/hostile/blob_minion/move_down() + var/turf/current_turf = get_turf(src) + var/turf/below_turf = GET_TURF_BELOW(current_turf) + if((locate(/obj/structure/blob) in current_turf) && (locate(/obj/structure/blob) in below_turf)) + if(zMove(DOWN, below_turf, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK)) + to_chat(src, span_notice("You move down.")) + return + . = ..() + + +/mob/living/simple_animal/hostile/blob_minion/ + /// Associates this mob with a specific blob factory node /mob/living/simple_animal/hostile/blob_minion/proc/link_to_factory(obj/structure/blob/special/factory/factory) RegisterSignal(factory, COMSIG_QDELETING, PROC_REF(on_factory_destroyed)) +/mob/living/simple_animal/hostile/blob_minion/attack_animal(mob/living/simple_animal/M) + if(ROLE_BLOB in M.faction) + to_chat(M, span_danger("Вы не можете навредить другому порождению блоба")) + return + ..() + /// Called when our factory is destroyed /mob/living/simple_animal/hostile/blob_minion/proc/on_factory_destroyed() SIGNAL_HANDLER diff --git a/code/modules/antagonists/blob/blob_minions/blob_spore.dm b/code/modules/antagonists/blob/blob_minions/blob_spore.dm index fb1fc97c994..7b0a5f567fb 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_spore.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_spore.dm @@ -3,7 +3,7 @@ */ /mob/living/simple_animal/hostile/blob_minion/spore name = "blob spore" - desc = "A floating, fragile spore." + desc = "Плавающая хрупкая спора." icon = 'icons/mob/blob.dmi' icon_state = "blobpod" icon_living = "blobpod" @@ -16,15 +16,16 @@ verb_yell = "psychically screams" melee_damage_lower = BLOBMOB_SPORE_DMG_LOWER melee_damage_upper = BLOBMOB_SPORE_DMG_UPPER - obj_damage = 20 + obj_damage = BLOBMOB_SPORE_OBJ_DMG environment_smash = ENVIRONMENT_SMASH_STRUCTURES attacktext = "ударяет" attack_sound = 'sound/weapons/genhit1.ogg' - deathmessage = "explodes into a cloud of gas!" + deathmessage = "взрывается облаком газа!" gold_core_spawnable = HOSTILE_SPAWN del_on_death = TRUE + speed = BLOBMOB_SPORE_SPEED_MOD /// Size of cloud produced from a dying spore - var/death_cloud_size = 1 + var/death_cloud_size = 2 /// Type of mob to create var/mob/living/zombie_type = /mob/living/simple_animal/hostile/blob_minion/zombie @@ -69,7 +70,10 @@ /// Become a zombie /mob/living/simple_animal/hostile/blob_minion/spore/proc/zombify(mob/living/carbon/human/target) - visible_message(span_warning("The corpse of [target.name] suddenly rises!")) + if(HAS_TRAIT(target, TRAIT_NO_TRANSFORM)) + return + + visible_message(span_warning("Тело [target.name] внезапно поднимается!")) var/mob/living/simple_animal/hostile/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name)) blombie.set_name() if (istype(blombie)) // In case of badmin @@ -123,7 +127,7 @@ maxHealth = 15 melee_damage_lower = 1 melee_damage_upper = 2 - death_cloud_size = 0 + death_cloud_size = 1 /mob/living/simple_animal/hostile/blob_minion/spore/minion/weak/zombify() return diff --git a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm index 0ca544a6b0d..3312b004e02 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm @@ -1,30 +1,32 @@ /// A shambling mob made out of a crew member /mob/living/simple_animal/hostile/blob_minion/zombie name = "blob zombie" - desc = "A shambling corpse animated by the blob." + desc = "Шаркающий труп, оживленный блобом." icon_state = "zombie" icon_living = "zombie" health_doll_icon = "blobpod" - health = 70 - maxHealth = 70 + health = BLOBMOB_ZOMBIE_HEALTH + maxHealth = BLOBMOB_ZOMBIE_HEALTH verb_say = list("gurgles", "groans") verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" - melee_damage_lower = 10 - melee_damage_upper = 15 - obj_damage = 20 + melee_damage_lower = BLOBMOB_ZOMBIE_DMG_LOWER + melee_damage_upper = BLOBMOB_ZOMBIE_DMG_UPPER + obj_damage = BLOBMOB_ZOMBIE_OBJ_DMG environment_smash = ENVIRONMENT_SMASH_STRUCTURES attacktext = "ударяет" attack_sound = 'sound/weapons/genhit1.ogg' - deathmessage = "collapses to the ground!" + deathmessage = "падает на землю!" gold_core_spawnable = NO_SPAWN del_on_death = TRUE + speed = BLOBMOB_ZOMBIE_SPEED_MOD /// The dead body we have inside var/mob/living/carbon/human/corpse /mob/living/simple_animal/hostile/blob_minion/zombie/death(gibbed) + REMOVE_TRAIT(corpse, TRAIT_BLOB_ZOMBIFIED, BLOB_ZOMBIE_TRAIT) corpse?.forceMove(loc) death_burst() return ..() @@ -54,6 +56,10 @@ . = ..() death() +/mob/living/simple_animal/hostile/blob_minion/zombie/update_overlays() + . = ..() + set_up_zombie_appearance() + //Sets up our appearance /mob/living/simple_animal/hostile/blob_minion/zombie/proc/set_up_zombie_appearance() copy_overlays(corpse, TRUE) @@ -70,6 +76,7 @@ /// Store a body so that we can drop it on death /mob/living/simple_animal/hostile/blob_minion/zombie/proc/consume_corpse(mob/living/carbon/human/new_corpse) + ADD_TRAIT(new_corpse, TRAIT_BLOB_ZOMBIFIED, BLOB_ZOMBIE_TRAIT) if(new_corpse.wear_suit) maxHealth += new_corpse.getarmor(attack_flag = MELEE) health = maxHealth @@ -85,7 +92,7 @@ /// Dynamic changeling reentry /mob/living/simple_animal/hostile/blob_minion/zombie/proc/on_corpse_revived() SIGNAL_HANDLER - visible_message(span_boldwarning("[src] bursts from the inside!")) + visible_message(span_boldwarning("[src] разрывается изнутри!")) death() /// Blob-created zombies will ping for player control when they make a zombie diff --git a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm index 101bda6965b..de48c634d57 100644 --- a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm +++ b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm @@ -4,7 +4,7 @@ */ /mob/living/simple_animal/hostile/blob_minion/blobbernaut name = "blobbernaut" - desc = "A hulking, mobile chunk of blobmass." + desc = "Огромный, подвижный кусок биомассы." icon_state = "blobbernaut" icon_living = "blobbernaut" icon_dead = "blobbernaut_dead" @@ -25,13 +25,19 @@ force_threshold = 10 mob_size = MOB_SIZE_LARGE move_resist = MOVE_FORCE_OVERPOWERING - hud_type = /datum/hud/blobbernaut + hud_type = /datum/hud/simple_animal/blobbernaut gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/blob_minion/blobbernaut/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NEGATES_GRAVITY, INNATE_TRAIT) + +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/Login() + . = ..() + update_health_hud() + + /mob/living/simple_animal/hostile/blob_minion/blobbernaut/experience_pressure_difference(pressure_difference, direction) if(!HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) return ..() @@ -46,12 +52,16 @@ /// Is our factory dead? var/orphaned = FALSE +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/Initialize(mapload) + bruteloss = maxHealth / 2 // Start out injured to encourage not beelining away from the blob + . = ..() + /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/Life(seconds_per_tick, times_fired) . = ..() if (!.) return FALSE var/damage_sources = 0 - var/list/blobs_in_area = range(2, src) + var/list/blobs_in_area = (is_there_multiz())? urange_multiz(2, src) : range(2, src) if (!(locate(/obj/structure/blob) in blobs_in_area)) damage_sources++ @@ -60,13 +70,7 @@ damage_sources++ else var/particle_colour = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_BLACK - if (locate(/obj/structure/blob) in blobs_in_area) - heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_TILE * seconds_per_tick) - var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) - heal_effect.color = particle_colour - if(on_fire) - adjust_fire_stacks(-1) - + if (locate(/obj/structure/blob/special/core) in blobs_in_area) heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_CORE * seconds_per_tick) var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) @@ -93,7 +97,6 @@ /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/proc/assign_key(ckey, datum/blobstrain/blobstrain) key = ckey flick("blobbernaut_produce", src) - health = maxHealth / 2 // Start out injured to encourage not beelining away from the blob SEND_SOUND(src, sound('sound/effects/blobattack.ogg')) SEND_SOUND(src, sound('sound/effects/attackblob.ogg')) log_game("[key] has spawned as Blobbernaut") diff --git a/code/modules/antagonists/blob/blob_overmind_datum.dm b/code/modules/antagonists/blob/blob_overmind_datum.dm index 176c8ef85e7..736252139af 100644 --- a/code/modules/antagonists/blob/blob_overmind_datum.dm +++ b/code/modules/antagonists/blob/blob_overmind_datum.dm @@ -65,7 +65,6 @@ /proc/get_blob_help_messages(datum/blobstrain/blob_reagent_datum) var/list/messages = list() messages += "Как надразум, вы можете управлять блобом!" - messages += "Ваш реагент: [blob_reagent_datum.name]" messages += blob_reagent_datum.overmind.get_strain_info() messages += "Вы можете расширяться, атакуя людей, повреждая объекты или размещая простую плитку, если клетка свободна." messages += "Обычная плитка будет расширять ваше влияние и может быть улучшена до специальной плитки, выполняющей определённую функцию." diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index 2d93c8d94b6..de8752d280c 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -11,13 +11,13 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ /// Any long, blob-tile specific effects var/effectdesc = null /// Short descriptor of what the strain does damage-wise, generally seen in the reroll menu - var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp." + var/analyzerdescdamage = "Неизвестный. Сообщите об этой ошибке в баг-репорты и в админтикет." /// Short descriptor of what the strain does in general, generally seen in the reroll menu var/analyzerdesceffect /// Blobbernaut attack verb var/blobbernaut_message = "slams" /// Message sent to any mob hit by the blob - var/message = "The blob strikes you" + var/message = "Блоб бьет вас" /// Gets added onto 'message' if the mob stuck is of type living var/message_living = null /// Stores world.time to figure out when to next give resources @@ -100,8 +100,10 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ blob_mob.maxHealth *= max_mob_health_multiplier blob_mob.health *= max_mob_health_multiplier blob_mob.update_icons() //If it's getting a new strain, tell it what it does! - to_chat(blob_mob, "Your overmind's blob strain is now: [name]!") - to_chat(blob_mob, "The [name] strain [shortdesc ? "[shortdesc]" : "[description]"]") + var/list/messages = list() + messages += "Штамм вашего надразума: [name]!" + messages += "Штамм [name] [shortdesc ? "[shortdesc]" : "[description]"]" + to_chat(blob_mob, chat_box_red(messages.Join("
    "))) /datum/blobstrain/proc/on_lose() if(overmind.blob_core) @@ -155,7 +157,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ return /datum/blobstrain/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this - return + return TRUE /datum/blobstrain/proc/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this return TRUE //return 0 to ignore damage @@ -167,4 +169,4 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ return /datum/blobstrain/proc/examine(mob/user) - return list("Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") + return list("Прогресс Критической Массы: [span_notice("[TOTAL_BLOB_MASS]/[NEEDED_BLOB_MASS].")]") diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 860bffb1985..2092363f7ab 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -26,15 +26,15 @@ // These can only be applied by blobs. They are what (reagent) blobs are made out of. /datum/reagent/blob name = "Unknown" - description = "shouldn't exist and you should adminhelp immediately." + description = "не должно существовать, и вам следует немедленно обратиться за помощью в adminhelp и напишите баг-репорт." color = COLOR_WHITE - taste_description = "bad code and slime" + taste_description = "Это баг" penetrates_skin = TRUE /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. /datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) - return 0 //the dead, and blob mobs, don't cause reactions + return FALSE //the dead, and blob mobs, don't cause reactions return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. /// Exists to earmark the new overmind arg used by blob reagents. diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index 9c946077bd2..6aac9051dad 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -1,16 +1,16 @@ //sets you on fire, does burn damage, explodes into flame when burnt, weak to water /datum/blobstrain/reagent/blazing_oil - name = "Blazing Oil" - description = "will do medium-high burn damage ignoring armor, and set targets on fire." - effectdesc = "will also release bursts of flame when burnt, but takes damage from water." - analyzerdescdamage = "Does medium-high burn damage and sets targets on fire." - analyzerdesceffect = "Releases fire when burnt, but takes damage from water and other extinguishing liquids." + name = "Пылающее масло" + description = "наносит средне-высокий урон от ожогов, игнорируя броню, и подожигает цели." + effectdesc = "при горении также выпускает вспышки пламени, но получает урон от воды." + analyzerdescdamage = "Наносит средне-высокий урон от ожогов и поджигает цели." + analyzerdesceffect = "При горении выделяет огонь, но получает урон от воды и других огнетушащих жидкостей." color = "#B68D00" complementary_color = "#BE5532" blobbernaut_message = "splashes" - message = "The blob splashes you with burning oil" - message_living = ", and you feel your skin char and melt" + message = "Блоб обрызгивает вас горящим маслом" + message_living = ", и вы чувствуете, как ваша кожа обугливается и плавится" reagent = /datum/reagent/blob/blazing_oil fire_based = TRUE @@ -26,13 +26,13 @@ if(!(C && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) && prob(80)) new /obj/effect/hotspot(T) if(damage_flag == FIRE) - return 0 + return FALSE return ..() /datum/reagent/blob/blazing_oil - name = "Blazing Oil" + name = "Пылающее масло" id = "blob_blazing_oil" - taste_description = "burning oil" + taste_description = "горящее масло" color = "#B68D00" /datum/reagent/blob/blazing_oil/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/blob_sorium.dm b/code/modules/antagonists/blob/blobstrains/blob_sorium.dm new file mode 100644 index 00000000000..a1f4375f2ff --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/blob_sorium.dm @@ -0,0 +1,69 @@ + +//sets you on fire, does burn damage, explodes into flame when burnt, weak to water +/datum/blobstrain/reagent/b_sorium + name = "Сорий" + description = "наносит высокий урон травмами и отбрасывает людей в стороны." + effectdesc = "при попадании создает сориумный взрыв." + analyzerdescdamage = "Наносит высокий урон травмами и отбрасывает людей в стороны." + analyzerdesceffect = "При попадании создает сориумный взрыв." + color = "#808000" + complementary_color = "#a2a256" + blobbernaut_message = "splashes" + message = "Блоб врезается в вас и отбрасывает в сторону" + reagent = /datum/reagent/blob/b_sorium + + +/datum/blobstrain/reagent/b_sorium/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(prob(damage)) + reagent_vortex(B, TRUE, damage) + return ..() + +/datum/reagent/blob/b_sorium + name = "Сорий" + id = "blob_sorium" + taste_description = "толчок" + color = "#B68D00" + +/datum/reagent/blob/b_sorium/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.6*reac_volume, BRUTE) + if(prob(30)) + reagent_vortex(exposed_mob, TRUE, reac_volume) + +/proc/reagent_vortex(mob/living/M, setting_type, volume) + var/turf/pull = get_turf(M) + if(!setting_type) + new /obj/effect/temp_visual/implosion(pull) + playsound(pull, 'sound/effects/whoosh.ogg', 25, 1) //credit to Robinhood76 of Freesound.org for this. + else + new /obj/effect/temp_visual/shockwave(pull) + playsound(pull, 'sound/effects/bang.ogg', 25, 1) + var/range_power = clamp(round(volume/5, 1), 1, 5) + for(var/atom/movable/X in range(range_power,pull)) + if(iseffect(X)) + continue + if(X.move_resist <= MOVE_FORCE_DEFAULT && !X.anchored) + var/distance = get_dist(X, pull) + var/moving_power = max(range_power - distance, 1) + spawn(0) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) + var/throw_range = 5 - distance + X.throw_at(throw_target, throw_range, 1) + else + X.throw_at(pull, distance, 1) + else + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, pull)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, pull)) + break + + diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index 81bc19235ef..ac61fb804db 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -1,21 +1,21 @@ //does brute, burn, and toxin damage, and cools targets down /datum/blobstrain/reagent/cryogenic_poison - name = "Cryogenic Poison" - description = "will inject targets with a freezing poison, applying little impact damage but dealing high damage over time." - analyzerdescdamage = "Injects targets with a freezing poison that will gradually solidify the target's internal organs." + name = "Криогенный яд" + description = "впрыскивает в цель замораживающий яд, нанося небольшой урон от удара, но нанося большой урон с течением времени." + analyzerdescdamage = "Вводит в цель замораживающий яд, который постепенно затвердевает внутренние органы цели." color = "#8BA6E9" complementary_color = "#7D6EB4" blobbernaut_message = "injects" - message = "The blob stabs you" - message_living = ", and you feel like your insides are solidifying" + message = "Блоб ранит вас" + message_living = ", и вы чувствуете, что ваши внутренности твердеют" reagent = /datum/reagent/blob/cryogenic_poison /datum/reagent/blob/cryogenic_poison - name = "Cryogenic Poison" + name = "Криогенный яд" id = "blob_cryogenic_poison" - description = "will inject targets with a freezing poison that does high damage over time." + description = "впрыскивает в цель замораживающий яд, который со временем наносит большой урон." color = "#8BA6E9" - taste_description = "brain freeze" + taste_description = "заморозка мозга" /datum/reagent/blob/cryogenic_poison/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm index bc9e10915e9..9c05275f802 100644 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -2,14 +2,14 @@ // Accumulates junk liberally /datum/blobstrain/debris_devourer - name = "Debris Devourer" - description = "will launch accumulated debris into targets. Does very low brute damage without debris-launching." - analyzerdescdamage = "Does very low brute damage and may grab onto melee weapons." - analyzerdesceffect = "Devours loose items left on the station, and releases them when attacking or attacked." + name = "Пожиратель мусора" + description = "бросает поглощенные предметы и трупы в цели. Наносит очень низкий урон травмами без запуска объектов." + analyzerdescdamage = "Наносит очень низкий урон травмами и может метать поглощенные предметы при атаке." + analyzerdesceffect = "Пожирает незакрепленные предметы и трупы, оставленные на станции, и бросат их при атаке и защите." color = "#8B1000" complementary_color = "#00558B" blobbernaut_message = "blasts" - message = "The blob blasts you" + message = "Блоб бьет тебя" /datum/blobstrain/debris_devourer/attack_living(mob/living/L, list/nearby_blobs) @@ -26,18 +26,21 @@ I.throw_at(get_edge_target_turf(spore,pick(GLOB.alldirs)), 6, 5, spore, TRUE, FALSE, null, 3) /datum/blobstrain/debris_devourer/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this - for (var/obj/item/I in T) - I.forceMove(overmind.blob_core) + if(overmind) + for (var/atom/A in T) + A.blob_vore_act(overmind.blob_core) + return TRUE /datum/blobstrain/debris_devourer/proc/debris_attack(atom/attacking, atom/source) var/obj/structure/blob/special/core/core = overmind.blob_core if (prob(40 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. var/obj/item/I = length(core.contents) ? pick(core.contents) : null if (!QDELETED(I)) - I.obj_flags |= IGNORE_BLOB_ACT + if(isobj(I)) + I.obj_flags |= IGNORE_BLOB_ACT + addtimer(CALLBACK(src, PROC_REF(remove_protection), I), BLOB_ACT_PROTECTION_TIME) I.forceMove(get_turf(source)) I.throw_at(attacking, 6, 5, overmind, TRUE, FALSE, null, 3) - addtimer(CALLBACK(src, PROC_REF(remove_protection), I), BLOB_ACT_PROTECTION_TIME) /datum/blobstrain/debris_devourer/proc/remove_protection(obj/item) item.obj_flags &= ~IGNORE_BLOB_ACT @@ -53,16 +56,16 @@ . = ..() var/obj/structure/blob/special/core/core = overmind.blob_core if (isobserver(user)) - . += span_notice("Absorbed debris is currently reducing incoming damage by [round(max(min(DEBRIS_DENSITY, 10),0))]") + . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на [round(max(min(DEBRIS_DENSITY, 10),0))]") else switch (round(max(min(DEBRIS_DENSITY, 10),0))) if (0) - . += span_notice("There is not currently enough absorbed debris to reduce damage.") + . += span_notice("В настоящее время поглощенного мусора недостаточно, чтобы уменьшить урон.") if (1 to 3) - . += span_notice("Absorbed debris is currently reducing incoming damage by a very low amount.") // these roughly correspond with force description strings + . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на очень небольшую величину.") // these roughly correspond with force description strings if (4 to 7) - . += span_notice("Absorbed debris is currently reducing incoming damage by a low amount.") + . += span_notice("Поглощенный мусор в настоящее время незначительно снижает получаемый урон.") if (8 to 10) - . += span_notice("Absorbed debris is currently reducing incoming damage by a medium amount.") + . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на среднюю величину.") #undef DEBRIS_DENSITY diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index 365090f77b6..53385aa942e 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -1,27 +1,27 @@ //kills unconscious targets and turns them into blob zombies, produces fragile spores when killed. Spore produced by factories are sentient. /datum/blobstrain/reagent/distributed_neurons - name = "Distributed Neurons" - description = "will do medium-low toxin damage and turns unconscious targets into blob zombies." - effectdesc = "will also produce fragile spores when killed. Spores produced by factories are sentient." - shortdesc = "will do medium-low toxin damage and will kill any unconscious targets when attacked. Spores produced by factories are sentient." - analyzerdescdamage = "Does medium-low toxin damage and kills unconscious humans." - analyzerdesceffect = "Produces spores when killed. Spores produced by factories are sentient." + name = "Распределенные нейроны" + description = "наносит средне-низкий урон токсинами и превращает бессознательные цели в зомби блоба." + effectdesc = "при убийстве также производит хрупкие споры. Споры, производимые фабриками, разумны." + shortdesc = "наносит средне-низкий урон токсинами и убьет все цели, находящиеся без сознания, при атаке. Споры, производимые фабриками, разумны." + analyzerdescdamage = "Наносит средне-низкий урон токсинами и убивает людей, находящихся без сознания." + analyzerdesceffect = "При разрушении производит споры. Споры, производимые фабриками, разумны." color = "#E88D5D" complementary_color = "#823ABB" - message_living = ", and you feel tired" + message_living = "и ты чувствуешь усталость" reagent = /datum/reagent/blob/distributed_neurons /datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/blob_tile, damage, damage_type, damage_flag) if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && blob_tile.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. - blob_tile.visible_message(span_boldwarning("A spore floats free of the blob!")) + blob_tile.visible_message(span_boldwarning("Спора вылетает из блоба!")) blob_tile.overmind.create_spore(blob_tile.loc, /mob/living/simple_animal/hostile/blob_minion/spore/minion/weak) return ..() /datum/reagent/blob/distributed_neurons - name = "Distributed Neurons" + name = "Распределенные нейроны" id = "blob_distributed_neurons" color = "#E88D5D" - taste_description = "fizzing" + taste_description = "шипящий" /datum/reagent/blob/distributed_neurons/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm index 8e265703969..879de935a11 100644 --- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm +++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm @@ -1,12 +1,12 @@ //does burn damage and EMPs, slightly fragile /datum/blobstrain/reagent/electromagnetic_web - name = "Electromagnetic Web" + name = "Электромагнитная паутина" color = "#83ECEC" complementary_color = "#EC8383" - description = "will do high burn damage and EMP targets." - effectdesc = "will also take massively increased damage and release an EMP when killed." - analyzerdescdamage = "Does low burn damage and EMPs targets." - analyzerdesceffect = "Is fragile to all types of damage, but takes massive damage from brute. In addition, releases a small EMP when killed." + description = "наносит большой урон от ожогов и цели с ЭМИ." + effectdesc = "также получает значительно увеличенный урон и выпускает ЭМИ после разрушения." + analyzerdescdamage = "Наносит небольшой урон от ожогов и излучает ЭМИ." + analyzerdesceffect = "Хрупок ко всем типам урона, но получает огромный урон от травм. Кроме того, при разрушении выпускает небольшой ЭМИ." reagent = /datum/reagent/blob/electromagnetic_web /datum/blobstrain/reagent/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) @@ -19,9 +19,9 @@ empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it /datum/reagent/blob/electromagnetic_web - name = "Electromagnetic Web" + name = "Электромагнитная паутина" id = "blob_electromagnetic_web" - taste_description = "pop rocks" + taste_description = "поп-рок" color = "#83ECEC" /datum/reagent/blob/electromagnetic_web/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index f599327c0a3..82d48db407c 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -1,16 +1,16 @@ //does tons of oxygen damage and a little stamina, immune to tesla bolts, weak to EMP /datum/blobstrain/reagent/energized_jelly - name = "Energized Jelly" - description = "will cause high stamina and medium oxygen damage, and cause targets to be unable to breathe." - effectdesc = "will also conduct electricity, but takes damage from EMPs." - analyzerdescdamage = "Does high stamina damage, medium oxygen damage, and prevents targets from breathing." - analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs." + name = "Энергетическое желе" + description = "наносит урон выносливости и средний урон гипоксией, а также лишает цели возможности дышать." + effectdesc = "также проводит электричество, но получает урон от ЭМИ. Вызывает электрические разряды в теле после удара." + analyzerdescdamage = "Наносит высокий урон выносливости, средний урон гипоксией и не дает цели дышать." + analyzerdesceffect = "Невосприимчив к электричеству и легко его проводит, но слаб к ЭМИ. Вызывает электрические разряды в теле после удара." color = "#EFD65A" complementary_color = "#00E5B1" reagent = /datum/reagent/blob/energized_jelly /datum/blobstrain/reagent/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.get_integrity() - damage <= 0 && prob(10)) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.get_integrity() - damage <= 0 && prob(30)) do_sparks(rand(2, 4), FALSE, B) return ..() @@ -22,15 +22,22 @@ B.take_damage(damage, BURN, ENERGY) /datum/reagent/blob/energized_jelly - name = "Energized Blob Jelly" + name = "Энергетическое желе" id = "blob_energized_jelly" - taste_description = "gelatin" + taste_description = "желатин" color = "#EFD65A" + /datum/reagent/blob/energized_jelly/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.LoseBreath(round(0.2*reac_volume)) exposed_mob.adjustStaminaLoss(reac_volume * 1.2) - if(exposed_mob) - exposed_mob.apply_damage(0.6*reac_volume, OXY) + exposed_mob.apply_damage(0.6*reac_volume, OXY) + if(exposed_mob.reagents) + if(exposed_mob.reagents.has_reagent("teslium") && prob(0.6 * reac_volume)) + exposed_mob.electrocute_act((0.5 * reac_volume), "разряда блоба", flags = SHOCK_NOGLOVES) + exposed_mob.reagents.del_reagent("teslium") + return //don't add more teslium after you shock it out of someone. + exposed_mob.reagents.add_reagent("teslium", 0.125 * reac_volume) // a little goes a long way + diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm index db0e4ddfb2d..4d75bcac826 100644 --- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm +++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm @@ -1,14 +1,14 @@ //does aoe brute damage when hitting targets, is immune to explosions /datum/blobstrain/reagent/explosive_lattice - name = "Explosive Lattice" - description = "will attack with small explosions, dealing a medium mix of brute and burn damage to everyone nearby. Spores explode on death." - effectdesc = "will also resist explosions, but takes increased damage from fire and other energy sources." - analyzerdescdamage = "Does a medium mix of brute and burn damage in a small explosion around its targets. Spores explode on death." - analyzerdesceffect = "Is highly resistant to explosions, but takes increased damage from fire and other energy sources." + name = "Взрывная решетка" + description = "атакует небольшими взрывами, нанося среднее сочетание урона ожогами и травмами всем, кто находится близко к цели. Споры взрываются при смерти." + effectdesc = "также имеет повышенную сопротивляемость взрывам, но получает повышенный урон от огня и других источников энергии." + analyzerdescdamage = "Атакует небольшими взрывами, нанося среднее сочетание урона ожогами и травмами всем, кто находится близко к цели. Споры взрываются при смерти." + analyzerdesceffect = "Обладает высокой устойчивостью к взрывам, но получает повышенный урон от огня и других источников энергии." color = "#8B2500" complementary_color = "#00668B" blobbernaut_message = "blasts" - message = "The blob blasts you" + message = "Блоб взрывает тебя" reagent = /datum/reagent/blob/explosive_lattice /datum/blobstrain/reagent/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) @@ -27,9 +27,9 @@ actor.take_overall_damage(10, 10) /datum/reagent/blob/explosive_lattice - name = "Explosive Lattice" + name = "Взрывная решетка" id = "blob_explosive_lattice" - taste_description = "the bomb" + taste_description = "бомба" color = "#8B2500" /datum/reagent/blob/explosive_lattice/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm index 371fe0ece1b..38d568e271f 100644 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -1,36 +1,41 @@ //does massive brute and burn damage, but can only expand manually /datum/blobstrain/reagent/networked_fibers - name = "Networked Fibers" - description = "will do a high mix of brute and burn damage, and will generate resources quicker, but can only expand manually using the core or nodes." - shortdesc = "will do a high mix of brute and burn damage." - effectdesc = "will move your core or node when manually expanding near it." - analyzerdescdamage = "Does a high mix of brute and burn damage." - analyzerdesceffect = "Is mobile and generates resources rapidly." + name = "Сетевые волокна" + description = "наносит большое количество урона травмами и ожогами и генерирует ресурсы быстрее, но может расширяться только с помощью перемещения ядра или узлов." + shortdesc = "наносит сочетание урона травмами и ожогами." + effectdesc = "перемещает ваше ядро ​​или узел при ручном расширении рядом с ним." + analyzerdescdamage = "наносит большое количество урона травмами и ожогами." + analyzerdesceffect = "Мобильный и быстро генерирует ресурсы." color = "#4F4441" complementary_color = "#414C4F" reagent = /datum/reagent/blob/networked_fibers - core_regen_bonus = 3 + core_regen_bonus = 4 -/datum/blobstrain/reagent/networked_fibers/expand_reaction(obj/structure/blob/spawning_blob, obj/structure/blob/new_blob, turf/chosen_turf, mob/camera/blob/overmind) - if(!overmind && new_blob.overmind) +/datum/blobstrain/reagent/networked_fibers/expand_reaction(obj/structure/blob/spawning_blob, obj/structure/blob/new_blob, turf/chosen_turf, mob/camera/blob/overmind, offstation) + if(!overmind && new_blob.overmind || offstation) new_blob.overmind.add_points(1) + if(offstation) + to_chat(usr, span_warning("Двигать ядро или узел за пределы станции нельзя.")) qdel(new_blob) - return - - for(var/obj/structure/blob/possible_expander in range(1, new_blob)) + return FALSE + + var/list/range_contents = (is_there_multiz())? urange_multiz(1, new_blob) : range(1, new_blob) + + for(var/obj/structure/blob/possible_expander in range_contents) if(possible_expander.overmind == overmind && (istype(possible_expander, /obj/structure/blob/special/core) || istype(possible_expander, /obj/structure/blob/special/node))) new_blob.forceMove(get_turf(possible_expander)) possible_expander.forceMove(chosen_turf) possible_expander.setDir(get_dir(new_blob, possible_expander)) - return + return TRUE overmind.add_points(4) qdel(new_blob) + return FALSE //does massive brute and burn damage, but can only expand manually /datum/reagent/blob/networked_fibers - name = "Networked Fibers" + name = "Сетевые волокна" id = "blob_networked_fibers" - taste_description = "efficiency" + taste_description = "эффективность" color = "#4F4441" /datum/reagent/blob/networked_fibers/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm b/code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm deleted file mode 100644 index d39ade40cc5..00000000000 --- a/code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm +++ /dev/null @@ -1,120 +0,0 @@ -/* -var/message = "Блоб наносит вам удар" //message sent to any mob hit by the blob - -/datum/reagent/blob/ripping_tendrils //does brute and a little stamina damage - name = "Разрывающие щупальца" - description = "Наносит высокий урон травмами, а также урон выносливости." - message_living = ", и вы чувствуете, как ваша кожа рвется и слезает." - -/datum/reagent/blob/boiling_oil //sets you on fire, does burn damage - name = "Кипящее масло" - description = "Наносит высокий урон ожогами и поджигает жертву." - message = "Блоб обдает вас горящим маслом" - message_living = ", и вы чувствуете, как ваша кожа обугливается и плавится" - -/datum/reagent/blob/envenomed_filaments //toxin, hallucination, and some bonus spore toxin - name = "Ядовитые нити" - description = "Наносит высокий урон токсинами, вызывает галлюцинации и вводит споры в кровоток." - message_living = ", и вы чувствуете себя плохо. Вас тошнит" - -/datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute - name = "Лексориновое желе" - description = "Наносит средний урон травмами, но огромный урон гипоксией." - message_living = ", и ваши легкие кажутся тяжелыми и слабыми" - -/datum/reagent/blob/kinetic //does semi-random brute damage - name = "Кинетический желатин" - description = "Наносит случайный урон травмами, в 0,33–2,33 раза превышающий стандартное количество." - message = "Блоб избивает вас" - -/datum/reagent/blob/cryogenic_liquid //does low burn damage and stamina damage and cools targets down - name = "Криогенная жидкость" - description = "Наносит средний урон травмами, урон выносливости и вводит в жертв ледяное масло, замораживая их до смерти." - message = "Блоб обливает вас ледяной жидкостью" - message_living = ", и вы чувствуете себя холодным и усталым" - -/datum/reagent/blob/b_sorium - name = "Сорий" - description = "Наносит высокий урон травмами и отбрасывает людей в стороны." - id = "b_sorium" - color = "#808000" - complementary_color = "#a2a256" - message = "Блоб врезается в вас и отбрасывает в сторону." - -/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - reagent_vortex(M, 1, volume) - volume = ..() - M.apply_damage(0.6*volume, BRUTE) - -/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, volume) - var/turf/pull = get_turf(M) - var/range_power = clamp(round(volume/5, 1), 1, 5) - for(var/atom/movable/X in range(range_power,pull)) - if(iseffect(X)) - continue - if(X.move_resist <= MOVE_FORCE_DEFAULT && !X.anchored) - var/distance = get_dist(X, pull) - var/moving_power = max(range_power - distance, 1) - spawn(0) - if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown - if(setting_type) - var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) - var/throw_range = 5 - distance - X.throw_at(throw_target, throw_range, 1) - else - X.throw_at(pull, distance, 1) - else - if(setting_type) - for(var/i = 0, i < moving_power, i++) - sleep(2) - if(!step_away(X, pull)) - break - else - for(var/i = 0, i < moving_power, i++) - sleep(2) - if(!step_towards(X, pull)) - break - -/datum/reagent/blob/radioactive_gel - name = "Радиоактивный гель" - description = "Наносит средний урон токсинами и небольшой урон травмами, но облучает тех, кого задевает." - id = "radioactive_gel" - color = "#2476f0" - complementary_color = "#24f0f0" - message_living = ", и вы чувствуете странное тепло изнутри" - -/datum/reagent/blob/radioactive_gel/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.3 * volume, TOX) - M.apply_damage(0.2 * volume, BRUTE) // lets not have IPC / plasmaman only take 7.5 damage from this - if(M.reagents) - M.reagents.add_reagent("uranium", 0.3 * volume) - -/datum/reagent/blob/teslium_paste - name = "Теслиевая паста" - description = "Наносит средний урон ожогами и вызывает удары током у тех, кого задевает, со временем." - id = "teslium_paste" - color = "#20324D" - complementary_color = "#412968" - message_living = ", и вы чувствуете удар статическим электричеством" - -/datum/reagent/blob/teslium_paste/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.4 * volume, BURN) - if(M.reagents) - if(M.reagents.has_reagent("teslium") && prob(0.6 * volume)) - M.electrocute_act((0.5 * volume), "разряда блоба", flags = SHOCK_NOGLOVES) - M.reagents.del_reagent("teslium") - return //don't add more teslium after you shock it out of someone. - M.reagents.add_reagent("teslium", 0.125 * volume) // a little goes a long way - -/datum/reagent/blob/proc/send_message(mob/living/M) - var/totalmessage = message - if(message_living && !issilicon(M)) - totalmessage += message_living - totalmessage += "!" - to_chat(M, "[totalmessage]") -*/ diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index 58cd5ac67ef..05a322ddfbf 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -1,15 +1,15 @@ //does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged /datum/blobstrain/reagent/pressurized_slime - name = "Pressurized Slime" - description = "will do low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery." - effectdesc = "will also make tiles slippery near attacked blobs." - analyzerdescdamage = "Does low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery, extinguishing them. Is resistant to brute attacks." - analyzerdesceffect = "When attacked or killed, lubricates nearby tiles, extinguishing anything on them." + name = "Сжатая слизь" + description = "наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, тушая их." + effectdesc = "также сделает плитки скользкими рядом с атакованными плитками. Устойчив к грубым атакам." + analyzerdescdamage = "Наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, тушая их. Устойчив к грубым атакам." + analyzerdesceffect = "При нападении или убийстве смазывает близлежащие плитки пола, тушая все на них." color = "#AAAABB" complementary_color = "#BBBBAA" blobbernaut_message = "emits slime at" - message = "The blob splashes into you" - message_living = ", and you gasp for breath" + message = "Блоб плюхается в тебя" + message_living = ", и ты задыхаешься" reagent = /datum/reagent/blob/pressurized_slime /datum/blobstrain/reagent/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) @@ -21,7 +21,7 @@ /datum/blobstrain/reagent/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag) if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) - B.visible_message(span_boldwarning("The blob ruptures, spraying the area with liquid!")) + B.visible_message(span_boldwarning("Блоб разрывается, обрызгивая область жидкостью!")) extinguisharea(B, 50) /datum/blobstrain/reagent/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance) @@ -38,9 +38,9 @@ L.ExtinguishMob() /datum/reagent/blob/pressurized_slime - name = "Pressurized Slime" + name = "Сжатая слизь" id = "blob_pressurized_slime" - taste_description = "a sponge" + taste_description = "губка" color = "#AAAABB" /datum/reagent/blob/pressurized_slime/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm b/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm new file mode 100644 index 00000000000..86cd7593087 --- /dev/null +++ b/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm @@ -0,0 +1,34 @@ + +//sets you on fire, does burn damage, explodes into flame when burnt, weak to water +/datum/blobstrain/reagent/radioactive_gel + name = "Радиоактивный гель" + description = "наносит средний урон токсинами и небольшой урон травмами, но облучает тех, кого задевает." + effectdesc = "при получении урона облучает окружающих." + analyzerdescdamage = "Наносит средний урон токсинами и небольшой урон травмами, но облучает тех, кого задевает." + analyzerdesceffect = "При получении урона облучает окружающих." + color = "#2476f0" + complementary_color = "#24f0f0" + blobbernaut_message = "splashes" + message_living = ", и вы чувствуете странное тепло изнутри" + reagent = /datum/reagent/blob/radioactive_gel + + +/datum/blobstrain/reagent/radioactive_gel/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == ENERGY || damage_flag == LASER) && prob(damage)) + for(var/mob/living/l in range(6, B)) + l.apply_effect(damage, IRRADIATE) + return ..() + +/datum/reagent/blob/radioactive_gel + name = "Рadioactive_gel" + id = "blob_radioactive_gel" + taste_description = "радиация" + color = "#2476f0" + +/datum/reagent/blob/radioactive_gel/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + exposed_mob.apply_damage(0.3 * reac_volume, TOX) + exposed_mob.apply_damage(0.2 * reac_volume, BRUTE) // lets not have IPC / plasmaman only take 7.5 damage from this + if(exposed_mob.reagents) + exposed_mob.reagents.add_reagent("uranium", 0.3 * reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index a8ef52d8a31..0ba5c3a6025 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -1,21 +1,21 @@ //does brute damage through armor and bio resistance /datum/blobstrain/reagent/reactive_spines - name = "Reactive Spines" - description = "will do high brute damage through armor and bio resistance." - effectdesc = "will also react when attacked with burn or brute damage, attacking everything in melee range." - analyzerdescdamage = "Does high brute damage, ignoring armor and bio resistance." - analyzerdesceffect = "When attacked with burn or brute damage it violently lashes out, attacking everything nearby." + name = "Реактивные шипы" + description = "наносит большой урон травмами через броню и биосопротивление." + effectdesc = "также будет реагировать на атаку ожогами или травмами, атакуя все в ближнем бою." + analyzerdescdamage = "Наносит высокий урон травмами, игнорируя броню и биологическое сопротивление." + analyzerdesceffect = "При нанесении урона ожогами и травмами блоб яростно бросается в атаку, атакуя все, что находится поблизости." color = "#9ACD32" complementary_color = "#FFA500" blobbernaut_message = "stabs" - message = "The blob stabs you" + message = "Блоб ранит тебя" reagent = /datum/reagent/blob/reactive_spines COOLDOWN_DECLARE(retaliate_cooldown) /datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.get_integrity() - damage > 0 && COOLDOWN_FINISHED(src, retaliate_cooldown)) // Is there any damage, is it burn or brute, will we be alive, and has the cooldown finished? COOLDOWN_START(src, retaliate_cooldown, 2.5 SECONDS) // 2.5 seconds before auto-retaliate can whack everything within 1 tile again - B.visible_message(span_boldwarning("The blob retaliates, lashing out!")) + B.visible_message(span_boldwarning("Блоб отвечает, набрасываясь!")) for(var/atom/thing in range(1, B)) if(!thing.can_blob_attack()) continue @@ -30,9 +30,9 @@ return ..() /datum/reagent/blob/reactive_spines - name = "Reactive Spines" + name = "Реактивные шипы" id = "blob_reactive_spines" - taste_description = "rock" + taste_description = "камень" color = "#9ACD32" /datum/reagent/blob/reactive_spines/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index 5e50161c487..2b77f724149 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -1,19 +1,19 @@ //does toxin damage, hallucination, targets think they're not hurt at all /datum/blobstrain/reagent/regenerative_materia - name = "Regenerative Materia" - description = "will do medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. The core regenerates much faster." - analyzerdescdamage = "Does medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. Core regenerates much faster." + name = "Регенеративная Материя" + description = "наносит средний начальный урон токсинами, впрыскивая яд, который наносит больший урон токсинами и заставляет цели поверить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." + analyzerdescdamage = "Наносит средний начальный урон токсинами, вводя яд, который наносит больший урон токсинами и заставляет цели поверить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." color = "#A88FB7" complementary_color = "#AF7B8D" - message_living = ", and you feel alive" + message_living = ", и ты чувствуешь себя живым" reagent = /datum/reagent/blob/regenerative_materia core_regen_bonus = 18 - point_rate_bonus = 1 + point_rate_bonus = 2 /datum/reagent/blob/regenerative_materia - name = "Regenerative Materia" + name = "Регенеративная Материя" id = "blob_regenerative_materia" - taste_description = "heaven" + taste_description = "небеса" color = "#A88FB7" /datum/reagent/blob/regenerative_materia/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index 1173dedcd78..c9835b9c654 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -1,12 +1,12 @@ /datum/blobstrain/reagent/replicating_foam - name = "Replicating Foam" - description = "will do medium brute damage and occasionally expand again when expanding." - shortdesc = "will do medium brute damage." - effectdesc = "will also expand when attacked with burn damage, but takes more brute damage." + name = "Репликационная пена" + description = "наносит средний урон травмами и иногда дополнительно расширяется при расширении." + shortdesc = "наносит средний урон травмами." + effectdesc = "также будет расширяться при атаке уроном ожогами, но получает больше урона травмами." color = "#7B5A57" complementary_color = "#57787B" - analyzerdescdamage = "Does medium brute damage." - analyzerdesceffect = "Expands when attacked with burn damage, will occasionally expand again when expanding, and is fragile to brute damage." + analyzerdescdamage = "Наносит средний урон травмами." + analyzerdesceffect = "Расширяется при атаке уроном ожогами, иногда дополнительно расширяется при расширении и уязвим к урону травмами." reagent = /datum/reagent/blob/replicating_foam @@ -24,11 +24,12 @@ /datum/blobstrain/reagent/replicating_foam/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) if(prob(30)) newB.expand(null, null, 0) //do it again! + return TRUE /datum/reagent/blob/replicating_foam - name = "Replicating Foam" + name = "Репликационная пена" id = "blob_replicating_foam" - taste_description = "duplication" + taste_description = "дублирование" color = "#7B5A57" /datum/reagent/blob/replicating_foam/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 8d191a4499a..8ff3a4c50e3 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -1,10 +1,10 @@ //does brute damage, shifts away when damaged /datum/blobstrain/reagent/shifting_fragments - name = "Shifting Fragments" - description = "will do medium brute damage." - effectdesc = "will also cause blob parts to shift away when attacked." - analyzerdescdamage = "Does medium brute damage." - analyzerdesceffect = "When attacked, may shift away from the attacker." + name = "Смещающиеся фрагменты" + description = "нанесит средний урон травмами." + effectdesc = "также приведет к смещению плиток при атаке." + analyzerdescdamage = "Наносит средний урон травмами." + analyzerdesceffect = "При нападении может поменять местами плитки." color = "#C8963C" complementary_color = "#3C6EC8" reagent = /datum/reagent/blob/shifting_fragments @@ -13,11 +13,13 @@ if(istype(B, /obj/structure/blob/normal) || (istype(B, /obj/structure/blob/shield))) newB.forceMove(get_turf(B)) B.forceMove(T) + return TRUE /datum/blobstrain/reagent/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.get_integrity() - damage > 0 && prob(60-damage)) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.get_integrity() - damage > 0 && prob(20 + damage)) var/list/blobstopick = list() - for(var/obj/structure/blob/OB in orange(1, B)) + var/list/blob_structures = (is_there_multiz())? urange_multiz(1, B, TRUE) : orange(1, B) + for(var/obj/structure/blob/OB in blob_structures) if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blobstrain.type == B.overmind.blobstrain.type) blobstopick += OB //as long as the blob picked is valid; ie, a normal or shield blob that has the same chemical as we do, we can swap with it if(blobstopick.len) @@ -28,7 +30,7 @@ return ..() /datum/reagent/blob/shifting_fragments - name = "Shifting Fragments" + name = "Смещающиеся фрагменты" id = "blob_shifting_fragments" color = "#C8963C" diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm index 83306cbf142..167d39f1e5e 100644 --- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm +++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm @@ -1,20 +1,20 @@ //does brute damage, bonus damage for each nearby blob, and spreads damage out /datum/blobstrain/reagent/synchronous_mesh - name = "Synchronous Mesh" - description = "will do low brute damage, but each blob nearby attacks the target as well with stacking damage." - effectdesc = "will also spread damage between each blob near the attacked blob." - analyzerdescdamage = "Does low brute damage, increasing for each blob near the target." - analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob." + name = "Синхронная сетка" + description = "наносит небольшой урон травмами, но каждая плитка поблизости также атакует цель, нанося суммируемый урон." + effectdesc = "также распределяет урон между каждой плиткой рядом с атакованной плиткой." + analyzerdescdamage = "Наносит небольшой урон травмами, увеличивающийся с каждой плиткой рядом с целью." + analyzerdesceffect = "При атаке распределяет урон между всеми плитками рядом с атакованной плиткой." color = "#65ADA2" complementary_color = "#AD6570" blobbernaut_message = "synchronously strikes" - message = "The blobs strike you" + message = "Блоб поражают тебя" reagent = /datum/reagent/blob/synchronous_mesh /datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) //the cause isn't fire or bombs, so split the damage var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs - var/list/blob_structures = orange(1, B) + var/list/blob_structures = (is_there_multiz())? urange_multiz(1, B, TRUE) : orange(1, B) for(var/obj/structure/blob/C in blob_structures) if(!C.ignore_syncmesh_share && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //if it doesn't have the same chemical or is a core or node, don't split damage to it damagesplit += 1 @@ -26,17 +26,18 @@ return damage * 1.25 /datum/reagent/blob/synchronous_mesh - name = "Synchronous Mesh" + name = "Синхронная сетка" id = "blob_synchronous_mesh" - taste_description = "toxic mold" + taste_description = "токсичная плесень" color = "#65ADA2" /datum/reagent/blob/synchronous_mesh/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.2*reac_volume, BRUTE, forced = TRUE) + var/list/blob_structures = (is_there_multiz())? urange_multiz(1, exposed_mob, TRUE) : range(1, exposed_mob) if(exposed_mob && reac_volume) - for(var/obj/structure/blob/nearby_blob in range(1, exposed_mob)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume + for(var/obj/structure/blob/nearby_blob in blob_structures) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume if(exposed_mob) nearby_blob.blob_attack_animation(exposed_mob) //show them they're getting a bad time exposed_mob.apply_damage(0.3*reac_volume, BRUTE, forced = TRUE) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index ec7d68bfd50..c39b2b32388 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(overminds) layer = FLY_LAYER plane = ABOVE_GAME_PLANE pass_flags = PASSBLOB - faction = list(ROLE_BLOB) + verb_say = "states" hud_type = /datum/hud/blob_overmind var/obj/structure/blob/special/core/blob_core = null // The blob overmind's core @@ -92,8 +92,9 @@ GLOBAL_LIST_EMPTY(overminds) qdel(src) return if(!free_strain_rerolls && (last_reroll_time + BLOB_POWER_REROLL_FREE_TIME < world.time)) - to_chat(src, span_boldnotice("You have gained another free strain re-roll.")) + to_chat(src, span_boldnotice("Вы получили еще одну бесплатную смену штамма.")) free_strain_rerolls = TRUE + track_z() /mob/camera/blob/Login() @@ -104,6 +105,15 @@ GLOBAL_LIST_EMPTY(overminds) update_health_hud() sync_lighting_plane_alpha() add_points(0) + var/turf/T = get_turf(src) + if(isturf(T)) + update_z(T.z) + + +/mob/camera/blob/Logout() + update_z(null) + . = ..() + /mob/camera/blob/proc/can_attack() return (world.time > (last_attack + CLICK_CD_RANGE)) @@ -127,12 +137,12 @@ GLOBAL_LIST_EMPTY(overminds) var/turf/target_turf = . if(!is_valid_turf(target_turf)) // Allows unplaced blobs to travel through station z-levels if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(src, span_warning("Your destination is invalid. Move somewhere else and try again.")) + to_chat(src, span_warning("Ваш пункт назначения недействителен. Перейдите в другое место и попробуйте еще раз.")) return null /mob/camera/blob/proc/is_valid_turf(turf/tile) var/area/area = get_area(tile) - if((area && !(area.area_flags & BLOBS_ALLOWED)) || !tile || !is_station_level(tile.z) || isgroundlessturf(tile)) + if((area && !(area.area_flags & BLOBS_ALLOWED)) || !tile || !is_station_level(tile.z)) return FALSE return TRUE @@ -140,11 +150,11 @@ GLOBAL_LIST_EMPTY(overminds) /mob/camera/blob/get_status_tab_items() . = ..() if(blob_core) - . += list("Core Health:", "[blob_core.obj_integrity]") - . += list("Power Stored:", "[(is_infinity || SSticker?.mode?.is_blob_infinity_points)? "INF" : blob_points]/[max_blob_points]") - . += list("Blobs to Win:", "[GLOB.blobs.len]/[SSticker?.mode.blob_win_count]") + . += list(list("Здоровье ядра:", "[blob_core.obj_integrity]")) + . += list(list("Ресурсы:", "[(is_infinity || SSticker?.mode?.is_blob_infinity_points)? "INF" : "[blob_points]/[max_blob_points]"]")) + . += list(list("Критическая Масса:", "[TOTAL_BLOB_MASS]/[NEEDED_BLOB_MASS]")) if(free_strain_rerolls) - . += list("You have [free_strain_rerolls] Free Strain Reroll\s Remaining") + . += list(list("Осталось бесплатных смен штамма:", "[free_strain_rerolls]")) /mob/camera/blob/update_health_hud() if(!blob_core) @@ -168,7 +178,7 @@ GLOBAL_LIST_EMPTY(overminds) if (client) if(GLOB.admin_mutes_assoc[ckey] & MUTE_IC) - to_chat(src, span_boldwarning("You cannot send IC messages (muted).")) + to_chat(src, span_boldwarning("Вы не можете писать IC сообщения (мут).")) return if (client.handle_spam_prevention(message, MUTE_IC)) return @@ -226,16 +236,16 @@ GLOBAL_LIST_EMPTY(overminds) /mob/camera/blob/proc/get_strain_info() . = list() - . += span_notice("Your strain is now: [blobstrain.name]!") - . += span_notice("The [blobstrain.name] strain [blobstrain.description]") + . += span_notice("Ваш штамм: [blobstrain.name]!") + . += span_notice("Штамм [blobstrain.name] [blobstrain.description]") if(blobstrain.effectdesc) - . += span_notice("The [blobstrain.name] strain [blobstrain.effectdesc]") + . += span_notice("Штамм [blobstrain.name] [blobstrain.effectdesc]") return . /mob/camera/blob/examine(mob/user) . = ..() if(blobstrain) - . += "Its strain is [blobstrain.name]." + . += "Штамм блоба — [blobstrain.name]." /mob/camera/blob/blob_act(obj/structure/blob/B) return @@ -260,3 +270,7 @@ GLOBAL_LIST_EMPTY(overminds) /mob/camera/blob/proc/on_minion_death(mob/living/spore) SIGNAL_HANDLER blobstrain.on_sporedeath(spore) + +/mob/camera/blob/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = TRUE) + ..() + update_z(new_turf?.z) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 5985603a2dc..2abb74a324f 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -40,37 +40,54 @@ /mob/camera/blob/proc/create_special(price, blobstrain, min_separation, needs_node, turf/tile) if(!tile) tile = get_turf(src) + var/obj/structure/blob/blob = (locate(/obj/structure/blob) in tile) if(!blob) to_chat(src, span_warning("Тут нет плитки!")) balloon_alert(src, "тут нет плитки!") return FALSE + if(!istype(blob, /obj/structure/blob/normal)) to_chat(src, span_warning("Невозможно использовать на этой плитке. Найдите обычную плитку.")) balloon_alert(src, "нужна обычная плитка!") return FALSE + + var/area/area = get_area(src) + if(!(area.area_flags & BLOBS_ALLOWED)) //factory and resource blobs must be legit + to_chat(src, span_warning("Эта плитка должна быть размещена на станции!")) + balloon_alert(src, "нельзя поставить вне станции!") + return FALSE + if(needs_node) - var/area/area = get_area(src) - if(!(area.area_flags & BLOBS_ALLOWED)) //factory and resource blobs must be legit - to_chat(src, span_warning("Эта плитка должна быть размещена на станции!")) - balloon_alert(src, "нельзя поставить вне станции!") - return FALSE - if(nodes_required && !(locate(/obj/structure/blob/special/node) in orange(BLOB_NODE_PULSE_RANGE, tile)) && !(locate(/obj/structure/blob/special/core) in orange(BLOB_CORE_PULSE_RANGE, tile))) + if(nodes_required && node_check(tile)) to_chat(src, span_warning("Вам нужно разместить эту плитку ближе к узлу или ядру!")) balloon_alert(src, "слишком далеко от узла или ядра!") return FALSE //handholdotron 2000 + if(min_separation) - for(var/obj/structure/blob/other_blob in orange(min_separation, tile)) + for(var/obj/structure/blob/other_blob in get_sep_tile(tile, min_separation)) if(other_blob.type == blobstrain) to_chat(src, span_warning("Поблизости находится ресурсная плитка, отойдите на расстояние более [min_separation] плиток от неё!")) other_blob.balloon_alert(src, "слишком близко!") return FALSE + if(!can_buy(price)) return FALSE + var/obj/structure/blob/node = blob.change_to(blobstrain, src) return node +/mob/camera/blob/proc/node_check(turf/tile) + if(is_there_multiz()) + return !(locate(/obj/structure/blob/special/node) in urange_multiz(BLOB_NODE_PULSE_RANGE, tile, TRUE)) && !(locate(/obj/structure/blob/special/core) in urange_multiz(BLOB_CORE_PULSE_RANGE, tile, TRUE)) + return !(locate(/obj/structure/blob/special/node) in orange(BLOB_NODE_PULSE_RANGE, tile)) && !(locate(/obj/structure/blob/special/core) in orange(BLOB_CORE_PULSE_RANGE, tile)) + +/mob/camera/blob/proc/get_sep_tile(turf/tile, min_separation) + if(is_there_multiz()) + return urange_multiz(min_separation, tile, TRUE) + return orange(min_separation, tile) + /** Creates a shield to reflect projectiles */ /mob/camera/blob/proc/create_shield(turf/tile) var/obj/structure/blob/blob = (locate(/obj/structure/blob) in tile) @@ -104,7 +121,7 @@ return FALSE to_chat(src, span_warning("Вы выделяете отражающую слизь на крепкую плитку, позволяя ей отражать энергетические снаряды ценой снижения прочности.")) - shield = shield.change_to(/obj/structure/blob/shield/reflective, src) + shield = shield.change_to(/obj/structure/blob/shield/reflective, src, shield.point_return) shield.balloon_alert(src, "улучшено в [shield.name]!") /** Preliminary check before polling ghosts. */ @@ -113,6 +130,7 @@ var/obj/structure/blob/special/factory/factory = locate(/obj/structure/blob/special/factory) in current_turf if(!factory) to_chat(src, span_warning("Вы должны быть на фабрике блоба!")) + balloon_alert(src, "нужна фабрика!") return FALSE if(factory.blobbernaut || factory.is_creating_blobbernaut) //if it already made or making a blobbernaut, it can't do it again to_chat(src, span_warning("Эта фабрика уже создает блобернаута.")) @@ -157,8 +175,6 @@ assume_direct_control(blobber) factory.assign_blobbernaut(blobber) blobber.assign_key(ghost.key, blobstrain) - blobber.AIStatus = AI_OFF - blobber.LoseTarget() RegisterSignal(blobber, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(on_blobbernaut_attacked)) /// When one of our boys attacked something, we sometimes want to perform extra effects @@ -176,15 +192,18 @@ if(!blob) to_chat(src, span_warning("Вы должны быть на узле!")) + balloon_alert(src, "нужно быть на узле!") return FALSE if(!blob_core) to_chat(src, span_userdanger("У вас нет ядра и вы на пороге смерти. Покойтесь с миром!")) + balloon_alert(src, "у вас нет ядра!") return FALSE var/area/area = get_area(tile) if(isspaceturf(tile) || area && !(area.area_flags & BLOBS_ALLOWED)) to_chat(src, span_warning("Вы не можете переместить свое ядро сюда!")) + balloon_alert(src, "нельзя переместить сюда!") return FALSE if(!can_buy(BLOB_POWER_RELOCATE_COST)) @@ -198,7 +217,7 @@ blob.setDir(old_dir) /** Searches the tile for a blob and removes it. */ -/mob/camera/blob/proc/remove_blob(turf/tile) +/mob/camera/blob/proc/remove_blob(turf/tile, atom/location) var/obj/structure/blob/blob = locate() in tile if(!blob) @@ -223,13 +242,20 @@ return TRUE /** Expands to nearby tiles */ -/mob/camera/blob/proc/expand_blob(turf/tile) +/mob/camera/blob/proc/expand_blob(turf/tile, atom/location) if(world.time < last_attack) return FALSE var/list/possible_blobs = list() + var/turf/T - for(var/obj/structure/blob/blob in range(tile, 1)) - possible_blobs += blob + if(is_there_multiz()) + T = get_turf(location) + for(var/obj/structure/blob/blob in urange_multiz(1, T)) + possible_blobs += blob + else + T = tile + for(var/obj/structure/blob/blob in range(1, T)) + possible_blobs += blob if(!length(possible_blobs)) to_chat(src, span_warning("Рядом с целью нету плиток блоба!")) @@ -239,7 +265,7 @@ return FALSE var/attack_success - for(var/mob/living/player in tile) + for(var/mob/living/player in T) if(!player.can_blob_attack()) continue if(ROLE_BLOB in player.faction) //no friendly/dead fire @@ -248,17 +274,17 @@ attack_success = TRUE blobstrain.attack_living(player, possible_blobs) - var/obj/structure/blob/blob = locate() in tile + var/obj/structure/blob/blob = locate() in T if(blob) if(attack_success) //if we successfully attacked a turf with a blob on it, only give an attack refund - blob.blob_attack_animation(tile, src) + blob.blob_attack_animation(T, src) add_points(BLOB_ATTACK_REFUND) else to_chat(src, span_warning("Здесь уже есть плитка!")) add_points(BLOB_EXPAND_COST) //otherwise, refund all of the cost else - directional_attack(tile, possible_blobs, attack_success) + directional_attack(T, possible_blobs, attack_success) if(attack_success) last_attack = world.time + CLICK_CD_MELEE @@ -272,7 +298,7 @@ var/list/diagonal_blobs = list() for(var/obj/structure/blob/blob in possible_blobs) - if(get_dir(blob, tile) in GLOB.cardinal) + if(get_dir_multiz(blob, tile) in GLOB.cardinals_multiz) cardinal_blobs += blob else diagonal_blobs += blob @@ -309,16 +335,24 @@ var/turf/T = get_turf(src) if(!T) return + var/area/Ablob = get_area(T) + if(isspaceturf(T) || Ablob && !(Ablob.area_flags & BLOBS_ALLOWED)) + to_chat(src, span_warning("Вы не можете поделиться вне станции!")) + balloon_alert(src, "нельзя поделиться вне станции!") + return FALSE if(split_used) to_chat(src, span_warning("Вы уже произвели потомка.")) + balloon_alert(src, "вы уже поделились!") return if(is_offspring) to_chat(src, span_warning("Потомки блоба не могут производить потомков.")) + balloon_alert(src, "вы сами потомок блоба!") return var/obj/structure/blob/N = (locate(/obj/structure/blob) in T) if(N && !istype(N, /obj/structure/blob/special/node)) to_chat(src, span_warning("Для создания вашего потомка необходим узел.")) + balloon_alert(src, "необходим узел!") return if(!can_buy(BLOB_CORE_SPLIT_COST)) diff --git a/code/modules/antagonists/blob/powers_verbs.dm b/code/modules/antagonists/blob/powers_verbs.dm index ad75b9ec3b2..57d14af613e 100644 --- a/code/modules/antagonists/blob/powers_verbs.dm +++ b/code/modules/antagonists/blob/powers_verbs.dm @@ -30,5 +30,6 @@ to_chat(usr, "Вы говорите от лица ваших созданий, [speak_text]") for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs) if(blob_minion.stat == CONSCIOUS) + add_say_logs(usr, speak_text, language = "BLOB Broadcast") blob_minion.atom_say(speak_text) return \ No newline at end of file diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index f51927f93b8..1ad42c45d93 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -3,7 +3,7 @@ name = "blob" icon = 'icons/mob/blob.dmi' light_range = 3 - desc = "A thick wall of writhing tendrils." + desc = "Толстая стена извивающихся щупалец." density = FALSE opacity = TRUE anchored = TRUE @@ -65,6 +65,7 @@ atmosblock = FALSE air_update_turf(1) GLOB.blobs -= src + SSticker?.mode?.legit_blobs -= src if(overmind) overmind.all_blobs -= src overmind.blobs_legit -= src //if it was in the legit blobs list, it isn't now @@ -162,11 +163,11 @@ /obj/structure/blob/proc/expand(turf/T = null, controller = null, expand_reaction = 1) if(!T) - var/list/dirs = list(1,2,4,8) - for(var/i = 1 to 4) + var/list/dirs = (is_there_multiz())? GLOB.cardinals_multiz.Copy() : GLOB.cardinal.Copy() + for(var/i = 1 to dirs.len) var/dirn = pick(dirs) dirs.Remove(dirn) - T = get_step(src, dirn) + T = get_step_multiz(src, dirn) if(!(locate(/obj/structure/blob) in T)) break else @@ -204,14 +205,20 @@ if(T.Enter(B)) //NOW we can attempt to move into the tile B.set_density(initial(B.density)) B.forceMove(T) + var/offstation = FALSE var/area/Ablob = get_area(B) if(Ablob.area_flags & BLOBS_ALLOWED) //Is this area allowed for winning as blob? - overmind.blobs_legit += B + overmind.blobs_legit |= B + SSticker?.mode?.legit_blobs |= B else if(controller) - B.balloon_alert(overmind, "off-station, won't count!") + B.balloon_alert(overmind, "вне станции, не считается!") + offstation = TRUE B.update_blob() + var/reaction_result = TRUE if(B.overmind && expand_reaction) - B.overmind.blobstrain.expand_reaction(src, B, T, controller) + reaction_result = B.overmind.blobstrain.expand_reaction(src, B, T, controller, offstation) + if(reaction_result && is_there_multiz() && check_level_trait(T.z, ZTRAIT_DOWN) && !isopenspaceturf(T)) + T.ChangeTurf(/turf/simulated/openspace) return B else blob_attack_animation(T, controller) @@ -225,7 +232,8 @@ /obj/structure/blob/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - return checkpass(mover, PASSBLOB) + var/mob/mover_mob = mover + return checkpass(mover, PASSBLOB) || (istype(mover_mob) && mover_mob.stat == DEAD) /obj/structure/blob/CanAStarPass(to_dir, datum/can_pass_info/pass_info) @@ -271,6 +279,7 @@ /obj/structure/blob/attack_animal(mob/living/simple_animal/M) if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut + to_chat(M, span_danger("Вы не можете навредить структурам блоба")) return ..() @@ -333,12 +342,13 @@ arrived.blob_act(src) -/obj/structure/blob/proc/change_to(type, controller) +/obj/structure/blob/proc/change_to(type, controller, point_return = 0) if(!ispath(type)) CRASH("change_to(): invalid type for blob") var/obj/structure/blob/B = new type(src.loc, controller) B.update_blob() B.setDir(dir) + B.point_return += point_return qdel(src) return B @@ -346,14 +356,15 @@ /obj/structure/blob/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_ANALYZER) user.changeNext_move(CLICK_CD_MELEE) - to_chat(user, "The analyzer beeps once, then reports:
    ") + to_chat(user, "Анализатор подает один звуковой сигнал, затем сообщает:
    ") SEND_SOUND(user, sound('sound/machines/ping.ogg')) if(overmind) - to_chat(user, "Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") + to_chat(user, "Прогресс Критической Массы: [span_notice("[TOTAL_BLOB_MASS]/[NEEDED_BLOB_MASS].")]") to_chat(user, chemeffectreport(user).Join("\n")) else - to_chat(user, "Blob core neutralized. Critical mass no longer attainable.") + to_chat(user, "Ядро блоба нейтрализовано. Критическая масса более не достижима.") to_chat(user, typereport(user).Join("\n")) + return ATTACK_CHAIN_PROCEED_SUCCESS else return ..() @@ -362,63 +373,49 @@ . = ..() var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] if(user.research_scanner || hud_to_check.hudusers[user]) - . += "Your HUD displays an extensive report...
    " + . += "Ваш HUD отображает обширный отчет...
    " if(overmind) . += overmind.blobstrain.examine(user) else - . += "Core neutralized. Critical mass no longer attainable." + . += "Ядро блоба нейтрализовано. Критическая масса более не достижима." . += chemeffectreport(user) . += typereport(user) else if((user == overmind || isobserver(user)) && overmind) . += overmind.blobstrain.examine(user) - . += "It seems to be made of [get_chem_name()]." + . += "Кажется, он состоит из [get_chem_name()]." /obj/structure/blob/proc/scannerreport() - return "A generic blob. Looks like someone forgot to override this proc, adminhelp this." + return "Обычная плитка. Похоже, кто-то забыл переопределить этот процесс, сообщите администратору и составьте баг-репорт." -/obj/structure/blob/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - user.changeNext_move(CLICK_CD_MELEE) - to_chat(user, "The analyzer beeps once, then reports:
    ") - SEND_SOUND(user, sound('sound/machines/ping.ogg')) - if(overmind) - to_chat(user, "Progress to Critical Mass: [span_notice("[GLOB.blobs.len]/[SSticker?.mode.blob_win_count].")]") - to_chat(user, chemeffectreport(user).Join("\n")) - else - to_chat(user, "Blob core neutralized. Critical mass no longer attainable.") - to_chat(user, typereport(user).Join("\n")) - else - return ..() - /obj/structure/blob/proc/chemeffectreport(mob/user) RETURN_TYPE(/list) . = list() if(overmind) - . += list("Material: [overmind.blobstrain.name][span_notice(".")]", - "Material Effects: [span_notice("[overmind.blobstrain.analyzerdescdamage]")]", - "Material Properties: [span_notice("[overmind.blobstrain.analyzerdesceffect || "N/A"]")]") + . += list("Материал: [overmind.blobstrain.name][span_notice(".")]", + "Эффект материала: [span_notice("[overmind.blobstrain.analyzerdescdamage]")]", + "Свойства материала: [span_notice("[overmind.blobstrain.analyzerdesceffect || "N/A"]")]") else - . += "No Material Detected!" + . += "Материал не найден!" /obj/structure/blob/proc/typereport(mob/user) RETURN_TYPE(/list) - return list("Blob Type: [span_notice("[uppertext(initial(name))]")]", - "Health: [span_notice("[obj_integrity]/[max_integrity]")]", - "Effects: [span_notice("[scannerreport()]")]") + return list("Тип плитки: [span_notice("[uppertext(initial(name))]")]", + "Здоровье: [span_notice("[obj_integrity]/[max_integrity]")]", + "Эффекты: [span_notice("[scannerreport()]")]") /obj/structure/blob/proc/get_chem_name() if(overmind) return overmind.blobstrain.name - return "some kind of organic tissue" + return "какая-то органическая материя" /obj/structure/blob/proc/get_chem_desc() if(overmind) return overmind.blobstrain.description - return "something unknown" + return "что-то неизвестное" diff --git a/code/modules/antagonists/blob/structures/captured_nuke.dm b/code/modules/antagonists/blob/structures/captured_nuke.dm index 123c9b88467..a723d0dd0dd 100644 --- a/code/modules/antagonists/blob/structures/captured_nuke.dm +++ b/code/modules/antagonists/blob/structures/captured_nuke.dm @@ -1,7 +1,7 @@ /obj/structure/blob/special/captured_nuke //alternative to blob just straight up destroying nukes name = "blob captured nuke" icon_state = "blob" - desc = "A Nuclear Warhead tangled in blob tendrils pulsating with a horrific green glow." + desc = "Ядерная боеголовка спуталась в щупальцах блоба, пульсирующих ужасающим зеленым свечением." max_integrity = BLOB_CAP_NUKE_MAX_HP health_regen = BLOB_CAP_NUKE_HP_REGEN point_return = BLOB_REFUND_CAP_NUKE_COST diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index 468e90bb843..d47a8d45030 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -2,7 +2,7 @@ name = "blob core" icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" - desc = "A huge, pulsating yellow mass." + desc = "Огромная пульсирующая желтая масса." max_integrity = BLOB_CORE_MAX_HP armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 90) explosion_block = 6 @@ -50,10 +50,14 @@ SSticker?.mode?.blob_died() STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) + for(var/atom/movable/atom as anything in contents) + if (atom && !QDELETED(atom) && istype(atom)) + atom.forceMove(get_turf(src)) + atom.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), 6, 5, src, TRUE, FALSE, null, 3) return ..() /obj/structure/blob/special/core/scannerreport() - return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." + return "Управляет расширением блоба, постепенно расширяется и поддерживает близлежащие споры и блобернаутов." /obj/structure/blob/special/core/update_overlays() . = ..() @@ -117,9 +121,9 @@ if(!new_overmind) // sendit if(is_offspring) - candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob offspring?", ROLE_BLOB, TRUE, source = src) + candidates = SSghost_spawns.poll_candidates("Вы хотите поиграть за потомка блоба?", ROLE_BLOB, TRUE, source = src) else - candidates = SSghost_spawns.poll_candidates("Do you want to play as a blob?", ROLE_BLOB, TRUE, source = src) + candidates = SSghost_spawns.poll_candidates("Вы хотите поиграть за блоба?", ROLE_BLOB, TRUE, source = src) if(length(candidates)) C = pick(candidates) diff --git a/code/modules/antagonists/blob/structures/factory.dm b/code/modules/antagonists/blob/structures/factory.dm index 375a2e19d10..28f4c11c418 100644 --- a/code/modules/antagonists/blob/structures/factory.dm +++ b/code/modules/antagonists/blob/structures/factory.dm @@ -2,7 +2,7 @@ name = "factory blob" icon = 'icons/mob/blob.dmi' icon_state = "blob_factory" - desc = "A thick spire of tendrils." + desc = "Толстый шпиль щупалец." max_integrity = BLOB_FACTORY_MAX_HP health_regen = BLOB_FACTORY_HP_REGEN point_return = BLOB_REFUND_FACTORY_COST @@ -22,8 +22,8 @@ /obj/structure/blob/special/factory/scannerreport() if(blobbernaut) - return "It is currently sustaining a blobbernaut, making it fragile and unable to produce blob spores." - return "Will produce a blob spore every few seconds." + return "В настоящее время он поддерживает блобернаута, что делает ее хрупкой и неспособной производить споры." + return "Каждые несколько секунд производит споры." /obj/structure/blob/special/factory/link_to_overmind(mob/camera/blob/owner_overmind) . = ..() @@ -85,7 +85,7 @@ return modify_max_integrity(initial(max_integrity) * 0.25) //factories that produced a blobbernaut have much lower health - visible_message(span_boldwarning("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!")) + visible_message(span_boldwarning("Блобернаут [pick("разрывает", "надрывает", "рвет в клочья")] все на своем пути из фабрики!")) playsound(loc, 'sound/effects/splat.ogg', 50, TRUE) blobbernaut = new_naut diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm index 1403bae6c3a..2173b212114 100644 --- a/code/modules/antagonists/blob/structures/node.dm +++ b/code/modules/antagonists/blob/structures/node.dm @@ -2,7 +2,7 @@ name = "blob node" icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" - desc = "A large, pulsating yellow mass." + desc = "Большая пульсирующая желтая масса." max_integrity = BLOB_NODE_MAX_HP health_regen = BLOB_NODE_HP_REGEN armor = list("melee" = 0, "bullet" = 0, "laser" = 25, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) @@ -20,7 +20,7 @@ /obj/structure/blob/special/node/scannerreport() - return "Gradually expands and sustains nearby blob spores and blobbernauts." + return "Постепенно расширяется и поддерживает близлежащие споры и блобернаутов." /obj/structure/blob/special/node/update_icon() . = ..() diff --git a/code/modules/antagonists/blob/structures/normal.dm b/code/modules/antagonists/blob/structures/normal.dm index 50cbb13631c..f3e2e53d091 100644 --- a/code/modules/antagonists/blob/structures/normal.dm +++ b/code/modules/antagonists/blob/structures/normal.dm @@ -14,7 +14,7 @@ /obj/structure/blob/normal/scannerreport() if(compromised_integrity) - return "Currently weak to brute damage." + return "В настоящее время слаб к урону травмами." return "N/A" /obj/structure/blob/normal/update_name() @@ -24,11 +24,11 @@ /obj/structure/blob/normal/update_desc() . = ..() if(compromised_integrity) - desc = "A thin lattice of slightly twitching tendrils." + desc = "Тонкая решетка слегка подергивающихся щупалец." else if(overmind) - desc = "A thick wall of writhing tendrils." + desc = "Толстая стена извивающихся щупалец." else - desc = "A thick wall of lifeless tendrils." + desc = "Толстая стена извивающихся щупалец." /obj/structure/blob/normal/update_icon_state() icon_state = "blob[(compromised_integrity) ? "_damaged" : null]" diff --git a/code/modules/antagonists/blob/structures/resource.dm b/code/modules/antagonists/blob/structures/resource.dm index 127c7591645..fabfd35e007 100644 --- a/code/modules/antagonists/blob/structures/resource.dm +++ b/code/modules/antagonists/blob/structures/resource.dm @@ -2,7 +2,7 @@ name = "resource blob" icon = 'icons/mob/blob.dmi' icon_state = "blob_resource" - desc = "A thin spire of slightly swaying tendrils." + desc = "Тонкий шпиль слегка покачивающихся щупалец." max_integrity = BLOB_RESOURCE_MAX_HP point_return = BLOB_REFUND_RESOURCE_COST resistance_flags = LAVA_PROOF @@ -11,7 +11,7 @@ var/point_rate = BLOB_RESOURCE_POINT_RATE /obj/structure/blob/special/resource/scannerreport() - return "Gradually supplies the blob with resources, increasing the rate of expansion." + return "Постепенно снабжает блоба ресурсами, увеличивая скорость расширения." /obj/structure/blob/special/resource/link_to_overmind(mob/camera/blob/owner_overmind) . = ..() diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm index 550555e3244..a41efe51c48 100644 --- a/code/modules/antagonists/blob/structures/shield.dm +++ b/code/modules/antagonists/blob/structures/shield.dm @@ -2,8 +2,8 @@ name = "strong blob" icon = 'icons/mob/blob.dmi' icon_state = "blob_shield" - desc = "A solid wall of slightly twitching tendrils." - var/damaged_desc = "A wall of twitching tendrils." + desc = "Сплошная стена слегка подергивающихся щупалец." + var/damaged_desc = "Стена дергающихся щупалец." max_integrity = BLOB_STRONG_MAX_HP health_regen = BLOB_STRONG_HP_REGEN brute_resist = BLOB_STRONG_BRUTE_RESIST diff --git a/code/modules/antagonists/blob/structures/special.dm b/code/modules/antagonists/blob/structures/special.dm index 2ba83b7672f..e325cbd5b20 100644 --- a/code/modules/antagonists/blob/structures/special.dm +++ b/code/modules/antagonists/blob/structures/special.dm @@ -15,13 +15,26 @@ /obj/structure/blob/special/proc/reinforce_area(seconds_per_tick) // Used by cores and nodes to upgrade their surroundings if(strong_reinforce_range) - for(var/obj/structure/blob/normal/B in range(strong_reinforce_range, src)) - if(SPT_PROB(BLOB_REINFORCE_CHANCE, seconds_per_tick)) - B.change_to(/obj/structure/blob/shield/core, overmind) + if(is_there_multiz()) + for(var/obj/structure/blob/normal/B in urange_multiz(strong_reinforce_range, src)) + reinforce_tile(B, /obj/structure/blob/shield/core, seconds_per_tick) + else + for(var/obj/structure/blob/normal/B in range(strong_reinforce_range, src)) + reinforce_tile(B, /obj/structure/blob/shield/core, seconds_per_tick) + if(reflector_reinforce_range) - for(var/obj/structure/blob/shield/B in range(reflector_reinforce_range, src)) - if(SPT_PROB(BLOB_REINFORCE_CHANCE, seconds_per_tick)) - B.change_to(/obj/structure/blob/shield/reflective/core, overmind) + if(is_there_multiz()) + for(var/obj/structure/blob/shield/B in urange_multiz(reflector_reinforce_range, src)) + reinforce_tile(B, /obj/structure/blob/shield/reflective/core, seconds_per_tick) + else + for(var/obj/structure/blob/shield/B in range(reflector_reinforce_range, src)) + reinforce_tile(B, /obj/structure/blob/shield/reflective/core, seconds_per_tick) + + +/obj/structure/blob/special/proc/reinforce_tile(obj/structure/blob/B, type, seconds_per_tick) + if(SPT_PROB(BLOB_REINFORCE_CHANCE, seconds_per_tick)) + B.change_to(type, overmind, B.point_return) + /obj/structure/blob/special/proc/pulse_area(mob/camera/blob/pulsing_overmind, claim_range = 10, pulse_range = 3, expand_range = 2) if(QDELETED(pulsing_overmind)) @@ -31,14 +44,18 @@ if(prob(70*(1/BLOB_EXPAND_CHANCE_MULTIPLIER)) && expand()) expanded = TRUE var/list/blobs_to_affect = list() - for(var/obj/structure/blob/B in urange(claim_range, src, 1)) - blobs_to_affect += B + if(is_there_multiz()) + for(var/obj/structure/blob/blob in urange_multiz(claim_range, src, 1)) + blobs_to_affect += blob + else + for(var/obj/structure/blob/B in urange(claim_range, src, 1)) + blobs_to_affect += B shuffle_inplace(blobs_to_affect) for(var/L in blobs_to_affect) var/obj/structure/blob/B = L if(!is_location_within_transition_boundaries(get_turf(B))) continue - if(!B.overmind && prob(30)) + if(!B.overmind && overmind && prob(30)) B.link_to_overmind(pulsing_overmind) //reclaim unclaimed, non-core blobs. B.update_blob() var/distance = get_dist(get_turf(src), get_turf(B)) diff --git a/code/modules/antagonists/blob/structures/storage.dm b/code/modules/antagonists/blob/structures/storage.dm index 76e1b7c7e9b..83b46236417 100644 --- a/code/modules/antagonists/blob/structures/storage.dm +++ b/code/modules/antagonists/blob/structures/storage.dm @@ -2,6 +2,7 @@ name = "storage blob" icon = 'icons/mob/blob.dmi' icon_state = "blob_resource" + desc = "Тонкий шпиль из плотно сплетенных щупалец." max_integrity = BLOB_STORAGE_MAX_HP fire_resist = BLOB_STORAGE_FIRE_RESIST point_return = BLOB_REFUND_STORAGE_COST diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index baac7eb2ac8..c6c0b535e1d 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -22,7 +22,7 @@ * updates the Z level for dead players * If they don't have a new z, we'll keep the old one, preventing bugs from ghosting and re-entering, among others */ -/mob/dead/proc/update_z(new_z) +/mob/dead/update_z(new_z) if(registered_z == new_z) return if(registered_z) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3f08ff83a94..c7c062c702e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -767,7 +767,8 @@ if(dna.species.update_health_hud()) return else - + if(SEND_SIGNAL(src, COMSIG_HUMAN_UPDATING_HEALTH_HUD, health) & COMPONENT_OVERRIDE_HEALTH_HUD) + return var/shock_reduction = 0 if(HAS_TRAIT(src, TRAIT_NO_PAIN_HUD)) shock_reduction = INFINITY diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index f205344f1b0..51d15c7ad56 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -4,15 +4,7 @@ SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds, times_fired) - if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything - var/turf/T = get_turf(src) - if(client && registered_z != T.z) - message_admins("[src] [ADMIN_FLW(src, "FLW")] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z]. If you could ask them how that happened and notify the coders, it would be appreciated.") - add_misc_logs(src, "Z-TRACKING: [src] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z].") - update_z(T.z) - else if (!client && registered_z) - add_misc_logs(src, "Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.") - update_z(null) + track_z() if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return FALSE @@ -230,13 +222,13 @@ severity = 6 livingdoll.icon_state = "living[severity]" if(!livingdoll.filtered) - livingdoll.filtered = TRUE var/icon/mob_mask = icon(icon, icon_state) if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size) var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite" mob_mask = icon('icons/mob/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask)) livingdoll.add_filter("inset_drop_shadow", 2, drop_shadow_filter(size = -1)) + livingdoll.filtered = TRUE if(severity > 0) overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) else diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fdccc42a358..792360172b2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1632,35 +1632,6 @@ target.devoured(grabber) -/mob/living/proc/update_z(new_z) // 1+ to register, null to unregister - if(registered_z == new_z) - return - if(registered_z) - SSmobs.clients_by_zlevel[registered_z] -= src - if(isnull(client)) - registered_z = null - return - if(!new_z) - registered_z = new_z - return - //Figure out how many clients were here before - var/oldlen = SSmobs.clients_by_zlevel[new_z].len - SSmobs.clients_by_zlevel[new_z] += src - for(var/index in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 - var/mob/living/simple_animal/animal = SSidlenpcpool.idle_mobs_by_zlevel[new_z][index] - if(animal) - if(!oldlen) - //Start AI idle if nobody else was on this z level before (mobs will switch off when this is the case) - animal.toggle_ai(AI_IDLE) - //If they are also within a close distance ask the AI if it wants to wake up - if(get_dist(get_turf(src), get_turf(animal)) < MAX_SIMPLEMOB_WAKEUP_RANGE) - animal.consider_wakeup() // Ask the mob if it wants to turn on it's AI - //They should clean up in destroy, but often don't so we get them here - else - SSidlenpcpool.idle_mobs_by_zlevel[new_z] -= animal - registered_z = new_z - - /mob/living/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = TRUE) ..() update_z(new_turf?.z) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 035cde36c50..60f9252cc82 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -85,6 +85,13 @@ ) return shock_damage +/mob/living/blob_vore_act(obj/structure/blob/special/core/voring_core) + . = ..() + if(HAS_TRAIT(src, TRAIT_BLOB_ZOMBIFIED) || QDELETED(src)) + return FALSE + if(stat == DEAD) + forceMove(voring_core) + /mob/living/emp_act(severity) ..() @@ -271,6 +278,7 @@ is_wet = TRUE visible_message(span_warning("[src.declent_ru(NOMINATIVE)] намока[pluralize_ru(src.gender,"ет","ют")]!"), \ span_userdanger("[pluralize_ru(src.gender,"Ты намокаешь","Вы намокаете")]!")) + AddComponent(/datum/component/slippery, 5 SECONDS) update_wet() SEND_SIGNAL(src, COMSIG_LIVING_WET) return TRUE @@ -278,6 +286,7 @@ /mob/living/proc/DryMob() if(is_wet) + qdel(GetComponent(/datum/component/slippery)) is_wet = FALSE wet_stacks = 0 update_wet() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 73eee1a1e8e..4b70e4c06c7 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -687,6 +687,11 @@ /mob/living/simple_animal/Login() ..() SSmove_manager.stop_looping(src) // if mob is moving under ai control, then stop AI movement + toggle_ai(AI_OFF) + +/mob/living/simple_animal/Logout() + . = ..() + toggle_ai(AI_ON) /mob/living/simple_animal/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 813c0221ef2..9d395c5ad58 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -591,7 +591,7 @@ /mob/proc/get_status_tab_items() SHOULD_CALL_PARENT(TRUE) - . = list(" ") + . = list() SEND_SIGNAL(src, COMSIG_MOB_GET_STATUS_TAB_ITEMS, .) return . @@ -1162,3 +1162,43 @@ GLOBAL_LIST_INIT(holy_areas, typecacheof(list( if(update) update_actionspeed() +/mob/proc/update_z(new_z) // 1+ to register, null to unregister + if(registered_z == new_z) + return + if(registered_z) + SSmobs.clients_by_zlevel[registered_z] -= src + if(isnull(client)) + registered_z = null + return + if(!new_z) + registered_z = new_z + return + //Figure out how many clients were here before + var/oldlen = SSmobs.clients_by_zlevel[new_z].len + SSmobs.clients_by_zlevel[new_z] += src + for(var/index in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 + var/mob/living/simple_animal/animal = SSidlenpcpool.idle_mobs_by_zlevel[new_z][index] + if(animal) + if(!oldlen) + //Start AI idle if nobody else was on this z level before (mobs will switch off when this is the case) + animal.toggle_ai(AI_IDLE) + //If they are also within a close distance ask the AI if it wants to wake up + if(get_dist(get_turf(src), get_turf(animal)) < MAX_SIMPLEMOB_WAKEUP_RANGE) + animal.consider_wakeup() // Ask the mob if it wants to turn on it's AI + //They should clean up in destroy, but often don't so we get them here + else + SSidlenpcpool.idle_mobs_by_zlevel[new_z] -= animal + registered_z = new_z + +/mob/proc/track_z() + if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything + var/turf/T = get_turf(src) + if(client && registered_z != T.z) + message_admins("[src] [ADMIN_FLW(src, "FLW")] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z]. If you could ask them how that happened and notify the coders, it would be appreciated.") + add_misc_logs(src, "Z-TRACKING: [src] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z].") + update_z(T.z) + else if (!client && registered_z) + add_misc_logs(src, "Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.") + update_z(null) + + diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index df0112bc7ed..b7b8bedf1cd 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -100,6 +100,10 @@ name = "oil slime extract" icon_state = "oil slime extract" +/obj/item/slime_extract/oil/blob_vore_act(obj/structure/blob/special/core/voring_core) + obj_destruction(MELEE) + + /obj/item/slime_extract/adamantine name = "adamantine slime extract" icon_state = "adamantine slime extract" diff --git a/paradise.dme b/paradise.dme index 2b84dec9a0d..1035b6eaa10 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1595,6 +1595,7 @@ #include "code\modules\antagonists\blob\blobstrains\_blobstrain.dm" #include "code\modules\antagonists\blob\blobstrains\_reagent.dm" #include "code\modules\antagonists\blob\blobstrains\blazing_oil.dm" +#include "code\modules\antagonists\blob\blobstrains\blob_sorium.dm" #include "code\modules\antagonists\blob\blobstrains\cryogenic_poison.dm" #include "code\modules\antagonists\blob\blobstrains\debris_devourer.dm" #include "code\modules\antagonists\blob\blobstrains\distributed_neurons.dm" @@ -1604,6 +1605,7 @@ #include "code\modules\antagonists\blob\blobstrains\multiplex.dm" #include "code\modules\antagonists\blob\blobstrains\networked_fibers.dm" #include "code\modules\antagonists\blob\blobstrains\pressurized_slime.dm" +#include "code\modules\antagonists\blob\blobstrains\radioactive_gel.dm" #include "code\modules\antagonists\blob\blobstrains\reactive_spines.dm" #include "code\modules\antagonists\blob\blobstrains\regenerative_materia.dm" #include "code\modules\antagonists\blob\blobstrains\replicating_foam.dm" From 3df80cb2df9883679a30bbcdd9a25b5d0e538a9d Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:43:49 +0500 Subject: [PATCH 04/11] new blob storm effect + clusterbang nerf --- .../weather/weather_types/blob_storm.dm | 2 +- .../items/weapons/grenades/clusterbuster.dm | 4 ++-- .../antagonists/blob/blob_minions/blob_mob.dm | 4 ++++ .../antagonists/blob/structures/_blob.dm | 5 ++++- icons/effects/weather_effects.dmi | Bin 27717 -> 35300 bytes 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/datums/weather/weather_types/blob_storm.dm b/code/datums/weather/weather_types/blob_storm.dm index 31321e210f3..f406ed3c8f6 100644 --- a/code/datums/weather/weather_types/blob_storm.dm +++ b/code/datums/weather/weather_types/blob_storm.dm @@ -7,7 +7,7 @@ telegraph_message = "Вы замечаете мелкие частицы в воздухе" weather_message = "Вы ощущаете поток неизвестных мелких частиц, которые проникают сквозь любую одежду. Спасти вас может только чудо." - weather_overlay = "ash_storm" + weather_overlay = "blob_storm" weather_duration_lower = 30 SECONDS weather_duration_upper = 1 MINUTES weather_color = COLOR_PALE_GREEN_GRAY diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 00d901d9de8..a7650c2fb22 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -1,5 +1,5 @@ -#define CLUSTERBUSTER_PAYLOAD_POWER 0.9 -#define SEGMENTATION_PAYLOAD_DECREASE 1.5 +#define CLUSTERBUSTER_PAYLOAD_POWER 0.8 +#define SEGMENTATION_PAYLOAD_DECREASE 1.8 //////////////////// //Clusterbang //////////////////// diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm index 524b6587dbc..f1cb907c50d 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_mob.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -85,3 +85,7 @@ /mob/living/simple_animal/hostile/blob_minion/proc/on_factory_destroyed() SIGNAL_HANDLER to_chat(src, span_userdanger("Your factory was destroyed! You feel yourself dying!")) + + +/mob/living/simple_animal/hostile/blob_minion/can_be_blob() + return FALSE diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 1ad42c45d93..2568444e4c6 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -195,7 +195,10 @@ if(!A.can_blob_attack()) continue if(isliving(A) && overmind && !controller) // Make sure to inject strain-reagents with automatic attacks when needed. - overmind.blobstrain.attack_living(A) + var/mob/living/mob = A + if(ROLE_BLOB in mob.faction) //no friendly fire + continue + overmind.blobstrain.attack_living(mob) continue // Don't smack them twice though A.blob_act(src) //also hit everything in the turf diff --git a/icons/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index 00083c464a24f170a794728287929a77d2b85471..7cc1ce758a3deb1041afb62e06cce9b771f53227 100644 GIT binary patch delta 14481 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 delta 6810 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 From 1dd457e44c5b9c7e6730a06d06daef153e958ca2 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:53:13 +0500 Subject: [PATCH 05/11] fixes --- code/__DEFINES/blob.dm | 4 +++- code/_onclick/hud/blob_overmind.dm | 9 +++------ code/game/gamemodes/blob/blob.dm | 6 ++++-- .../effect_system/fluid_spread/effects_smoke.dm | 9 +++++---- .../antagonists/blob/blob_minions/blob_mob.dm | 3 +++ .../antagonists/blob/blob_minions/blob_spore.dm | 2 +- .../antagonists/blob/blob_minions/blob_zombie.dm | 2 +- .../antagonists/blob/blob_minions/blobbernaut.dm | 6 +----- .../antagonists/blob/blobstrains/_reagent.dm | 16 +++++++++++++--- .../blob/blobstrains/radioactive_gel.dm | 2 +- code/modules/antagonists/blob/overmind.dm | 3 +++ code/modules/reagents/chemistry/holder.dm | 2 +- code/modules/reagents/chemistry/reagents.dm | 2 ++ 13 files changed, 41 insertions(+), 25 deletions(-) diff --git a/code/__DEFINES/blob.dm b/code/__DEFINES/blob.dm index 26959191424..58f4fc474f0 100644 --- a/code/__DEFINES/blob.dm +++ b/code/__DEFINES/blob.dm @@ -77,7 +77,9 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_EXPAND_CHANCE_MULTIPLIER 1 // Increase this value to make blobs naturally expand faster #define BLOB_REINFORCE_CHANCE 2.5 // The seconds_per_tick chance for cores/nodes to reinforce their surroundings #define BLOB_REAGENTATK_VOL 25 // Amount of strain-reagents that get injected when the blob attacks: main source of blob damage +#define BLOB_REAGENSPORE_VOL 10 #define BLOB_BONUS_POINTS 60 +#define BLOB_REAGENTS_METABOLISM 1 // Structure properties @@ -111,7 +113,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_RESOURCE_MIN_DISTANCE 4 // Minimum distance between resource blobs #define BLOB_RESOURCE_GATHER_DELAY (4 SECONDS) // Gather points when pulsed outside this interval #define BLOB_RESOURCE_GATHER_ADDED_DELAY (0.25 SECONDS) // Every additional resource blob adds this amount to the gather delay -#define BLOB_RESOURCE_POINT_RATE 2 +#define BLOB_RESOURCE_POINT_RATE 1 #define BLOB_REGULAR_MAX_HP 25 #define BLOB_REGULAR_HP_INIT 21 // The starting HP of a normal blob tile diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 003172a27dc..7cd2290c683 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -128,12 +128,9 @@ /atom/movable/screen/blob/ReadaptStrain/MouseEntered(location,control,params) if(hud && hud.mymob && isovermind(hud.mymob)) var/mob/camera/blob/B = hud.mymob - if(B.free_strain_rerolls) - name = "[initial(name)] (FREE)" - desc = "Случайно меняет ваш штамм бесплатно." - else - name = "[initial(name)] ([BLOB_POWER_REROLL_COST])" - desc = "Позволяет вам выбрать новый штамм из [BLOB_POWER_REROLL_CHOICES] случайных вариантов за [BLOB_POWER_REROLL_COST] ресурсов." + var/cost = (B.free_strain_rerolls)? "FREE" : BLOB_POWER_REROLL_COST + name = "[initial(name)] ([cost])" + desc = "Позволяет вам выбрать новый штамм из [BLOB_POWER_REROLL_CHOICES] случайных вариантов за [cost] ресурсов." ..() /atom/movable/screen/blob/ReadaptStrain/Click() diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index c6edcea67f2..77ed109a296 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -221,14 +221,16 @@ if(SSweather) blob_stage = BLOB_STAGE_STORM SSweather.run_weather(/datum/weather/blob_storm) + show_warning("Вы набрали критическую массу и ощущаете практически бесконечный приток ресурсов.") + is_blob_infinity_points = TRUE addtimer(CALLBACK(src, PROC_REF(process_blob_stages)), STAGES_CALLBACK_TIME) /datum/game_mode/proc/show_warning(message) - for(var/datum/mind/blob in blobs["infected"]) + for(var/datum/mind/blob in (blobs["infected"] + blobs["offsprings"])) if(blob.current.stat != DEAD) - to_chat(blob.current, "[message]") + to_chat(blob.current, span_warning("[message]")) /datum/game_mode/proc/burst_blobs() diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index 13278c683ea..5501707139d 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -389,15 +389,16 @@ return TRUE /// Helper to quickly create a cloud of reagent smoke -/proc/do_chem_smoke(range = 0, amount = DIAMOND_AREA(range), atom/holder = null, location = null, reagent_type = /datum/reagent/water, reagent_volume = 10, log = FALSE) +/proc/do_chem_smoke(range = 0, amount = DIAMOND_AREA(range), atom/holder = null, location = null, reagent_type = /datum/reagent/water, smoke_type = /datum/effect_system/fluid_spread/smoke/chem, reagent_volume = 10, log = FALSE) var/datum/reagents/smoke_reagents = new/datum/reagents(reagent_volume) smoke_reagents.add_reagent(reagent_type, reagent_volume) - var/datum/effect_system/fluid_spread/smoke/chem/smoke = new + var/datum/effect_system/fluid_spread/smoke/chem/smoke = new smoke_type smoke.attach(location) smoke.set_up(amount = amount, holder = holder, location = location, carry = smoke_reagents, silent = TRUE) smoke.start(log = log) + /// A factory which produces clouds of chemical bearing smoke. /datum/effect_system/fluid_spread/smoke/chem /// Evil evil hack so we have something to "hold" our reagents @@ -453,9 +454,9 @@ * A version of chemical smoke with a very short lifespan. */ /obj/effect/particle_effect/fluid/smoke/chem/quick - lifetime = 4 SECONDS + lifetime = 6 SECONDS opacity = FALSE - alpha = 100 + alpha = 150 /datum/effect_system/fluid_spread/smoke/chem/quick effect_type = /obj/effect/particle_effect/fluid/smoke/chem/quick diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm index f1cb907c50d..8187c670175 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_mob.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -24,6 +24,8 @@ tts_seed = "Earth" tts_atom_say_effect = SOUND_EFFECT_NONE a_intent = INTENT_HARM + /// Is blob mob linked to factory + var/factory_linked = FALSE /mob/living/simple_animal/hostile/blob_minion/ComponentInitialize() @@ -73,6 +75,7 @@ /// Associates this mob with a specific blob factory node /mob/living/simple_animal/hostile/blob_minion/proc/link_to_factory(obj/structure/blob/special/factory/factory) + factory_linked = TRUE RegisterSignal(factory, COMSIG_QDELETING, PROC_REF(on_factory_destroyed)) /mob/living/simple_animal/hostile/blob_minion/attack_animal(mob/living/simple_animal/M) diff --git a/code/modules/antagonists/blob/blob_minions/blob_spore.dm b/code/modules/antagonists/blob/blob_minions/blob_spore.dm index 7b0a5f567fb..59ad29b9560 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_spore.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_spore.dm @@ -47,7 +47,7 @@ /// Create an explosion of spores on death /mob/living/simple_animal/hostile/blob_minion/spore/proc/death_burst() - do_chem_smoke(range = death_cloud_size, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) + do_blob_chem_smoke(range = death_cloud_size, reagent_volume = BLOB_REAGENSPORE_VOL, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) /mob/living/simple_animal/hostile/blob_minion/spore/CanAllowThrough(atom/movable/mover, border_dir) . = ..() diff --git a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm index 3312b004e02..254a5553b5e 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm @@ -72,7 +72,7 @@ /// Create an explosion of spores on death /mob/living/simple_animal/hostile/blob_minion/zombie/proc/death_burst() - do_chem_smoke(range = 0, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) + do_blob_chem_smoke(range = 1, holder = src, reagent_volume = BLOB_REAGENSPORE_VOL, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) /// Store a body so that we can drop it on death /mob/living/simple_animal/hostile/blob_minion/zombie/proc/consume_corpse(mob/living/carbon/human/new_corpse) diff --git a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm index de48c634d57..b9787042082 100644 --- a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm +++ b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm @@ -31,10 +31,6 @@ /mob/living/simple_animal/hostile/blob_minion/blobbernaut/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NEGATES_GRAVITY, INNATE_TRAIT) - - -/mob/living/simple_animal/hostile/blob_minion/blobbernaut/Login() - . = ..() update_health_hud() @@ -70,7 +66,7 @@ damage_sources++ else var/particle_colour = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_BLACK - + if (locate(/obj/structure/blob/special/core) in blobs_in_area) heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_CORE * seconds_per_tick) var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 2092363f7ab..f86524bf646 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -19,9 +19,17 @@ var/mob_protection = living_attacking.getarmor(null, BIO) * 0.01 reagent.reaction_mob(living_attacking, REAGENT_TOUCH, BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL + blobbernaut_reagentatk_bonus, FALSE, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. -/datum/blobstrain/reagent/on_sporedeath(mob/living/simple_animal/hostile/spore) - var/burst_range = (spore.type == /mob/living/simple_animal/hostile/blob_minion/spore) ? 1 : 0 - do_chem_smoke(range = burst_range, holder = spore, location = get_turf(spore), reagent_type = reagent.type) +/datum/blobstrain/reagent/on_sporedeath(mob/living/simple_animal/hostile/blob_minion/spore/spore) + var/burst_range = (istype(spore)) ? spore.death_cloud_size : 1 + do_blob_chem_smoke(range = burst_range, holder = spore, reagent_volume = BLOB_REAGENSPORE_VOL, location = get_turf(spore), reagent_type = reagent.type) + + +/proc/do_blob_chem_smoke(range = 0, amount = DIAMOND_AREA(range), atom/holder = null, location = null, reagent_type = /datum/reagent/water, reagent_volume = 10, log = FALSE) + var/smoke_type = /datum/effect_system/fluid_spread/smoke/chem/quick + var/lifetime = /obj/effect/particle_effect/fluid/smoke/chem/quick::lifetime + var/volume = reagent_volume * (lifetime /(1 SECONDS)) + do_chem_smoke(range, amount, holder, location, reagent_type, smoke_type, reagent_volume = volume, log = log) + // These can only be applied by blobs. They are what (reagent) blobs are made out of. /datum/reagent/blob @@ -30,6 +38,8 @@ color = COLOR_WHITE taste_description = "Это баг" penetrates_skin = TRUE + ignore_clothes = TRUE + metabolization_rate = BLOB_REAGENTS_METABOLISM /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. /datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) diff --git a/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm b/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm index 86cd7593087..8a10420836a 100644 --- a/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm +++ b/code/modules/antagonists/blob/blobstrains/radioactive_gel.dm @@ -15,7 +15,7 @@ /datum/blobstrain/reagent/radioactive_gel/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if((damage_flag == ENERGY || damage_flag == LASER) && prob(damage)) - for(var/mob/living/l in range(6, B)) + for(var/mob/living/l in range(5, B)) l.apply_effect(damage, IRRADIATE) return ..() diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index c39b2b32388..f1703934fa3 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -77,6 +77,9 @@ GLOBAL_LIST_EMPTY(overminds) resource_blobs = null factory_blobs = null node_blobs = null + for(var/mob/living/simple_animal/hostile/blob_minion/mob as anything in blob_mobs) + if(istype(mob) && !mob.factory_linked) + mob.death() blob_mobs = null GLOB.overminds -= src QDEL_LIST_ASSOC_VAL(strain_choices) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 3fd5b46c338..f3ef7035036 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -605,7 +605,7 @@ var/mob/living/L = A var/protection = 0 - if(method == REAGENT_TOUCH && !ignore_protection) + if(method == REAGENT_TOUCH && !ignore_protection && !R.ignore_clothes) if(def_zone) var/mob/living/carbon/human/H = L if(istype(H)) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 49d1a74bd46..02ebb0fb280 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -13,6 +13,8 @@ var/heart_rate_decrease = 0 var/heart_rate_stop = 0 var/penetrates_skin = FALSE //Whether or not a reagent penetrates the skin + /// Whether or not a reagent ignore clothes + var/ignore_clothes = FALSE //Processing flags, defines the type of mobs the reagent will affect //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths var/process_flags = ORGANIC From 8d8f82f8bd547321cfe14b6b876deab8c5b19d62 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sat, 2 Nov 2024 17:18:52 +0500 Subject: [PATCH 06/11] Text fixes + nukecodes treshhold + blobstorm color --- code/__DEFINES/blob.dm | 3 ++- code/datums/weather/weather_types/blob_storm.dm | 14 ++++++++++++++ code/game/gamemodes/blob/blob.dm | 2 +- code/game/gamemodes/blob/blob_finish.dm | 2 +- .../antagonists/blob/blobstrains/blazing_oil.dm | 2 +- .../blob/blobstrains/debris_devourer.dm | 2 +- .../blob/blobstrains/distributed_neurons.dm | 8 ++++---- .../blob/blobstrains/electromagnetic_web.dm | 6 +++--- .../blob/blobstrains/networked_fibers.dm | 8 ++++---- .../blob/blobstrains/pressurized_slime.dm | 2 +- .../blob/blobstrains/reactive_spines.dm | 2 +- .../blob/blobstrains/regenerative_materia.dm | 4 ++-- .../blob/blobstrains/replicating_foam.dm | 4 ++-- .../blob/blobstrains/shifting_fragments.dm | 6 +++--- .../antagonists/changeling/powers/revive.dm | 3 +++ 15 files changed, 43 insertions(+), 25 deletions(-) diff --git a/code/__DEFINES/blob.dm b/code/__DEFINES/blob.dm index 58f4fc474f0..55947bf38e2 100644 --- a/code/__DEFINES/blob.dm +++ b/code/__DEFINES/blob.dm @@ -13,6 +13,7 @@ #define THIRD_STAGE_COEF 0.75 #define FIRST_STAGE_THRESHOLD 300 #define SECOND_STAGE_THRESHOLD 400 +#define THIRD_STAGE_DELTA_THRESHOLD 250 #define BLOB_STAGE_NONE -1 #define BLOB_STAGE_ZERO 0 #define BLOB_STAGE_FIRST 1 @@ -70,7 +71,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_BASE_POINT_RATE 2 // Base amount of points per process() #define BLOB_EXPAND_COST 4 // Price to expand onto a new tile -#define BLOB_ZOMBIFICATION_COST 5 +#define BLOB_ZOMBIFICATION_COST 5 #define BLOB_ATTACK_REFUND 2 // Points 'refunded' when the expand attempt actually attacks something instead #define BLOB_BRUTE_RESIST 0.5 // Brute damage taken gets multiplied by this value #define BLOB_FIRE_RESIST 1 // Burn damage taken gets multiplied by this value diff --git a/code/datums/weather/weather_types/blob_storm.dm b/code/datums/weather/weather_types/blob_storm.dm index f406ed3c8f6..a4d8d06f640 100644 --- a/code/datums/weather/weather_types/blob_storm.dm +++ b/code/datums/weather/weather_types/blob_storm.dm @@ -26,6 +26,20 @@ /datum/weather/blob_storm/telegraph() + var/list/blobs = SSticker?.mode?.blobs["infected"] + SSticker?.mode?.blobs["offsprings"] + var/color + var/mass = 0 + for(var/datum/mind/blob in blobs) + var/mob/camera/blob/overmind = blob.current + if(QDELETED(overmind) || !istype(overmind) || overmind.stat == DEAD) + continue + if(overmind.blobs_legit.len > mass) + mass = overmind.blobs_legit.len + color = overmind.blobstrain.color + + if(color) + weather_color = color + ..() status_alarm(TRUE) GLOB.event_announcement.Announce("Биологической угроза пятого уровня достигла критической массы на борту [station_name()]. Выброс спор и массовое заражение неизбежно.", diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 77ed109a296..e2c02546831 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -213,7 +213,7 @@ if(!off_auto_gamma) addtimer(CALLBACK(GLOBAL_PROC, /proc/set_security_level, SEC_LEVEL_GAMMA), TIME_TO_SWITCH_CODE) - if(blob_stage == BLOB_STAGE_SECOND && legit_blobs.len >= THIRD_STAGE_COEF * blob_win_count) + if(blob_stage == BLOB_STAGE_SECOND && legit_blobs.len >= THIRD_STAGE_COEF * blob_win_count && (blob_win_count - legit_blobs.len) <= THIRD_STAGE_DELTA_THRESHOLD) blob_stage = BLOB_STAGE_THIRD send_intercept(BLOB_SECOND_REPORT) diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm index d707a78b2a1..f674ccd52c7 100644 --- a/code/game/gamemodes/blob/blob_finish.dm +++ b/code/game/gamemodes/blob/blob_finish.dm @@ -8,7 +8,7 @@ return update_blob_objective() GLOB.event_announcement.Announce("Объект потерян. Причина: распостранение 5-ой биоугрозы. Взведение устройства самоуничтожения персоналом или внешними силами в данный момент не представляется возможным из-за высокого уровня заражения. Решение: оставить станцию в изоляции до принятия окончательных мер противодействия.", - "Отчет об объекте [station_name()]") + "Отчет об объекте [station_name()]") blob_stage = (delay_blob_end)? BLOB_STAGE_POST_END : BLOB_STAGE_END if(blob_stage == BLOB_STAGE_END) end_game() diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index 6aac9051dad..060cf816855 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -2,7 +2,7 @@ //sets you on fire, does burn damage, explodes into flame when burnt, weak to water /datum/blobstrain/reagent/blazing_oil name = "Пылающее масло" - description = "наносит средне-высокий урон от ожогов, игнорируя броню, и подожигает цели." + description = "наносит средне-высокий урон от ожогов и подожигает цели." effectdesc = "при горении также выпускает вспышки пламени, но получает урон от воды." analyzerdescdamage = "Наносит средне-высокий урон от ожогов и поджигает цели." analyzerdesceffect = "При горении выделяет огонь, но получает урон от воды и других огнетушащих жидкостей." diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm index 9c05275f802..9b9fcf6992d 100644 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -5,7 +5,7 @@ name = "Пожиратель мусора" description = "бросает поглощенные предметы и трупы в цели. Наносит очень низкий урон травмами без запуска объектов." analyzerdescdamage = "Наносит очень низкий урон травмами и может метать поглощенные предметы при атаке." - analyzerdesceffect = "Пожирает незакрепленные предметы и трупы, оставленные на станции, и бросат их при атаке и защите." + analyzerdesceffect = "Пожирает незакрепленные предметы и трупы, и бросает их при атаке. Поглощенные объекты снижают входящий урон." color = "#8B1000" complementary_color = "#00558B" blobbernaut_message = "blasts" diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index 53385aa942e..7c593fd42d5 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -2,17 +2,17 @@ /datum/blobstrain/reagent/distributed_neurons name = "Распределенные нейроны" description = "наносит средне-низкий урон токсинами и превращает бессознательные цели в зомби блоба." - effectdesc = "при убийстве также производит хрупкие споры. Споры, производимые фабриками, разумны." + effectdesc = "при разрушении также производит хрупкие споры. Споры, производимые фабриками, разумны." shortdesc = "наносит средне-низкий урон токсинами и убьет все цели, находящиеся без сознания, при атаке. Споры, производимые фабриками, разумны." - analyzerdescdamage = "Наносит средне-низкий урон токсинами и убивает людей, находящихся без сознания." - analyzerdesceffect = "При разрушении производит споры. Споры, производимые фабриками, разумны." + analyzerdescdamage = "Наносит средне-низкий урон токсинами и зомбирует людей, находящихся без сознания." + analyzerdesceffect = "При разрушении производит хрупкие споры. Споры, производимые фабриками, разумны." color = "#E88D5D" complementary_color = "#823ABB" message_living = "и ты чувствуешь усталость" reagent = /datum/reagent/blob/distributed_neurons /datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/blob_tile, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && blob_tile.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && blob_tile.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. blob_tile.visible_message(span_boldwarning("Спора вылетает из блоба!")) blob_tile.overmind.create_spore(blob_tile.loc, /mob/living/simple_animal/hostile/blob_minion/spore/minion/weak) return ..() diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm index 879de935a11..34cc2429cf1 100644 --- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm +++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm @@ -3,10 +3,10 @@ name = "Электромагнитная паутина" color = "#83ECEC" complementary_color = "#EC8383" - description = "наносит большой урон от ожогов и цели с ЭМИ." + description = "наносит большой урон от ожогов и излучает ЭМИ." effectdesc = "также получает значительно увеличенный урон и выпускает ЭМИ после разрушения." - analyzerdescdamage = "Наносит небольшой урон от ожогов и излучает ЭМИ." - analyzerdesceffect = "Хрупок ко всем типам урона, но получает огромный урон от травм. Кроме того, при разрушении выпускает небольшой ЭМИ." + analyzerdescdamage = "Наносит большой урон от ожогов и излучает ЭМИ." + analyzerdesceffect = "Хрупок ко всем типам урона и получает огромный урон от травм. Кроме того, при разрушении выпускает небольшой ЭМИ." reagent = /datum/reagent/blob/electromagnetic_web /datum/blobstrain/reagent/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm index 38d568e271f..b1e0ec67c32 100644 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -4,12 +4,12 @@ description = "наносит большое количество урона травмами и ожогами и генерирует ресурсы быстрее, но может расширяться только с помощью перемещения ядра или узлов." shortdesc = "наносит сочетание урона травмами и ожогами." effectdesc = "перемещает ваше ядро ​​или узел при ручном расширении рядом с ним." - analyzerdescdamage = "наносит большое количество урона травмами и ожогами." + analyzerdescdamage = "Наносит большое количество урона травмами и ожогами." analyzerdesceffect = "Мобильный и быстро генерирует ресурсы." color = "#4F4441" complementary_color = "#414C4F" reagent = /datum/reagent/blob/networked_fibers - core_regen_bonus = 4 + core_regen_bonus = 5 /datum/blobstrain/reagent/networked_fibers/expand_reaction(obj/structure/blob/spawning_blob, obj/structure/blob/new_blob, turf/chosen_turf, mob/camera/blob/overmind, offstation) if(!overmind && new_blob.overmind || offstation) @@ -18,7 +18,7 @@ to_chat(usr, span_warning("Двигать ядро или узел за пределы станции нельзя.")) qdel(new_blob) return FALSE - + var/list/range_contents = (is_there_multiz())? urange_multiz(1, new_blob) : range(1, new_blob) for(var/obj/structure/blob/possible_expander in range_contents) @@ -27,7 +27,7 @@ possible_expander.forceMove(chosen_turf) possible_expander.setDir(get_dir(new_blob, possible_expander)) return TRUE - overmind.add_points(4) + overmind.add_points(BLOB_EXPAND_COST) qdel(new_blob) return FALSE diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index 05a322ddfbf..52aa5fcfd69 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -3,7 +3,7 @@ name = "Сжатая слизь" description = "наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, тушая их." effectdesc = "также сделает плитки скользкими рядом с атакованными плитками. Устойчив к грубым атакам." - analyzerdescdamage = "Наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, тушая их. Устойчив к грубым атакам." + analyzerdescdamage = "Наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, туша их. Устойчив к атакам травмами." analyzerdesceffect = "При нападении или убийстве смазывает близлежащие плитки пола, тушая все на них." color = "#AAAABB" complementary_color = "#BBBBAA" diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index 0ba5c3a6025..66edcea4c51 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -3,7 +3,7 @@ name = "Реактивные шипы" description = "наносит большой урон травмами через броню и биосопротивление." effectdesc = "также будет реагировать на атаку ожогами или травмами, атакуя все в ближнем бою." - analyzerdescdamage = "Наносит высокий урон травмами, игнорируя броню и биологическое сопротивление." + analyzerdescdamage = "Наносит высокий урон травмами, игнорируя броню и биосопротивление." analyzerdesceffect = "При нанесении урона ожогами и травмами блоб яростно бросается в атаку, атакуя все, что находится поблизости." color = "#9ACD32" complementary_color = "#FFA500" diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index 2b77f724149..291ba371e0a 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -1,8 +1,8 @@ //does toxin damage, hallucination, targets think they're not hurt at all /datum/blobstrain/reagent/regenerative_materia name = "Регенеративная Материя" - description = "наносит средний начальный урон токсинами, впрыскивая яд, который наносит больший урон токсинами и заставляет цели поверить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." - analyzerdescdamage = "Наносит средний начальный урон токсинами, вводя яд, который наносит больший урон токсинами и заставляет цели поверить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." + description = "наносит средний начальный урон токсинами, впрыскивая яд, который наносит больший урон токсинами и заставляет цели верить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." + analyzerdescdamage = "Наносит средний начальный урон токсинами, вводя яд, который наносит больший урон токсинами и заставляет цели верить, что они полностью здоровы. Ядро восстанавливается гораздо быстрее." color = "#A88FB7" complementary_color = "#AF7B8D" message_living = ", и ты чувствуешь себя живым" diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index c9835b9c654..ce82dafe490 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -2,11 +2,11 @@ name = "Репликационная пена" description = "наносит средний урон травмами и иногда дополнительно расширяется при расширении." shortdesc = "наносит средний урон травмами." - effectdesc = "также будет расширяться при атаке уроном ожогами, но получает больше урона травмами." + effectdesc = "также будет расширяться при атаке ожогами, но получает больше урона травмами." color = "#7B5A57" complementary_color = "#57787B" analyzerdescdamage = "Наносит средний урон травмами." - analyzerdesceffect = "Расширяется при атаке уроном ожогами, иногда дополнительно расширяется при расширении и уязвим к урону травмами." + analyzerdesceffect = "Расширяется при атаке ожогами, иногда дополнительно расширяется при расширении и уязвим к урону травмами." reagent = /datum/reagent/blob/replicating_foam diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 8ff3a4c50e3..90f62f0cd24 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -1,10 +1,10 @@ //does brute damage, shifts away when damaged /datum/blobstrain/reagent/shifting_fragments name = "Смещающиеся фрагменты" - description = "нанесит средний урон травмами." - effectdesc = "также приведет к смещению плиток при атаке." + description = "наносит средний урон травмами." + effectdesc = "также смещает плитки при атаке, повреждении и расширении." analyzerdescdamage = "Наносит средний урон травмами." - analyzerdesceffect = "При нападении может поменять местами плитки." + analyzerdesceffect = "Смещает плитки при атаке, повреждении и расширении." color = "#C8963C" complementary_color = "#3C6EC8" reagent = /datum/reagent/blob/shifting_fragments diff --git a/code/modules/antagonists/changeling/powers/revive.dm b/code/modules/antagonists/changeling/powers/revive.dm index 2ef5f374b81..1d0dabcdb89 100644 --- a/code/modules/antagonists/changeling/powers/revive.dm +++ b/code/modules/antagonists/changeling/powers/revive.dm @@ -7,6 +7,9 @@ //Revive from regenerative stasis /datum/action/changeling/revive/sting_action(mob/living/carbon/user) + if(istype(user.loc, /obj/structure/blob/special/core)) + to_chat(user, span_changeling("Окружающие вас щупальца блоба не дают вам регенерировать")) + return FALSE to_chat(user, span_changeling("We have regenerated.")) From 40c2e9c985b7d67b6375e932f4ecc941f2635ce1 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sat, 2 Nov 2024 17:33:44 +0500 Subject: [PATCH 07/11] lint fix --- code/__DEFINES/say.dm | 2 +- code/__HELPERS/chat.dm | 2 +- code/datums/components/blob_turf_consuming.dm | 2 +- code/datums/components/ghost_direct_control.dm | 2 +- code/modules/antagonists/blob/blob_actions.dm | 2 +- code/modules/antagonists/blob/blobs_attack.dm | 2 +- code/modules/antagonists/blob/powers_verbs.dm | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index fa1b4392f5b..990108e1550 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -1,4 +1,4 @@ // A link given to ghost alice to follow bob #define FOLLOW_LINK(alice, bob) "(F)" #define TURF_LINK(alice, turfy) "(T)" -#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" \ No newline at end of file +#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" diff --git a/code/__HELPERS/chat.dm b/code/__HELPERS/chat.dm index e19ac5a41d8..a686b12cc1a 100644 --- a/code/__HELPERS/chat.dm +++ b/code/__HELPERS/chat.dm @@ -12,4 +12,4 @@ /proc/relay_to_list_and_observers(message, list/mob_list, source) for(var/mob/creature as anything in mob_list) to_chat(creature, message) - send_to_observers(message, source) \ No newline at end of file + send_to_observers(message, source) diff --git a/code/datums/components/blob_turf_consuming.dm b/code/datums/components/blob_turf_consuming.dm index 49f80fe0cf4..7ad814047d8 100644 --- a/code/datums/components/blob_turf_consuming.dm +++ b/code/datums/components/blob_turf_consuming.dm @@ -31,4 +31,4 @@ var/turf/total_turf = parent total_turf.blob_consume() return - return COMPONENT_CANT_CONSUME \ No newline at end of file + return COMPONENT_CANT_CONSUME diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index c2de270b540..ca51321a7e5 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -153,4 +153,4 @@ /datum/component/ghost_direct_control/proc/on_ghost_controlable_check(mob/user) SIGNAL_HANDLER - return COMPONENT_GHOST_CONTROLABLE \ No newline at end of file + return COMPONENT_GHOST_CONTROLABLE diff --git a/code/modules/antagonists/blob/blob_actions.dm b/code/modules/antagonists/blob/blob_actions.dm index b1f5d8abc56..5fb77feea8f 100644 --- a/code/modules/antagonists/blob/blob_actions.dm +++ b/code/modules/antagonists/blob/blob_actions.dm @@ -43,4 +43,4 @@ if(!blob) return blob.burst_blob() - return \ No newline at end of file + return diff --git a/code/modules/antagonists/blob/blobs_attack.dm b/code/modules/antagonists/blob/blobs_attack.dm index 741cab891c3..19e09eb18f0 100644 --- a/code/modules/antagonists/blob/blobs_attack.dm +++ b/code/modules/antagonists/blob/blobs_attack.dm @@ -8,4 +8,4 @@ return !incorporeal_move /obj/effect/dummy/phased_mob/can_blob_attack() - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/antagonists/blob/powers_verbs.dm b/code/modules/antagonists/blob/powers_verbs.dm index 57d14af613e..6a5afd1d8d0 100644 --- a/code/modules/antagonists/blob/powers_verbs.dm +++ b/code/modules/antagonists/blob/powers_verbs.dm @@ -32,4 +32,4 @@ if(blob_minion.stat == CONSCIOUS) add_say_logs(usr, speak_text, language = "BLOB Broadcast") blob_minion.atom_say(speak_text) - return \ No newline at end of file + return From ee2f9f58584a7c69c55312d67853c33a43185fbb Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sat, 2 Nov 2024 18:48:41 +0500 Subject: [PATCH 08/11] text_fixes+blob mobs say --- .../antagonists/blob/blob_minions/blob_mob.dm | 16 ++++++++++++++-- .../antagonists/blob/blobstrains/blazing_oil.dm | 8 ++++---- .../blob/blobstrains/pressurized_slime.dm | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm index 8187c670175..83f48fd3288 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_mob.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -69,7 +69,7 @@ to_chat(src, span_notice("You move down.")) return . = ..() - + /mob/living/simple_animal/hostile/blob_minion/ @@ -91,4 +91,16 @@ /mob/living/simple_animal/hostile/blob_minion/can_be_blob() - return FALSE + return FALSE + +/mob/living/simple_animal/hostile/blob_minion/verb/say_to_nearby_mobs() + set name = "Сказать окружающим" + set desc = "Вы скажете введенный текст окружающим вас мобам" + + var/speak_text = tgui_input_text(usr, "Что вы хотите сказать?", "Сказать окружающим", null) + + if(!speak_text) + return + if(stat == CONSCIOUS) + add_say_logs(usr, speak_text, language = "BLOB mob_say") + atom_say(speak_text) diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index 060cf816855..14369d1c245 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -2,10 +2,10 @@ //sets you on fire, does burn damage, explodes into flame when burnt, weak to water /datum/blobstrain/reagent/blazing_oil name = "Пылающее масло" - description = "наносит средне-высокий урон от ожогов и подожигает цели." - effectdesc = "при горении также выпускает вспышки пламени, но получает урон от воды." - analyzerdescdamage = "Наносит средне-высокий урон от ожогов и поджигает цели." - analyzerdesceffect = "При горении выделяет огонь, но получает урон от воды и других огнетушащих жидкостей." + description = "наносит высокий урон от ожогов и подожигает цели." + effectdesc = "при горении также выпускает вспышки пламени, игнорирует урон от горения, но получает урон от воды." + analyzerdescdamage = "Наносит высокий урон от ожогов и поджигает цели." + analyzerdesceffect = "При попадании выпускает вспышки пламени, игнорирует урон от горения, но получает урон от воды и других огнетушащих жидкостей." color = "#B68D00" complementary_color = "#BE5532" blobbernaut_message = "splashes" diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index 52aa5fcfd69..1fd8cfd3bd6 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -1,7 +1,7 @@ //does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged /datum/blobstrain/reagent/pressurized_slime name = "Сжатая слизь" - description = "наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, тушая их." + description = "наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, туша их." effectdesc = "также сделает плитки скользкими рядом с атакованными плитками. Устойчив к грубым атакам." analyzerdescdamage = "Наносит низкий урон травмами и урон гипоксией, высокий урон выносливости и делает пол под целями очень скользкими, туша их. Устойчив к атакам травмами." analyzerdesceffect = "При нападении или убийстве смазывает близлежащие плитки пола, тушая все на них." From 2aa832a98ac0240a43adb22c80e4f05e4b8f583d Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:39:56 +0500 Subject: [PATCH 09/11] fix --- code/modules/antagonists/blob/blobstrains/_reagent.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index f86524bf646..3cf4101b3dd 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -38,7 +38,7 @@ color = COLOR_WHITE taste_description = "Это баг" penetrates_skin = TRUE - ignore_clothes = TRUE + clothing_penetration = 1 metabolization_rate = BLOB_REAGENTS_METABOLISM /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 753198d3ece..5bd7961ac18 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -605,7 +605,7 @@ var/mob/living/L = A var/protection = 0 - if(method == REAGENT_TOUCH && !ignore_protection && !R.ignore_clothes) + if(method == REAGENT_TOUCH && !ignore_protection) if(def_zone) var/mob/living/carbon/human/H = L if(istype(H)) From 86c7054e067cdaad4f24ab82c2a361e32e37eadb Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sun, 3 Nov 2024 20:15:10 +0500 Subject: [PATCH 10/11] intercepts text fixes --- code/game/gamemodes/blob/blob_report.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index 79f5bc1764d..fadbd95cda1 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -11,11 +11,11 @@ intercepttext += "Предварительный анализ организма классифицирует его как биологическую угрозу 5-го уровня. Его происхождение неизвестно.
    " intercepttext += "Nanotrasen выпустила директиву 7-10 для [station_name()]. Станцию следует считать закрытой на карантин.
    " intercepttext += "Приказы для всего персонала [station_name()] следующие:
    " - intercepttext += " 1. Не покидайте карантинную зону
    " - intercepttext += " 2. Обнаружить любые очаги угрозы на станции.
    " - intercepttext += " 3. При обнаружении используйте любые необходимые средства для сдерживания организма.
    " - intercepttext += " 4. Избегайте повреждения критической инфраструктуры станции.
    " - intercepttext += "
    Примечание. в случае нарушения карантина или неконтролируемого распространения биологической опасности директива 7-10 может быть дополнена директивой 7-12.
    " + intercepttext += " 1. Не покидать карантинную зону.
    " + intercepttext += " 2. Обнаружить все очаги угрозы на станции.
    " + intercepttext += " 3. При обнаружении использовать любые необходимые средства для сдерживания организмов.
    " + intercepttext += " 4. Избегать повреждения критической инфраструктуры станции.
    " + intercepttext += "
    Примечание. в случае нарушения карантина или неконтролируемого распространения биологической угрозы директива 7-10 может быть дополнена директивой 7-12.
    " intercepttext += "Конец сообщения." if(BLOB_SECOND_REPORT) var/nukecode = rand(10000, 99999) @@ -29,8 +29,8 @@ intercepttext += "Для [station_name()] была издана директива 7-12.
    " intercepttext += "Биологическая угроза вышла из-под контроля и скоро достигнет критической массы.
    " intercepttext += "Вам приказано следующее:
    " - intercepttext += " 1. Защитите диск ядерной аутентификации.
    " - intercepttext += " 2. Взорвите ядерную боеголовку, находящуюся в хранилище станции.
    " + intercepttext += " 1. Защищать диск ядерной аутентификации.
    " + intercepttext += " 2. Взорвать ядерную боеголовку, находящуюся в хранилище станции.
    " if(off_auto_nuke_codes) intercepttext += "Код ядерной аутентификации будет выслан в скором времени отдельным сообщением. Ожидайте.
    " else @@ -54,7 +54,7 @@ intercepttext += "Дирректива 7-12 была отменена для [station_name()].
    " intercepttext += "Биоугроза уничтожена, либо ее остаточные следы не представляют опасности.
    " intercepttext += "Вам приказано следующее:
    " - intercepttext += " 1. Уничтожьте все полученные засекреченные сообщения.
    " + intercepttext += " 1. Уничтожить все полученные засекреченные сообщения.
    " intercepttext += " 2. В случае невозможности продолжать смену ввиду потерь среди экипажа или критического состояния станции, провести эвакуацию экипажа.
    " if(blob_stage == BLOB_STAGE_THIRD && !off_auto_nuke_codes) intercepttext += " 3. Код от боеголовки, как и ее назначение необходимо держать в строжайшей секретности.
    " From 6ee694688dda2004d59ea4492f6bc073a014b1b8 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Mon, 4 Nov 2024 21:42:31 +0500 Subject: [PATCH 11/11] remove if spaces --- code/__HELPERS/_logging.dm | 2 +- code/__HELPERS/chat.dm | 2 +- code/controllers/subsystem/fluids.dm | 20 ++++++------- code/datums/components/blob_minion.dm | 14 +++++----- code/datums/components/connect_containers.dm | 2 +- .../datums/components/ghost_direct_control.dm | 28 +++++++++---------- code/datums/components/stationloving.dm | 14 +++++----- code/game/atoms.dm | 2 +- .../fluid_spread/_fluid_spread.dm | 6 ++-- .../fluid_spread/effects_smoke.dm | 8 +++--- code/game/objects/obj_defense.dm | 2 +- .../antagonists/blob/blob_infected_datum.dm | 2 +- .../blob/blob_minions/blob_spore.dm | 12 ++++---- .../blob/blob_minions/blob_zombie.dm | 4 +-- .../blob/blob_minions/blobbernaut.dm | 16 +++++------ .../blob/blobstrains/_blobstrain.dm | 2 +- .../blob/blobstrains/debris_devourer.dm | 16 +++++------ .../antagonists/blob/blobstrains/multiplex.dm | 6 ++-- code/modules/antagonists/blob/overmind.dm | 20 ++++++------- code/modules/antagonists/blob/powers.dm | 16 +++++------ .../antagonists/blob/structures/core.dm | 2 +- .../antagonists/blob/structures/factory.dm | 4 +-- .../antagonists/blob/structures/normal.dm | 2 +- code/modules/mob/mob.dm | 2 +- 24 files changed, 102 insertions(+), 102 deletions(-) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 4bcf8c2e248..5d61aa41ad7 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -402,7 +402,7 @@ GLOBAL_PROTECT(log_end) return "(INVALID LOCATION)" var/turf/T = A - if (!istype(T)) + if(!istype(T)) T = get_turf(A) if(istype(T)) diff --git a/code/__HELPERS/chat.dm b/code/__HELPERS/chat.dm index a686b12cc1a..3f9679e3433 100644 --- a/code/__HELPERS/chat.dm +++ b/code/__HELPERS/chat.dm @@ -2,7 +2,7 @@ /proc/send_to_observers(message, source) var/list/all_observers = GLOB.dead_player_list + GLOB.current_observers_list for(var/mob/observer as anything in all_observers) - if (isnull(source)) + if(isnull(source)) to_chat(observer, "[message]") continue var/link = FOLLOW_LINK(observer, source) diff --git a/code/controllers/subsystem/fluids.dm b/code/controllers/subsystem/fluids.dm index 5ab7930b043..111e2f3af1b 100644 --- a/code/controllers/subsystem/fluids.dm +++ b/code/controllers/subsystem/fluids.dm @@ -60,16 +60,16 @@ SUBSYSTEM_DEF(fluids) * Ensures that the subsystem's fire wait evenly splits the spread and effect waits. */ /datum/controller/subsystem/fluids/proc/initialize_waits() - if (spread_wait <= 0) + if(spread_wait <= 0) WARNING("[src] has the invalid spread wait [spread_wait].") spread_wait = 1 SECONDS - if (effect_wait <= 0) + if(effect_wait <= 0) WARNING("[src] has the invalid effect wait [effect_wait].") spread_wait = 1 SECONDS // Sets the overall wait of the subsystem to evenly divide both the effect and spread waits. var/max_wait = Gcd(spread_wait, effect_wait) - if (max_wait < wait || wait <= 0) + if(max_wait < wait || wait <= 0) wait = max_wait else // If the wait of the subsystem overall is set to a valid value make the actual wait of the subsystem evenly divide that as well. @@ -138,7 +138,7 @@ SUBSYSTEM_DEF(fluids) to_spread.spread(seconds_per_tick) to_spread.spread_bucket = null - if (MC_TICK_CHECK) + if(MC_TICK_CHECK) break MC_SPLIT_TICK // Start processing fluid effects: @@ -154,12 +154,12 @@ SUBSYSTEM_DEF(fluids) var/obj/effect/particle_effect/fluid/to_process = currentrun[currentrun.len] currentrun.len-- - if (QDELETED(to_process) || to_process.process(seconds_per_tick) == PROCESS_KILL) + if(QDELETED(to_process) || to_process.process(seconds_per_tick) == PROCESS_KILL) effect_carousel[cached_bucket_index] -= to_process to_process.effect_bucket = null to_process.datum_flags &= ~DF_ISPROCESSING - if (MC_TICK_CHECK) + if(MC_TICK_CHECK) break /** @@ -169,7 +169,7 @@ SUBSYSTEM_DEF(fluids) * - [node][/obj/effect/particle_effect/fluid]: The node to queue to spread. */ /datum/controller/subsystem/fluids/proc/queue_spread(obj/effect/particle_effect/fluid/node) - if (node.spread_bucket) + if(node.spread_bucket) return spread_carousel[spread_bucket_index] += node @@ -187,7 +187,7 @@ SUBSYSTEM_DEF(fluids) var/bucket_index = node.spread_bucket spread_carousel[bucket_index] -= node - if (bucket_index == spread_bucket_index) + if(bucket_index == spread_bucket_index) currently_spreading -= node node.spread_bucket = null @@ -201,7 +201,7 @@ SUBSYSTEM_DEF(fluids) * - [node][/obj/effect/particle_effect/fluid]: The node to start processing. */ /datum/controller/subsystem/fluids/proc/start_processing(obj/effect/particle_effect/fluid/node) - if (node.datum_flags & DF_ISPROCESSING || node.effect_bucket) + if(node.datum_flags & DF_ISPROCESSING || node.effect_bucket) return // Edit this value to make all fluids process effects (at the same time|offset by when they started processing| -> offset by a random amount <- ) @@ -225,7 +225,7 @@ SUBSYSTEM_DEF(fluids) return effect_carousel[bucket_index] -= node - if (bucket_index == effect_bucket_index) + if(bucket_index == effect_bucket_index) currently_processing -= node node.effect_bucket = null diff --git a/code/datums/components/blob_minion.dm b/code/datums/components/blob_minion.dm index 99925936677..dcbf7b274b2 100644 --- a/code/datums/components/blob_minion.dm +++ b/code/datums/components/blob_minion.dm @@ -10,18 +10,18 @@ /datum/component/blob_minion/Initialize(mob/camera/blob/overmind, datum/callback/on_strain_changed) . = ..() - if (!isminion(parent)) + if(!isminion(parent)) return COMPONENT_INCOMPATIBLE src.on_strain_changed = on_strain_changed register_overlord(overmind) /datum/component/blob_minion/InheritComponent(datum/component/new_comp, i_am_original, mob/camera/blob/overmind, datum/callback/on_strain_changed) - if (!isnull(on_strain_changed)) + if(!isnull(on_strain_changed)) src.on_strain_changed = on_strain_changed register_overlord(overmind) /datum/component/blob_minion/proc/register_overlord(mob/camera/blob/overmind) - if (isnull(overmind)) + if(isnull(overmind)) return src.overmind = overmind overmind.register_new_minion(parent) @@ -61,7 +61,7 @@ GLOB.blob_telepathy_mobs |= parent /datum/component/blob_minion/UnregisterFromParent() - if (!isnull(overmind)) + if(!isnull(overmind)) overmind.blob_mobs -= parent var/mob/living/living_parent = parent living_parent.pass_flags &= ~PASSBLOB @@ -83,7 +83,7 @@ /// Become blobpilled when we gain a mind /datum/component/blob_minion/proc/on_mind_init(mob/living/minion, datum/mind/new_mind) SIGNAL_HANDLER - if (isnull(overmind) || new_mind.has_antag_datum(/datum/antagonist/blob_minion)) + if(isnull(overmind) || new_mind.has_antag_datum(/datum/antagonist/blob_minion)) return var/datum_type = (isblobbernaut(minion))? /datum/antagonist/blob_minion/blobernaut : /datum/antagonist/blob_minion @@ -101,7 +101,7 @@ /// When our icon is updated, update our colour too /datum/component/blob_minion/proc/on_update_status_tab(mob/living/minion, list/status_items) SIGNAL_HANDLER - if (isnull(overmind)) + if(isnull(overmind)) return status_items += list(list("Критическая Масса:", "[TOTAL_BLOB_MASS]/[NEEDED_BLOB_MASS]")) @@ -136,7 +136,7 @@ /datum/component/blob_minion/proc/on_space_move(mob/living/minion) SIGNAL_HANDLER var/obj/structure/blob/blob_handhold = locate() in range(1, parent) - if (!isnull(blob_handhold)) + if(!isnull(blob_handhold)) return COMSIG_MOVABLE_STOP_SPACEMOVE /// We only speak telepathically to blobs diff --git a/code/datums/components/connect_containers.dm b/code/datums/components/connect_containers.dm index 22efc634359..6f793c860e1 100644 --- a/code/datums/components/connect_containers.dm +++ b/code/datums/components/connect_containers.dm @@ -12,7 +12,7 @@ /datum/component/connect_containers/Initialize(atom/movable/tracked, list/connections) . = ..() - if (!ismovable(tracked)) + if(!ismovable(tracked)) return COMPONENT_INCOMPATIBLE src.connections = connections diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index ca51321a7e5..6cd966cdcb1 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -26,7 +26,7 @@ datum/callback/after_assumed_control, ) . = ..() - if (!isliving(parent)) + if(!isliving(parent)) return COMPONENT_INCOMPATIBLE src.ban_type = ban_type @@ -37,7 +37,7 @@ var/mob/mob_parent = parent LAZYADD(GLOB.mob_spawners[format_text("[initial(mob_parent.name)]")], mob_parent) - if (poll_candidates) + if(poll_candidates) INVOKE_ASYNC(src, PROC_REF(request_ghost_control), poll_question, role_name || "[parent]", poll_length, antag_age_check, check_antaghud) /datum/component/ghost_direct_control/RegisterWithParent() @@ -65,10 +65,10 @@ /// Inform ghosts that they can possess this /datum/component/ghost_direct_control/proc/on_examined(datum/source, mob/user, list/examine_text) SIGNAL_HANDLER - if (!isobserver(user)) + if(!isobserver(user)) return var/mob/living/our_mob = parent - if (our_mob.stat == DEAD || our_mob.key || awaiting_ghosts) + if(our_mob.stat == DEAD || our_mob.key || awaiting_ghosts) return examine_text += span_boldnotice("You could take control of this mob by clicking on it.") @@ -93,15 +93,15 @@ /// A ghost clicked on us, they want to get in this body /datum/component/ghost_direct_control/proc/on_ghost_clicked(mob/our_mob, mob/dead/observer/hopeful_ghost) SIGNAL_HANDLER - if (our_mob.key) + if(our_mob.key) qdel(src) return - if (!hopeful_ghost.client) + if(!hopeful_ghost.client) return - if (awaiting_ghosts) + if(awaiting_ghosts) to_chat(hopeful_ghost, span_warning("Ghost candidate selection currently in progress!")) return COMPONENT_CANCEL_ATTACK_CHAIN - if (!SSticker.HasRoundStarted()) + if(!SSticker.HasRoundStarted()) to_chat(hopeful_ghost, span_warning("You cannot assume control of this until after the round has started!")) return COMPONENT_CANCEL_ATTACK_CHAIN INVOKE_ASYNC(src, PROC_REF(attempt_possession), our_mob, hopeful_ghost) @@ -110,27 +110,27 @@ /// We got far enough to establish that this mob is a valid target, let's try to posssess it /datum/component/ghost_direct_control/proc/attempt_possession(mob/our_mob, mob/dead/observer/hopeful_ghost) var/ghost_asked = tgui_alert(usr, "Become [our_mob]?", "Are you sure?", list("Yes", "No")) - if (ghost_asked != "Yes" || QDELETED(our_mob)) + if(ghost_asked != "Yes" || QDELETED(our_mob)) return assume_direct_control(hopeful_ghost) /// Grant possession of our mob, component is now no longer required /datum/component/ghost_direct_control/proc/assume_direct_control(mob/harbinger) - if (QDELETED(src)) + if(QDELETED(src)) to_chat(harbinger, span_warning("Offer to possess creature has expired!")) return - if (jobban_isbanned(harbinger, ban_type)) + if(jobban_isbanned(harbinger, ban_type)) to_chat(harbinger, span_warning("You are banned from playing as this role!")) return var/mob/living/new_body = parent - if (new_body.stat == DEAD) + if(new_body.stat == DEAD) to_chat(harbinger, span_warning("This body has passed away, it is of no use!")) return - if (new_body.key) + if(new_body.key) to_chat(harbinger, span_warning("[parent] has already become sapient!")) qdel(src) return - if (extra_control_checks && !extra_control_checks.Invoke(harbinger)) + if(extra_control_checks && !extra_control_checks.Invoke(harbinger)) return add_game_logs("took control of [new_body].", harbinger) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 1ec0aadcb39..d5cdfe0078d 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -41,8 +41,8 @@ qdel(GetComponent(/datum/component/connect_containers)) /datum/component/stationloving/InheritComponent(datum/component/stationloving/newc, original, inform_admins, allow_death) - if (original) - if (newc) + if(original) + if(newc) inform_admins = newc.inform_admins allow_death = newc.allow_item_destruction else @@ -133,20 +133,20 @@ )) // Our loc is a secluded location = not in bounds - if (atom_to_check.loc && HAS_TRAIT(atom_to_check.loc, TRAIT_SECLUDED_LOCATION)) + if(atom_to_check.loc && HAS_TRAIT(atom_to_check.loc, TRAIT_SECLUDED_LOCATION)) return FALSE // No turf below us = nullspace = not in bounds var/turf/destination_turf = get_turf(atom_to_check) - if (!destination_turf) + if(!destination_turf) return FALSE - if (is_station_level(destination_turf.z)) + if(is_station_level(destination_turf.z)) return TRUE if(atom_to_check.onSyndieBase()) return TRUE var/area/destination_area = destination_turf.loc - if (is_admin_level(destination_turf.z)) - if (is_type_in_typecache(destination_area, disallowed_centcom_areas)) + if(is_admin_level(destination_turf.z)) + if(is_type_in_typecache(destination_area, disallowed_centcom_areas)) return FALSE return TRUE return FALSE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8d42650e8e7..34ddf94ba44 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -639,7 +639,7 @@ */ /atom/proc/blob_act(obj/structure/blob/attacking_blob) var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) - if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) + if(blob_act_result & COMPONENT_CANCEL_BLOB_ACT) return FALSE return TRUE diff --git a/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm b/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm index b00198ddcc1..317b56ce6a8 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/_fluid_spread.dm @@ -125,7 +125,7 @@ /datum/effect_system/fluid_spread/start(log = FALSE) var/location = src.location || get_turf(holder) var/obj/effect/particle_effect/fluid/flood = new effect_type(location, new /datum/fluid_group(amount)) - if (log) // Smoke is used as an aesthetic effect in a tonne of places and we don't want, say, a broken secway spamming admin chat. + if(log) // Smoke is used as an aesthetic effect in a tonne of places and we don't want, say, a broken secway spamming admin chat. help_out_the_admins(flood, holder, location) flood.spread() @@ -140,12 +140,12 @@ /datum/effect_system/fluid_spread/proc/help_out_the_admins(obj/effect/particle_effect/fluid/flood, atom/holder, atom/location) var/source_msg var/blame_msg - if (holder) + if(holder) holder.transfer_fingerprints_to(flood) // This is important. If this doesn't exist thermobarics are annoying to adjudicate. source_msg = "from inside of [ismob(holder) ? ADMIN_LOOKUPFLW(holder) : ADMIN_VERBOSEJMP(holder)]" var/lastkey = holder.fingerprintslast - if (lastkey) + if(lastkey) var/mob/scapegoat = get_mob_by_key(lastkey) blame_msg = " last touched by [ADMIN_LOOKUPFLW(scapegoat)]" else diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index 5501707139d..fe5681a9437 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -29,7 +29,7 @@ /obj/effect/particle_effect/fluid/smoke/Destroy() SSsmoke.stop_processing(src) - if (spread_bucket) + if(spread_bucket) SSsmoke.cancel_spread(src) return ..() @@ -39,7 +39,7 @@ */ /obj/effect/particle_effect/fluid/smoke/proc/kill_smoke() SSsmoke.stop_processing(src) - if (spread_bucket) + if(spread_bucket) SSsmoke.cancel_spread(src) INVOKE_ASYNC(src, PROC_REF(fade_out)) QDEL_IN(src, 1 SECONDS) @@ -136,7 +136,7 @@ SIGNAL_HANDLER if(!group) return NONE - if (spread_bucket) + if(spread_bucket) return NONE SSsmoke.queue_spread(src) @@ -446,7 +446,7 @@ if(mixcolor) smoke.add_atom_colour(mixcolor, FIXED_COLOUR_PRIORITY) // give the smoke color, if it has any to begin with - if (log) + if(log) help_out_the_admins(smoke, holder, location) smoke.spread() // Making the smoke spread immediately. diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 0156310ad83..094dc3a3d10 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -110,7 +110,7 @@ /obj/blob_act(obj/structure/blob/B) - if (!..() || (obj_flags & IGNORE_BLOB_ACT)) + if(!..() || (obj_flags & IGNORE_BLOB_ACT)) return if(isturf(loc)) var/turf/T = loc diff --git a/code/modules/antagonists/blob/blob_infected_datum.dm b/code/modules/antagonists/blob/blob_infected_datum.dm index cd0e32bb8ac..3e4dc54104d 100644 --- a/code/modules/antagonists/blob/blob_infected_datum.dm +++ b/code/modules/antagonists/blob/blob_infected_datum.dm @@ -245,7 +245,7 @@ blob_client = GLOB.directory[ckey(owner.key)] location = get_turf(C) var/datum/game_mode/mode= SSticker.mode - if (ismob(C.loc)) + if(ismob(C.loc)) var/mob/M = C.loc M.gib() if(!is_station_level(location.z) || isspaceturf(location)) diff --git a/code/modules/antagonists/blob/blob_minions/blob_spore.dm b/code/modules/antagonists/blob/blob_minions/blob_spore.dm index 59ad29b9560..e814e9e734e 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_spore.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_spore.dm @@ -59,12 +59,12 @@ stat_attack = DEAD . = ..() stat_attack = initial(stat_attack) - + /mob/living/simple_animal/hostile/blob_minion/spore/AttackingTarget() . = ..() var/mob/living/carbon/human/human_target = target - if (!istype(human_target) || human_target.stat != DEAD) + if(!istype(human_target) || human_target.stat != DEAD) return zombify(human_target) @@ -76,7 +76,7 @@ visible_message(span_warning("Тело [target.name] внезапно поднимается!")) var/mob/living/simple_animal/hostile/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name)) blombie.set_name() - if (istype(blombie)) // In case of badmin + if(istype(blombie)) // In case of badmin blombie.consume_corpse(target) SEND_SIGNAL(src, COMSIG_BLOB_ZOMBIFIED, blombie) qdel(src) @@ -95,9 +95,9 @@ /// When we z-move check that we're on the same z level as our factory was /mob/living/simple_animal/hostile/blob_minion/spore/minion/proc/on_z_changed() SIGNAL_HANDLER - if (isnull(z_turf)) + if(isnull(z_turf)) return - if (!is_valid_z_level(get_turf(src), z_turf)) + if(!is_valid_z_level(get_turf(src), z_turf)) death() /// Mark the turf we need to track from our factory @@ -107,7 +107,7 @@ /// If the blob changes to distributed neurons then you can control the spores /mob/living/simple_animal/hostile/blob_minion/spore/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) - if (istype(new_strain, /datum/blobstrain/reagent/distributed_neurons)) + if(istype(new_strain, /datum/blobstrain/reagent/distributed_neurons)) AddComponent(\ /datum/component/ghost_direct_control,\ ban_type = ROLE_BLOB,\ diff --git a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm index 254a5553b5e..f1303f1a95b 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm @@ -33,7 +33,7 @@ /mob/living/simple_animal/hostile/blob_minion/zombie/Exited(atom/movable/gone, direction) . = ..() - if (gone != corpse) + if(gone != corpse) return corpse = null death() @@ -100,7 +100,7 @@ /mob/living/simple_animal/hostile/blob_minion/zombie/controlled/consume_corpse(mob/living/carbon/human/new_corpse) . = ..() - if (!isnull(client) || SSticker.current_state == GAME_STATE_FINISHED) + if(!isnull(client) || SSticker.current_state == GAME_STATE_FINISHED) return AddComponent(\ /datum/component/ghost_direct_control,\ diff --git a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm index b9787042082..e0b742670a3 100644 --- a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm +++ b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm @@ -51,33 +51,33 @@ /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/Initialize(mapload) bruteloss = maxHealth / 2 // Start out injured to encourage not beelining away from the blob . = ..() - + /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/Life(seconds_per_tick, times_fired) . = ..() - if (!.) + if(!.) return FALSE var/damage_sources = 0 var/list/blobs_in_area = (is_there_multiz())? urange_multiz(2, src) : range(2, src) - if (!(locate(/obj/structure/blob) in blobs_in_area)) + if(!(locate(/obj/structure/blob) in blobs_in_area)) damage_sources++ - if (orphaned) + if(orphaned) damage_sources++ else var/particle_colour = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_BLACK - if (locate(/obj/structure/blob/special/core) in blobs_in_area) + if(locate(/obj/structure/blob/special/core) in blobs_in_area) heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_CORE * seconds_per_tick) var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) heal_effect.color = particle_colour - if (locate(/obj/structure/blob/special/node) in blobs_in_area) + if(locate(/obj/structure/blob/special/node) in blobs_in_area) heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_NODE * seconds_per_tick) var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) heal_effect.color = particle_colour - if (damage_sources == 0) + if(damage_sources == 0) return FALSE // take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both @@ -99,7 +99,7 @@ /// Set our attack damage based on blob's properties /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) - if (isnull(overmind)) + if(isnull(overmind)) melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) attacktext = initial(attacktext) diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index de8752d280c..55031106c5c 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -64,7 +64,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ var/blobbernaut_reagentatk_bonus = 0 /datum/blobstrain/New(mob/camera/blob/new_overmind) - if (!istype(new_overmind)) + if(!istype(new_overmind)) stack_trace("blobstrain created without overmind") overmind = new_overmind diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm index 9b9fcf6992d..ce7a9780637 100644 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -21,7 +21,7 @@ var/obj/structure/blob/special/core/core = overmind.blob_core for(var/i in 1 to 3) var/obj/item/I = pick(core.contents) - if (I && !QDELETED(I)) + if(I && !QDELETED(I)) I.forceMove(get_turf(spore)) I.throw_at(get_edge_target_turf(spore,pick(GLOB.alldirs)), 6, 5, spore, TRUE, FALSE, null, 3) @@ -33,9 +33,9 @@ /datum/blobstrain/debris_devourer/proc/debris_attack(atom/attacking, atom/source) var/obj/structure/blob/special/core/core = overmind.blob_core - if (prob(40 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. + if(prob(40 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. var/obj/item/I = length(core.contents) ? pick(core.contents) : null - if (!QDELETED(I)) + if(!QDELETED(I)) if(isobj(I)) I.obj_flags |= IGNORE_BLOB_ACT addtimer(CALLBACK(src, PROC_REF(remove_protection), I), BLOB_ACT_PROTECTION_TIME) @@ -55,17 +55,17 @@ /datum/blobstrain/debris_devourer/examine(mob/user) . = ..() var/obj/structure/blob/special/core/core = overmind.blob_core - if (isobserver(user)) + if(isobserver(user)) . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на [round(max(min(DEBRIS_DENSITY, 10),0))]") else switch (round(max(min(DEBRIS_DENSITY, 10),0))) - if (0) + if(0) . += span_notice("В настоящее время поглощенного мусора недостаточно, чтобы уменьшить урон.") - if (1 to 3) + if(1 to 3) . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на очень небольшую величину.") // these roughly correspond with force description strings - if (4 to 7) + if(4 to 7) . += span_notice("Поглощенный мусор в настоящее время незначительно снижает получаемый урон.") - if (8 to 10) + if(8 to 10) . += span_notice("Поглощенный мусор в настоящее время снижает получаемый урон на среднюю величину.") #undef DEBRIS_DENSITY diff --git a/code/modules/antagonists/blob/blobstrains/multiplex.dm b/code/modules/antagonists/blob/blobstrains/multiplex.dm index aaebf1d0526..0930da2eae0 100644 --- a/code/modules/antagonists/blob/blobstrains/multiplex.dm +++ b/code/modules/antagonists/blob/blobstrains/multiplex.dm @@ -5,9 +5,9 @@ /datum/blobstrain/multiplex/New(mob/camera/blob/new_overmind, list/blobstrains) . = ..() for (var/bt in blobstrains) - if (ispath(bt, /datum/blobstrain)) + if(ispath(bt, /datum/blobstrain)) src.blobstrains += new bt(overmind) - else if (istype(bt, /datum/blobstrain)) + else if(istype(bt, /datum/blobstrain)) var/datum/blobstrain/bts = bt bts.overmind = overmind src.blobstrains += bt @@ -28,7 +28,7 @@ /datum/blobstrain/multiplex/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this for (var/datum/blobstrain/bt in blobstrains) . += bt.tesla_reaction(B, power, coefficient*typeshare) - if (prob(. / length(blobstrains) * 100)) + if(prob(. / length(blobstrains) * 100)) return 1 /datum/blobstrain/multiplex/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index f1703934fa3..75218bad02e 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -112,7 +112,7 @@ GLOBAL_LIST_EMPTY(overminds) if(isturf(T)) update_z(T.z) - + /mob/camera/blob/Logout() update_z(null) . = ..() @@ -176,17 +176,17 @@ GLOBAL_LIST_EMPTY(overminds) bubble_type, sanitize = TRUE, ) - if (!message) + if(!message) return - if (client) + if(client) if(GLOB.admin_mutes_assoc[ckey] & MUTE_IC) to_chat(src, span_boldwarning("Вы не можете писать IC сообщения (мут).")) return - if (client.handle_spam_prevention(message, MUTE_IC)) + if(client.handle_spam_prevention(message, MUTE_IC)) return - if (stat) + if(stat) return blob_talk(message) @@ -195,7 +195,7 @@ GLOBAL_LIST_EMPTY(overminds) message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) - if (!message) + if(!message) return add_say_logs(src, message, language = "BLOB") @@ -216,11 +216,11 @@ GLOBAL_LIST_EMPTY(overminds) /mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain, first_select = FALSE) - if (!ispath(new_strain)) + if(!ispath(new_strain)) return FALSE var/had_strain = FALSE - if (istype(blobstrain)) + if(istype(blobstrain)) blobstrain.on_lose() qdel(blobstrain) had_strain = TRUE @@ -231,7 +231,7 @@ GLOBAL_LIST_EMPTY(overminds) overmind_datum.strain = blobstrain blobstrain.on_gain() - if (had_strain && !first_select) + if(had_strain && !first_select) var/list/messages = get_strain_info() to_chat(src, chat_box_red(messages.Join("
    "))) SEND_SIGNAL(src, COMSIG_BLOB_SELECTED_STRAIN, blobstrain) @@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(overminds) /// Add something to our list of mobs and wait for it to die /mob/camera/blob/proc/register_new_minion(mob/living/minion) blob_mobs |= minion - if (!istype(minion, /mob/living/simple_animal/hostile/blob_minion/blobbernaut)) + if(!istype(minion, /mob/living/simple_animal/hostile/blob_minion/blobbernaut)) RegisterSignal(minion, COMSIG_LIVING_DEATH, PROC_REF(on_minion_death)) /// When a spore (or zombie) dies then we do this diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 2abb74a324f..77f445b5467 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -180,7 +180,7 @@ /// When one of our boys attacked something, we sometimes want to perform extra effects /mob/camera/blob/proc/on_blobbernaut_attacked(mob/living/simple_animal/hostile/blobbynaut, atom/target, success) SIGNAL_HANDLER - if (!success) + if(!success) return if(!QDELETED(src)) blobstrain.blobbernaut_attack(target, blobbynaut) @@ -365,7 +365,7 @@ /** Opens the reroll menu to change strains */ /mob/camera/blob/proc/strain_reroll() - if (!free_strain_rerolls && blob_points < BLOB_POWER_REROLL_COST) + if(!free_strain_rerolls && blob_points < BLOB_POWER_REROLL_COST) to_chat(src, span_warning("Вам нужно как минимум [BLOB_POWER_REROLL_COST], чтобы снова изменить свой штамм!")) return FALSE @@ -373,7 +373,7 @@ /** Controls changing strains */ /mob/camera/blob/proc/open_reroll_menu() - if (!strain_choices) + if(!strain_choices) strain_choices = list() var/list/new_strains = GLOB.valid_blobstrains.Copy() - blobstrain.type @@ -385,24 +385,24 @@ //var/info_text = span_boldnotice("[initial(strain.name)]") //info_text += "
    [span_notice("[initial(strain.analyzerdescdamage)]")]" - //if (!isnull(initial(strain.analyzerdesceffect))) + //if(!isnull(initial(strain.analyzerdesceffect))) //info_text += "
    [span_notice("[initial(strain.analyzerdesceffect)]")]" strain_choices[initial(strain.name)] = strain_icon var/strain_result = show_radial_menu(src, src, strain_choices, radius = BLOB_REROLL_RADIUS) - if (isnull(strain_result)) + if(isnull(strain_result)) return - if (!free_strain_rerolls && !can_buy(BLOB_POWER_REROLL_COST)) + if(!free_strain_rerolls && !can_buy(BLOB_POWER_REROLL_COST)) return for (var/_other_strain in GLOB.valid_blobstrains) var/datum/blobstrain/other_strain = _other_strain - if (initial(other_strain.name) == strain_result) + if(initial(other_strain.name) == strain_result) set_strain(other_strain) - if (free_strain_rerolls) + if(free_strain_rerolls) free_strain_rerolls -= 1 last_reroll_time = world.time diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index d47a8d45030..f364a4d88fd 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -51,7 +51,7 @@ STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) for(var/atom/movable/atom as anything in contents) - if (atom && !QDELETED(atom) && istype(atom)) + if(atom && !QDELETED(atom) && istype(atom)) atom.forceMove(get_turf(src)) atom.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), 6, 5, src, TRUE, FALSE, null, 3) return ..() diff --git a/code/modules/antagonists/blob/structures/factory.dm b/code/modules/antagonists/blob/structures/factory.dm index 28f4c11c418..6c42e4c770b 100644 --- a/code/modules/antagonists/blob/structures/factory.dm +++ b/code/modules/antagonists/blob/structures/factory.dm @@ -81,7 +81,7 @@ /// Produce a blobbernaut /obj/structure/blob/special/factory/proc/assign_blobbernaut(mob/living/new_naut) is_creating_blobbernaut = FALSE - if (isnull(new_naut)) + if(isnull(new_naut)) return modify_max_integrity(initial(max_integrity) * 0.25) //factories that produced a blobbernaut have much lower health @@ -96,7 +96,7 @@ /// When our brave soldier dies, reset our max integrity /obj/structure/blob/special/factory/proc/on_blobbernaut_death(mob/living/death_naut) SIGNAL_HANDLER - if (isnull(blobbernaut) || blobbernaut != death_naut) + if(isnull(blobbernaut) || blobbernaut != death_naut) return blobbernaut = null max_integrity = initial(max_integrity) diff --git a/code/modules/antagonists/blob/structures/normal.dm b/code/modules/antagonists/blob/structures/normal.dm index f3e2e53d091..2538f64825a 100644 --- a/code/modules/antagonists/blob/structures/normal.dm +++ b/code/modules/antagonists/blob/structures/normal.dm @@ -43,7 +43,7 @@ if(compromised_integrity) brute_resist = BLOB_BRUTE_RESIST - else if (overmind) + else if(overmind) brute_resist = BLOB_BRUTE_RESIST * 0.5 else brute_resist = BLOB_BRUTE_RESIST * 0.5 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9d395c5ad58..2133ffa1ab2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1197,7 +1197,7 @@ GLOBAL_LIST_INIT(holy_areas, typecacheof(list( message_admins("[src] [ADMIN_FLW(src, "FLW")] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z]. If you could ask them how that happened and notify the coders, it would be appreciated.") add_misc_logs(src, "Z-TRACKING: [src] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z].") update_z(T.z) - else if (!client && registered_z) + else if(!client && registered_z) add_misc_logs(src, "Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.") update_z(null)
    Blob
    Progress: [GLOB.blobs.len]/[mode.blob_win_count]
    Progress: [mode.legit_blobs.len]/[mode.blob_win_count]
    Edit Win Count
    Send warning to all living blobs
    Burst all blobs

    kY;X4WZQUXNreBCQ9y6r6~1q* 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%0DN%(5`;rIqQ5_kEeX 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≧?mf)=ty5y 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%0A>s&?EGf7#rb27Xcf3 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 literal 0 HcmV?d00001 diff --git a/paradise.dme b/paradise.dme index bd6f0a6c58b..4795c3f5f9c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -119,6 +119,7 @@ #include "code\__DEFINES\rust_g.dm" #include "code\__DEFINES\secret_documents.dm" #include "code\__DEFINES\rust_g_overrides.dm" +#include "code\__DEFINES\say.dm" #include "code\__DEFINES\sensor_devices.dm" #include "code\__DEFINES\shuttle.dm" #include "code\__DEFINES\sibyl.dm" @@ -152,6 +153,7 @@ #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\mapping.dm" #include "code\__DEFINES\dcs\signals.dm" +#include "code\__DEFINES\dcs\signals_blob.dm" #include "code\__DEFINES\dcs\signals_object.dm" #include "code\__DEFINES\traits\_traits.dm" #include "code\__DEFINES\traits\declarations.dm" @@ -165,6 +167,7 @@ #include "code\__HELPERS\atmospherics.dm" #include "code\__HELPERS\atoms.dm" #include "code\__HELPERS\bitflag_lists.dm" +#include "code\__HELPERS\chat.dm" #include "code\__HELPERS\cmp.dm" #include "code\__HELPERS\constants.dm" #include "code\__HELPERS\experimental.dm" @@ -186,6 +189,7 @@ #include "code\__HELPERS\pronouns.dm" #include "code\__HELPERS\qdel.dm" #include "code\__HELPERS\reagents_helpers.dm" +#include "code\__HELPERS\ref.dm" #include "code\__HELPERS\russian.dm" #include "code\__HELPERS\sanitize_values.dm" #include "code\__HELPERS\shell.dm" @@ -249,6 +253,7 @@ #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" +#include "code\_onclick\hud\blobbernaut.dm" #include "code\_onclick\hud\bot.dm" #include "code\_onclick\hud\cogscarab.dm" #include "code\_onclick\hud\constructs.dm" @@ -302,6 +307,7 @@ #include "code\controllers\subsystem\early_assets.dm" #include "code\controllers\subsystem\events.dm" #include "code\controllers\subsystem\fires.dm" +#include "code\controllers\subsystem\fluids.dm" #include "code\controllers\subsystem\game_events.dm" #include "code\controllers\subsystem\garbage.dm" #include "code\controllers\subsystem\ghost_spawns.dm" @@ -428,12 +434,14 @@ #include "code\datums\components\after_attacks_hub.dm" #include "code\datums\components\aura_healing.dm" #include "code\datums\components\animal_temperature.dm" +#include "code\datums\components\blob_minion.dm" #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" #include "code\datums\components\caltrop.dm" #include "code\datums\components\chasm.dm" #include "code\datums\components\codeword_hearing.dm" #include "code\datums\components\combo_attacks.dm" +#include "code\datums\components\connect_containers.dm" #include "code\datums\components\connect_loc_behalf.dm" #include "code\datums\components\connect_mob_behalf.dm" #include "code\datums\components\contsruction_regenerate.dm" @@ -463,6 +471,7 @@ #include "code\datums\components\spawner.dm" #include "code\datums\components\spooky.dm" #include "code\datums\components\squeak.dm" +#include "code\datums\components\stationloving.dm" #include "code\datums\components\surgery_initiator.dm" #include "code\datums\components\swarming.dm" #include "code\datums\components\transforming.dm" @@ -749,17 +758,6 @@ #include "code\game\gamemodes\blob\blob.dm" #include "code\game\gamemodes\blob\blob_finish.dm" #include "code\game\gamemodes\blob\blob_report.dm" -#include "code\game\gamemodes\blob\overmind.dm" -#include "code\game\gamemodes\blob\powers.dm" -#include "code\game\gamemodes\blob\theblob.dm" -#include "code\game\gamemodes\blob\blobs\blob_mobs.dm" -#include "code\game\gamemodes\blob\blobs\captured_nuke.dm" -#include "code\game\gamemodes\blob\blobs\core.dm" -#include "code\game\gamemodes\blob\blobs\factory.dm" -#include "code\game\gamemodes\blob\blobs\node.dm" -#include "code\game\gamemodes\blob\blobs\resource.dm" -#include "code\game\gamemodes\blob\blobs\shield.dm" -#include "code\game\gamemodes\blob\blobs\storage.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\thief_chan.dm" #include "code\game\gamemodes\changeling\traitor_chan.dm" @@ -1106,6 +1104,8 @@ #include "code\game\objects\effects\effect_system\effects_smoke.dm" #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" +#include "code\game\objects\effects\effect_system\fluid_spread\_fluid_spread.dm" +#include "code\game\objects\effects\effect_system\fluid_spread\effects_smoke.dm" #include "code\game\objects\effects\spawners\airlock_spawner.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" @@ -1574,8 +1574,47 @@ #include "code\modules\antagonists\_common\antag_spawner.dm" #include "code\modules\antagonists\_common\antag_team.dm" #include "code\modules\antagonists\blob\blob_actions.dm" +#include "code\modules\antagonists\blob\blob_antag.dm" #include "code\modules\antagonists\blob\blob_infected_datum.dm" +#include "code\modules\antagonists\blob\blob_minion.dm" #include "code\modules\antagonists\blob\blob_overmind_datum.dm" +#include "code\modules\antagonists\blob\blobs_attack.dm" +#include "code\modules\antagonists\blob\overmind copy.dm" +#include "code\modules\antagonists\blob\overmind.dm" +#include "code\modules\antagonists\blob\powers copy.dm" +#include "code\modules\antagonists\blob\powers.dm" +#include "code\modules\antagonists\blob\blob_minions\blob_mob.dm" +#include "code\modules\antagonists\blob\blob_minions\blob_spore.dm" +#include "code\modules\antagonists\blob\blob_minions\blob_zombie.dm" +#include "code\modules\antagonists\blob\blob_minions\blobbernaut.dm" +#include "code\modules\antagonists\blob\blobs\blob_mobs.dm" +#include "code\modules\antagonists\blob\blobstrains\_blobstrain.dm" +#include "code\modules\antagonists\blob\blobstrains\_reagent.dm" +#include "code\modules\antagonists\blob\blobstrains\blazing_oil.dm" +#include "code\modules\antagonists\blob\blobstrains\cryogenic_poison.dm" +#include "code\modules\antagonists\blob\blobstrains\debris_devourer.dm" +#include "code\modules\antagonists\blob\blobstrains\distributed_neurons.dm" +#include "code\modules\antagonists\blob\blobstrains\electromagnetic_web.dm" +#include "code\modules\antagonists\blob\blobstrains\energized_jelly.dm" +#include "code\modules\antagonists\blob\blobstrains\explosive_lattice.dm" +#include "code\modules\antagonists\blob\blobstrains\multiplex.dm" +#include "code\modules\antagonists\blob\blobstrains\networked_fibers.dm" +#include "code\modules\antagonists\blob\blobstrains\pressurized_slime.dm" +#include "code\modules\antagonists\blob\blobstrains\reactive_spines.dm" +#include "code\modules\antagonists\blob\blobstrains\regenerative_materia.dm" +#include "code\modules\antagonists\blob\blobstrains\replicating_foam.dm" +#include "code\modules\antagonists\blob\blobstrains\shifting_fragments.dm" +#include "code\modules\antagonists\blob\blobstrains\synchronous_mesh.dm" +#include "code\modules\antagonists\blob\structures\_blob.dm" +#include "code\modules\antagonists\blob\structures\captured_nuke.dm" +#include "code\modules\antagonists\blob\structures\core.dm" +#include "code\modules\antagonists\blob\structures\factory.dm" +#include "code\modules\antagonists\blob\structures\node.dm" +#include "code\modules\antagonists\blob\structures\normal.dm" +#include "code\modules\antagonists\blob\structures\resource.dm" +#include "code\modules\antagonists\blob\structures\shield.dm" +#include "code\modules\antagonists\blob\structures\special.dm" +#include "code\modules\antagonists\blob\structures\storage.dm" #include "code\modules\antagonists\changeling\changeling_datum.dm" #include "code\modules\antagonists\changeling\changeling_power.dm" #include "code\modules\antagonists\changeling\evolution_menu.dm" @@ -2328,6 +2367,7 @@ #include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_emote.dm" #include "code\modules\mob\mob_helpers.dm" +#include "code\modules\mob\mob_lists.dm" #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_say.dm" #include "code\modules\mob\mob_transformation_simple.dm" From 71666d3782bcb328a25aa5c0d09735ea85487a51 Mon Sep 17 00:00:00 2001 From: dageavtobusnick <71216640+dageavtobusnick@users.noreply.github.com> Date: Sun, 20 Oct 2024 22:47:15 +0500 Subject: [PATCH 02/11] part_2. port ended. Game running and blob works --- code/__DEFINES/blob.dm | 10 +- code/__DEFINES/dcs/signals.dm | 28 + code/__DEFINES/dcs/signals_blob.dm | 5 + code/__DEFINES/gamemode.dm | 1 + code/__DEFINES/generators.dm | 12 + code/__DEFINES/mobs.dm | 5 + code/__DEFINES/obj_flags.dm | 2 + code/__DEFINES/particles.dm | 5 + code/__HELPERS/unsorted.dm | 4 +- code/_onclick/hud/ai.dm | 3 - code/_onclick/hud/alien.dm | 4 - code/_onclick/hud/alien_larva.dm | 4 - code/_onclick/hud/blob_overmind.dm | 99 ++-- code/_onclick/hud/blobbernaut.dm | 2 +- code/_onclick/hud/bot.dm | 3 - code/_onclick/hud/constructs.dm | 18 +- code/_onclick/hud/devil.dm | 8 +- code/_onclick/hud/ghost.dm | 5 - code/_onclick/hud/guardian.dm | 4 - code/_onclick/hud/hud.dm | 2 +- code/_onclick/hud/human.dm | 10 +- code/_onclick/hud/other_mobs.dm | 20 - code/_onclick/hud/robot.dm | 4 - code/_onclick/hud/slime.dm | 4 - code/_onclick/hud/swarmer.dm | 3 - code/controllers/subsystem/fluids.dm | 7 - code/datums/components/_component.dm | 4 + code/datums/components/blob_minion.dm | 15 +- code/datums/components/blob_turf_consuming.dm | 34 ++ .../datums/components/ghost_direct_control.dm | 150 ++++++ code/datums/mind.dm | 28 +- code/datums/status_effects/screwy_hud.dm | 58 +++ code/game/atoms.dm | 16 +- code/game/gamemodes/blob/blob.dm | 6 +- code/game/gamemodes/blob/blob_finish.dm | 8 +- code/game/gamemodes/blob/blobs/_blob.dm | 313 ----------- .../gamemodes/devil/true_devil/_true_devil.dm | 3 +- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 2 + .../game/gamemodes/miniantags/demons/demon.dm | 1 + .../gamemodes/miniantags/guardian/guardian.dm | 1 + .../gamemodes/miniantags/revenant/revenant.dm | 1 + .../miniantags/revenant/revenant_abilities.dm | 2 +- code/game/machinery/camera/motion.dm | 2 +- code/game/machinery/portable_turret.dm | 2 +- code/game/mecha/mecha.dm | 2 +- .../fluid_spread/effects_smoke.dm | 2 +- code/game/objects/effects/particle_holder.dm | 70 +++ code/game/objects/effects/particles/water.dm | 14 + code/game/objects/items.dm | 5 +- .../items/devices/scanners/gas_analyzer.dm | 4 +- code/game/objects/obj_defense.dm | 6 +- .../crates_lockers/closets/fireaxe.dm | 10 + code/game/turfs/simulated/floor/plating.dm | 10 +- code/game/turfs/simulated/minerals.dm | 6 + code/game/turfs/simulated/walls.dm | 12 +- code/game/turfs/simulated/walls_reinforced.dm | 5 + code/game/turfs/space/space.dm | 6 +- code/game/turfs/turf.dm | 10 +- code/modules/admin/player_panel.dm | 7 +- code/modules/admin/topic.dm | 24 +- code/modules/antagonists/blob/blob_actions.dm | 34 +- code/modules/antagonists/blob/blob_antag.dm | 114 ---- .../antagonists/blob/blob_infected_datum.dm | 23 +- code/modules/antagonists/blob/blob_minion.dm | 76 ++- .../antagonists/blob/blob_minions/blob_mob.dm | 31 +- .../blob/blob_minions/blob_spore.dm | 47 +- .../blob/blob_minions/blob_zombie.dm | 39 +- .../blob/blob_minions/blobbernaut.dm | 34 +- .../antagonists/blob/blob_overmind_datum.dm | 5 +- .../antagonists/blob/blobs/blob_mobs.dm | 264 ---------- code/modules/antagonists/blob/blobs_attack.dm | 2 +- .../blob/blobstrains/_blobstrain.dm | 5 +- .../antagonists/blob/blobstrains/_reagent.dm | 19 +- .../blob/blobstrains/blazing_oil.dm | 11 +- .../blob/blobstrains/cryogenic_poison.dm | 9 +- .../blob/blobstrains/debris_devourer.dm | 7 +- .../blob/blobstrains/distributed_neurons.dm | 13 +- .../blob/blobstrains/electromagnetic_web.dm | 5 +- .../blob/blobstrains/energized_jelly.dm | 5 +- .../blob/blobstrains/explosive_lattice.dm | 5 +- .../blob/blobstrains/networked_fibers.dm | 10 +- .../blob/blobstrains/old_blob_reagents.dm} | 81 +-- .../blob/blobstrains/pressurized_slime.dm | 17 +- .../blob/blobstrains/reactive_spines.dm | 5 +- .../blob/blobstrains/regenerative_materia.dm | 9 +- .../blob/blobstrains/replicating_foam.dm | 5 +- .../blob/blobstrains/shifting_fragments.dm | 5 +- .../blob/blobstrains/synchronous_mesh.dm | 7 +- .../modules/antagonists/blob/overmind copy.dm | 96 ---- code/modules/antagonists/blob/overmind.dm | 230 +++++---- code/modules/antagonists/blob/powers copy.dm | 485 ------------------ code/modules/antagonists/blob/powers.dm | 218 ++++---- code/modules/antagonists/blob/powers_verbs.dm | 34 ++ .../antagonists/blob/structures/_blob.dm | 31 +- .../blob/structures/captured_nuke.dm | 2 +- .../antagonists/blob/structures/core.dm | 18 +- .../antagonists/blob/structures/factory.dm | 14 +- .../antagonists/blob/structures/node.dm | 7 +- .../antagonists/blob/structures/resource.dm | 6 +- .../antagonists/blob/structures/special.dm | 2 +- .../antagonists/blob/structures/storage.dm | 12 +- code/modules/mob/dead/observer/observer.dm | 1 + code/modules/mob/living/carbon/alien/alien.dm | 18 +- .../carbon/alien/humanoid/caste/sentinel.dm | 1 + .../living/carbon/alien/humanoid/humanoid.dm | 1 + .../mob/living/carbon/alien/humanoid/queen.dm | 1 + .../carbon/alien/humanoid/update_icons.dm | 1 + .../mob/living/carbon/alien/larva/larva.dm | 2 + code/modules/mob/living/carbon/carbon.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 5 +- .../mob/living/carbon/human/human_defines.dm | 1 + .../mob/living/carbon/human/update_icons.dm | 1 + code/modules/mob/living/carbon/life.dm | 2 + code/modules/mob/living/life.dm | 1 + code/modules/mob/living/living.dm | 14 + code/modules/mob/living/living_defense.dm | 63 ++- code/modules/mob/living/living_defines.dm | 12 + .../mob/living/living_infected_blob_mobs.dm | 4 + code/modules/mob/living/living_say.dm | 4 + code/modules/mob/living/silicon/ai/ai.dm | 8 +- code/modules/mob/living/silicon/pai/pai.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 1 + code/modules/mob/living/silicon/silicon.dm | 1 + .../living/simple_animal/animal_defense.dm | 5 +- .../mob/living/simple_animal/bot/bot.dm | 4 + .../mob/living/simple_animal/constructs.dm | 5 + .../mob/living/simple_animal/friendly/dog.dm | 1 + .../living/simple_animal/friendly/slugcat.dm | 1 + .../simple_animal/hostile/giant_spider.dm | 1 + .../living/simple_animal/hostile/hostile.dm | 37 +- .../living/simple_animal/hostile/illusion.dm | 1 + .../simple_animal/hostile/retaliate/pet.dm | 1 + .../hostile/terror_spiders/terror_spiders.dm | 3 + .../mob/living/simple_animal/simple_animal.dm | 12 +- .../mob/living/simple_animal/slime/say.dm | 11 - .../mob/living/simple_animal/slime/slime.dm | 7 +- code/modules/mob/mob.dm | 9 +- code/modules/mob/mob_defines.dm | 8 +- code/modules/mob/mob_say.dm | 26 +- code/modules/mob/mob_transformation_simple.dm | 4 +- code/modules/power/gravitygenerator.dm | 7 +- .../power/singularity/field_generator.dm | 2 +- .../particle_accelerator.dm | 4 - code/modules/reagents/chemistry/holder.dm | 9 +- .../chemistry/machinery/chem_master.dm | 4 - code/modules/reagents/chemistry/reagents.dm | 10 + .../reagents/chemistry/reagents/toxins.dm | 35 +- code/modules/surgery/organs/organ_external.dm | 3 + icons/effects/particles/bonfire.dmi | Bin 0 -> 273 bytes icons/effects/particles/echo.dmi | Bin 0 -> 283 bytes icons/effects/particles/generic.dmi | Bin 0 -> 545 bytes icons/effects/particles/goop.dmi | Bin 0 -> 349 bytes icons/effects/particles/pollen.dmi | Bin 0 -> 346 bytes icons/effects/particles/smoke.dmi | Bin 0 -> 1274 bytes icons/effects/particles/stink.dmi | Bin 0 -> 259 bytes icons/effects/particles/voidwalker.dmi | Bin 0 -> 326 bytes icons/hud/blob.dmi | Bin 25760 -> 32593 bytes icons/mob/blob.dmi | Bin 1305528 -> 1273172 bytes paradise.dme | 33 +- 159 files changed, 1514 insertions(+), 2032 deletions(-) create mode 100644 code/__DEFINES/generators.dm create mode 100644 code/__DEFINES/particles.dm create mode 100644 code/datums/components/blob_turf_consuming.dm create mode 100644 code/datums/components/ghost_direct_control.dm create mode 100644 code/datums/status_effects/screwy_hud.dm delete mode 100644 code/game/gamemodes/blob/blobs/_blob.dm create mode 100644 code/game/objects/effects/particle_holder.dm create mode 100644 code/game/objects/effects/particles/water.dm delete mode 100644 code/modules/antagonists/blob/blob_antag.dm delete mode 100644 code/modules/antagonists/blob/blobs/blob_mobs.dm rename code/modules/{reagents/chemistry/reagents/blob.dm => antagonists/blob/blobstrains/old_blob_reagents.dm} (70%) delete mode 100644 code/modules/antagonists/blob/overmind copy.dm delete mode 100644 code/modules/antagonists/blob/powers copy.dm create mode 100644 code/modules/antagonists/blob/powers_verbs.dm create mode 100644 icons/effects/particles/bonfire.dmi create mode 100644 icons/effects/particles/echo.dmi create mode 100644 icons/effects/particles/generic.dmi create mode 100644 icons/effects/particles/goop.dmi create mode 100644 icons/effects/particles/pollen.dmi create mode 100644 icons/effects/particles/smoke.dmi create mode 100644 icons/effects/particles/stink.dmi create mode 100644 icons/effects/particles/voidwalker.dmi diff --git a/code/__DEFINES/blob.dm b/code/__DEFINES/blob.dm index dc59d9859f8..84bca9a0573 100644 --- a/code/__DEFINES/blob.dm +++ b/code/__DEFINES/blob.dm @@ -48,7 +48,7 @@ #define FIRST_STAGE_WARN span_userdanger("Вы чувствуете усталость и раздутость.") #define SECOND_STAGE_WARN span_userdanger("Вы чувствуете, что вот-вот лопнете.") -#define isblobbernaut(M) istype((M), /mob/living/simple_animal/hostile/blob/blobbernaut) +#define isblobbernaut(M) istype((M), /mob/living/simple_animal/hostile/blob_minion/blobbernaut) //Few global vars to track the blob GLOBAL_LIST_EMPTY(blobs) @@ -67,6 +67,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_BASE_POINT_RATE 2 // Base amount of points per process() #define BLOB_EXPAND_COST 4 // Price to expand onto a new tile +#define BLOB_ZOMBIFICATION_COST 5 #define BLOB_ATTACK_REFUND 2 // Points 'refunded' when the expand attempt actually attacks something instead #define BLOB_BRUTE_RESIST 0.5 // Brute damage taken gets multiplied by this value #define BLOB_FIRE_RESIST 1 // Burn damage taken gets multiplied by this value @@ -124,6 +125,8 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_REFLECTOR_HP_REGEN 2 #define BLOB_STORAGE_MAX_HP 30 +#define BLOB_STORAGE_MAX_POINTS_BONUS 50 +#define BLOB_STORAGE_MIN_DISTANCE 3 #define BLOB_STORAGE_FIRE_RESIST 2 @@ -132,8 +135,10 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOB_UPGRADE_STRONG_COST 15 // Upgrade and build costs here #define BLOB_UPGRADE_REFLECTOR_COST 15 #define BLOB_STRUCTURE_RESOURCE_COST 40 +#define BLOB_STRUCTURE_STORAGE_COST 40 #define BLOB_STRUCTURE_FACTORY_COST 60 #define BLOB_STRUCTURE_NODE_COST 50 +#define BLOB_CORE_SPLIT_COST 100 #define BLOB_REFUND_STRONG_COST 4 // Points refunded when destroying the structure #define BLOB_REFUND_REFLECTOR_COST 8 @@ -169,4 +174,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) #define BLOBMOB_BLOBBERNAUT_DMG_OBJ 60 // Damage dealth to objects/machines #define BLOBMOB_BLOBBERNAUT_HEALING_CORE 0.05 // Percentage multiplier HP restored on Life() when within 2 tiles of the blob core #define BLOBMOB_BLOBBERNAUT_HEALING_NODE 0.025 // Same, but for a nearby node +#define BLOBMOB_BLOBBERNAUT_HEALING_TILE 0.0125 // Same, but for a nearby blob tile #define BLOBMOB_BLOBBERNAUT_HEALTH_DECAY 0.0125 // Percentage multiplier HP lost when not near blob tiles or without factory + +#define BLOB_ACT_PROTECTION_TIME 2 SECONDS diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 1dcafee2bf0..c62145f7011 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -139,6 +139,8 @@ #define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" ///from base of atom/blob_act(): (/obj/structure/blob) #define COMSIG_ATOM_BLOB_ACT "atom_blob_act" + /// if returned, forces nothing to happen when the atom is attacked by a blob + #define COMPONENT_CANCEL_BLOB_ACT (1<<0) ///from base of atom/acid_act(): (acidpwr, acid_volume) #define COMSIG_ATOM_ACID_ACT "atom_acid_act" ///from base of atom/emag_act(): (/mob/user) @@ -387,6 +389,8 @@ #define COMSIG_MOB_LOGIN "mob_login" ///from base of /mob/Logout(): () #define COMSIG_MOB_LOGOUT "mob_logout" +///from base of /mob/mind_initialize +#define COMSIG_MOB_MIND_INITIALIZED "mob_mind_inited" ///from base of mob/death(): (gibbed) #define COMSIG_MOB_DEATH "mob_death" ///from base of mob/ghostize(): (mob/dead/observer/ghost) @@ -468,6 +472,9 @@ ////from mob/living/adjust_fire_stacks() #define COMSIG_MOB_ADJUST_FIRE "mob_adjust_fire" +////from mob/living/adjust_wet_stacks() +#define COMSIG_MOB_ADJUST_WET "mob_adjust_wet" + ///from base of /mob/living/toggle_move_intent(): (old_move_intent) #define COMSIG_MOB_MOVE_INTENT_TOGGLE "mob_move_intent_toggle" #define COMPONENT_BLOCK_INTENT_TOGGLE (1<<0) @@ -506,6 +513,9 @@ /// Performed after the hands are swapped. #define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" +/// from mob/get_status_tab_items(): (list/items) +#define COMSIG_MOB_GET_STATUS_TAB_ITEMS "mob_get_status_tab_items" + ///From base of mob/update_movespeed():area #define COMSIG_MOB_MOVESPEED_UPDATED "mob_update_movespeed" @@ -518,6 +528,8 @@ #define COMSIG_CLIENT_SET_EYE "client_set_eye" // from /client/proc/change_view() : (new_size) #define COMSIG_VIEW_SET "view_set" +/// from /mob/proc/change_mob_type() : () +#define COMSIG_MOB_CHANGED_TYPE "mob_changed_type" // /mob/living signals @@ -525,6 +537,8 @@ #define COMSIG_LIVING_RESIST "living_resist" ///from base of mob/living/IgniteMob() (/mob/living) #define COMSIG_LIVING_IGNITED "living_ignite" +///from base of mob/living/WetMob() (/mob/living) +#define COMSIG_LIVING_WET "living_weted" ///from base of mob/living/ExtinguishMob() (/mob/living) #define COMSIG_LIVING_EXTINGUISHED "living_extinguished" ///from base of mob/living/electrocute_act(): (shock_damage, source, siemens_coeff, flags) @@ -557,6 +571,8 @@ #define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon" ///sent from living mobs every tick of fire #define COMSIG_LIVING_FIRE_TICK "living_fire_tick" +///sent from living mobs every tick of wet +#define COMSIG_LIVING_WET_TICK "living_wet_tick" //sent from living mobs when they are ahealed #define COMSIG_LIVING_AHEAL "living_aheal" ///From living/Life(). (deltatime, times_fired) @@ -577,6 +593,10 @@ #define COMSIG_LIVING_RESTING "living_resting" ///from base of mob/update_transform() #define COMSIG_LIVING_POST_UPDATE_TRANSFORM "living_post_update_transform" +/// From mob/living/try_speak(): (message) +#define COMSIG_MOB_TRY_SPEECH "living_vocal_speech" + /// Return if the mob cannot speak. + #define COMPONENT_CANNOT_SPEAK (1<<0) ///called on /living when someone starts pulling (atom/movable/pulled, state, force) #define COMSIG_LIVING_START_PULL "living_start_pull" @@ -591,6 +611,8 @@ /// Called from /mob/living/PushAM -- Called when this mob is about to push a movable, but before it moves /// (aotm/movable/being_pushed) #define COMSIG_LIVING_PUSHING_MOVABLE "living_pushing_movable" +///from base of /mob/living/examine(): (mob/user, list/.) +#define COMSIG_LIVING_EXAMINE "living_examine" ///from base of mob/living/Stun() (amount, ignore_canstun) #define COMSIG_LIVING_STATUS_STUN "living_stun" @@ -676,6 +698,9 @@ #define COMSIG_CARBON_APPLY_OVERLAY "carbon_apply_overlay" ///Called from remove_overlay(cache_index, overlay) #define COMSIG_CARBON_REMOVE_OVERLAY "carbon_remove_overlay" +#define COMSIG_CARBON_UPDATING_HEALTH_HUD "carbon_health_hud_update" + /// Return if you override the carbon's health hud with something else + #define COMPONENT_OVERRIDE_HEALTH_HUD (1<<0) // /mob/living/simple_animal signals ///from /mob/living/attack_animal(): (mob/living/simple_animal/M) @@ -686,6 +711,9 @@ #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" #define COMPONENT_HOSTILE_NO_ATTACK (1<<0) +///after attackingtarget has happened, source is the attacker and target is the attacked, extra argument for if the attackingtarget was successful +#define COMSIG_HOSTILE_POST_ATTACKINGTARGET "hostile_post_attackingtarget" + /// Called when a /mob/living/simple_animal/hostile fines a new target: (atom/source, give_target) #define COMSIG_HOSTILE_FOUND_TARGET "comsig_hostile_found_target" diff --git a/code/__DEFINES/dcs/signals_blob.dm b/code/__DEFINES/dcs/signals_blob.dm index afd4737bdd9..3fd9a3ec608 100644 --- a/code/__DEFINES/dcs/signals_blob.dm +++ b/code/__DEFINES/dcs/signals_blob.dm @@ -2,3 +2,8 @@ #define COMSIG_BLOB_SELECTED_STRAIN "blob_selected_strain" /// Signal sent by a blob spore when it creates a zombie (/mob/living/basic/blob_minion/spore/spore, //mob/living/basic/blob_minion/zombie/zombie) #define COMSIG_BLOB_ZOMBIFIED "blob_zombified" + +/// Signal sent by a blob when it try expand +#define COMSIG_TRY_CONSUME_TURF "try_consume_turf" + /// Component blocks consuming + #define COMPONENT_CANT_CONSUME (1<<0) diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm index 2f2f64db4f5..42884694433 100644 --- a/code/__DEFINES/gamemode.dm +++ b/code/__DEFINES/gamemode.dm @@ -31,6 +31,7 @@ #define SPECIAL_ROLE_ABDUCTOR_SCIENTIST "Abductor Scientist" #define SPECIAL_ROLE_BLOB "Blob" #define SPECIAL_ROLE_BLOB_OVERMIND "Blob Overmind" +#define SPECIAL_ROLE_BLOB_MINION "Blob Minion" #define SPECIAL_ROLE_BORER "Borer" #define SPECIAL_ROLE_CARP "Space Carp" #define SPECIAL_ROLE_CHANGELING "Changeling" diff --git a/code/__DEFINES/generators.dm b/code/__DEFINES/generators.dm new file mode 100644 index 00000000000..3ad34d39f2c --- /dev/null +++ b/code/__DEFINES/generators.dm @@ -0,0 +1,12 @@ +//generator types +#define GEN_NUM "num" +#define GEN_VECTOR "vector" +#define GEN_BOX "box" +#define GEN_CIRCLE "circle" +#define GEN_SPHERE "sphere" + +///particle editor var modifiers +#define P_DATA_GENERATOR "generator" +#define P_DATA_ICON_ADD "icon_add" +#define P_DATA_ICON_REMOVE "icon_remove" +#define P_DATA_ICON_WEIGHT "icon_edit" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 234865da160..fe888c04117 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -64,6 +64,8 @@ ////////REAGENT STUFF//////// // How many units of reagent are consumed per tick, by default. #define REAGENTS_METABOLISM 0.4 +#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism +#define REM REAGENTS_EFFECT_MULTIPLIER //! Shorthand for the above define for ease of use in equations and the like // Factor of how fast mob nutrition decreases #define HUNGER_FACTOR 0.1 @@ -319,6 +321,8 @@ #define isAIEye(A) (istype((A), /mob/camera/aiEye)) #define isovermind(A) (istype((A), /mob/camera/blob)) +#define isminion(A) (istype((A), /mob/living/simple_animal/hostile/blob_minion)) + #define isSpirit(A) (istype((A), /mob/spirit)) #define ismask(A) (istype((A), /mob/spirit/mask)) @@ -442,6 +446,7 @@ /// Makes the weaken into a knockdown #define SHOCK_KNOCKDOWN (1<<7) + /// Vomit defines #define VOMIT_NUTRITION_LOSS 10 #define VOMIT_STUN_TIME (8 SECONDS) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index dd64f3f88af..625ea9e3d55 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -16,6 +16,8 @@ #define NODECONSTRUCT (1<<5) /// Objects will ignore item attacks #define IGNORE_HITS (1<<6) +/// Objects will ignore blob_act +#define IGNORE_BLOB_ACT (1<<7) // Flags for the item_flags var on /obj/item diff --git a/code/__DEFINES/particles.dm b/code/__DEFINES/particles.dm new file mode 100644 index 00000000000..5657566a63b --- /dev/null +++ b/code/__DEFINES/particles.dm @@ -0,0 +1,5 @@ +// /obj/effect/abstract/particle_holder/var/particle_flags +// Flags that effect how a particle holder displays something + +/// If we're inside something inside a mob, display off that mob too +#define PARTICLE_ATTACH_MOB (1<<0) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 631b480129c..850216a9547 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -511,8 +511,8 @@ Returns 1 if the chain up to the area contains the given typepath ///Step-towards method of determining whether one atom can see another. Similar to viewers() ///note: this is a line of sight algorithm, view() does not do any sort of raycasting and cannot be emulated by it accurately -/proc/can_see(atom/source, atom/target, length = 5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. - var/turf/current_turf = get_turf(source) +/atom/proc/can_see(atom/target, length = 5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. + var/turf/current_turf = get_turf(src) var/turf/target_turf = get_turf(target) if(!current_turf || !target_turf) // nullspace return FALSE diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index aeb47d7f953..b97d312700d 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -158,9 +158,6 @@ var/mob/living/silicon/ai/AI = usr AI.move_down() -/mob/living/silicon/ai/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/ai(src) /datum/hud/ai/New(mob/owner) ..() diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 9c05d0a72d5..cc9b1def284 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -26,10 +26,6 @@ screen_loc = ui_alienplasmadisplay -/mob/living/carbon/alien/humanoid/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/alien(src) - /datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) ..() diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 3be0fd9487d..229b290f268 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -1,7 +1,3 @@ -/mob/living/carbon/alien/larva/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/larva(src) - /datum/hud/larva/New(mob/owner) ..() diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 1494bf44383..003172a27dc 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -1,7 +1,3 @@ -/mob/camera/blob/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/blob_overmind(src) - /atom/movable/screen/blob icon = 'icons/hud/blob.dmi' @@ -13,7 +9,7 @@ /atom/movable/screen/blob/BlobHelp icon_state = "ui_help" - name = "Blob Help" + name = "Помощь" desc = "Помощь по игре за блоба!" /atom/movable/screen/blob/BlobHelp/Click() @@ -23,7 +19,7 @@ /atom/movable/screen/blob/JumpToNode icon_state = "ui_tonode" - name = "Jump to Node" + name = "К узлу" desc = "Перемещает вашу камеру к выбранному узлу." /atom/movable/screen/blob/JumpToNode/Click() @@ -33,7 +29,7 @@ /atom/movable/screen/blob/JumpToCore icon_state = "ui_tocore" - name = "Jump to Core" + name = "К ядру" desc = "Перемещает вашу камеру к вашему ядру." /atom/movable/screen/blob/JumpToCore/MouseEntered(location,control,params) @@ -49,8 +45,13 @@ /atom/movable/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" - name = "Produce Blobbernaut (60)" - desc = "Производит сильного и умного блоббернаута из фабрики за 60 ресурсов.
    Фабрика будет уничтожена в процессе." + name = "Создать блобернаута (ERROR)" + desc = "Создает сильного и умного блоббернаута из фабрики за ERROR ресурсов.
    Фабрика станет хрупкой и не сможет производить споры." + +/atom/movable/screen/blob/Blobbernaut/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Создать блобернаута ([BLOBMOB_BLOBBERNAUT_RESOURCE_COST])" + desc = "Создает сильного и умного блоббернаута из фабрики за [BLOBMOB_BLOBBERNAUT_RESOURCE_COST] ресурсов.
    Фабрика станет хрупкой и не сможет производить споры." /atom/movable/screen/blob/Blobbernaut/Click() if(isovermind(usr)) @@ -59,70 +60,96 @@ /atom/movable/screen/blob/StorageBlob icon_state = "ui_storage" - name = "Produce Storage Blob (40)" - desc = "Производит хранилище за 40 ресурсов.
    Хранилища увеличат ваш максимальный лимит ресурсов на 50." + name = "Создать хранилище (ERROR)" + desc = "Создает хранилище за ERROR ресурсов.
    Хранилища увеличивают ваш максимальный лимит ресурсов на ERROR." + +/atom/movable/screen/blob/StorageBlob/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Создать хранилище ([BLOB_STRUCTURE_STORAGE_COST])" + desc = "Создает хранилище за [BLOB_STRUCTURE_STORAGE_COST] ресурсов.
    Хранилища увеличивают ваш максимальный лимит ресурсов на [BLOB_STORAGE_MAX_POINTS_BONUS]." /atom/movable/screen/blob/StorageBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr - B.create_storage() + B.create_special(BLOB_STRUCTURE_STORAGE_COST, /obj/structure/blob/storage, BLOB_STORAGE_MIN_DISTANCE, TRUE) /atom/movable/screen/blob/ResourceBlob icon_state = "ui_resource" - name = "Produce Resource Blob (40)" - desc = "Производит ресурсную плитку за 40 ресурсов.
    Ресурсные плитки будут приносить вам ресурсы каждые несколько секунд." + name = "Создать ресурсную плитку (ERROR)" + desc = "Создает ресурсную плитку за ERROR ресурсов.
    Ресурсные плитки будут приносить вам ресурсы каждые несколько секунд." + +/atom/movable/screen/blob/ResourceBlob/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Создать ресурсную плитку ([BLOB_STRUCTURE_RESOURCE_COST])" + desc = "Создает ресурсную плитку за [BLOB_STRUCTURE_RESOURCE_COST] ресурсов.
    Ресурсные плитки будут приносить вам ресурсы каждые несколько секунд." /atom/movable/screen/blob/ResourceBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr - B.create_resource() + B.create_special(BLOB_STRUCTURE_RESOURCE_COST, /obj/structure/blob/special/resource, BLOB_RESOURCE_MIN_DISTANCE, TRUE) /atom/movable/screen/blob/NodeBlob icon_state = "ui_node" - name = "Produce Node Blob (60)" - desc = "Производит узел за 60 ресурсов.
    Узлы будут расширяться и активировать ближайшие ресурсные плитки и фабрики." + name = "Создать узел (ERROR)" + desc = "Создает узел за ERROR ресурсов.
    Узлы будут расширяться и активировать ближайшие ресурсные плитки и фабрики." + +/atom/movable/screen/blob/NodeBlob/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Создать узел ([BLOB_STRUCTURE_NODE_COST])" + desc = "Создает узел за [BLOB_STRUCTURE_NODE_COST] ресурсов.
    Узлы будут расширяться и активировать ближайшие ресурсные плитки и фабрики." /atom/movable/screen/blob/NodeBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr - B.create_node() + B.create_special(BLOB_STRUCTURE_NODE_COST, /obj/structure/blob/special/node, BLOB_NODE_MIN_DISTANCE, FALSE) /atom/movable/screen/blob/FactoryBlob icon_state = "ui_factory" - name = "Produce Factory Blob (ERROR)" + name = "Создать фабрику (ERROR)" desc = "Производит фабрику за ERROR ресурсов.
    Фабрики будут производить споры каждые несколько секунд." /atom/movable/screen/blob/FactoryBlob/Initialize(mapload, datum/hud/hud_owner) . = ..() - name = "Produce Factory Blob ([BLOB_STRUCTURE_FACTORY_COST])" - desc = "Производит фабрику за [BLOB_STRUCTURE_FACTORY_COST] ресурсов.
    Фабрики будут производить споры каждые несколько секунд." + name = "Создать фабрику ([BLOB_STRUCTURE_FACTORY_COST])" + desc = "Создает фабрику за [BLOB_STRUCTURE_FACTORY_COST] ресурсов.
    Фабрики будут производить споры каждые несколько секунд." /atom/movable/screen/blob/FactoryBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr - B.create_factory() + B.create_special(BLOB_STRUCTURE_FACTORY_COST, /obj/structure/blob/special/factory, BLOB_FACTORY_MIN_DISTANCE, TRUE) + -/atom/movable/screen/blob/ReadaptChemical +/atom/movable/screen/blob/ReadaptStrain icon_state = "ui_chemswap" - name = "Readapt Chemical (50)" - desc = "Случайно изменяет ваш химикат за 50 ресурсов." + name = "Реадаптация штамма" + desc = "Позволяет вам выбрать новый штамм из случайных вариантов за Error ресурсов." -/atom/movable/screen/blob/ReadaptChemical/MouseEntered(location,control,params) +/atom/movable/screen/blob/ReadaptStrain/MouseEntered(location,control,params) if(hud && hud.mymob && isovermind(hud.mymob)) - name = initial(name) - desc = initial(desc) + var/mob/camera/blob/B = hud.mymob + if(B.free_strain_rerolls) + name = "[initial(name)] (FREE)" + desc = "Случайно меняет ваш штамм бесплатно." + else + name = "[initial(name)] ([BLOB_POWER_REROLL_COST])" + desc = "Позволяет вам выбрать новый штамм из [BLOB_POWER_REROLL_CHOICES] случайных вариантов за [BLOB_POWER_REROLL_COST] ресурсов." ..() -/atom/movable/screen/blob/ReadaptChemical/Click() +/atom/movable/screen/blob/ReadaptStrain/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr - B.chemical_reroll() + B.strain_reroll() /atom/movable/screen/blob/RelocateCore icon_state = "ui_swap" - name = "Relocate Core (80)" - desc = "Меняет местами узел и ваше ядро за 80 ресурсов." + name = "Переместить ядро (ERROR)" + desc = "Меняет местами узел и ваше ядро за ERROR ресурсов." + +/atom/movable/screen/blob/RelocateCore/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Переместить ядро ([BLOB_POWER_RELOCATE_COST])" + desc = "Меняет местами узел и ваше ядро за [BLOB_POWER_RELOCATE_COST] ресурсов." /atom/movable/screen/blob/RelocateCore/Click() if(isovermind(usr)) @@ -131,9 +158,13 @@ /atom/movable/screen/blob/Split icon_state = "ui_split" - name = "Split consciousness (100)" + name = "Разделить сознание (ERROR)" desc = "Создаёт ещё одного блоба на выбранном узле. Может быть использовано 1 раз.
    Потомки не могут использовать это умение." +/atom/movable/screen/blob/Split/Initialize(mapload, datum/hud/hud_owner) + . = ..() + name = "Разделить сознание ([BLOB_CORE_SPLIT_COST])" + /atom/movable/screen/blob/Split/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr @@ -187,7 +218,7 @@ using.screen_loc = using.screen_loc = ui_lhand static_inventory += using - using = new /atom/movable/screen/blob/ReadaptChemical(null, src) + using = new /atom/movable/screen/blob/ReadaptStrain(null, src) using.screen_loc = ui_storage1 static_inventory += using diff --git a/code/_onclick/hud/blobbernaut.dm b/code/_onclick/hud/blobbernaut.dm index 59c12a5aa0f..e11d0b0f357 100644 --- a/code/_onclick/hud/blobbernaut.dm +++ b/code/_onclick/hud/blobbernaut.dm @@ -1,4 +1,4 @@ -/datum/hud/living/blobbernaut/New(mob/living/owner) +/datum/hud/blobbernaut/New(mob/living/owner) . = ..() blobpwrdisplay = new /atom/movable/screen/healths/blob/overmind(null, src) diff --git a/code/_onclick/hud/bot.dm b/code/_onclick/hud/bot.dm index d64965cb136..1c8e2fb65fc 100644 --- a/code/_onclick/hud/bot.dm +++ b/code/_onclick/hud/bot.dm @@ -11,9 +11,6 @@ var/mob/living/simple_animal/bot/B = usr B.Radio.interact(usr) -/mob/living/simple_animal/bot/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/bot(src) /datum/hud/bot/New(mob/owner) ..() diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm index 7020061f7e7..1f3aad8e813 100644 --- a/code/_onclick/hud/constructs.dm +++ b/code/_onclick/hud/constructs.dm @@ -1,11 +1,3 @@ -/mob/living/simple_animal/hostile/construct/armoured/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/armoured(src) - -/mob/living/simple_animal/hostile/construct/behemoth/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/armoured(src) - /datum/hud/construct/armoured/New(mob/owner) ..() mymob.healths = new /atom/movable/screen(null, src) @@ -15,9 +7,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/builder/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/builder(src) /datum/hud/construct/builder/New(mob/owner) ..() @@ -28,9 +17,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/wraith/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/wraith(src) /datum/hud/construct/wraith/New(mob/owner) ..() @@ -41,9 +27,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/harvester/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/harvester(src) /datum/hud/construct/harvester/New(mob/owner) ..() @@ -54,6 +37,7 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths + /datum/hud/construct/New(mob/owner) ..() mymob.pullin = new /atom/movable/screen/pull(null, src) diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index a7e73e7f456..dd6b7c4cf74 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -2,11 +2,13 @@ //Soul counter is stored with the humans, it does weird when you place it here apparently... -/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/devil/New(mob/owner) ..() var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box + var/client/client = owner.client + var/ui_style = ui_style2icon(client.prefs.UI_style) using = new /atom/movable/screen/drop(null, src) using.icon = ui_style @@ -80,7 +82,3 @@ D.r_hand.screen_loc = null if(D.l_hand) D.l_hand.screen_loc = null - -/mob/living/carbon/true_devil/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style)) diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index d38655dd83c..53d6bb41c71 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -1,8 +1,3 @@ -/mob/dead/observer/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/ghost(src) - SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) - /atom/movable/screen/ghost icon = 'icons/mob/screen_ghost.dmi' diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 9ec6eed56fd..28732c27674 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -1,7 +1,3 @@ -/mob/living/simple_animal/hostile/guardian/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/guardian(src) - /datum/hud/guardian/New(mob/owner) ..() var/atom/movable/screen/using diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index e4e268cb523..2c62c307d5b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -209,7 +209,7 @@ /mob/proc/create_mob_hud() if(!client || hud_used) return - hud_used = new /datum/hud(src) + hud_used = new hud_type(src) update_sight() SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 672ad955ea3..ceaced141e9 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -75,18 +75,18 @@ invisibility = INVISIBILITY_ABSTRACT -/mob/living/carbon/human/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style), client.prefs.UI_style_color, client.prefs.UI_style_alpha) - /datum/hud/human var/hud_alpha = 255 -/datum/hud/human/New(mob/living/carbon/human/owner, var/ui_style = 'icons/mob/screen_white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) +/datum/hud/human/New(mob/living/carbon/human/owner) ..() owner.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box + var/client/client = owner.client + var/ui_style = ui_style2icon(client.prefs.UI_style) + var/ui_color = client.prefs.UI_style_color + var/ui_alpha = client.prefs.UI_style_alpha hud_alpha = ui_alpha diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index 8e78a8556aa..5cb0f412dda 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -1,7 +1,3 @@ -/mob/living/simple_animal/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/simple_animal(src) - /datum/hud/simple_animal/New(mob/user) ..() @@ -14,10 +10,6 @@ static_inventory += using action_intent = using -//Ians -/mob/living/simple_animal/pet/dog/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/corgi(src) /datum/hud/corgi/New(mob/user) ..() @@ -31,18 +23,6 @@ mymob.pullin.screen_loc = ui_construct_pull static_inventory += mymob.pullin -//spiders -/mob/living/simple_animal/hostile/poison/giant_spider/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/simple_animal/spider(src) - -/mob/living/simple_animal/hostile/poison/terror_spider/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/simple_animal/spider(src) - -/mob/living/simple_animal/hostile/retaliate/araneus/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/simple_animal/spider(src) /datum/hud/simple_animal/spider/New(mob/user) ..() diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 3d635d00664..5686597225f 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -103,10 +103,6 @@ icon_state = initial(icon_state) -/mob/living/silicon/robot/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/robot(src) - /datum/hud/robot/New(mob/user) ..() user.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) diff --git a/code/_onclick/hud/slime.dm b/code/_onclick/hud/slime.dm index 06bf2f6e100..4c4dd8a52f4 100644 --- a/code/_onclick/hud/slime.dm +++ b/code/_onclick/hud/slime.dm @@ -2,7 +2,3 @@ ..() mymob.healths = new /atom/movable/screen/healths/slime(null, src) infodisplay += mymob.healths - -/mob/living/simple_animal/slime/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/slime(src) diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm index 8623476d300..e80258e3fee 100644 --- a/code/_onclick/hud/swarmer.dm +++ b/code/_onclick/hud/swarmer.dm @@ -63,9 +63,6 @@ var/mob/living/simple_animal/hostile/swarmer/S = usr S.ContactSwarmers() -/mob/living/simple_animal/hostile/swarmer/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/swarmer(src) /datum/hud/swarmer/New(mob/owner) ..() diff --git a/code/controllers/subsystem/fluids.dm b/code/controllers/subsystem/fluids.dm index 6b68ae71722..5ab7930b043 100644 --- a/code/controllers/subsystem/fluids.dm +++ b/code/controllers/subsystem/fluids.dm @@ -242,10 +242,3 @@ FLUID_SUBSYSTEM_DEF(smoke) name = "Smoke" spread_wait = 0.1 SECONDS effect_wait = 2.0 SECONDS - -/// The subsystem responsible for processing foam propagation and effects. -FLUID_SUBSYSTEM_DEF(foam) - name = "Foam" - wait = 0.1 SECONDS // Makes effect bubbling work with foam. - spread_wait = 0.2 SECONDS - effect_wait = 0.2 SECONDS diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index a9c7733a92d..6d1810c47ae 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -206,6 +206,10 @@ else // Many other things have registered here looked_up += src +/// Registers multiple signals to the same proc. +/datum/proc/RegisterSignals(datum/target, list/signal_types, proctype, override = FALSE) + for (var/signal_type in signal_types) + RegisterSignal(target, signal_type, proctype, override) /** * Stop listening to a given signal from target diff --git a/code/datums/components/blob_minion.dm b/code/datums/components/blob_minion.dm index 253160f8806..406b6747efe 100644 --- a/code/datums/components/blob_minion.dm +++ b/code/datums/components/blob_minion.dm @@ -10,7 +10,7 @@ /datum/component/blob_minion/Initialize(mob/camera/blob/overmind, datum/callback/on_strain_changed) . = ..() - if (!isliving(parent)) + if (!isminion(parent)) return COMPONENT_INCOMPATIBLE src.on_strain_changed = on_strain_changed register_overlord(overmind) @@ -47,7 +47,7 @@ living_parent.pass_flags |= PASSBLOB living_parent.faction |= ROLE_BLOB ADD_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) - remove_verb(parent, /mob/living/verb/pulled) // No dragging people into the blob + living_parent.stop_pulling() RegisterSignal(parent, COMSIG_MOB_MIND_INITIALIZED, PROC_REF(on_mind_init)) RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_update_appearance)) RegisterSignal(parent, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(on_update_status_tab)) @@ -67,7 +67,6 @@ living_parent.pass_flags &= ~PASSBLOB living_parent.faction -= ROLE_BLOB REMOVE_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) - add_verb(parent, /mob/living/verb/pulled) UnregisterSignal(parent, list( COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_FIRE_ACT, @@ -84,9 +83,11 @@ /// Become blobpilled when we gain a mind /datum/component/blob_minion/proc/on_mind_init(mob/living/minion, datum/mind/new_mind) SIGNAL_HANDLER - if (isnull(overmind)) + if (isnull(overmind) || new_mind.has_antag_datum(/datum/antagonist/blob_minion)) return - var/datum/antagonist/blob_minion/minion_motive = new(overmind) + + var/datum_type = (isblobbernaut(minion))? /datum/antagonist/blob_minion/blobernaut : /datum/antagonist/blob_minion + var/datum/antagonist/blob_minion/minion_motive = new datum_type(overmind) new_mind.add_antag_datum(minion_motive) /// When our icon is updated, update our colour too @@ -102,7 +103,7 @@ SIGNAL_HANDLER if (isnull(overmind)) return - status_items += "Blobs to Win: [length(GLOB.blobs)]/[SSticker?.mode.blob_win_count]" + status_items += list("Blobs to Win:", "[length(GLOB.blobs)]/[SSticker?.mode.blob_win_count]") /// If we feel the gentle caress of a blob, we feel better /datum/component/blob_minion/proc/on_blob_touched(mob/living/minion) @@ -140,7 +141,7 @@ /datum/component/blob_minion/proc/on_try_speech(mob/living/minion, message, ignore_spam, forced) SIGNAL_HANDLER var/spanned_message = minion.say_quote(message) - var/rendered = span_blob("\[Blob Telepathy\] [minion.real_name] [spanned_message]") + var/rendered = span_blob("\[Blob Telepathy\] [minion.real_name] [spanned_message], [message]") relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, minion) return COMPONENT_CANNOT_SPEAK diff --git a/code/datums/components/blob_turf_consuming.dm b/code/datums/components/blob_turf_consuming.dm new file mode 100644 index 00000000000..49f80fe0cf4 --- /dev/null +++ b/code/datums/components/blob_turf_consuming.dm @@ -0,0 +1,34 @@ +/datum/component/blob_turf_consuming + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Number of attempts of consume neede for consume + var/consumes_needed = 0 + /// Total number of attempts of consume + var/total_consumes = 0 + +/datum/component/blob_turf_consuming/Initialize(_consumes_needed) + if(!isturf(parent)) + return COMPONENT_INCOMPATIBLE + + consumes_needed = _consumes_needed + +/datum/component/blob_turf_consuming/RegisterWithParent() + RegisterSignal(parent, COMSIG_TRY_CONSUME_TURF, PROC_REF(on_try_consume)) + +/datum/component/blob_turf_consuming/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_TRY_CONSUME_TURF) + + +/datum/component/blob_turf_consuming/InheritComponent(datum/component/blob_turf_consuming/new_comp , i_am_original, _consumes_needed) + if(new_comp) + consumes_needed = new_comp.consumes_needed + else + consumes_needed = _consumes_needed + + +/datum/component/blob_turf_consuming/proc/on_try_consume() + total_consumes++ + if(total_consumes >= consumes_needed) + var/turf/total_turf = parent + total_turf.blob_consume() + return + return COMPONENT_CANT_CONSUME \ No newline at end of file diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm new file mode 100644 index 00000000000..9c6a0ce4ba2 --- /dev/null +++ b/code/datums/components/ghost_direct_control.dm @@ -0,0 +1,150 @@ +/** + * Component which lets ghosts click on a mob to take control of it + */ +/datum/component/ghost_direct_control + /// Message to display upon successful possession + var/assumed_control_message + /// Type of ban you can get to prevent you from accepting this role + var/ban_type + /// Any extra checks which need to run before we take over + var/datum/callback/extra_control_checks + /// Callback run after someone successfully takes over the body + var/datum/callback/after_assumed_control + /// If we're currently awaiting the results of a ghost poll + var/awaiting_ghosts = FALSE + +/datum/component/ghost_direct_control/Initialize( + ban_type = ROLE_SENTIENT, + role_name = null, + poll_question = null, + poll_candidates = TRUE, + antag_age_check = TRUE, + check_antaghud = TRUE, + poll_length = 10 SECONDS, + assumed_control_message = null, + datum/callback/extra_control_checks, + datum/callback/after_assumed_control, +) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.ban_type = ban_type + src.assumed_control_message = assumed_control_message || "You are [parent]!" + src.extra_control_checks = extra_control_checks + src.after_assumed_control = after_assumed_control + + var/mob/mob_parent = parent + LAZYADD(GLOB.mob_spawners[format_text("[initial(mob_parent.name)]")], mob_parent) + + if (poll_candidates) + INVOKE_ASYNC(src, PROC_REF(request_ghost_control), poll_question, role_name || "[parent]", poll_length, antag_age_check, check_antaghud) + +/datum/component/ghost_direct_control/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_ATOM_ATTACK_GHOST, PROC_REF(on_ghost_clicked)) + RegisterSignal(parent, COMSIG_LIVING_EXAMINE, PROC_REF(on_examined)) + RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_login)) + +/datum/component/ghost_direct_control/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_LIVING_EXAMINE, COMSIG_MOB_LOGIN)) + return ..() + +/datum/component/ghost_direct_control/Destroy(force) + extra_control_checks = null + after_assumed_control = null + + var/mob/mob_parent = parent + var/list/spawners = GLOB.mob_spawners[format_text("[initial(mob_parent.name)]")] + LAZYREMOVE(spawners, mob_parent) + if(!LAZYLEN(spawners)) + GLOB.mob_spawners -= format_text("[initial(mob_parent.name)]") + return ..() + +/// Inform ghosts that they can possess this +/datum/component/ghost_direct_control/proc/on_examined(datum/source, mob/user, list/examine_text) + SIGNAL_HANDLER + if (!isobserver(user)) + return + var/mob/living/our_mob = parent + if (our_mob.stat == DEAD || our_mob.key || awaiting_ghosts) + return + examine_text += span_boldnotice("You could take control of this mob by clicking on it.") + +/// Send out a request for a brain +/datum/component/ghost_direct_control/proc/request_ghost_control(poll_question, role_name, poll_length, age_check, check_ahud) + awaiting_ghosts = TRUE + var/list/possible_ghosts = SSghost_spawns.poll_candidates( + question = poll_question, + role = ban_type, + poll_time = poll_length, + antag_age_check = age_check, + check_antaghud = check_ahud, + source = parent, + role_cleanname = role_name + ) + var/mob/chosen_one = (possible_ghosts.len)? pick(possible_ghosts): null + awaiting_ghosts = FALSE + if(isnull(chosen_one)) + return + assume_direct_control(chosen_one) + +/// A ghost clicked on us, they want to get in this body +/datum/component/ghost_direct_control/proc/on_ghost_clicked(mob/our_mob, mob/dead/observer/hopeful_ghost) + SIGNAL_HANDLER + if (our_mob.key) + qdel(src) + return + if (!hopeful_ghost.client) + return + if (awaiting_ghosts) + to_chat(hopeful_ghost, span_warning("Ghost candidate selection currently in progress!")) + return COMPONENT_CANCEL_ATTACK_CHAIN + if (!SSticker.HasRoundStarted()) + to_chat(hopeful_ghost, span_warning("You cannot assume control of this until after the round has started!")) + return COMPONENT_CANCEL_ATTACK_CHAIN + INVOKE_ASYNC(src, PROC_REF(attempt_possession), our_mob, hopeful_ghost) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// We got far enough to establish that this mob is a valid target, let's try to posssess it +/datum/component/ghost_direct_control/proc/attempt_possession(mob/our_mob, mob/dead/observer/hopeful_ghost) + var/ghost_asked = tgui_alert(usr, "Become [our_mob]?", "Are you sure?", list("Yes", "No")) + if (ghost_asked != "Yes" || QDELETED(our_mob)) + return + assume_direct_control(hopeful_ghost) + +/// Grant possession of our mob, component is now no longer required +/datum/component/ghost_direct_control/proc/assume_direct_control(mob/harbinger) + if (QDELETED(src)) + to_chat(harbinger, span_warning("Offer to possess creature has expired!")) + return + if (jobban_isbanned(harbinger, ban_type)) + to_chat(harbinger, span_warning("You are banned from playing as this role!")) + return + var/mob/living/new_body = parent + if (new_body.stat == DEAD) + to_chat(harbinger, span_warning("This body has passed away, it is of no use!")) + return + if (new_body.key) + to_chat(harbinger, span_warning("[parent] has already become sapient!")) + qdel(src) + return + if (extra_control_checks && !extra_control_checks.Invoke(harbinger)) + return + + add_game_logs("took control of [new_body].", harbinger) + // doesn't transfer mind because that transfers antag datum as well + new_body.key = harbinger.key + + // Already qdels due to below proc but just in case + qdel(src) + +/// When someone assumes control, get rid of our component +/datum/component/ghost_direct_control/proc/on_login(mob/harbinger) + SIGNAL_HANDLER + // This proc is called the very moment .key is set, so we need to force mind to initialize here if we want the invoke to affect the mind of the mob + if(isnull(harbinger.mind)) + harbinger.mind_initialize() + to_chat(harbinger, span_boldnotice(assumed_control_message)) + after_assumed_control?.Invoke(harbinger) + qdel(src) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 0066bcc459d..79f632fca72 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -544,6 +544,9 @@ var/mob/camera/blob/blob_overmind = current . += "|BLOB Overmind|" . += "
    Total points:
    [blob_overmind.blob_points]/[blob_overmind.max_blob_points]" + . += "
    Infinity points: [(blob_overmind.is_infinity)? "OFF" : "ON"]" + else if(isblobminion(src)) + . += "|BLOB Minion|" else if(current.can_be_blob()) . += "blobize|NO" . += _memory_edit_role_enabled(ROLE_BLOB) @@ -2434,9 +2437,9 @@ add_conversion_logs(current, "De-blobed") if("blob") - var/burst_time = input(usr, "Введите время до вылупления","Time:", TIME_TO_BURST_ADDED_HIGHT) as num|null - var/need_new_blob = alert(usr,"Нужно ли выбирать блоба из экипажа в случае попытки вылупления за пределами станции?", "", "Да", "Нет") == "Нет" - var/start_process = alert(usr,"Начинать отсчет до момента вылупления?", "", "Да", "Нет") == "Да" + var/burst_time = tgui_input_number(usr, "Введите время до вылупления","Time:", TIME_TO_BURST_ADDED_HIGHT) + var/need_new_blob = tgui_alert(usr, "Нужно ли выбирать блоба из экипажа в случае попытки вылупления за пределами станции?", "", list("Да", "Нет")) == "Нет" + var/start_process = tgui_alert(usr,"Начинать отсчет до момента вылупления?", "", list("Да", "Нет")) == "Да" if(isnull(burst_time) || QDELETED(current) || current.stat == DEAD) return var/datum_type = get_blob_infected_type() @@ -2450,9 +2453,9 @@ message_admins("[key_name_admin(usr)] has made [key_name_admin(current)] into a \"Blob\"") if("burst") - var/warn_blob = alert(usr,"Предупреждать блоба при попытке вылупления за пределами станции?", "", "Да", "Нет") != "Да" - var/need_new_blob = alert(usr,"Нужно ли выбирать блоба из экипажа в случае попытки вылупления за пределами станции?", "", "Да", "Нет") == "Да" - if(alert(usr,"Вы действительно хотите лопнуть блоба? Это уничтожит персонажа игрока и превратит его в блоба.", "", "Да", "Нет") == "Да") + var/warn_blob = tgui_alert(usr,"Предупреждать блоба при попытке вылупления за пределами станции?", "", list("Да", "Нет")) != "Да" + var/need_new_blob = tgui_alert(usr,"Нужно ли выбирать блоба из экипажа в случае попытки вылупления за пределами станции?", "", list("Да", "Нет")) == "Да" + if(tgui_alert(usr,"Вы действительно хотите лопнуть блоба? Это уничтожит персонажа игрока и превратит его в блоба.", "", list("Да", "Нет")) == "Да") var/datum/antagonist/blob_infected/blob = has_antag_datum(/datum/antagonist/blob_infected) if(!blob) return @@ -2466,13 +2469,23 @@ if(!isblobovermind(src)) return var/mob/camera/blob/blob_overmind = current - var/blob_points = input(usr, "Введите новое число очков в диапазоне от 0 до [blob_overmind.max_blob_points]","Count:", blob_overmind.blob_points) as num|null + var/blob_points = tgui_input_number(usr, "Введите новое число очков в диапазоне от 0 до [blob_overmind.max_blob_points]", "Count:", blob_overmind.blob_points, blob_overmind.max_blob_points, 0) if(isnull(blob_points) || QDELETED(current) || current.stat == DEAD) return blob_overmind.blob_points = clamp(blob_points, 0, blob_overmind.max_blob_points) log_admin("[key_name(usr)] set blob points to [key_name(current)] as [blob_overmind.blob_points]") message_admins("[key_name_admin(usr)] set blob points to [key_name_admin(current)] as [blob_overmind.blob_points]") + if("inf_points") + if(!isblobovermind(src)) + return + var/mob/camera/blob/blob_overmind = current + if(QDELETED(current) || current.stat == DEAD) + return + blob_overmind.is_infinity = !blob_overmind.is_infinity + log_admin("[key_name(usr)] make blob points [blob_overmind.is_infinity? "infinity" : "not infinity"] to [key_name(current)]") + message_admins("[key_name_admin(usr)] make blob points [blob_overmind.is_infinity? "infinity" : "not infinity"] to [key_name_admin(current)]") + else if(href_list["common"]) switch(href_list["common"]) @@ -3093,6 +3106,7 @@ if(!mind.name) mind.name = real_name mind.current = src + SEND_SIGNAL(src, COMSIG_MOB_MIND_INITIALIZED, mind) //HUMAN /mob/living/carbon/human/mind_initialize() diff --git a/code/datums/status_effects/screwy_hud.dm b/code/datums/status_effects/screwy_hud.dm new file mode 100644 index 00000000000..63872a17478 --- /dev/null +++ b/code/datums/status_effects/screwy_hud.dm @@ -0,0 +1,58 @@ +/** + * Screwy hud status. + * + * Applied to carbons, it will make their health bar look like it's incorrect - + * in crit (SCREWYHUD_CRIT), dead (SCREWYHUD_DEAD), or fully healthy (SCREWYHUD_HEALTHY) + * + * Grouped status effect, so multiple sources can add a screwyhud without + * accidentally removing another source's hud. + */ +/datum/status_effect/grouped/screwy_hud + alert_type = null + /// The priority of this screwyhud over other screwyhuds. + var/priority = -1 + /// The icon we override our owner's healths.icon_state with + var/override_icon + +/datum/status_effect/grouped/screwy_hud/on_apply() + if(!iscarbon(owner)) + return FALSE + + RegisterSignal(owner, COMSIG_CARBON_UPDATING_HEALTH_HUD, PROC_REF(on_health_hud_updated)) + owner.update_health_hud() + return TRUE + +/datum/status_effect/grouped/screwy_hud/on_remove() + UnregisterSignal(owner, COMSIG_CARBON_UPDATING_HEALTH_HUD) + owner.update_health_hud() + +/datum/status_effect/grouped/screwy_hud/proc/on_health_hud_updated(mob/living/carbon/source, shown_health_amount) + SIGNAL_HANDLER + + // Shouldn't even be running if we're dead, but just in case... + if(source.stat == DEAD) + return + + // It's entirely possible we have multiple screwy huds on one mob. + // Defer to priority to determine which to show. If our's is lower, don't show it. + for(var/datum/status_effect/grouped/screwy_hud/other_screwy_hud in source.status_effects) + if(other_screwy_hud.priority > priority) + return + + source.healths.icon_state = override_icon + return COMPONENT_OVERRIDE_HEALTH_HUD + +/datum/status_effect/grouped/screwy_hud/fake_dead + id = "fake_hud_dead" + priority = 100 // death is absolute + override_icon = "health7" + +/datum/status_effect/grouped/screwy_hud/fake_crit + id = "fake_hud_crit" + priority = 90 // crit is almost death, and death is absolute + override_icon = "health6" + +/datum/status_effect/grouped/screwy_hud/fake_healthy + id = "fake_hud_healthy" + priority = 10 // fully healthy is the opposite of death, which is absolute + override_icon = "health0" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8194190d2b5..8572b941ad1 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -109,6 +109,7 @@ var/base_pixel_y = 0 var/tts_seed = "Arthas" + var/tts_atom_say_effect = SOUND_EFFECT_RADIO /atom/New(loc, ...) SHOULD_CALL_PARENT(TRUE) @@ -631,8 +632,16 @@ /atom/proc/ex_act() return -/atom/proc/blob_act(obj/structure/blob/B) - SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B) +/** + * React to a hit by a blob objecd + * + * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal + */ +/atom/proc/blob_act(obj/structure/blob/attacking_blob) + var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) + if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) + return FALSE + return TRUE /atom/proc/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) @@ -1216,9 +1225,8 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) if(M.client.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT) M.create_chat_message(src, message, list("italics")) - var/effect = SOUND_EFFECT_RADIO var/traits = TTS_TRAIT_RATE_MEDIUM - INVOKE_ASYNC(GLOBAL_PROC, /proc/tts_cast, src, M, message_tts, tts_seed, TRUE, effect, traits) + INVOKE_ASYNC(GLOBAL_PROC, /proc/tts_cast, src, M, message_tts, tts_seed, TRUE, tts_atom_say_effect, traits) if(length(speech_bubble_hearers)) var/image/I = image('icons/mob/talk.dmi', src, "[bubble_icon][say_test(message)]", FLY_LAYER) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 685abb965e8..5123f7cd85e 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -1,6 +1,6 @@ /datum/game_mode /// List of of blobs, their offsprings and blobburnouts spawned by them - var/list/blobs = list("infected"=list(), "offsprings"=list(), "blobernauts"=list()) + var/list/blobs = list("infected"=list(), "offsprings"=list(), "minions"=list()) /// Count of blob tiles to blob win var/blob_win_count = BLOB_BASE_TARGET_POINT /// Number of resource produced by the core @@ -15,6 +15,8 @@ var/off_auto_gamma = FALSE /// Disables automatic nuke codes var/off_auto_nuke_codes = FALSE + /// Is all blobs have infinity points + var/is_blob_infinity_points = FALSE /// Total blobs objective var/datum/objective/blob_critical_mass/blob_objective @@ -126,7 +128,7 @@ blob_list.Add(value) for(var/value in blobs["offsprings"]) blob_list.Add(value) - for(var/value in blobs["blobernauts"]) + for(var/value in blobs["minions"]) blob_list.Add(value) return blob_list diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm index db27c5d382c..d707a78b2a1 100644 --- a/code/game/gamemodes/blob/blob_finish.dm +++ b/code/game/gamemodes/blob/blob_finish.dm @@ -62,7 +62,7 @@ /datum/game_mode/proc/auto_declare_completion_blob() var/list/blob_infected = blobs["infected"] var/list/blob_offsprings = blobs["offsprings"] - var/list/blobernauts = blobs["blobernauts"] + var/list/minions = blobs["minions"] if(blob_infected?.len) declare_blob_completion() var/text = "
    Блоб[(blob_infected.len > 1 ? "ами были" : "ом был")]:" @@ -75,9 +75,9 @@ for(var/datum/mind/blob in blob_offsprings) text += "
    [blob.key] был [blob.name]" - if(blobernauts?.len) - text += "

    Блобернаут[(blobernauts.len > 1 ? "ами были" : "ом был")]:" - for(var/datum/mind/blob in blobernauts) + if(minions?.len) + text += "

    Миньен[(minions.len > 1 ? "ами были" : "ом был")]:" + for(var/datum/mind/blob in minions) text += "
    [blob.key] был [blob.name]" to_chat(world, text) diff --git a/code/game/gamemodes/blob/blobs/_blob.dm b/code/game/gamemodes/blob/blobs/_blob.dm deleted file mode 100644 index 175c607b0e7..00000000000 --- a/code/game/gamemodes/blob/blobs/_blob.dm +++ /dev/null @@ -1,313 +0,0 @@ -//I will need to recode parts of this but I am way too tired atm -/obj/structure/blob - name = "blob" - icon = 'icons/mob/blob.dmi' - light_range = 3 - desc = "A thick wall of writhing tendrils." - density = FALSE - opacity = TRUE - anchored = TRUE - pass_flags_self = PASSBLOB - layer = BELOW_MOB_LAYER - can_astar_pass = CANASTARPASS_ALWAYS_PROC - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - creates_cover = TRUE - obj_flags = BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP // stops blob mobs from falling on multiz. - max_integrity = BLOB_REGULAR_MAX_HP - /// Multiplies brute damage by this - var/brute_resist = BLOB_BRUTE_RESIST - /// Multiplies burn damage by this - var/fire_resist = BLOB_FIRE_RESIST - /// how much health this blob regens when pulsed - var/health_regen = BLOB_REGULAR_HP_REGEN - /// How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. - var/point_return = 0 - /// If a threshold is reached, resulting in shifting variables - var/compromised_integrity = FALSE - /// Blob overmind - var/mob/camera/blob/overmind - /// We got pulsed when? - COOLDOWN_DECLARE(pulse_timestamp) - /// we got healed when? - COOLDOWN_DECLARE(heal_timestamp) - /// Only used by the synchronous mesh strain. If set to true, these blobs won't share or receive damage taken with others. - var/ignore_syncmesh_share = FALSE - /// If the blob blocks atmos and heat spread - var/atmosblock = FALSE - - -/obj/structure/blob/Initialize(mapload) - . = ..() - GLOB.blobs += src - setDir(pick(GLOB.cardinal)) - check_integrity() - if(atmosblock) - air_update_turf(1) - ConsumeTile() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - - -/obj/structure/blob/Destroy() - if(atmosblock) - atmosblock = FALSE - air_update_turf(1) - GLOB.blobs -= src - if(isturf(loc)) //Necessary because Expand() is screwed up and spawns a blob and then deletes it - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - return ..() - -/obj/structure/blob/has_prints() - return FALSE - -/obj/structure/blob/BlockSuperconductivity() - return atmosblock - -/obj/structure/blob/proc/check_integrity() - return - -/obj/structure/blob/proc/update_state() - return - -/obj/structure/blob/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - return checkpass(mover, PASSBLOB) - -/obj/structure/blob/CanAtmosPass(turf/T, vertical) - return !atmosblock - - -/obj/structure/blob/CanAStarPass(to_dir, datum/can_pass_info/pass_info) - return pass_info.pass_flags == PASSEVERYTHING || (pass_info.pass_flags & PASSBLOB) - - -/obj/structure/blob/process() - Life() - return - -/obj/structure/blob/blob_act(obj/structure/blob/B) - return - -/obj/structure/blob/proc/Life() - return - -/obj/structure/blob/proc/RegenHealth() - // All blobs heal over time when pulsed, but it has a cool down - if(health_timestamp > world.time) - return 0 - if(obj_integrity < max_integrity) - obj_integrity = min(max_integrity, obj_integrity + 1) - check_integrity() - health_timestamp = world.time + 10 // 1 seconds - - -/obj/structure/blob/proc/Pulse(var/pulse = 0, var/origin_dir = 0, var/a_color)//Todo: Fix spaceblob expand - RegenHealth() - - if(run_action())//If we can do something here then we dont need to pulse more - return - - if(pulse > 30) - return//Inf loop check - - //Looking for another blob to pulse - var/list/dirs = list(1,2,4,8) - dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us - for(var/i = 1 to 4) - if(!dirs.len) break - var/dirn = pick(dirs) - dirs.Remove(dirn) - var/turf/T = get_step(src, dirn) - if(!is_location_within_transition_boundaries(T)) - continue - var/obj/structure/blob/B = (locate(/obj/structure/blob) in T) - if(!B) - expand(T,1,a_color)//No blob here so try and expand - return - B.adjustcolors(a_color) - - B.Pulse((pulse+1),get_dir(src.loc,T), a_color) - return - return - - -/obj/structure/blob/proc/run_action() - return 0 - -/obj/structure/blob/proc/ConsumeTile() - for(var/atom/A in loc) - A.blob_act(src) - if(iswallturf(loc)) - loc.blob_act(src) //don't ask how a wall got on top of the core, just eat it - -/obj/structure/blob/proc/expand(var/turf/T = null, var/prob = 1, var/a_color) - if(prob && !prob(obj_integrity)) - return - if(isspaceturf(T) && prob(75)) return - if(!T) - var/list/dirs = list(1,2,4,8) - for(var/i = 1 to 4) - var/dirn = pick(dirs) - dirs.Remove(dirn) - T = get_step(src, dirn) - if(!(locate(/obj/structure/blob) in T)) break - else T = null - - if(!T) return 0 - if(!is_location_within_transition_boundaries(T)) - return - var/obj/structure/blob/normal/B = new /obj/structure/blob/normal(src.loc, min(obj_integrity, 30)) - B.color = a_color - B.set_density(TRUE) - if(T.Enter(B,src))//Attempt to move into the tile - B.set_density(initial(B.density)) - B.loc = T - else - T.blob_act()//If we cant move in hit the turf - B.loc = null //So we don't play the splat sound, see Destroy() - qdel(B) - - for(var/atom/A in T)//Hit everything in the turf - A.blob_act(src) - return 1 - - -/obj/structure/blob/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) - SIGNAL_HANDLER - - arrived.blob_act(src) - - -/obj/structure/blob/tesla_act(power) - ..() - take_damage(power / 400, BURN, "energy") - - -/obj/structure/blob/attack_animal(mob/living/simple_animal/M) - if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut - return - ..() - -/obj/structure/blob/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, TRUE) - else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) - if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) - -/obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - switch(damage_type) - if(BRUTE) - damage_amount *= brute_resist - if(BURN) - damage_amount *= fire_resist - if(CLONE) - else - return 0 - var/armor_protection = 0 - if(damage_flag) - armor_protection = armor.getRating(damage_flag) - damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) - if(overmind?.blob_reagent_datum && damage_flag) - damage_amount = overmind.blob_reagent_datum.damage_reaction(src, damage_amount, damage_type, damage_flag) - return damage_amount - -/obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - if(QDELETED(src)) - return - . = ..() - if(. && obj_integrity > 0) - check_integrity() - -/obj/structure/blob/proc/change_to(var/type) - if(!ispath(type)) - error("[type] is an invalid type for the blob.") - var/obj/structure/blob/B = new type(src.loc) - if(!istype(type, /obj/structure/blob/core) || !istype(type, /obj/structure/blob/node)) - B.color = color - else - B.adjustcolors(color) - qdel(src) - -/obj/structure/blob/proc/adjustcolors(var/a_color) - if(a_color) - color = a_color - - -/obj/structure/blob/examine(mob/user) - . = ..() - . += "It looks like it's made of [get_chem_name()]." - . += "It looks like this chemical does: [get_chem_desc()]." - -/obj/structure/blob/proc/get_chem_name() - for(var/mob/camera/blob/B in GLOB.mob_list) - if(!QDELETED(B) && lowertext(B.blob_reagent_datum.color) == lowertext(src.color)) // Goddamit why we use strings for these - return B.blob_reagent_datum.name - return "unknown" - -/obj/structure/blob/proc/get_chem_desc() - for(var/mob/camera/blob/B in GLOB.mob_list) - if(!QDELETED(B) && lowertext(B.blob_reagent_datum.color) == lowertext(src.color)) // Goddamit why we use strings for these - return B.blob_reagent_datum.description - return "something unknown" - - -/obj/structure/blob/hit_by_thrown_carbon(mob/living/carbon/human/C, datum/thrownthing/throwingdatum, damage, mob_hurt, self_hurt) - damage *= 0.25 // Lets not have sorium be too much of a blender / rapidly kill itself - return ..() - - -/obj/structure/blob/normal - icon_state = "blob" - light_range = 0 - obj_integrity = 21 //doesn't start at full health - max_integrity = 25 - brute_resist = 0.25 - - -/obj/structure/blob/normal/check_integrity() - var/old_compromised_integrity = compromised_integrity - if(obj_integrity <= 15) - compromised_integrity = TRUE - else - compromised_integrity = FALSE - if(old_compromised_integrity != compromised_integrity) - update_state() - update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) - - -/obj/structure/blob/normal/update_state() - if(compromised_integrity) - brute_resist = 0.5 - else - brute_resist = 0.25 - - -/obj/structure/blob/normal/update_name(updates = ALL) - . = ..() - if(compromised_integrity) - name = "fragile blob" - else - name = "[overmind ? "blob" : "dead blob"]" - - -/obj/structure/blob/normal/update_desc(updates = ALL) - . = ..() - if(compromised_integrity) - desc = "A thin lattice of slightly twitching tendrils." - else - desc = "A thick wall of [overmind ? "writhing" : "lifeless"] tendrils." - - -/obj/structure/blob/normal/update_icon_state() - if(compromised_integrity) - icon_state = "blob_damaged" - else - icon_state = "blob" - - diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 9ec8575a5cc..35bebd86ea2 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -12,6 +12,7 @@ status_flags = CANPUSH universal_understand = TRUE universal_speak = TRUE //The devil speaks all languages meme + hud_type = /datum/hud/devil var/ascended = FALSE var/mob/living/oldform @@ -36,7 +37,7 @@ health = maxHealth icon_state = "arch_devil" -/mob/living/carbon/true_devil/proc/set_name() +/mob/living/carbon/true_devil/set_name() name = mind.devilinfo.truename real_name = name diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index ce9d67f7946..d8c11afc2fb 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -102,6 +102,8 @@ light_on = FALSE universal_speak = 0 universal_understand = 0 + wet_immunity = TRUE + hud_type = /datum/hud/swarmer var/resources = 0 //Resource points, generated by consuming metal/glass var/max_resources = 200 diff --git a/code/game/gamemodes/miniantags/demons/demon.dm b/code/game/gamemodes/miniantags/demons/demon.dm index 60f8b2bac62..ca8ee147704 100644 --- a/code/game/gamemodes/miniantags/demons/demon.dm +++ b/code/game/gamemodes/miniantags/demons/demon.dm @@ -31,6 +31,7 @@ del_on_death = TRUE dirslash_enabled = TRUE slowed_by_pull_and_push = FALSE + wet_immunity = TRUE var/vialspawned = FALSE var/playstyle_string var/datum/action/innate/demon/whisper/whisper_action diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 5fab14d1b2f..df58b9822b3 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -29,6 +29,7 @@ move_resist = MOVE_FORCE_STRONG AIStatus = AI_OFF butcher_results = list(/obj/item/reagent_containers/food/snacks/ectoplasm = 1) + hud_type = /datum/hud/guardian var/summoned = FALSE var/cooldown = 0 var/damage_transfer = 1 //how much damage from each attack we transfer to the owner diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index a9c47c8f336..9b615961223 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -36,6 +36,7 @@ mob_size = MOB_SIZE_TINY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB speed = 1 + wet_immunity = TRUE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) tts_seed = "Sylvanas" diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 4685377069f..32dd628f828 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -439,7 +439,7 @@ var/list/potential_victims = list() for(var/mob/living/carbon/potential_victim in range(aoe_range, get_turf(possessed_object))) - if(!can_see(possessed_object, potential_victim, aoe_range)) // You can't see me + if(!possessed_object.can_see(potential_victim, aoe_range)) // You can't see me continue if(potential_victim.stat != CONSCIOUS) // Don't kill our precious essence-filled sleepy mobs diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index f937c2d75e2..d8097fc37c9 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -58,7 +58,7 @@ /// Returns TRUE if the camera can see the target. -/obj/machinery/camera/proc/can_see(atom/target, length = 7) // I stole this from global and modified it to work with Xray cameras. +/obj/machinery/camera/can_see(atom/target, length = 7) // I stole this from global and modified it to work with Xray cameras. if(!target || target.invisibility > SEE_INVISIBLE_LIVING || target.alpha == NINJA_ALPHA_INVISIBILITY) return FALSE var/turf/current_turf = get_turf(src) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index e0efa1afea8..ec2da9ef99d 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -520,7 +520,7 @@ GLOBAL_LIST_EMPTY(turret_icons) //Verify that targeted atoms are in our sight. Otherwise, just remove them from processing. for(var/atom/movable/atom as anything in processing_targets) - if(!can_see(src, atom, scan_range)) + if(!can_see(atom, scan_range)) processing_targets -= atom var/list/primary_candidates diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 8f85f40c04d..07882bcc923 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -728,7 +728,7 @@ /obj/mecha/blob_act(obj/structure/blob/B) log_message("Attack by blob. Attacker - [B].") - take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) + take_damage(30, BRUTE, MELEE, 0, get_dir(src, B)) /obj/mecha/attack_tk() return diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index fcd37e80a65..13278c683ea 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -380,7 +380,7 @@ return FALSE if(!istype(smoker)) return FALSE - if(smoker.internal != null || smoker.can_breathe_gas()) + if(smoker.internal != null || !smoker.can_breathe_gas()) return FALSE var/fraction = (seconds_per_tick SECONDS) / initial(lifetime) diff --git a/code/game/objects/effects/particle_holder.dm b/code/game/objects/effects/particle_holder.dm new file mode 100644 index 00000000000..3e91d2e605a --- /dev/null +++ b/code/game/objects/effects/particle_holder.dm @@ -0,0 +1,70 @@ +///objects can only have one particle on them at a time, so we use these abstract effects to hold and display the effects. You know, so multiple particle effects can exist at once. +///also because some objects do not display particles due to how their visuals are built +/obj/effect/abstract/particle_holder + name = "particle holder" + desc = "How are you reading this? Please make a bug report :)" + appearance_flags = KEEP_APART|KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE //movable appearance_flags plus KEEP_APART and KEEP_TOGETHER + vis_flags = VIS_INHERIT_PLANE + layer = ABOVE_ALL_MOB_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + invisibility = 0 + anchored = TRUE + /// Holds info about how this particle emitter works + /// See \code\__DEFINES\particles.dm + var/particle_flags = NONE + + var/atom/parent + +/obj/effect/abstract/particle_holder/Initialize(mapload, particle_path = /particles/droplets, particle_flags = NONE) + . = ..() + if(!loc) + stack_trace("particle holder was created with no loc!") + return INITIALIZE_HINT_QDEL + // We nullspace ourselves because some objects use their contents (e.g. storage) and some items may drop everything in their contents on deconstruct. + parent = loc + loc = null + + // Mouse opacity can get set to opaque by some objects when placed into the object's contents (storage containers). + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + src.particle_flags = particle_flags + particles = new particle_path() + // /atom doesn't have vis_contents, /turf and /atom/movable do + var/atom/movable/lie_about_areas = parent + lie_about_areas.vis_contents += src + RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(parent_deleted)) + + if(particle_flags & PARTICLE_ATTACH_MOB) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + on_move(parent, null, NORTH) + +/obj/effect/abstract/particle_holder/Destroy(force) + QDEL_NULL(particles) + parent = null + return ..() + +/// Non movables don't delete contents on destroy, so we gotta do this +/obj/effect/abstract/particle_holder/proc/parent_deleted(datum/source) + SIGNAL_HANDLER + qdel(src) + +/// signal called when a parent that's been hooked into this moves +/// does a variety of checks to ensure overrides work out properly +/obj/effect/abstract/particle_holder/proc/on_move(atom/movable/attached, atom/oldloc, direction) + SIGNAL_HANDLER + + if(!(particle_flags & PARTICLE_ATTACH_MOB)) + return + + //remove old + if(ismob(oldloc)) + var/mob/particle_mob = oldloc + particle_mob.vis_contents -= src + + // If we're sitting in a mob, we want to emit from it too, for vibes and shit + if(ismob(attached.loc)) + var/mob/particle_mob = attached.loc + particle_mob.vis_contents += src + +/// Sets the particles position to the passed coordinates +/obj/effect/abstract/particle_holder/proc/set_particle_position(x = 0, y = 0, z = 0) + particles.position = list(x, y, z) diff --git a/code/game/objects/effects/particles/water.dm b/code/game/objects/effects/particles/water.dm new file mode 100644 index 00000000000..88e0ef542e3 --- /dev/null +++ b/code/game/objects/effects/particles/water.dm @@ -0,0 +1,14 @@ +// Water related particles. +/particles/droplets + icon = 'icons/effects/particles/generic.dmi' + icon_state = list("dot"=2,"drop"=1) + width = 32 + height = 36 + count = 5 + spawning = 0.2 + lifespan = 1 SECONDS + fade = 0.5 SECONDS + color = "#549EFF" + position = generator(GEN_BOX, list(-9,-9,0), list(9,18,0), NORMAL_RAND) + scale = generator(GEN_VECTOR, list(0.9,0.9), list(1.1,1.1), NORMAL_RAND) + gravity = list(0, -0.9) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 25b478b26a2..323be8cfed2 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -269,9 +269,10 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/g else return TRUE + /obj/item/blob_act(obj/structure/blob/B) - if(B && B.loc == loc && !QDELETED(src)) - qdel(src) + if(B && B.loc == loc && !QDELETED(src) && !(obj_flags & IGNORE_BLOB_ACT)) + obj_destruction(MELEE) /obj/item/examine(mob/user) diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 475a68404ff..7777e398187 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -152,7 +152,7 @@ scan_target = get_turf(src) if(ANALYZER_MODE_TARGET) scan_target = target - if(!can_see(src, target, scan_range)) + if(!can_see(target, scan_range)) target_mode = ANALYZER_MODE_SURROUNDINGS scan_target = get_turf(src) if(!scan_target) @@ -189,7 +189,7 @@ /obj/item/analyzer/afterattack(atom/target, mob/user, proximity, params) . = ..() - if(!can_see(user, target, scan_range)) + if(!user.can_see(target, scan_range)) return target_mode = ANALYZER_MODE_TARGET if(target == user || target == user.loc) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 7c6624d3bc8..0156310ad83 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -108,12 +108,16 @@ if(!QDELETED(src)) //Bullet on_hit effect might have already destroyed this object take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) + /obj/blob_act(obj/structure/blob/B) + if (!..() || (obj_flags & IGNORE_BLOB_ACT)) + return if(isturf(loc)) var/turf/T = loc if((T.intact && level == 1) || T.transparent_floor == TURF_TRANSPARENT) //the blob doesn't destroy thing below the floor return - take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) + take_damage(400, BRUTE, MELEE, 0, get_dir(src, B)) + /obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src) diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 7d989bf5e9a..4dff2175d22 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -146,6 +146,11 @@ operate_panel() +/obj/structure/closet/fireaxecabinet/blob_act(obj/structure/blob/B) + if(fireaxe) + fireaxe.forceMove(loc) + qdel(src) + /obj/structure/closet/fireaxecabinet/attack_tk(mob/user) if(localopened && fireaxe) fireaxe.forceMove(loc) @@ -251,6 +256,11 @@ return ..() +/obj/structure/fishingrodcabinet/blob_act(obj/structure/blob/B) + if(olreliable) + olreliable.forceMove(loc) + qdel(src) + /obj/structure/fishingrodcabinet/attack_hand(mob/user) if(!olreliable) return ..() diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 7c5d81932eb..66d5172fd51 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -176,6 +176,10 @@ barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY + +/turf/simulated/floor/engine/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 3) /turf/simulated/floor/engine/break_tile() return //unbreakable @@ -239,9 +243,9 @@ if(prob(50)) ChangeTurf(baseturf) -/turf/simulated/floor/engine/blob_act(obj/structure/blob/B) - if(prob(25)) - ChangeTurf(baseturf) + +/turf/simulated/floor/engine/blob_consume() + ChangeTurf(baseturf) /turf/simulated/floor/engine/cult name = "engraved floor" diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 40929c1f917..e2e4a24ad6a 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -47,6 +47,9 @@ if(istype(T, /turf/simulated/mineral/random)) Spread(T) +/turf/simulated/mineral/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 2) /// Generates typecache of tools allowed to dig this mineral /turf/simulated/mineral/proc/generate_picks() @@ -198,6 +201,9 @@ if(1) attempt_drill(null,TRUE,3) +/turf/simulated/mineral/blob_consume() + gets_drilled() + /turf/simulated/mineral/ancient name = "ancient rock" desc = "A rare asteroid rock that appears to be resistant to all mining tools except pickaxes!" diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 18a93c46b46..b6d747e76fd 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -64,6 +64,10 @@ underlay_appearance.icon_state = fixed_underlay["icon_state"] fixed_underlay = string_assoc_list(fixed_underlay) underlays += underlay_appearance + +/turf/simulated/wall/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 2) //Appearance /turf/simulated/wall/examine(mob/user) // If you change this, consider changing the examine_status proc of false walls to match @@ -173,10 +177,10 @@ return /turf/simulated/wall/blob_act(obj/structure/blob/B) - if(prob(50)) - dismantle_wall() - else - add_dent(WALL_DENT_HIT) + add_dent(WALL_DENT_HIT) + +/turf/simulated/wall/blob_consume() + dismantle_wall() /turf/simulated/wall/rpd_act(mob/user, obj/item/rpd/our_rpd) if(our_rpd.mode == RPD_ATMOS_MODE) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index c9c41156ce9..9a1f52f7400 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -21,6 +21,11 @@ var/d_state = RWALL_INTACT var/can_be_reinforced = 1 +/turf/simulated/wall/r_wall/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 3) + + /turf/simulated/wall/r_wall/examine(mob/user) . = ..() switch(d_state) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 5b588a6f492..cb8b9931e6f 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -59,9 +59,13 @@ if(opacity) directional_opacity = ALL_CARDINALS - + ComponentInitialize() return INITIALIZE_HINT_NORMAL +/turf/space/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 4) + /turf/space/BeforeChange() ..() var/datum/space_level/S = GLOB.space_manager.get_zlev(z) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 337e11f4264..3fab930ee84 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -122,9 +122,14 @@ if(istype(loc, /area/space)) force_no_gravity = TRUE - + + ComponentInitialize() return INITIALIZE_HINT_NORMAL +/turf/ComponentInitialize() + . = ..() + AddComponent(/datum/component/blob_turf_consuming, 0) + /turf/Destroy(force) . = QDEL_HINT_IWILLGC if(!changing_turf) @@ -175,6 +180,9 @@ /turf/ex_act(severity) return FALSE +/turf/proc/blob_consume() + return + /turf/rpd_act(mob/user, obj/item/rpd/our_rpd) //This is the default turf behaviour for the RPD; override it as required if(our_rpd.mode == RPD_ATMOS_MODE) our_rpd.create_atmos_pipe(user, src) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f82ab795574..107739609db 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -433,6 +433,7 @@ dat += "Delay blob end Now: [mode.delay_blob_end? "ON" : "OFF"]
    " dat += "Toggle auto GAMMA Now: [mode.off_auto_gamma? "OFF" : "ON"]
    " dat += "Toggle auto nuke codes Now: [mode.off_auto_nuke_codes? "OFF" : "ON"]
    " + dat += "Toggle blob infinity points Now: [mode.is_blob_infinity_points? "ON" : "OFF"]
    " dat += "" dat += "
    " for(var/datum/mind/blob in mode.blobs["infected"]) @@ -454,14 +455,14 @@ dat += "
    Blobs
    " - dat += "
    " - for(var/datum/mind/blob in mode.blobs["blobernauts"]) + dat += "
    Blobernauts
    " + for(var/datum/mind/blob in mode.blobs["minions"]) var/mob/M = blob.current if(M) dat += "" dat += "" else - dat += "" + dat += "" dat += "
    Minions
    [ADMIN_PP(M,"[M.real_name]")][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PM
    Blobernauts not found!
    Minions not found!
    " diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7a105876f36..7e073c96804 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1961,7 +1961,7 @@ else if(href_list["edit_blob_win_count"]) if(!check_rights(R_ADMIN)) return - var/blob_win_count = input(usr, "Ввидите новое число критической массы","Критическая масса:", SSticker.mode.blob_win_count) as num + var/blob_win_count = tgui_input_number(usr, "Ввидите новое число критической массы", "Критическая масса:" , SSticker.mode.blob_win_count) if(!blob_win_count) return @@ -1976,8 +1976,8 @@ else if(href_list["send_warning"]) if(!check_rights(R_ADMIN)) return - var/message = stripped_input(usr, "Введите предупреждение", "Предупреждение") - if(alert(usr,"Вы действительно хотите отправить предупреждение всем блобам?", "", "Да", "Нет") == "Нет") + var/message = tgui_input_text(usr, "Введите предупреждение", "Предупреждение") + if(tgui_alert(usr,"Вы действительно хотите отправить предупреждение всем блобам?", "", list("Да", "Нет")) == "Нет") return if(!SSticker || !SSticker.mode) @@ -1990,7 +1990,7 @@ else if(href_list["burst_all_blobs"]) if(!check_rights(R_ADMIN)) return - if(alert(usr,"Вы действительно хотите лопнуть всех блобов?", "", "Да", "Нет") == "Нет") + if(tgui_alert(usr,"Вы действительно хотите лопнуть всех блобов?", "", list("Да", "Нет")) == "Нет") return if(!SSticker || !SSticker.mode) @@ -2018,6 +2018,22 @@ log_admin("[key_name(usr)] has [mode.delay_blob_end? "stopped" : "returned"] stopped delayed blob win") message_admins("[key_name_admin(usr)] has [mode.delay_blob_end? "stopped" : "returned"] delayed blob win") + else if(href_list["toggle_blob_infinity_points"]) + if(!check_rights(R_ADMIN)) + return + + if(!SSticker || !SSticker.mode) + return + + var/datum/game_mode/mode = SSticker.mode + if(tgui_alert(usr,"Вы действительно хотите [mode.is_blob_infinity_points? "убрать" : "вернуть"] бесконечные очки у блобов?", "", list("Да", "Нет")) == "Нет") + return + + mode.is_blob_infinity_points = !mode.is_blob_infinity_points + + log_admin("[key_name(usr)] has [mode.is_blob_infinity_points? "remove" : "returned"] blob infinity points") + message_admins("[key_name_admin(usr)] has [mode.is_blob_infinity_points? "remove" : "returned"] blob infinity points") + else if(href_list["toggle_auto_nuke_codes"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/antagonists/blob/blob_actions.dm b/code/modules/antagonists/blob/blob_actions.dm index cfa4a9edab4..07e9e8230d2 100644 --- a/code/modules/antagonists/blob/blob_actions.dm +++ b/code/modules/antagonists/blob/blob_actions.dm @@ -9,15 +9,26 @@ check_flags = AB_CHECK_CONSCIOUS|AB_TRANSFER_MIND /datum/action/innate/blob/comm/Activate() - var/input = stripped_input(usr, "Выберите сообщение для отправки другому блобу.", "Blob Telepathy", "") + var/input = tgui_input_text(usr, "Выберите сообщение для отправки другим блобам.", "Телепатия Блоба", "") if(!input || !IsAvailable()) return - blob_talk(usr, input) + blob_talk(input) return +/datum/action/innate/blob/comm/proc/blob_talk(message) + + message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + + if(!message) + return + + add_say_logs(usr, message, language = "BLOB") + var/rendered = span_big(span_blob("\[Blob Telepathy\] [usr.name] states, [message]")) + relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, usr) + /datum/action/innate/blob/self_burst - icon_icon = 'icons/mob/blob.dmi' - button_icon = 'icons/mob/blob.dmi' + icon_icon = 'icons/hud/blob.dmi' + button_icon = 'icons/hud/blob.dmi' background_icon_state = "block" button_icon_state = "ui_tocore" name = "Self burst" @@ -25,22 +36,11 @@ check_flags = AB_CHECK_CONSCIOUS|AB_TRANSFER_MIND /datum/action/innate/blob/self_burst/Activate() - var/input = alert(usr,"Вы действительно хотите лопнуть себя и превратиться в блоба досрочно? Это действие необратимо.", "", "Да", "Нет") == "Да" + var/input = tgui_alert(usr,"Вы действительно хотите лопнуть себя и превратиться в блоба досрочно? Это действие необратимо.", "", list("Да", "Нет")) == "Да" if(!input || !IsAvailable()) return var/datum/antagonist/blob_infected/blob = usr?.mind?.has_antag_datum(/datum/antagonist/blob_infected) if(!blob) return blob.burst_blob() - return - -/proc/blob_talk(mob/living/user, message) - - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if(!message) - return - - add_say_logs(user, message, language = "BLOB") - var/rendered = span_big(span_blob("\[Blob Telepathy\] [user.name] states, [message]")) - relay_to_list_and_observers(rendered, GLOB.blob_telepathy_mobs, user) \ No newline at end of file + return \ No newline at end of file diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm deleted file mode 100644 index 755b4bd9ff6..00000000000 --- a/code/modules/antagonists/blob/blob_antag.dm +++ /dev/null @@ -1,114 +0,0 @@ -/datum/antagonist/blob - name = "\improper Blob" - roundend_category = "blobs" - antagpanel_category = ANTAG_GROUP_BIOHAZARDS - show_to_ghosts = TRUE - show_in_antagpanel = FALSE - job_rank = ROLE_BLOB - ui_name = "AntagInfoBlob" - stinger_sound = 'sound/ambience/antag/blobalert.ogg' - /// Action to release a blob infection - var/datum/action/innate/blobpop/pop_action - /// Initial points for a human blob - var/starting_points_human_blob = OVERMIND_STARTING_POINTS - /// Has the blob already popped inside of the round? This is here to prevent blobs from "respawning" - var/has_already_popped = FALSE - -/datum/antagonist/blob/roundend_report() - var/basic_report = ..() - //Display max blobpoints for blebs that lost - if(isovermind(owner.current)) //embarrasing if not - var/mob/camera/blob/overmind = owner.current - if(!overmind.victory_in_progress) //if it won this doesn't really matter - var/point_report = "
    [owner.name] took over [overmind.max_count] tiles at the height of its growth." - return basic_report+point_report - return basic_report - -/datum/antagonist/blob/greet() - . = ..() - owner.announce_objectives() - if(!isovermind(owner.current)) - to_chat(owner.current, span_notice("Use the pop ability to place your blob core! It is recommended you do this away from anyone else, as you'll be taking on the entire crew!")) - else - has_already_popped = TRUE - -/datum/antagonist/blob/on_gain() - create_objectives() - . = ..() - -/datum/antagonist/blob/remove_innate_effects() - QDEL_NULL(pop_action) - return ..() - -/datum/antagonist/blob/get_preview_icon() - var/datum/blobstrain/reagent/reactive_spines/reactive_spines = /datum/blobstrain/reagent/reactive_spines - - var/icon/icon = icon('icons/mob/nonhuman-player/blob.dmi', "blob_core") - icon.Blend(initial(reactive_spines.color), ICON_MULTIPLY) - icon.Blend(icon('icons/mob/nonhuman-player/blob.dmi', "blob_core_overlay"), ICON_OVERLAY) - icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE) - - return icon - - -/datum/antagonist/blob/ui_data(mob/user) - var/list/data = list() - - data["objectives"] = get_objectives() - - if(!isovermind(user)) - return data - var/mob/camera/blob/blob = user - var/datum/blobstrain/reagent/blobstrain = blob.blobstrain - - if(!blobstrain) - return data - - data["color"] = blobstrain.color - data["description"] = blobstrain.description - data["effects"] = blobstrain.effectdesc - data["name"] = blobstrain.name - - return data - -/datum/antagonist/blob/proc/create_objectives() - var/datum/objective/blob_takeover/main = new - main.owner = owner - objectives += main - -/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override) - if(isovermind(owner.current) || has_already_popped) - return FALSE - if(!pop_action) - pop_action = new - pop_action.Grant(owner.current) - -/datum/objective/blob_takeover - explanation_text = "Reach critical mass!" - -//Non-overminds get this on blob antag assignment -/datum/action/innate/blobpop - name = "Pop" - desc = "Unleash the blob!" - button_icon = 'icons/mob/blob.dmi' - button_icon_state = "blob" - - /// The time taken before this ability is automatically activated. - var/autoplace_time = OVERMIND_STARTING_AUTO_PLACE_TIME - -/datum/action/innate/blobpop/Grant(Target) - . = ..() - if(owner) - addtimer(CALLBACK(src, PROC_REF(Activate), TRUE), autoplace_time, TIMER_UNIQUE|TIMER_OVERRIDE) - to_chat(owner, span_boldannounce("You will automatically pop and place your blob core in [DisplayTimeText(autoplace_time)].")) - - -/datum/antagonist/blob/antag_listing_status() - . = ..() - if(owner?.current) - var/mob/camera/blob/blob_cam = owner.current - if(istype(blob_cam)) - . += "(Progress: [length(blob_cam.blobs_legit)]/[blob_cam.blobwincount])" - - - diff --git a/code/modules/antagonists/blob/blob_infected_datum.dm b/code/modules/antagonists/blob/blob_infected_datum.dm index 71f433bc4e2..cd0e32bb8ac 100644 --- a/code/modules/antagonists/blob/blob_infected_datum.dm +++ b/code/modules/antagonists/blob/blob_infected_datum.dm @@ -61,9 +61,14 @@ /datum/antagonist/blob_infected/Destroy(force, ...) - add_game_logs("has been deblobized", owner.current) + if(!is_tranformed) + add_game_logs("has been deblobized", owner.current) stop_process = TRUE - return ..() + . = ..() + qdel(time_to_burst_display) + qdel(blob_talk_action) + qdel(blob_burst_action) + return . /datum/antagonist/blob_infected/add_owner_to_gamemode() @@ -159,6 +164,7 @@ if(!blob_talk_action) blob_talk_action = new blob_talk_action.Grant(antag_mob) + GLOB.blob_telepathy_mobs += antag_mob if(!blob_burst_action) blob_burst_action = new blob_burst_action.Grant(antag_mob) @@ -167,12 +173,9 @@ /datum/antagonist/blob_infected/proc/remove_blob_actions(mob/living/antag_mob) if(!antag_mob) return - if(!blob_talk_action) - return - blob_talk_action.Remove(antag_mob) - if(!blob_burst_action) - return - blob_burst_action.Remove(antag_mob) + blob_talk_action?.Remove(antag_mob) + GLOB.blob_telepathy_mobs -= antag_mob + blob_burst_action?.Remove(antag_mob) /datum/antagonist/blob_infected/proc/add_burst_display(mob/living/antag_mob) @@ -252,11 +255,12 @@ mode.bursted_blobs_count++ C.was_bursted = TRUE kill_borer_inside() + var/datum/antagonist/blob_overmind/overmind = transform_to_overmind() + owner.remove_antag_datum(/datum/antagonist/blob_infected) C.gib() var/obj/structure/blob/special/core/core = new(location, blob_client) if(!(core.overmind && core.overmind.mind)) return - var/datum/antagonist/blob_overmind/overmind = transform_to_overmind() core.overmind.mind.add_antag_datum(overmind) core.lateblobtimer() notify_ghosts( @@ -266,7 +270,6 @@ ) SSticker?.mode?.process_blob_stages() mode.update_blob_objective() - owner.remove_antag_datum(/datum/antagonist/blob_infected) /datum/antagonist/blob_infected/proc/transform_to_overmind() diff --git a/code/modules/antagonists/blob/blob_minion.dm b/code/modules/antagonists/blob/blob_minion.dm index 9bf37e961d5..86f22d36925 100644 --- a/code/modules/antagonists/blob/blob_minion.dm +++ b/code/modules/antagonists/blob/blob_minion.dm @@ -1,23 +1,61 @@ /datum/antagonist/blob_minion name = "\improper Blob Minion" - antagpanel_category = ANTAG_GROUP_BIOHAZARDS - show_name_in_check_antagonists = TRUE - show_to_ghosts = TRUE - show_in_antagpanel = FALSE + roundend_category = "blobs" + job_rank = ROLE_BLOB + special_role = SPECIAL_ROLE_BLOB_MINION + wiki_page_name = "Blob" + russian_wiki_name = "Блоб" + show_in_roundend = FALSE + show_in_orbit = FALSE /// The blob core that this minion is attached to var/datum/weakref/overmind +/datum/antagonist/blob_minion/can_be_owned(datum/mind/new_owner) + . = ..() && isminion(new_owner?.current) + /datum/antagonist/blob_minion/New(mob/camera/blob/overmind) . = ..() src.overmind = WEAKREF(overmind) +/datum/antagonist/blob_minion/add_owner_to_gamemode() + var/datum/game_mode/mode = SSticker.mode + if(mode) + mode.blobs["minions"] |= owner + +/datum/antagonist/blob_minion/remove_owner_from_gamemode() + var/datum/game_mode/mode = SSticker.mode + if(mode) + mode.blobs["minions"] -= owner + + +/datum/antagonist/blob_minion/roundend_report_header() + return + + /datum/antagonist/blob_minion/on_gain() - forge_objectives() . = ..() + give_objectives() + +/datum/antagonist/blob_minion/give_objectives() + var/datum/objective/blob_minion/objective = new + objective.owner = owner + objective.overmind = overmind + objectives += objective + +/datum/antagonist/blob_minion/blobernaut + name = "\improper Blobernaut" + -/datum/antagonist/blob_minion/greet() +/datum/antagonist/blob_minion/blobernaut/greet() . = ..() - owner.announce_objectives() + var/mob/camera/blob/blob = overmind + var/datum/blobstrain/blobstrain = blob.blobstrain + . += span_dangerbigger("Вы блобернаут! Вы должны помогать всем формам блоба в их миссии по уничтожению всего!") + . += span_info("You are powerful, hard to kill, and slowly regenerate near nodes and cores, [span_cultlarge("but will slowly die if not near the blob")] or if the factory that made you is killed.") + . += span_info("You can communicate with other blobbernauts and overminds telepathically by attempting to speak normally") + . += span_info("Your overmind's blob reagent is: [blobstrain.name]!") + . += span_info("The [blobstrain.name] reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]") + /datum/objective/blob_minion name = "protect the blob core" explanation_text = "Protect the blob core at all costs." @@ -29,8 +67,22 @@ return FALSE return resolved_overmind.stat != DEAD -/datum/antagonist/blob_minion/forge_objectives() - var/datum/objective/blob_minion/objective = new - objective.owner = owner - objective.overmind = overmind - objectives += objective +/** + * Takes any datum `source` and checks it for blob_minion datum. + */ +/proc/isblobminion(datum/source) + if(!source) + return FALSE + + if(istype(source, /datum/mind)) + var/datum/mind/our_mind = source + return our_mind.has_antag_datum(/datum/antagonist/blob_minion) + + if(!ismob(source)) + return FALSE + + var/mob/mind_holder = source + if(!mind_holder.mind) + return FALSE + + return mind_holder.mind.has_antag_datum(/datum/antagonist/blob_minion) diff --git a/code/modules/antagonists/blob/blob_minions/blob_mob.dm b/code/modules/antagonists/blob/blob_minions/blob_mob.dm index fa5802ba415..87cc96e2c2a 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_mob.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_mob.dm @@ -6,23 +6,36 @@ icon_state = "blob_head" unique_name = TRUE pass_flags = PASSBLOB + status_flags = NONE //No throwing blobspores into deep space to despawn, or throwing blobbernaughts, which are bigger than you. faction = list(ROLE_BLOB) - combat_mode = TRUE bubble_icon = "blob" speak_emote = null - habitable_atmos = null - minbodytemp = 0 - maxbodytemp = INFINITY - lighting_cutoff_red = 20 - lighting_cutoff_green = 40 - lighting_cutoff_blue = 30 - initial_language_holder = /datum/language_holder/empty + stat_attack = UNCONSCIOUS + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + sight = SEE_TURFS|SEE_MOBS|SEE_OBJS + nightvision = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE can_buckle_to = FALSE + universal_speak = TRUE //So mobs can understand them when a blob uses Blob Broadcast + sentience_type = SENTIENCE_OTHER + gold_core_spawnable = NO_SPAWN + can_be_on_fire = TRUE + fire_damage = 3 + tts_seed = "Earth" + tts_atom_say_effect = SOUND_EFFECT_NONE + + +/mob/living/simple_animal/hostile/blob_minion/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = INFINITY, \ + ) + AddComponent(/datum/component/blob_minion, on_strain_changed = CALLBACK(src, PROC_REF(on_strain_updated))) /mob/living/simple_animal/hostile/blob_minion/Initialize(mapload) . = ..() add_traits(list(TRAIT_BLOB_ALLY, TRAIT_MUTE), INNATE_TRAIT) - AddComponent(/datum/component/blob_minion, on_strain_changed = CALLBACK(src, PROC_REF(on_strain_updated))) /// Called when our blob overmind changes their variant, update some of our mob properties /mob/living/simple_animal/hostile/blob_minion/proc/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) diff --git a/code/modules/antagonists/blob/blob_minions/blob_spore.dm b/code/modules/antagonists/blob/blob_minions/blob_spore.dm index c22910a881f..fb1fc97c994 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_spore.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_spore.dm @@ -10,25 +10,30 @@ health_doll_icon = "blobpod" health = BLOBMOB_SPORE_HEALTH maxHealth = BLOBMOB_SPORE_HEALTH - verb_say = "psychically pulses" + verb_say = list("psychically pulses", "pulses") verb_ask = "psychically probes" verb_exclaim = "psychically yells" verb_yell = "psychically screams" melee_damage_lower = BLOBMOB_SPORE_DMG_LOWER melee_damage_upper = BLOBMOB_SPORE_DMG_UPPER - obj_damage = 0 - attack_verb_continuous = "batters" - attack_verb_simple = "batter" + obj_damage = 20 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + attacktext = "ударяет" attack_sound = 'sound/weapons/genhit1.ogg' - death_message = "explodes into a cloud of gas!" + deathmessage = "explodes into a cloud of gas!" gold_core_spawnable = HOSTILE_SPAWN del_on_death = TRUE /// Size of cloud produced from a dying spore var/death_cloud_size = 1 /// Type of mob to create - var/mob/living/zombie_type = /mob/living/basic/blob_minion/zombie + var/mob/living/zombie_type = /mob/living/simple_animal/hostile/blob_minion/zombie + /mob/living/simple_animal/hostile/blob_minion/spore/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) + +/mob/living/simple_animal/hostile/blob_minion/spore/ComponentInitialize() . = ..() AddElement(/datum/element/simple_flying) @@ -43,17 +48,29 @@ /mob/living/simple_animal/hostile/blob_minion/spore/proc/death_burst() do_chem_smoke(range = death_cloud_size, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) +/mob/living/simple_animal/hostile/blob_minion/spore/CanAllowThrough(atom/movable/mover, border_dir) + . = ..() + if(istype(mover, /obj/structure/blob)) + return TRUE + +/mob/living/simple_animal/hostile/blob_minion/spore/CanAttack(atom/the_target) + if(ishuman(the_target)) + stat_attack = DEAD + . = ..() + stat_attack = initial(stat_attack) + -/mob/living/simple_animal/hostile/blob_minion/spore/melee_attack(mob/living/carbon/human/target, list/modifiers, ignore_cooldown) +/mob/living/simple_animal/hostile/blob_minion/spore/AttackingTarget() . = ..() - if (!ishuman(target) || target.stat != DEAD) + var/mob/living/carbon/human/human_target = target + if (!istype(human_target) || human_target.stat != DEAD) return - zombify(target) + zombify(human_target) /// Become a zombie /mob/living/simple_animal/hostile/blob_minion/spore/proc/zombify(mob/living/carbon/human/target) visible_message(span_warning("The corpse of [target.name] suddenly rises!")) - var/mob/living/basic/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name)) + var/mob/living/simple_animal/hostile/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name)) blombie.set_name() if (istype(blombie)) // In case of badmin blombie.consume_corpse(target) @@ -63,7 +80,7 @@ /// Variant of the blob spore which is actually spawned by blob factories /mob/living/simple_animal/hostile/blob_minion/spore/minion gold_core_spawnable = NO_SPAWN - zombie_type = /mob/living/basic/blob_minion/zombie/controlled + zombie_type = /mob/living/simple_animal/hostile/blob_minion/zombie/controlled /// We die if we leave the same turf as this z level var/turf/z_turf @@ -86,17 +103,11 @@ /// If the blob changes to distributed neurons then you can control the spores /mob/living/simple_animal/hostile/blob_minion/spore/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) - if (isnull(overmind)) - REMOVE_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) - else - ADD_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) - if (istype(new_strain, /datum/blobstrain/reagent/distributed_neurons)) AddComponent(\ /datum/component/ghost_direct_control,\ - ban_type = ROLE_BLOB_INFECTION,\ + ban_type = ROLE_BLOB,\ poll_candidates = TRUE,\ - poll_ignore_key = POLL_IGNORE_BLOB,\ ) else qdel(GetComponent(/datum/component/ghost_direct_control)) diff --git a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm index 312891dd287..0ca544a6b0d 100644 --- a/code/modules/antagonists/blob/blob_minions/blob_zombie.dm +++ b/code/modules/antagonists/blob/blob_minions/blob_zombie.dm @@ -5,31 +5,26 @@ icon_state = "zombie" icon_living = "zombie" health_doll_icon = "blobpod" - mob_biotypes = MOB_ORGANIC | MOB_HUMANOID health = 70 maxHealth = 70 - verb_say = "gurgles" + verb_say = list("gurgles", "groans") verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" melee_damage_lower = 10 melee_damage_upper = 15 - melee_attack_cooldown = CLICK_CD_MELEE obj_damage = 20 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + attacktext = "ударяет" attack_sound = 'sound/weapons/genhit1.ogg' - death_message = "collapses to the ground!" + deathmessage = "collapses to the ground!" gold_core_spawnable = NO_SPAWN - basic_mob_flags = DEL_ON_DEATH + del_on_death = TRUE /// The dead body we have inside var/mob/living/carbon/human/corpse -/mob/living/simple_animal/hostile/blob_minion/zombie/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) // This mob doesn't function visually without a corpse and wouldn't respawn with one -/mob/living/simple_animal/hostile/hostile/blob_minion/zombie/death(gibbed) +/mob/living/simple_animal/hostile/blob_minion/zombie/death(gibbed) corpse?.forceMove(loc) death_burst() return ..() @@ -41,6 +36,16 @@ corpse = null death() +/mob/living/simple_animal/hostile/blob_minion/zombie/CanAllowThrough(atom/movable/mover, border_dir) + . = ..() + if(istype(mover, /obj/structure/blob)) + return TRUE + + +/mob/living/simple_animal/hostile/blob_minion/zombie/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) + /mob/living/simple_animal/hostile/blob_minion/zombie/Destroy() QDEL_NULL(corpse) return ..() @@ -56,21 +61,24 @@ blob_head_overlay.color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_WHITE color = initial(color) // reversing what our component did lol, but we needed the value for the overlay overlays += blob_head_overlay + if(blocks_emissive) + add_overlay(get_emissive_block()) /// Create an explosion of spores on death -/mob/living/basic/blob_minion/zombie/proc/death_burst() +/mob/living/simple_animal/hostile/blob_minion/zombie/proc/death_burst() do_chem_smoke(range = 0, holder = src, location = get_turf(src), reagent_type = /datum/reagent/toxin/spore) /// Store a body so that we can drop it on death /mob/living/simple_animal/hostile/blob_minion/zombie/proc/consume_corpse(mob/living/carbon/human/new_corpse) if(new_corpse.wear_suit) - maxHealth += new_corpse.get_armor_rating(MELEE) + maxHealth += new_corpse.getarmor(attack_flag = MELEE) health = maxHealth - new_corpse.set_facial_hairstyle("Shaved", update = FALSE) - new_corpse.set_hairstyle("Bald", update = TRUE) + new_corpse.change_facial_hair("Shaved") + new_corpse.change_hair("Bald") new_corpse.forceMove(src) corpse = new_corpse update_appearance(UPDATE_ICON) + overlays += new_corpse.overlays set_up_zombie_appearance() RegisterSignal(corpse, COMSIG_LIVING_REVIVE, PROC_REF(on_corpse_revived)) @@ -91,7 +99,6 @@ /datum/component/ghost_direct_control,\ ban_type = ROLE_BLOB,\ poll_candidates = TRUE,\ - poll_ignore_key = POLL_IGNORE_BLOB,\ ) /mob/living/simple_animal/hostile/blob_minion/zombie/controlled/death_burst() diff --git a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm index b32962715f4..101bda6965b 100644 --- a/code/modules/antagonists/blob/blob_minions/blobbernaut.dm +++ b/code/modules/antagonists/blob/blob_minions/blobbernaut.dm @@ -13,25 +13,30 @@ damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_SOLO_UPPER - melee_attack_cooldown = CLICK_CD_MELEE obj_damage = BLOBMOB_BLOBBERNAUT_DMG_OBJ - attack_verb_continuous = "slams" - attack_verb_simple = "slam" + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + attacktext = "ударяет" attack_sound = 'sound/effects/blobattack.ogg' verb_say = "gurgles" verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" pressure_resistance = 50 + force_threshold = 10 mob_size = MOB_SIZE_LARGE - hud_type = /datum/hud/living/blobbernaut + move_resist = MOVE_FORCE_OVERPOWERING + hud_type = /datum/hud/blobbernaut gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/blob_minion/blobbernaut/Initialize(mapload) . = ..() - AddElement(/datum/element/damage_threshold, 10) + ADD_TRAIT(src, TRAIT_NEGATES_GRAVITY, INNATE_TRAIT) -/mob/living/basic/blob_minion/blobbernaut/death(gibbed) +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/experience_pressure_difference(pressure_difference, direction) + if(!HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) + return ..() + +/mob/living/simple_animal/hostile/blob_minion/blobbernaut/death(gibbed) flick("blobbernaut_death", src) return ..() @@ -55,6 +60,13 @@ damage_sources++ else var/particle_colour = atom_colours[FIXED_COLOUR_PRIORITY] || COLOR_BLACK + if (locate(/obj/structure/blob) in blobs_in_area) + heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_TILE * seconds_per_tick) + var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) + heal_effect.color = particle_colour + if(on_fire) + adjust_fire_stacks(-1) + if (locate(/obj/structure/blob/special/core) in blobs_in_area) heal_overall_damage(maxHealth * BLOBMOB_BLOBBERNAUT_HEALING_CORE * seconds_per_tick) var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(src)) @@ -84,24 +96,22 @@ health = maxHealth / 2 // Start out injured to encourage not beelining away from the blob SEND_SOUND(src, sound('sound/effects/blobattack.ogg')) SEND_SOUND(src, sound('sound/effects/attackblob.ogg')) - to_chat(src, span_infoplain("You are powerful, hard to kill, and slowly regenerate near nodes and cores, [span_cult_large("but will slowly die if not near the blob")] or if the factory that made you is killed.")) - to_chat(src, span_infoplain("You can communicate with other blobbernauts and overminds telepathically by attempting to speak normally")) - to_chat(src, span_infoplain("Your overmind's blob reagent is: [blobstrain.name]!")) - to_chat(src, span_infoplain("The [blobstrain.name] reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]")) + log_game("[key] has spawned as Blobbernaut") /// Set our attack damage based on blob's properties /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/on_strain_updated(mob/camera/blob/overmind, datum/blobstrain/new_strain) if (isnull(overmind)) melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) - attack_verb_continuous = initial(attack_verb_continuous) + attacktext = initial(attacktext) return melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_LOWER melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_UPPER - attack_verb_continuous = new_strain.blobbernaut_message + attacktext = new_strain.blobbernaut_message /// Called by our factory to inform us that it's not going to support us financially any more /mob/living/simple_animal/hostile/blob_minion/blobbernaut/minion/on_factory_destroyed() . = ..() orphaned = TRUE throw_alert("nofactory", /atom/movable/screen/alert/nofactory) + diff --git a/code/modules/antagonists/blob/blob_overmind_datum.dm b/code/modules/antagonists/blob/blob_overmind_datum.dm index b31fb351f8a..176c8ef85e7 100644 --- a/code/modules/antagonists/blob/blob_overmind_datum.dm +++ b/code/modules/antagonists/blob/blob_overmind_datum.dm @@ -56,7 +56,7 @@ /datum/antagonist/blob_overmind/greet() var/list/messages = list() - messages.Add("Вы Блоб!") + messages.Add(span_danger("Вы Блоб!")) for(var/message in get_blob_help_messages(strain)) messages.Add(message) SEND_SOUND(owner.current, 'sound/magic/mutate.ogg') @@ -65,7 +65,8 @@ /proc/get_blob_help_messages(datum/blobstrain/blob_reagent_datum) var/list/messages = list() messages += "Как надразум, вы можете управлять блобом!" - messages += "Ваш реагент: [blob_reagent_datum.name] - [blob_reagent_datum.description]" + messages += "Ваш реагент: [blob_reagent_datum.name]" + messages += blob_reagent_datum.overmind.get_strain_info() messages += "Вы можете расширяться, атакуя людей, повреждая объекты или размещая простую плитку, если клетка свободна." messages += "Обычная плитка будет расширять ваше влияние и может быть улучшена до специальной плитки, выполняющей определённую функцию." messages += "Вы можете улучшить обычные плитки до следующих типов:" diff --git a/code/modules/antagonists/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blobs/blob_mobs.dm deleted file mode 100644 index 905735665f9..00000000000 --- a/code/modules/antagonists/blob/blobs/blob_mobs.dm +++ /dev/null @@ -1,264 +0,0 @@ - -/* -//////////////// -// BASE TYPE // -//////////////// - -//Do not spawn -/mob/living/simple_animal/hostile/blob - icon = 'icons/mob/blob.dmi' - pass_flags = PASSBLOB - status_flags = NONE //No throwing blobspores into deep space to despawn, or throwing blobbernaughts, which are bigger than you. - faction = list(ROLE_BLOB) - bubble_icon = "blob" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast - sentience_type = SENTIENCE_OTHER - gold_core_spawnable = NO_SPAWN - can_be_on_fire = TRUE - fire_damage = 3 - var/mob/camera/blob/overmind = null - tts_seed = "Earth" - -/mob/living/simple_animal/hostile/blob/ComponentInitialize() - AddComponent( \ - /datum/component/animal_temperature, \ - maxbodytemp = 360, \ - minbodytemp = 0, \ - ) - -/mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color) - if(a_color) - color = a_color - -/mob/living/simple_animal/hostile/blob/blob_act() - if(stat != DEAD && health < maxHealth) - for(var/i in 1 to 2) - var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed - if(overmind) - H.color = overmind.blob_reagent_datum.complementary_color - else - H.color = "#000000" - adjustHealth(-maxHealth * 0.0125) - - -//////////////// -// BLOB SPORE // -//////////////// - -/mob/living/simple_animal/hostile/blob/blobspore - name = "blob" - desc = "Some blob thing." - icon_state = "blobpod" - icon_living = "blobpod" - health = 40 - maxHealth = 40 - melee_damage_lower = 2 - melee_damage_upper = 4 - obj_damage = 20 - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - attacktext = "ударяет" - attack_sound = 'sound/weapons/genhit1.ogg' - speak_emote = list("pulses") - var/obj/structure/blob/factory/factory = null - var/list/human_overlays - var/mob/living/carbon/human/oldguy - var/is_zombie = FALSE - - -/mob/living/simple_animal/hostile/blob/blobspore/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - if(istype(mover, /obj/structure/blob)) - return TRUE - - -/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/structure/blob/factory/linked_node) - if(istype(linked_node)) - factory = linked_node - factory.spores += src - ..() - - -/mob/living/simple_animal/hostile/blob/blobspore/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - AddElement(/datum/element/simple_flying) - - -/mob/living/simple_animal/hostile/blob/blobspore/Life(seconds, times_fired) - - if(!is_zombie && isturf(src.loc)) - for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile - if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD)) - Zombify(H) - break - ..() - -/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(mob/living/carbon/human/H) - if(!H.check_death_method()) - H.death() - var/obj/item/organ/external/head/head_organ = H.get_organ(BODY_ZONE_HEAD) - is_zombie = TRUE - if(H.wear_suit) - var/obj/item/clothing/suit/armor/A = H.wear_suit - if(A.armor && A.armor.getRating("melee")) - maxHealth += A.armor.getRating("melee") //That zombie's got armor, I want armor! - maxHealth += 40 - health = maxHealth - name = "blob zombie" - desc = "A shambling corpse animated by the blob." - melee_damage_lower = 10 - melee_damage_upper = 15 - icon = H.icon - speak_emote = list("groans") - icon_state = "zombie2_s" - if(head_organ) - head_organ.h_style = null - H.update_hair() - human_overlays = H.overlays - update_icons() - H.forceMove(src) - oldguy = H - visible_message("The corpse of [H.name] suddenly rises!") - -/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) - // Only execute the below if we successfuly died - . = ..() - if(!.) - return FALSE - // On death, create a small smoke of harmful gas (s-Acid) - var/datum/effect_system/smoke_spread/chem/S = new - var/turf/location = get_turf(src) - - // Create the reagents to put into the air - create_reagents(350) - - if(overmind && overmind.blob_reagent_datum) - reagents.add_reagent(overmind.blob_reagent_datum.id, 350) - else - reagents.add_reagent("spore", 350) - - // Setup up the smoke spreader and start it. - S.set_up(reagents, location, TRUE) - S.start() - qdel(src) - -/mob/living/simple_animal/hostile/blob/blobspore/Destroy() - if(factory) - factory.spores -= src - factory = null - if(oldguy) - oldguy.forceMove(get_turf(src)) - oldguy = null - return ..() - - -/mob/living/simple_animal/hostile/blob/blobspore/update_icons() - ..() - - adjustcolors(overmind?.blob_reagent_datum?.complementary_color) - -/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color) - color = a_color - - if(is_zombie) - cut_overlays() - add_overlay(human_overlays) - var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head") - I.color = color - add_overlay(I) - - if(blocks_emissive) - add_overlay(get_emissive_block()) - - -///////////////// -// BLOBBERNAUT // -///////////////// - -/mob/living/simple_animal/hostile/blob/blobbernaut - name = "blobbernaut" - desc = "Some HUGE blob thing." - icon_state = "blobbernaut" - icon_living = "blobbernaut" - icon_dead = "blobbernaut_dead" - health = 200 - maxHealth = 200 - melee_damage_lower = 10 - melee_damage_upper = 15 - obj_damage = 60 - attacktext = "ударяет" - attack_sound = 'sound/effects/blobattack.ogg' - speak_emote = list("gurgles") - force_threshold = 10 - mob_size = MOB_SIZE_LARGE - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - pressure_resistance = 50 - sight = SEE_TURFS|SEE_MOBS|SEE_OBJS - nightvision = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - move_resist = MOVE_FORCE_OVERPOWERING - -/mob/living/simple_animal/hostile/ancient_robot_leg/ComponentInitialize() - AddComponent( \ - /datum/component/animal_temperature, \ - minbodytemp = 0, \ - maxbodytemp = 360, \ - ) - -/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NEGATES_GRAVITY, INNATE_TRAIT) - - -/mob/living/simple_animal/hostile/blob/blobbernaut/experience_pressure_difference(pressure_difference, direction) - if(!HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) - return ..() - -/mob/living/simple_animal/hostile/blob/blobbernaut/proc/add_to_gamemode() - var/list/blobernauts = SSticker?.mode?.blobs["blobernauts"] - blobernauts |= mind - -/mob/living/simple_animal/hostile/blob/blobbernaut/Life(seconds, times_fired) - if(stat != DEAD && (getBruteLoss() || getFireLoss())) // Heal on blob structures - if(locate(/obj/structure/blob) in get_turf(src)) - heal_overall_damage(0.25, 0.25) - if(on_fire) - adjust_fire_stacks(-1) // Slowly extinguish the flames - else - take_overall_damage(0.2, 0.2) // If you are at full health, you won't lose health. You'll need it. However the moment anybody sneezes on you, the decaying will begin. - ..() - -/mob/living/simple_animal/hostile/blob/blobbernaut/New() - ..() - if(name == "blobbernaut") - name = text("blobbernaut ([rand(1, 1000)])") - -/mob/living/simple_animal/hostile/blob/blobbernaut/death(gibbed) - mind.name = name - // Only execute the below if we successfully died - . = ..() - if(!.) - return FALSE - flick("blobbernaut_death", src) - -/mob/living/simple_animal/hostile/blob/blobbernaut/verb/communicate_overmind() - set category = "Blobbernaut" - set name = "Blob Telepathy" - set desc = "Send a message to the Overmind" - - if(stat != DEAD) - blob_talk() - -/mob/living/simple_animal/hostile/blob/blobbernaut/proc/blob_talk() - var/message = tgui_input_text(usr, "Announce to the overmind", "Blob Telepathy") - var/rendered = "Blob Telepathy, [name]([overmind]) states, \"[message]\"" - if(message) - for(var/mob/M in GLOB.mob_list) - if(isovermind(M) || isblobbernaut(M) || isblobinfected(M.mind)) - M.show_message(rendered, 2) - else if(isobserver(M) && !isnewplayer(M)) - var/rendered_ghost = "Blob Telepathy, [name]([overmind]) \ - (F) states, \"[message]\"" - M.show_message(rendered_ghost, 2) -*/ \ No newline at end of file diff --git a/code/modules/antagonists/blob/blobs_attack.dm b/code/modules/antagonists/blob/blobs_attack.dm index 32d39cad009..741cab891c3 100644 --- a/code/modules/antagonists/blob/blobs_attack.dm +++ b/code/modules/antagonists/blob/blobs_attack.dm @@ -1,5 +1,5 @@ /atom/proc/can_blob_attack() - return !(HAS_TRAIT(src, TRAIT_MAGICALLY_PHASED)) + return TRUE /mob/living/can_blob_attack() . = ..() diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index 8a880baecae..2d93c8d94b6 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -94,7 +94,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ for(var/obj/structure/blob/B as anything in overmind.all_blobs) B.modify_max_integrity(B.max_integrity * max_structure_health_multiplier) - B.update_appearance() + B.update_blob() for(var/mob/living/blob_mob as anything in overmind.blob_mobs) blob_mob.maxHealth *= max_mob_health_multiplier @@ -144,9 +144,8 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ /datum/blobstrain/proc/attack_living(mob/living/L, list/nearby_blobs) // When the blob attacks people send_message(L) - /// When this blob's blobbernaut attacks any atom -/datum/blobstrain/proc/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) +/datum/blobstrain/proc/blobbernaut_attack(atom/attacking, mob/living/simple_animal/hostile/blobbernaut) return /datum/blobstrain/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 4a860d8bd9b..860bffb1985 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -8,19 +8,19 @@ /datum/blobstrain/reagent/attack_living(mob/living/L) var/mob_protection = L.getarmor(null, BIO) * 0.01 - reagent.reaction_mob(L, REAGENT_INGEST, BLOB_REAGENTATK_VOL, TRUE, mob_protection, overmind) - send_message(L) + reagent.reaction_mob(L, REAGENT_TOUCH, BLOB_REAGENTATK_VOL, TRUE, mob_protection, overmind) + send_message(L) -/datum/blobstrain/reagent/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) +/datum/blobstrain/reagent/blobbernaut_attack(atom/attacking, mob/living/simple_animal/hostile/blobbernaut) if(!isliving(attacking)) return var/mob/living/living_attacking = attacking var/mob_protection = living_attacking.getarmor(null, BIO) * 0.01 - reagent.expose_mob(living_attacking, VAPOR, BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL+blobbernaut_reagentatk_bonus, FALSE, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. + reagent.reaction_mob(living_attacking, REAGENT_TOUCH, BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL + blobbernaut_reagentatk_bonus, FALSE, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. -/datum/blobstrain/reagent/on_sporedeath(mob/living/basic/spore) - var/burst_range = (spore.type == /mob/living/basic/blob_minion/spore) ? 1 : 0 +/datum/blobstrain/reagent/on_sporedeath(mob/living/simple_animal/hostile/spore) + var/burst_range = (spore.type == /mob/living/simple_animal/hostile/blob_minion/spore) ? 1 : 0 do_chem_smoke(range = burst_range, holder = spore, location = get_turf(spore), reagent_type = reagent.type) // These can only be applied by blobs. They are what (reagent) blobs are made out of. @@ -29,16 +29,15 @@ description = "shouldn't exist and you should adminhelp immediately." color = COLOR_WHITE taste_description = "bad code and slime" - chemical_flags = NONE - penetrates_skin = NONE + penetrates_skin = TRUE /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. -/datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) return 0 //the dead, and blob mobs, don't cause reactions return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. /// Exists to earmark the new overmind arg used by blob reagents. -/datum/reagent/blob/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) return ..() diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index ded3be1458e..9c946077bd2 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -19,7 +19,9 @@ /datum/blobstrain/reagent/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_type == BURN && damage_flag != ENERGY) - for(var/turf/open/T in range(1, B)) + for(var/turf/simulated/T as anything in range(1, B)) + if(iswallturf(T) || ismineralturf(T)) + continue var/obj/structure/blob/C = locate() in T if(!(C && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) && prob(80)) new /obj/effect/hotspot(T) @@ -29,15 +31,16 @@ /datum/reagent/blob/blazing_oil name = "Blazing Oil" + id = "blob_blazing_oil" taste_description = "burning oil" color = "#B68D00" -/datum/reagent/blob/blazing_oil/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/blazing_oil/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.adjust_fire_stacks(round(reac_volume/10)) - exposed_mob.ignite_mob() + exposed_mob.IgniteMob() if(exposed_mob) - exposed_mob.apply_damage(0.8*reac_volume, BURN, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.8*reac_volume, BURN, forced=TRUE) if(iscarbon(exposed_mob)) exposed_mob.emote("scream") diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index a18d802ff7d..81bc19235ef 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -12,18 +12,19 @@ /datum/reagent/blob/cryogenic_poison name = "Cryogenic Poison" + id = "blob_cryogenic_poison" description = "will inject targets with a freezing poison that does high damage over time." color = "#8BA6E9" taste_description = "brain freeze" -/datum/reagent/blob/cryogenic_poison/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/cryogenic_poison/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(exposed_mob.reagents) exposed_mob.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume) - exposed_mob.reagents.add_reagent(/datum/reagent/consumable/ice, 0.3*reac_volume) + exposed_mob.reagents.add_reagent(/datum/reagent/consumable/drink/cold/ice, 0.3*reac_volume) exposed_mob.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume) - exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.2*reac_volume, BRUTE, forced=TRUE) /datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/exposed_mob, seconds_per_tick, times_fired) . = ..() @@ -32,4 +33,4 @@ need_mob_update += exposed_mob.adjustFireLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += exposed_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE) if(need_mob_update) - . = UPDATE_MOB_HEALTH + . = STATUS_UPDATE_HEALTH diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm index 352d7c230a4..bc9e10915e9 100644 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -34,10 +34,15 @@ if (prob(40 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. var/obj/item/I = length(core.contents) ? pick(core.contents) : null if (!QDELETED(I)) + I.obj_flags |= IGNORE_BLOB_ACT I.forceMove(get_turf(source)) I.throw_at(attacking, 6, 5, overmind, TRUE, FALSE, null, 3) + addtimer(CALLBACK(src, PROC_REF(remove_protection), I), BLOB_ACT_PROTECTION_TIME) -/datum/blobstrain/debris_devourer/blobbernaut_attack(atom/attacking, mob/living/basic/blobbernaut) +/datum/blobstrain/debris_devourer/proc/remove_protection(obj/item) + item.obj_flags &= ~IGNORE_BLOB_ACT + +/datum/blobstrain/debris_devourer/blobbernaut_attack(atom/attacking, mob/living/simple_animal/hostile/blobbernaut) debris_attack(attacking, blobbernaut) /datum/blobstrain/debris_devourer/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index ea2bf54d769..365090f77b6 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -14,24 +14,25 @@ /datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/blob_tile, damage, damage_type, damage_flag) if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && blob_tile.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. blob_tile.visible_message(span_boldwarning("A spore floats free of the blob!")) - blob_tile.overmind.create_spore(blob_tile.loc, /mob/living/basic/blob_minion/spore/minion/weak) + blob_tile.overmind.create_spore(blob_tile.loc, /mob/living/simple_animal/hostile/blob_minion/spore/minion/weak) return ..() /datum/reagent/blob/distributed_neurons name = "Distributed Neurons" + id = "blob_distributed_neurons" color = "#E88D5D" taste_description = "fizzing" -/datum/reagent/blob/distributed_neurons/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/distributed_neurons/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.6*reac_volume, TOX) if(overmind && ishuman(exposed_mob)) - if(exposed_mob.stat == UNCONSCIOUS || exposed_mob.stat == HARD_CRIT) + if(exposed_mob.stat == UNCONSCIOUS) exposed_mob.investigate_log("has been killed by distributed neurons (blob).", INVESTIGATE_DEATHS) exposed_mob.death() //sleeping in a fight? bad plan. - if(exposed_mob.stat == DEAD && overmind.can_buy(5)) - var/mob/living/basic/blob_minion/spore/minion/spore = overmind.create_spore(get_turf(exposed_mob)) + if(exposed_mob.stat == DEAD && overmind.can_buy(BLOB_ZOMBIFICATION_COST)) + var/mob/living/simple_animal/hostile/blob_minion/spore/minion/spore = overmind.create_spore(get_turf(exposed_mob)) spore.zombify(exposed_mob) overmind.add_points(-5) - to_chat(overmind, span_notice("Spent 5 resources for the zombification of [exposed_mob].")) + to_chat(overmind, span_notice("Потрачено [BLOB_ZOMBIFICATION_COST] ресурса на зомбификацию [exposed_mob].")) diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm index 4a5c49d851a..8e265703969 100644 --- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm +++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm @@ -20,13 +20,14 @@ /datum/reagent/blob/electromagnetic_web name = "Electromagnetic Web" + id = "blob_electromagnetic_web" taste_description = "pop rocks" color = "#83ECEC" -/datum/reagent/blob/electromagnetic_web/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/electromagnetic_web/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(prob(reac_volume*2)) exposed_mob.emp_act(EMP_LIGHT) if(exposed_mob) - exposed_mob.apply_damage(reac_volume, BURN, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(reac_volume, BURN, forced=TRUE) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index 9fa5ed9ab96..f599327c0a3 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -23,13 +23,14 @@ /datum/reagent/blob/energized_jelly name = "Energized Blob Jelly" + id = "blob_energized_jelly" taste_description = "gelatin" color = "#EFD65A" -/datum/reagent/blob/energized_jelly/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/energized_jelly/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.losebreath += round(0.2*reac_volume) + exposed_mob.LoseBreath(round(0.2*reac_volume)) exposed_mob.adjustStaminaLoss(reac_volume * 1.2) if(exposed_mob) exposed_mob.apply_damage(0.6*reac_volume, OXY) diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm index e1ae8294df3..db0e4ddfb2d 100644 --- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm +++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm @@ -28,10 +28,11 @@ /datum/reagent/blob/explosive_lattice name = "Explosive Lattice" + id = "blob_explosive_lattice" taste_description = "the bomb" color = "#8B2500" -/datum/reagent/blob/explosive_lattice/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/explosive_lattice/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() var/brute_loss = 0 var/burn_loss = 0 @@ -71,4 +72,4 @@ nearby_mob.take_overall_damage(brute_loss, burn_loss) else - exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.6*reac_volume, BRUTE, forced = TRUE) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm index 4c84eb639d7..371fe0ece1b 100644 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -16,8 +16,7 @@ new_blob.overmind.add_points(1) qdel(new_blob) return - if(isspaceturf(chosen_turf)) - return + for(var/obj/structure/blob/possible_expander in range(1, new_blob)) if(possible_expander.overmind == overmind && (istype(possible_expander, /obj/structure/blob/special/core) || istype(possible_expander, /obj/structure/blob/special/node))) new_blob.forceMove(get_turf(possible_expander)) @@ -30,12 +29,13 @@ //does massive brute and burn damage, but can only expand manually /datum/reagent/blob/networked_fibers name = "Networked Fibers" + id = "blob_networked_fibers" taste_description = "efficiency" color = "#4F4441" -/datum/reagent/blob/networked_fibers/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/networked_fibers/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.6*reac_volume, BRUTE, forced = TRUE) if(!QDELETED(exposed_mob)) - exposed_mob.apply_damage(0.6*reac_volume, BURN, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.6*reac_volume, BURN, forced = TRUE) diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm similarity index 70% rename from code/modules/reagents/chemistry/reagents/blob.dm rename to code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm index b1a7952973e..d39ade40cc5 100644 --- a/code/modules/reagents/chemistry/reagents/blob.dm +++ b/code/modules/antagonists/blob/blobstrains/old_blob_reagents.dm @@ -1,114 +1,38 @@ -// These can only be applied by blobs. They are what blobs are made out of. -// The 4 damage -/datum/reagent/blob - description = "" - var/complementary_color = "#000000" - var/message = "Блоб наносит вам удар" //message sent to any mob hit by the blob - var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt - can_synth = FALSE - -/datum/reagent/blob/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume, show_message, touch_protection) - return round(volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. - -/datum/reagent/blob/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) //when the blob takes damage, do this - return damage +/* +var/message = "Блоб наносит вам удар" //message sent to any mob hit by the blob /datum/reagent/blob/ripping_tendrils //does brute and a little stamina damage name = "Разрывающие щупальца" description = "Наносит высокий урон травмами, а также урон выносливости." - id = "ripping_tendrils" - color = "#7F0000" - complementary_color = "#a15656" message_living = ", и вы чувствуете, как ваша кожа рвется и слезает." -/datum/reagent/blob/ripping_tendrils/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.6*volume, BRUTE) - M.adjustStaminaLoss(volume) - if(iscarbon(M)) - M.emote("scream") - /datum/reagent/blob/boiling_oil //sets you on fire, does burn damage name = "Кипящее масло" description = "Наносит высокий урон ожогами и поджигает жертву." - id = "boiling_oil" - color = "#B68D00" - complementary_color = "#c0a856" message = "Блоб обдает вас горящим маслом" message_living = ", и вы чувствуете, как ваша кожа обугливается и плавится" -/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - M.adjust_fire_stacks(round(volume/10)) - volume = ..() - M.apply_damage(0.6*volume, BURN) - M.IgniteMob() - M.emote("scream") - /datum/reagent/blob/envenomed_filaments //toxin, hallucination, and some bonus spore toxin name = "Ядовитые нити" description = "Наносит высокий урон токсинами, вызывает галлюцинации и вводит споры в кровоток." - id = "envenomed_filaments" - color = "#9ACD32" - complementary_color = "#b0cd73" message_living = ", и вы чувствуете себя плохо. Вас тошнит" -/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.6 * volume, TOX) - M.AdjustHallucinate(1.2 SECONDS * volume) - if(M.reagents) - M.reagents.add_reagent("spore", 0.4*volume) - /datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute name = "Лексориновое желе" description = "Наносит средний урон травмами, но огромный урон гипоксией." - id = "lexorin_jelly" - color = "#00FFC5" - complementary_color = "#56ebc9" message_living = ", и ваши легкие кажутся тяжелыми и слабыми" -/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.4*volume, BRUTE) - M.apply_damage(1*volume, OXY) - M.AdjustLoseBreath(round(0.6 SECONDS * volume)) - - /datum/reagent/blob/kinetic //does semi-random brute damage name = "Кинетический желатин" description = "Наносит случайный урон травмами, в 0,33–2,33 раза превышающий стандартное количество." - id = "kinetic" - color = "#FFA500" - complementary_color = "#ebb756" message = "Блоб избивает вас" -/datum/reagent/blob/kinetic/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - var/damage = rand(5, 35)/25 - M.apply_damage(damage*volume, BRUTE) - /datum/reagent/blob/cryogenic_liquid //does low burn damage and stamina damage and cools targets down name = "Криогенная жидкость" description = "Наносит средний урон травмами, урон выносливости и вводит в жертв ледяное масло, замораживая их до смерти." - id = "cryogenic_liquid" - color = "#8BA6E9" - complementary_color = "#a8b7df" message = "Блоб обливает вас ледяной жидкостью" message_living = ", и вы чувствуете себя холодным и усталым" -/datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH) - volume = ..() - M.apply_damage(0.4*volume, BURN) - M.adjustStaminaLoss(volume) - if(M.reagents) - M.reagents.add_reagent("frostoil", 0.4*volume) - /datum/reagent/blob/b_sorium name = "Сорий" description = "Наносит высокий урон травмами и отбрасывает людей в стороны." @@ -193,3 +117,4 @@ totalmessage += message_living totalmessage += "!" to_chat(M, "[totalmessage]") +*/ diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index d035319219d..58cd5ac67ef 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -25,28 +25,33 @@ extinguisharea(B, 50) /datum/blobstrain/reagent/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance) - for(var/turf/open/T in range(1, B)) + for(var/turf/simulated/T as anything in range(1, B)) + if(!istype(T) || iswallturf(T) || ismineralturf(T)) + continue if(prob(probchance)) T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) for(var/obj/O in T) O.extinguish() for(var/mob/living/L in T) L.adjust_wet_stacks(2.5) - L.extinguish_mob() + L.WetMob() + L.ExtinguishMob() /datum/reagent/blob/pressurized_slime name = "Pressurized Slime" + id = "blob_pressurized_slime" taste_description = "a sponge" color = "#AAAABB" -/datum/reagent/blob/pressurized_slime/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/pressurized_slime/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - var/turf/open/location_turf = get_turf(exposed_mob) - if(istype(location_turf) && prob(reac_volume)) + var/turf/simulated/location_turf = get_turf(exposed_mob) + if(istype(location_turf) && !(iswallturf(location_turf) || ismineralturf(location_turf)) && prob(reac_volume)) location_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) exposed_mob.adjust_wet_stacks(reac_volume / 10) - exposed_mob.apply_damage(0.4*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.WetMob() + exposed_mob.apply_damage(0.4*reac_volume, BRUTE, forced=TRUE) if(exposed_mob) exposed_mob.adjustStaminaLoss(reac_volume, FALSE) exposed_mob.apply_damage(0.4 * reac_volume, OXY) diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index 1c8cb893df8..a8ef52d8a31 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -31,15 +31,16 @@ /datum/reagent/blob/reactive_spines name = "Reactive Spines" + id = "blob_reactive_spines" taste_description = "rock" color = "#9ACD32" -/datum/reagent/blob/reactive_spines/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/reactive_spines/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) return 0 //the dead, and blob mobs, don't cause reactions return reac_volume -/datum/reagent/blob/reactive_spines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/reactive_spines/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.adjustBruteLoss(reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index a62895ae6c4..5e50161c487 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -12,14 +12,15 @@ /datum/reagent/blob/regenerative_materia name = "Regenerative Materia" + id = "blob_regenerative_materia" taste_description = "heaven" color = "#A88FB7" -/datum/reagent/blob/regenerative_materia/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/regenerative_materia/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(iscarbon(exposed_mob)) - exposed_mob.adjust_drugginess(reac_volume * 2 SECONDS) + exposed_mob.Druggy(reac_volume * 2 SECONDS) if(exposed_mob.reagents) exposed_mob.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume) exposed_mob.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume) @@ -28,9 +29,9 @@ /datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) . = ..() if(metabolizer.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE)) - return UPDATE_MOB_HEALTH + return STATUS_UPDATE_HEALTH -/datum/reagent/blob/regenerative_materia/on_mob_metabolize(mob/living/metabolizer) +/datum/reagent/blob/regenerative_materia/on_mob_start_metabolize(mob/living/metabolizer) . = ..() metabolizer.apply_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type) diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index 83d84618da5..1173dedcd78 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -27,10 +27,11 @@ /datum/reagent/blob/replicating_foam name = "Replicating Foam" + id = "blob_replicating_foam" taste_description = "duplication" color = "#7B5A57" -/datum/reagent/blob/replicating_foam/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/replicating_foam/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.7*reac_volume, BRUTE, forced = TRUE) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 3db0041b310..8d191a4499a 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -29,9 +29,10 @@ /datum/reagent/blob/shifting_fragments name = "Shifting Fragments" + id = "blob_shifting_fragments" color = "#C8963C" -/datum/reagent/blob/shifting_fragments/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/shifting_fragments/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.7*reac_volume, BRUTE, forced = TRUE) diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm index 825104ddcc1..83306cbf142 100644 --- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm +++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm @@ -27,15 +27,16 @@ /datum/reagent/blob/synchronous_mesh name = "Synchronous Mesh" + id = "blob_synchronous_mesh" taste_description = "toxic mold" color = "#65ADA2" -/datum/reagent/blob/synchronous_mesh/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) +/datum/reagent/blob/synchronous_mesh/reaction_mob(mob/living/exposed_mob, methods=REAGENT_TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.2*reac_volume, BRUTE, forced = TRUE) if(exposed_mob && reac_volume) for(var/obj/structure/blob/nearby_blob in range(1, exposed_mob)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume if(exposed_mob) nearby_blob.blob_attack_animation(exposed_mob) //show them they're getting a bad time - exposed_mob.apply_damage(0.3*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + exposed_mob.apply_damage(0.3*reac_volume, BRUTE, forced = TRUE) diff --git a/code/modules/antagonists/blob/overmind copy.dm b/code/modules/antagonists/blob/overmind copy.dm deleted file mode 100644 index e51954dd12e..00000000000 --- a/code/modules/antagonists/blob/overmind copy.dm +++ /dev/null @@ -1,96 +0,0 @@ -/mob/camera/blob - -/mob/camera/blob/New() - var/new_name = "[initial(name)] ([rand(1, 999)])" - name = new_name - real_name = new_name - last_attack = world.time - ..() - START_PROCESSING(SSobj, src) - -/mob/camera/blob/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/mob/camera/blob/process() - if(!blob_core) - qdel(src) - -/mob/camera/blob/Login() - ..() - sync_mind() - update_health_hud() - sync_lighting_plane_alpha() - -/mob/camera/blob/update_health_hud() - if(blob_core && hud_used) - hud_used.blobhealthdisplay.maptext = "