From 920cd7459d9dd0a08891296ae1371b77eec50cb1 Mon Sep 17 00:00:00 2001 From: Jacquerel Date: Sat, 15 Jun 2024 00:37:04 +0100 Subject: [PATCH] Neutralised anomalies respect the core limit (#83964) ## About The Pull Request This PR changes it so that if you refine an anomaly by neutralising it, it respects the same limit on number of anomaly cores as refining one you bought from Cargo. If it would produce an illegal core, it will create a mostly useless inert core which you can sell at cargo for 80% of the price of buying a raw core. ## Why It's Good For The Game https://hackmd.io/@tgstation/r1tzxpwPL This was a requirement in the original design doc which just never made it into the game. We want to be able to control how many cores of each type can possibly exist in a round, as this is what allows them to have the "these items can be really busted" allowance. ## Changelog :cl: fix: Neutralising an anomaly cannot produce more anomaly cores than are supposed to exist in a single round /:cl: --- code/controllers/subsystem/research.dm | 13 +++++++ .../objects/effects/anomalies/_anomalies.dm | 33 +++++++++++------- .../anomalies/anomalies_bioscrambler.dm | 2 +- .../effects/anomalies/anomalies_bluespace.dm | 4 +-- .../anomalies/anomalies_dimensional.dm | 2 +- .../effects/anomalies/anomalies_ectoplasm.dm | 2 +- .../effects/anomalies/anomalies_flux.dm | 4 +-- .../effects/anomalies/anomalies_gravity.dm | 4 +-- .../anomalies/anomalies_hallucination.dm | 2 +- .../anomalies/anomalies_pyroclastic.dm | 4 +-- .../effects/anomalies/anomalies_vortex.dm | 2 +- .../objects/items/stacks/sheets/mineral.dm | 3 ++ code/modules/cargo/exports/anomaly.dm | 4 +++ code/modules/mining/ores_coins.dm | 3 ++ .../research/anomaly/anomaly_refinery.dm | 6 ++-- code/modules/research/anomaly/raw_anomaly.dm | 10 ++++-- icons/obj/devices/new_assemblies.dmi | Bin 28783 -> 28829 bytes tgstation.dme | 1 + 18 files changed, 69 insertions(+), 30 deletions(-) create mode 100644 code/modules/cargo/exports/anomaly.dm diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 5b009153071..b51e686c6a6 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -332,3 +332,16 @@ SUBSYSTEM_DEF(research) continue valid_servers += server return valid_servers + +/// Returns true if you can make an anomaly core of the provided type +/datum/controller/subsystem/research/proc/is_core_available(core_type) + if (!ispath(core_type, /obj/item/assembly/signaler/anomaly)) + return FALSE // The fuck are you checking this random object for? + var/already_made = created_anomaly_types[core_type] || 0 + var/hard_limit = anomaly_hard_limit_by_type[core_type] + return already_made < hard_limit + +/// Increase our tracked number of cores of this type +/datum/controller/subsystem/research/proc/increment_existing_anomaly_cores(core_type) + var/existing = created_anomaly_types[core_type] || 0 + created_anomaly_types[core_type] = existing + 1 diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index a3f0b79044b..ee02cab9e03 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -8,7 +8,7 @@ anchored = TRUE light_range = 3 - var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly + var/obj/item/assembly/signaler/anomaly/anomaly_core = /obj/item/assembly/signaler/anomaly var/area/impact_area var/lifespan = ANOMALY_COUNTDOWN_TIMER @@ -37,12 +37,12 @@ return INITIALIZE_HINT_QDEL src.drops_core = drops_core - if(aSignal) - aSignal = new aSignal(src) - aSignal.code = rand(1,100) - aSignal.anomaly_type = type + if(anomaly_core) + anomaly_core = new anomaly_core(src) + anomaly_core.code = rand(1,100) + anomaly_core.anomaly_type = type - aSignal.set_frequency(sanitize_frequency(rand(MIN_FREE_FREQ, MAX_FREE_FREQ), free = TRUE)) + anomaly_core.set_frequency(sanitize_frequency(rand(MIN_FREE_FREQ, MAX_FREE_FREQ), free = TRUE)) if(new_lifespan) lifespan = new_lifespan @@ -72,7 +72,7 @@ /obj/effect/anomaly/Destroy() STOP_PROCESSING(SSobj, src) QDEL_NULL(countdown) - QDEL_NULL(aSignal) + QDEL_NULL(anomaly_core) return ..() /obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) @@ -97,18 +97,25 @@ new /obj/effect/particle_effect/fluid/smoke/bad(loc) if(drops_core) - if(isnull(aSignal)) + if(isnull(anomaly_core)) stack_trace("An anomaly ([src]) exists that drops a core, yet has no core!") else - aSignal.forceMove(drop_location()) - aSignal = null + var/anomaly_type = anomaly_core.type + if (SSresearch.is_core_available(anomaly_type)) + SSresearch.increment_existing_anomaly_cores(anomaly_type) + anomaly_core.forceMove(drop_location()) + anomaly_core = null + else // You exceeded the cap sorry + visible_message(span_warning("[anomaly_core] loses its lustre as it falls to the ground, there is too little ambient energy to support another core of this type.")) + new /obj/item/inert_anomaly(drop_location()) + // else, anomaly core gets deleted by qdel(src). qdel(src) /obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal) - to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) + if(weapon.tool_behaviour == TOOL_ANALYZER && anomaly_core) + to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(anomaly_core.frequency)], code [anomaly_core.code].")) return TRUE return ..() @@ -119,6 +126,6 @@ name = (has_core ? "stable " : "hollow ") + name if(!has_core) drops_core = FALSE - QDEL_NULL(aSignal) + QDEL_NULL(anomaly_core) if (anchor) move_chance = 0 diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index 3b7a0d17cc7..c57a629d85c 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/bioscrambler name = "bioscrambler anomaly" icon_state = "bioscrambler" - aSignal = /obj/item/assembly/signaler/anomaly/bioscrambler + anomaly_core = /obj/item/assembly/signaler/anomaly/bioscrambler immortal = TRUE pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS layer = ABOVE_MOB_LAYER diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index fa88e7d268d..2ed19adb4f2 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/weapons/guns/projectiles.dmi' icon_state = "bluespace" density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/bluespace + anomaly_core = /obj/item/assembly/signaler/anomaly/bluespace ///range from which we can teleport someone var/teleport_range = 1 ///Distance we can teleport someone passively @@ -85,7 +85,7 @@ immortal = TRUE teleport_range = 2 teleport_distance = 12 - aSignal = null + anomaly_core = null /obj/effect/anomaly/bluespace/big/Initialize(mapload, new_lifespan, drops_core) . = ..() diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index 026c5974d5f..53129c0e9ce 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/dimensional name = "dimensional anomaly" icon_state = "dimensional" - aSignal = /obj/item/assembly/signaler/anomaly/dimensional + anomaly_core = /obj/item/assembly/signaler/anomaly/dimensional immortal = TRUE move_chance = 0 /// Range of effect, if left alone anomaly will convert a 2(range)+1 squared area. diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index 51a033f515f..e6c3e855386 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -2,7 +2,7 @@ name = "ectoplasm anomaly" desc = "It looks like the souls of the damned are trying to break into the realm of the living again. How upsetting." icon_state = "ectoplasm" - aSignal = /obj/item/assembly/signaler/anomaly/ectoplasm + anomaly_core = /obj/item/assembly/signaler/anomaly/ectoplasm lifespan = ANOMALY_COUNTDOWN_TIMER + 2 SECONDS //This one takes slightly longer, because it can run away. move_chance = 0 //prevents it from moving around so ghosts can actually move it with decent accuracy diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index 91f09095d6f..6a4d1e7cf8a 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -2,7 +2,7 @@ name = "flux wave anomaly" icon_state = "flux" density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/flux + anomaly_core = /obj/item/assembly/signaler/anomaly/flux var/canshock = FALSE var/shockdamage = 20 var/explosive = FLUX_EXPLOSIVE @@ -61,7 +61,7 @@ ///Bigger, meaner, immortal flux anomaly /obj/effect/anomaly/flux/big immortal = TRUE - aSignal = null + anomaly_core = null shockdamage = 30 ///range in whuich we zap diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index fa7c4f48a36..08becc48c75 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -12,7 +12,7 @@ icon = 'icons/effects/effects.dmi' icon_state = "shield2" density = FALSE - aSignal = /obj/item/assembly/signaler/anomaly/grav + anomaly_core = /obj/item/assembly/signaler/anomaly/grav var/boing = 0 ///Warp effect holder for displacement filter to "pulse" the anomaly var/atom/movable/warp_effect/warp @@ -104,7 +104,7 @@ ///Bigger, meaner, immortal gravity anomaly. although this is just the super grav anomaly but bigger and shattering move force /obj/effect/anomaly/grav/high/big immortal = TRUE - aSignal = null + anomaly_core = null move_force = MOVE_FORCE_OVERPOWERING /obj/effect/anomaly/grav/high/big/Initialize(mapload, new_lifespan, drops_core) diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index a6696070df1..4065d8c04a4 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/hallucination name = "hallucination anomaly" icon_state = "hallucination" - aSignal = /obj/item/assembly/signaler/anomaly/hallucination + anomaly_core = /obj/item/assembly/signaler/anomaly/hallucination /// Time passed since the last effect, increased by seconds_per_tick of the SSobj var/ticks = 0 /// How many seconds between each small hallucination pulses diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index 9cb92a6961d..6d65990b563 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -5,7 +5,7 @@ var/ticks = 0 /// How many seconds between each gas release var/releasedelay = 10 - aSignal = /obj/item/assembly/signaler/anomaly/pyro + anomaly_core = /obj/item/assembly/signaler/anomaly/pyro /obj/effect/anomaly/pyro/Initialize(mapload, new_lifespan, drops_core) . = ..() @@ -46,7 +46,7 @@ ///Bigger, meaner, immortal pyro anomaly /obj/effect/anomaly/pyro/big immortal = TRUE - aSignal = null + anomaly_core = null releasedelay = 2 move_force = MOVE_FORCE_OVERPOWERING diff --git a/code/game/objects/effects/anomalies/anomalies_vortex.dm b/code/game/objects/effects/anomalies/anomalies_vortex.dm index 935522fe901..0313f63146b 100644 --- a/code/game/objects/effects/anomalies/anomalies_vortex.dm +++ b/code/game/objects/effects/anomalies/anomalies_vortex.dm @@ -3,7 +3,7 @@ name = "vortex anomaly" icon_state = "vortex" desc = "That's a nice station you have there. It'd be a shame if something happened to it." - aSignal = /obj/item/assembly/signaler/anomaly/vortex + anomaly_core = /obj/item/assembly/signaler/anomaly/vortex /obj/effect/anomaly/bhole/anomalyEffect() ..() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 4e4e1db1f9a..c969b1dbe50 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -113,6 +113,9 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ . = ..() . += GLOB.diamond_recipes +/obj/item/stack/sheet/mineral/diamond/five + amount = 5 + /* * Uranium */ diff --git a/code/modules/cargo/exports/anomaly.dm b/code/modules/cargo/exports/anomaly.dm new file mode 100644 index 00000000000..be197e9181c --- /dev/null +++ b/code/modules/cargo/exports/anomaly.dm @@ -0,0 +1,4 @@ +/datum/export/inert_anomaly + cost = CARGO_CRATE_VALUE * 8 // Worth a bit less than a normal anomaly core + unit_name = "inert anomaly core" + export_types = list(/obj/item/inert_anomaly) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index e9c226731e7..d2a9af576ce 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -198,6 +198,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ scan_state = "rock_Diamond" merge_type = /obj/item/stack/ore/diamond +/obj/item/stack/ore/diamond/five + amount = 5 + /obj/item/stack/ore/bananium name = "bananium ore" icon_state = "bananium" diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index 1805a252318..bae2b4f1162 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -60,10 +60,12 @@ * * anomaly_type - anomaly type define */ /obj/machinery/research/anomaly_refinery/proc/get_required_radius(anomaly_type) + if(!SSresearch.is_core_available(anomaly_type)) + return //return null + var/already_made = SSresearch.created_anomaly_types[anomaly_type] var/hard_limit = SSresearch.anomaly_hard_limit_by_type[anomaly_type] - if(already_made >= hard_limit) - return //return null + // my crappy autoscale formula // linear scaling. var/radius_span = MAX_RADIUS_REQUIRED - MIN_RADIUS_REQUIRED diff --git a/code/modules/research/anomaly/raw_anomaly.dm b/code/modules/research/anomaly/raw_anomaly.dm index 2df844e4bb8..d86ed1f1d9d 100644 --- a/code/modules/research/anomaly/raw_anomaly.dm +++ b/code/modules/research/anomaly/raw_anomaly.dm @@ -91,7 +91,13 @@ /obj/item/raw_anomaly_core/proc/create_core(newloc, del_self = FALSE, count_towards_limit = FALSE) . = new anomaly_type(newloc) if(count_towards_limit) - var/existing = SSresearch.created_anomaly_types[anomaly_type] || 0 - SSresearch.created_anomaly_types[anomaly_type] = existing + 1 + SSresearch.increment_existing_anomaly_cores(anomaly_type) if(del_self) qdel(src) + +/// Doesn't do anything, consolation prize if you neu +/obj/item/inert_anomaly + name = "inert anomaly core" + desc = "A chunk of fused exotic materials. Useless to you, but some other lab might purchase it." + icon = 'icons/obj/devices/new_assemblies.dmi' + icon_state = "rawcore_inert" diff --git a/icons/obj/devices/new_assemblies.dmi b/icons/obj/devices/new_assemblies.dmi index 411ad8b61df64e1100c33d60d12775a6b39472e0..1de208a7736ce88ac3c398fc8d17909bcea24dc8 100644 GIT binary patch delta 9111 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 delta 9062 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 diff --git a/tgstation.dme b/tgstation.dme index 315e5cef3fd..dd55b451101 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3604,6 +3604,7 @@ #include "code\modules\cargo\bounties\slime.dm" #include "code\modules\cargo\bounties\special.dm" #include "code\modules\cargo\bounties\virus.dm" +#include "code\modules\cargo\exports\anomaly.dm" #include "code\modules\cargo\exports\antiques.dm" #include "code\modules\cargo\exports\civilain_bounty.dm" #include "code\modules\cargo\exports\food_and_drink.dm"