[MIRROR] Adds a multi-dimensional bomb payload to the black market. (#26663)

* Adds a multi-dimensional bomb payload to the black market. (#81562)

## About The Pull Request
This PR adds a !!!FUN!!! bomb payload to the blackmarket, which, upon
detonation, transmutates all terrain in a range like the dimensional
anomaly would. You can also select the dimensional theme to use by using
it in your hand.

I believe however, this thing should cost a fuckton to get and only show
up occasionally. 8k to 10k was my original idea, but I think that's
perhaps not high enough given its flagrant potential. Perhaps I should
also make it so the more dangerous themes yield a shorter range than
others. Suggestions are welcome.

Screenshot of what happens when you don't set the theme:

![chaotic_mess](https://github.com/tgstation/tgstation/assets/42542238/e4c3264d-17e0-45b6-90c2-3c30a592ae2d)

This PR also turns dimension themes into singletons so we access them
more easily. Nothing to write home about.

## Why It's Good For The Game
The black market could always use some extra thingy or two anyway, and
this thing could either be a source of emergent gameplay, or a recipe
for a disaster. Perhaps second to the Big Slappy for how funny it could
be.

## Changelog

🆑
add: Added a multi-dimensional bomb payload to the black market. It's
very expensive.
/🆑

* Adds a multi-dimensional bomb payload to the black market.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-02-26 23:15:58 -05:00
committed by GitHub
co-authored by Ghom
parent a3d9aec4d9
commit 34f67a1e57
6 changed files with 104 additions and 17 deletions
@@ -21,6 +21,11 @@
animate(src, transform = matrix()*0.85, time = 3, loop = -1)
animate(transform = matrix(), time = 3, loop = -1)
/obj/effect/anomaly/dimensional/Destroy()
theme = null
target_turfs = null
return ..()
/obj/effect/anomaly/dimensional/anomalyEffect(seconds_per_tick)
. = ..()
transmute_area()
@@ -36,8 +41,7 @@
return
var/turf/affected_turf = target_turfs[1]
new /obj/effect/temp_visual/transmute_tile_flash(affected_turf)
theme.apply_theme(affected_turf)
theme.apply_theme(affected_turf, show_effect = TRUE)
target_turfs -= affected_turf
/**
@@ -47,7 +51,7 @@
/obj/effect/anomaly/dimensional/proc/prepare_area(new_theme_path)
if (!new_theme_path)
new_theme_path = pick(subtypesof(/datum/dimension_theme))
theme = new new_theme_path()
theme = SSmaterials.dimensional_themes[new_theme_path]
apply_theme_icon()
target_turfs = list()
@@ -1,4 +1,3 @@
/**
* Datum which describes a theme and replaces turfs and objects in specified locations to match that theme
*/
@@ -44,12 +43,16 @@
*
* Arguments
* * affected_turf - Turf to transform.
* * skip_sound - If the sound shouldn't be played.
* * show_effect - if the temp visual effect should be shown.
*/
/datum/dimension_theme/proc/apply_theme(turf/affected_turf, skip_sound = FALSE)
/datum/dimension_theme/proc/apply_theme(turf/affected_turf, skip_sound = FALSE, show_effect = FALSE)
if (!replace_turf(affected_turf))
return
if (!skip_sound)
playsound(affected_turf, sound, 100, TRUE)
if(show_effect)
new /obj/effect/temp_visual/transmute_tile_flash(affected_turf)
for (var/obj/object in affected_turf)
replace_object(object)
if (length(random_spawns) && prob(random_spawn_chance) && !affected_turf.is_blocked_turf(exclude_mobs = TRUE))
@@ -250,7 +253,7 @@
/datum/dimension_theme/radioactive
name = "Radioactive"
icon = 'icons/obj/ore.dmi'
icon_state = "Uranium ore"
icon_state = "uranium"
material = /datum/material/uranium
sound = 'sound/items/welder.ogg'
@@ -353,7 +356,14 @@
name = "Fancy"
icon = 'icons/obj/clothing/head/costume.dmi'
icon_state = "fancycrown"
replace_floors = null
replace_walls = /turf/closed/wall/mineral/wood/nonmetal
replace_objs = list(
/obj/structure/chair = list(/obj/structure/chair/comfy = 1),
/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1),
)
///cooldown for changing carpets, It's kinda dull to always use the same one, but we also can't make it too random.
COOLDOWN_DECLARE(carpet_switch_cd)
#define FANCY_CARPETS list(\
/turf/open/floor/eighties, \
@@ -369,14 +379,12 @@
/turf/open/floor/carpet/royalblack, \
/turf/open/floor/carpet/royalblue,)
/datum/dimension_theme/fancy/New()
. = ..()
replace_floors = list(pick(FANCY_CARPETS) = 1)
replace_objs = list(
/obj/structure/chair = list(/obj/structure/chair/comfy = 1),
/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1),
/obj/structure/table/wood = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1),
)
/datum/dimension_theme/fancy/apply_theme(turf/affected_turf, skip_sound = FALSE, show_effect = FALSE)
if(COOLDOWN_FINISHED(src, carpet_switch_cd))
replace_floors = list(pick(FANCY_CARPETS) = 1)
replace_objs[/obj/structure/table/wood] = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1)
COOLDOWN_START(src, carpet_switch_cd, 90 SECONDS)
return ..()
#undef FANCY_CARPETS