diff --git a/code/__DEFINES/blob_defines.dm b/code/__DEFINES/blob_defines.dm index 7cfec0e7d05..72b9f20ce8a 100644 --- a/code/__DEFINES/blob_defines.dm +++ b/code/__DEFINES/blob_defines.dm @@ -1,11 +1,13 @@ +// SKYRAT EDIT CHANGE -- Blob buff to balance it more around our pop. +// Can't be moved to modular_skyrat since it's defines, and not having it here makes /everything/ throw errors. // Overmind defines #define OVERMIND_MAX_POINTS_DEFAULT 100 // Max point storage -#define OVERMIND_STARTING_POINTS 60 // Points granted upon start +#define OVERMIND_STARTING_POINTS 80 // Points granted upon start #define OVERMIND_STARTING_REROLLS 1 // Free strain rerolls at the start #define OVERMIND_STARTING_MIN_PLACE_TIME 1 MINUTES // Minimum time before the core can be placed #define OVERMIND_STARTING_AUTO_PLACE_TIME 6 MINUTES // After this time, randomly place the core somewhere viable -#define OVERMIND_WIN_CONDITION_AMOUNT 400 // Blob structures required to win +#define OVERMIND_WIN_CONDITION_AMOUNT 700 // Blob structures required to win #define OVERMIND_ANNOUNCEMENT_MIN_SIZE 75 // Once the blob has this many structures, announce their presence #define OVERMIND_ANNOUNCEMENT_MAX_TIME 10 MINUTES // If the blob hasn't reached the minimum size before this time, announce their presence #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 @@ -14,7 +16,7 @@ // 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_EXPAND_COST 3 // 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 @@ -31,8 +33,8 @@ #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_MAX_SPORES 0 // Spores that the core can produce for free +#define BLOB_CORE_REFLECTOR_REINFORCE_RANGE 1 +#define BLOB_CORE_MAX_SPORES 2 // Spores that the core can produce for free #define BLOB_NODE_MAX_HP 200 #define BLOB_NODE_HP_REGEN 3 @@ -42,18 +44,18 @@ #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_NODE_MAX_SPORES 0 // Spores that nodes can maintain +#define BLOB_NODE_MAX_SPORES 1 // Spores that nodes can maintain #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_FACTORY_MAX_SPORES 4 #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_MIN_DISTANCE 3 // 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_GATHER_ADDED_DELAY 0.4 SECONDS// Every additional resource blob adds this amount to the gather delay #define BLOB_RESOURCE_GATHER_AMOUNT 1 // The amount of points added to the overmind #define BLOB_REGULAR_MAX_HP 30 @@ -68,20 +70,20 @@ // Structure purchasing -#define BLOB_UPGRADE_STRONG_COST 15 // Upgrade and build costs here -#define BLOB_UPGRADE_REFLECTOR_COST 15 +#define BLOB_UPGRADE_STRONG_COST 10 // Upgrade and build costs here +#define BLOB_UPGRADE_REFLECTOR_COST 5 #define BLOB_STRUCTURE_RESOURCE_COST 40 -#define BLOB_STRUCTURE_FACTORY_COST 60 +#define BLOB_STRUCTURE_FACTORY_COST 50 #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_STRONG_COST 8 // Points refunded when destroying the structure +#define BLOB_REFUND_REFLECTOR_COST 4 #define BLOB_REFUND_FACTORY_COST 25 #define BLOB_REFUND_NODE_COST 25 // Blob power properties -#define BLOB_POWER_RELOCATE_COST 80 // Resource cost to move your core to a different node +#define BLOB_POWER_RELOCATE_COST 25 // 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 @@ -92,10 +94,10 @@ #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 8 +#define BLOBMOB_SPORE_DMG_UPPER 16 #define BLOBMOB_BLOBBERNAUT_RESOURCE_COST 40 // Purchase price for making a blobbernaut -#define BLOBMOB_BLOBBERNAUT_HEALTH 200 // Base blobbernaut health +#define BLOBMOB_BLOBBERNAUT_HEALTH 150 // 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) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index b9cc7b26ac6..0fb62ff9bd9 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -121,6 +121,10 @@ GLOBAL_LIST_EMPTY(blob_nodes) max_blob_points = INFINITY blob_points = INFINITY addtimer(CALLBACK(src, .proc/victory), 450) + // SKYRAT EDIT ADDITION START -- Automated distress announcement + else if(!has_announced_emergency && (blobs_legit.len >= (0.3*blobwincount))) + announce_blob_distress_signal() + // SKYRAT EDIT ADDITION END else if(!free_strain_rerolls && (last_reroll_time + BLOB_POWER_REROLL_FREE_TIMEYou have gained another free strain re-roll.") free_strain_rerolls = 1 diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm index 37a1ab12afd..1f98a071457 100644 --- a/code/modules/antagonists/blob/structures/shield.dm +++ b/code/modules/antagonists/blob/structures/shield.dm @@ -40,7 +40,9 @@ 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 + // flags_ricochet = RICOCHET_SHINY // SKYRAT EDIT ORIGINAL + flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD // SKYRAT EDIT CHANGE -- BLOB BUFF + receive_ricochet_chance_mod = 2 // SKYRAT EDIT ADDITION -- BLOB BUFF point_return = BLOB_REFUND_REFLECTOR_COST explosion_block = 2 max_integrity = BLOB_REFLECTOR_MAX_HP diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 492ba317064..d4d8328013b 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -4,7 +4,8 @@ weight = 10 max_occurrences = 1 - min_players = 20 + // min_players = 20 // SKYRAT EDIT -- Original + min_players = 60 // SKYRAT EDIT CHANGE -- Requires 60 alive non-afk players for blob gamemode_blacklist = list("blob") //Just in case a blob survives that long diff --git a/modular_skyrat/modules/blob/code/modules/antagonists/blob/overmind.dm b/modular_skyrat/modules/blob/code/modules/antagonists/blob/overmind.dm new file mode 100644 index 00000000000..2ac7a5ba54a --- /dev/null +++ b/modular_skyrat/modules/blob/code/modules/antagonists/blob/overmind.dm @@ -0,0 +1,10 @@ +/mob/camera/blob + /// At the halfway point to blob victory, send an automated announcement/distress call, letting all crew know how fucked things are and allowing admins to send (more) ERT + var/has_announced_emergency = FALSE + +/mob/camera/blob/proc/announce_blob_distress_signal() + has_announced_emergency = TRUE + if(GLOB.security_level != SEC_LEVEL_RED) // Why the hell is it not red yet?! + set_security_level("red") + priority_announce("Biohazard lifeform aboard [GLOB.station_name] is rapidly approaching critical mass. Off-station Response Teams are requested to aid immediately.", "Automated Biohazard Distress Signal", sender_override = "[GLOB.station_name]") + diff --git a/tgstation.dme b/tgstation.dme index 6c8e720f78d..e4115cb9c9f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3539,6 +3539,7 @@ #include "modular_skyrat\modules\biohazard_blob\code\biohazard_blob_disease.dm" #include "modular_skyrat\modules\biohazard_blob\code\biohazard_blob_mobs.dm" #include "modular_skyrat\modules\biohazard_blob\code\biohazard_blob_structures.dm" +#include "modular_skyrat\modules\blob\code\modules\antagonists\blob\overmind.dm" #include "modular_skyrat\modules\blueshield\code\game\area\Space_Station_13_areas.dm" #include "modular_skyrat\modules\blueshield\code\game\objects\effects\landmarks.dm" #include "modular_skyrat\modules\blueshield\code\game\objects\items\devices\radio\encryptionkey.dm"