diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 5b30105409..2822aa7786 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -242,12 +242,6 @@ Buildable meters
pipe_type = /obj/machinery/atmospherics/pipe/bluespace
var/bluespace_network_name = "default"
icon_state = "bluespace"
- disposable = FALSE
-
-/obj/item/pipe/bluespace/attack_self(mob/user)
- var/new_name = input(user, "Enter identifier for bluespace pipe network", "bluespace pipe", bluespace_network_name) as text|null
- if(!isnull(new_name))
- bluespace_network_name = new_name
/obj/item/pipe/bluespace/make_from_existing(obj/machinery/atmospherics/pipe/bluespace/make_from)
bluespace_network_name = make_from.bluespace_network_name
diff --git a/code/modules/atmospherics/machinery/pipes/bluespace.dm b/code/modules/atmospherics/machinery/pipes/bluespace.dm
index 2735a38106..cb1637b136 100644
--- a/code/modules/atmospherics/machinery/pipes/bluespace.dm
+++ b/code/modules/atmospherics/machinery/pipes/bluespace.dm
@@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(bluespace_pipe_networks)
initialize_directions = SOUTH
device_type = UNARY
can_buckle = FALSE
- construction_type = /obj/item/pipe/bluespace
+ construction_type = /obj/item/pipe/bluespace/directional
var/bluespace_network_name
/obj/machinery/atmospherics/pipe/bluespace/New()
diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm
index cf6aff5918..a70449b035 100644
--- a/code/modules/research/designs/bluespace_designs.dm
+++ b/code/modules/research/designs/bluespace_designs.dm
@@ -105,13 +105,3 @@
materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500)
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/bluespace_pipe
- name = "Bluespace Pipe"
- desc = "A pipe that teleports gases."
- id = "bluespace_pipe"
- build_type = PROTOLATHE
- materials = list(/datum/material/gold = 1000, /datum/material/diamond = 750, /datum/material/uranium = 250, /datum/material/bluespace = 2000)
- build_path = /obj/item/pipe/bluespace
- category = list("Bluespace Designs")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
diff --git a/code/modules/research/techweb/nodes/bluespace_nodes.dm b/code/modules/research/techweb/nodes/bluespace_nodes.dm
index 90b69eb28d..6c782456a8 100644
--- a/code/modules/research/techweb/nodes/bluespace_nodes.dm
+++ b/code/modules/research/techweb/nodes/bluespace_nodes.dm
@@ -61,7 +61,7 @@
display_name = "Bluespace Travel"
description = "Application of Bluespace for static teleportation technology."
prereq_ids = list("adv_power", "adv_bluespace")
- design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick", "bluespace_pipe")
+ design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/unregulated_bluespace
diff --git a/modular_sand/code/game/machinery/pipe/construction.dm b/modular_sand/code/game/machinery/pipe/construction.dm
index aedfeaf92c..24a2e1c559 100644
--- a/modular_sand/code/game/machinery/pipe/construction.dm
+++ b/modular_sand/code/game/machinery/pipe/construction.dm
@@ -1,24 +1,10 @@
-/obj/item/pipe/bluespace
- pipe_type = /obj/machinery/atmospherics/pipe/bluespace
- var/bluespace_network_name = "default"
- icon_state = "bluespace"
- desc = "Transmits gas across large distances of space. Developed using bluespace technology. Use a multitool on it to set its network."
-
/obj/item/pipe/bluespace/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_MULTITOOL)
var/new_name = input(user, "Enter identifier for bluespace pipe network", "bluespace pipe", bluespace_network_name) as text|null
if(!isnull(new_name))
bluespace_network_name = new_name
else
- return
-
-/obj/item/pipe/bluespace/make_from_existing(obj/machinery/atmospherics/pipe/bluespace/make_from)
- bluespace_network_name = make_from.bluespace_network_name
- return ..()
-
-/obj/item/pipe/bluespace/build_pipe(obj/machinery/atmospherics/pipe/bluespace/A)
- A.bluespace_network_name = bluespace_network_name
- return ..()
+ return ..()
/obj/item/pipe/bluespace/directional
RPD_type = PIPE_UNARY
diff --git a/modular_sand/code/modules/atmospherics/machinery/pipes/bluespace.dm b/modular_sand/code/modules/atmospherics/machinery/pipes/bluespace.dm
index 052fbde350..8a42bd0757 100644
--- a/modular_sand/code/modules/atmospherics/machinery/pipes/bluespace.dm
+++ b/modular_sand/code/modules/atmospherics/machinery/pipes/bluespace.dm
@@ -1,103 +1,21 @@
-GLOBAL_LIST_EMPTY(bluespace_pipe_networks)
-/obj/machinery/atmospherics/pipe/bluespace
- name = "bluespace pipe"
- desc = "Transmits gas across large distances of space. Developed using bluespace technology. Use a multitool on it to set its network."
- icon = 'modular_sand/icons/obj/atmospherics/pipes/bluespace.dmi'
- icon_state = "blue_map-2"
- pipe_state = "bluespace"
- dir = SOUTH
- initialize_directions = SOUTH
- device_type = UNARY
- can_buckle = FALSE
- construction_type = /obj/item/pipe/bluespace/directional
- var/bluespace_network_name
+/obj/machinery/atmospherics/pipe/bluespace/attackby(obj/item/W, mob/user, params)
+ var/old_net = bluespace_network_name
+ if(W.tool_behaviour == TOOL_MULTITOOL)
+ var/new_name = input(user, "Enter identifier for bluespace pipe network", "bluespace pipe", bluespace_network_name) as text|null
+ if(!isnull(new_name))
+ bluespace_network_name = new_name
+ update_net(old_net)
+ else
+ return ..()
-/obj/machinery/atmospherics/pipe/bluespace/New()
- icon_state = "map"
- if(bluespace_network_name) // in case someone maps one in for some reason
- if(!GLOB.bluespace_pipe_networks[bluespace_network_name])
- GLOB.bluespace_pipe_networks[bluespace_network_name] = list()
- GLOB.bluespace_pipe_networks[bluespace_network_name] |= src
- ..()
-
-/obj/machinery/atmospherics/pipe/bluespace/on_construction()
- . = ..()
- if(bluespace_network_name)
- if(!GLOB.bluespace_pipe_networks[bluespace_network_name])
- GLOB.bluespace_pipe_networks[bluespace_network_name] = list()
- GLOB.bluespace_pipe_networks[bluespace_network_name] |= src
-
-/obj/machinery/atmospherics/pipe/bluespace/Destroy()
- if(GLOB.bluespace_pipe_networks[bluespace_network_name])
- GLOB.bluespace_pipe_networks[bluespace_network_name] -= src
+/obj/machinery/atmospherics/pipe/bluespace/proc/update_net(net)
+ if(GLOB.bluespace_pipe_networks[net])
+ GLOB.bluespace_pipe_networks[net] -= src
for(var/p in GLOB.bluespace_pipe_networks[bluespace_network_name])
var/obj/machinery/atmospherics/pipe/bluespace/P = p
QDEL_NULL(P.parent)
P.build_network()
- return ..()
-
-/obj/machinery/atmospherics/pipe/bluespace/examine(user)
- . = ..()
- to_chat(user, "This one is connected to the \"[html_encode(bluespace_network_name)]\" network")
-
-/obj/machinery/atmospherics/pipe/bluespace/SetInitDirections()
- initialize_directions = dir
-
-/obj/machinery/atmospherics/pipe/bluespace/pipeline_expansion()
- return ..() + GLOB.bluespace_pipe_networks[bluespace_network_name] - src
-
-/obj/machinery/atmospherics/pipe/bluespace/hide()
- update_icon()
-
-/obj/machinery/atmospherics/pipe/bluespace/update_icon(showpipe)
- underlays.Cut()
-
- var/turf/T = loc
- if(level == 2 || !T.intact)
- icon_state = "blue_map-2"
- showpipe = TRUE
- plane = GAME_PLANE
- else
- showpipe = FALSE
- plane = FLOOR_PLANE
-
- if(!showpipe)
- return //no need to update the pipes if they aren't showing
-/* This shit aint in here
- var/connected = 0 //Direction bitset
-
- for(var/i in 1 to device_type) //adds intact pieces
- if(nodes[i])
- connected |= icon_addintact(nodes[i])
-
- icon_addbroken(connected) //adds broken pieces//adds broken pieces
-*/
- if(piping_layer == 1)
- icon_state = "blue_map-1"
- else if(piping_layer == 2)
- icon_state = "blue_map-2"
- else if(piping_layer == 3)
- icon_state = "blue_map-3"
-
-/obj/machinery/atmospherics/pipe/bluespace/paint()
- return FALSE
-
-/obj/machinery/atmospherics/pipe/bluespace/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/multitool))
- var/new_name = input(user, "Enter identifier for bluespace pipe network", "bluespace pipe", bluespace_network_name) as text|null
- if(!isnull(new_name))
- bluespace_network_name = new_name
- else
- return
-
-/obj/machinery/atmospherics/pipe/bluespace/layer1
- piping_layer = 1
- icon_state = "blue_map-1"
-
-/obj/machinery/atmospherics/pipe/bluespace/layer2
- piping_layer = 2
- icon_state = "blue_map-2"
-
-/obj/machinery/atmospherics/pipe/bluespace/layer3
- piping_layer = 3
- icon_state = "blue_map-3"
+ if(bluespace_network_name)
+ if(!GLOB.bluespace_pipe_networks[bluespace_network_name])
+ GLOB.bluespace_pipe_networks[bluespace_network_name] = list()
+ GLOB.bluespace_pipe_networks[bluespace_network_name] |= src
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 2492e45d06..abb7de9b12 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner
crusher_loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator/premiumka/bdminer, /obj/item/borg/upgrade/modkit/lifesteal/miner, /obj/item/crusher_trophy/miner_eye)
loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator/premiumka/bdminer, /obj/item/borg/upgrade/modkit/lifesteal/miner)
- songs = list("2360" = sound(file = 'modular_sand/sound/ambience/igneon-system-and-death-machine-sins.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "2440" = sound(file = 'modular_sand/sound/ambience/machinegirl_excruciatingdeath.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) // I don't actually know if any of this is copyright free or CC. Fuck.
+ songs = list("2360" = sound(file = 'modular_sand/sound/ambience/igneon-system-and-death-machine-sins.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "2440" = sound(file = 'modular_sand/sound/ambience/machinegirl_excruciatingdeath.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) // I don't actually know if any of this is copyright free or CC. Fuck.
glorymessageshand = list("grabs the blood-drunk's arm, flips their cleaving saw with the other hand, and forcefully makes them chop off their own head with it!", "grabs blood-drunk by their PKA, aims it at their head and then shoots, splattering his brains out!", "rips out both of the blood-drunk's arms, then kicks their limp torso on the groundd and curbstomps their head in so hard it explodes!")
glorymessagescrusher = list("chops off the blood-drunk's cleaving saw arm in one swift move, then grabs the saw and swings it against their head, chopping their skull vertically in half!", "bashes the miner to the ground with the hilt of their crusher, then elbow drops their skull so hard it explodes in gore!", "chops the blood-drunk diagonally with their crusher, not quite cutting through but getting their crusher halfway stuck and killing the moaning fiend!")
glorymessagespka = list("grabs the blood-drunk by the neck and flips them, shooting through their guts with a PKA blast!", "shoots at the blood-drunk's shoulder, exploding their arm! To finish the fiend off, they grab their PKA and bonk the blood-drunk's head inside their torso!", "doesn't bother with being fancy, and simply shoots at the blood-drunk's head with their PKA, exploding it in one violent blast!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 5f65e18ce1..dfcdffc432 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -1,5 +1,3 @@
-#define MEDAL_PREFIX "Bubblegum"
-
/*
BUBBLEGUM
@@ -10,132 +8,8 @@ Removes slaughterlings (because they are bullshit), instead replacing them with
/mob/living/simple_animal/hostile/megafauna/bubblegum
death_sound = 'modular_sand/sound/misc/gorenest.ogg' //fuck it
- var/movesound = 'sound/effects/meteorimpact.ogg'
- songs = list("1860" = sound(file = 'modular_sand/sound/ambience/bfgdivision.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "2070" = sound(file = 'modular_sand/sound/ambience/theonlythingtheyfearisyou.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) //Thanks Mr. Infringio!
+ songs = list("1860" = sound(file = 'modular_sand/sound/ambience/bfgdivision.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "2070" = sound(file = 'modular_sand/sound/ambience/theonlythingtheyfearisyou.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) //Thanks Mr. Infringio!
glorymessageshand = list("grabs bubblegum by the leg, and pulls them down! While downed, they climb on their torso and punch through it, smashing their demonic heart!", "goes around bubblegum and climbs them by their back, once on top of their head they punch right through the demon's skull, ripping out brain matter and killing it as it limply falls on the ground!")
glorymessagescrusher = list("jumps and chops off both of bubblegum's legs in one swift move with their crusher! To finish off the now wheelchair-bound demon, they chop at the torso vertically, getting the crusher stuck in the process but killing the demonic fiend!", "goes around bubblegum and climbs them by their back, once on the top they chop their head off with the crusher!")
glorymessagespka = list("shoots the weakened demon in the chest, opening a hole and exposing their inner core! With another blast, the demon's heart explodes, and they fall dead and limp on the ground!", "shoots the weakened demon's head, stunning them and revealing their brain! Another PKA blast finishes off what little brainmatter they had!")
glorymessagespkabayonet = list("shoots the weakened demon in the chest, opening a hole and exposing their inner core! They run onto the now exposed heart and stab it repeatedly with their bayonet, killing the demon off!")
- footstep_type = FOOTSTEP_MOB_HEAVY
- var/dont_move = TRUE //impedes bubbles from moving while using the blood jaunt
-
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/Move()
- . = ..()
- if(dont_move)
- return FALSE
- playsound(src, movesound, 200, TRUE, 2, TRUE)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire()
- anger_modifier = clamp(((maxHealth - health)/50),0,20)
- if(charging)
- return
- ranged_cooldown = world.time + ranged_cooldown_time
- blood_warp()
- bloodsmacks()
- if(prob(25))
- INVOKE_ASYNC(src, .proc/blood_spray)
- INVOKE_ASYNC(src, .proc/bloodsmacks)
- else
- if(health > maxHealth/2 && !client)
- INVOKE_ASYNC(src, .proc/charge)
- else
- INVOKE_ASYNC(src, .proc/triple_charge)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/charge()
- bloodsmacks()
- var/turf/T = get_turf(target)
- if(!T || T == loc)
- return
- new /obj/effect/temp_visual/dragon_swoop(T)
- charging = 1
- DestroySurroundings()
- walk(src, 0)
- setDir(get_dir(src, T))
- var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src)
- animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 5)
- sleep(5)
- throw_at(T, get_dist(src, T), 1, src, 0)
- charging = 0
- Goto(target, move_to_delay, minimum_distance)
- bloodsmacks()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodsmacks()
- for(var/obj/effect/decal/cleanable/blood/B in view(7, src))
- var/turf/T = get_turf(B)
- var/mobcount = 0
- for(var/mob/living/L in T.contents)
- if(L != src)
- mobcount++
- if(mobcount)
- var/hand = rand(0,1)
- INVOKE_ASYNC(src, .proc/bloodsmack, T, hand)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodsmack(turf/T, handedness)
- if(handedness)
- new /obj/effect/temp_visual/bubblegum_hands/rightsmack(T)
- else
- new /obj/effect/temp_visual/bubblegum_hands/leftsmack(T)
- sleep(5)
- for(var/mob/living/L in T)
- if(!faction_check_mob(L))
- to_chat(L, "[src] rends you!")
- playsound(T, attack_sound, 100, TRUE, -1)
- var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
- L.apply_damage(30, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, "melee", null, null)) // You really, really, really better not stand in blood!
- sleep(3)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/blood_warp()
- var/obj/effect/decal/cleanable/blood/found_bloodpool
- var/list/pools = list()
- var/can_jaunt = FALSE
- for(var/obj/effect/decal/cleanable/blood/nearby in view(src,2))
- if(nearby.bloodiness >= 20)
- can_jaunt = TRUE
- break
- if(!can_jaunt)
- return
- for(var/obj/effect/decal/cleanable/blood/nearby in view(get_turf(target),2))
- if(nearby.bloodiness >= 20)
- pools += nearby
- if(pools.len)
- shuffle_inplace(pools)
- found_bloodpool = pick(pools)
- if(found_bloodpool)
- visible_message("[src] sinks into the blood...")
- playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1)
- alpha = 0
- dont_move = TRUE
- sleep(rand(2, 4))
- forceMove(get_turf(found_bloodpool))
- playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
- alpha = 100
- dont_move = FALSE
- visible_message("And springs back out!")
-
-
-/obj/effect/temp_visual/bubblegum_hands
- icon = 'icons/effects/bubblegum.dmi'
- duration = 9
-
-/obj/effect/temp_visual/bubblegum_hands/rightthumb
- icon_state = "rightthumbgrab"
-
-/obj/effect/temp_visual/bubblegum_hands/leftthumb
- icon_state = "leftthumbgrab"
-
-/obj/effect/temp_visual/bubblegum_hands/rightpaw
- icon_state = "rightpawgrab"
- layer = BELOW_MOB_LAYER
-
-/obj/effect/temp_visual/bubblegum_hands/leftpaw
- icon_state = "leftpawgrab"
- layer = BELOW_MOB_LAYER
-
-/obj/effect/temp_visual/bubblegum_hands/rightsmack
- icon_state = "rightsmack"
-
-/obj/effect/temp_visual/bubblegum_hands/leftsmack
- icon_state = "leftsmack"
-
-#undef MEDAL_PREFIX
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegumhard.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegumhard.dm
deleted file mode 100644
index 94efabcda2..0000000000
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegumhard.dm
+++ /dev/null
@@ -1,479 +0,0 @@
-#define BUBBLEGUM_SMASH (health <= maxHealth*0.5) // angery
-#define BUBBLEGUM_CAN_ENRAGE (enrage_till + (enrage_time * 2) <= world.time)
-#define BUBBLEGUM_IS_ENRAGED (enrage_till > world.time)
-
-/*
-BUBBLEGUM (HARD)
-Bubblegum spawns randomly wherever a lavaland creature is able to spawn. It is the most powerful slaughter demon in existence.
-Bubblegum's footsteps are heralded by shaking booms, proving its tremendous size.
-It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power
-It leaves blood trails behind wherever it goes, its clones do as well.
-It tries to strike at its target through any bloodpools under them; if it fails to do that.
-If it does warp it will enter an enraged state, becoming immune to all projectiles, becoming much faster, and dealing damage and knockback to anything that gets in the cloud around it.
-It may summon clones charging from all sides, one of these charges being bubblegum himself.
-It can charge at its target, and also heavily damaging anything directly hit in the charge.
-If at half health it will start to charge from all sides with clones.
-When Bubblegum dies, it leaves behind a H.E.C.K. mining suit as well as a chest that can contain three things:
- 1. A bottle that, when activated, drives everyone nearby into a frenzy
- 2. A contract that marks for death the chosen target
- 3. A spellblade that can slice off limbs at range
-Difficulty: Hard
-*/
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard
- name = "enraged bubblegum"
- desc = "In what passes for a hierarchy among slaughter demons, this one is god."
- attack_verb_continuous = "brutally rends"
- attack_verb_simple = "brutally rend"
- speed = 5
- move_to_delay = 5
- retreat_distance = 5
- minimum_distance = 5
- rapid_melee = 8 // every 1/4 second
- melee_queue_distance = 20 // as far as possible really, need this because of blood warp
- ranged = TRUE
- del_on_death = TRUE
- crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/hard/crusher)
- loot = list(/obj/structure/closet/crate/necropolis/bubblegum/hard)
- charging = FALSE
- var/enrage_till = 0
- var/enrage_time = 70
- var/revving_charge = FALSE
- nest_range = 10
- true_spawn = TRUE
-
- deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now, slayer... "
- deathsound = 'sound/magic/enter_blood.ogg'
-
-/obj/item/gps/internal/bubblegum/hard
- icon_state = null
- gpstag = "Enraged Bloody Signal"
- desc = "You're not quite sure how a signal can be enraged, neither how it can be bloody."
- invisibility = 100
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/Initialize()
- ..()
- internal = new/obj/item/gps/internal/bubblegum/hard(src)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/OpenFire()
- if(charging)
- return
-
- anger_modifier = clamp(((maxHealth - health)/60),0,20)
- enrage_time = initial(enrage_time) * clamp(anger_modifier / 20, 0.5, 1)
- ranged_cooldown = world.time + 50
-
- if(!try_bloodattack() || prob(25 + anger_modifier))
- blood_warp()
-
- if(!BUBBLEGUM_SMASH)
- triple_charge()
- else
- if(prob(50 + anger_modifier))
- hallucination_charge()
- else
- surround_with_hallucinations()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/triple_charge()
- charge(delay = 8)
- charge(delay = 6)
- charge(delay = 4)
- SetRecoveryTime(15)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/hallucination_charge()
- if(!BUBBLEGUM_SMASH || prob(33))
- hallucination_charge_around(times = 6, delay = 12)
- SetRecoveryTime(10)
- else
- hallucination_charge_around(times = 4, delay = 14)
- hallucination_charge_around(times = 4, delay = 10)
- hallucination_charge_around(times = 4, delay = 10)
- triple_charge()
- SetRecoveryTime(20)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/surround_with_hallucinations()
- for(var/i = 1 to 5)
- INVOKE_ASYNC(src, .proc/hallucination_charge_around, 2, 8, 2, 0, 4)
- if(ismob(target))
- charge(delay = 8)
- else
- sleep(10)
- SetRecoveryTime(20)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/charge(atom/chargeat = target, delay = 8, chargepast = 2)
- if(!chargeat)
- return
- var/chargeturf = get_turf(chargeat)
- if(!chargeturf)
- return
- var/dir = get_dir(src, chargeturf)
- var/turf/T = get_ranged_target_turf(chargeturf, dir, chargepast)
- if(!T)
- return
- new /obj/effect/temp_visual/dragon_swoop/bubblegum(T)
- charging = TRUE
- revving_charge = TRUE
- DestroySurroundings()
- walk(src, 0)
- setDir(dir)
- var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src)
- animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 3)
- sleep(delay)
- revving_charge = FALSE
- var/movespeed = 0.7
- walk_towards(src, T, movespeed)
- sleep(get_dist(src, T) * movespeed)
- walk(src, 0) // cancel the movement
- try_bloodattack()
- charging = FALSE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/get_mobs_on_blood()
- var/list/targets = ListTargets()
- . = list()
- for(var/mob/living/L in targets)
- var/list/bloodpool = get_pools(get_turf(L), 0)
- if(bloodpool.len && (!faction_check_mob(L) || L.stat == DEAD))
- . += L
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/try_bloodattack()
- var/list/targets = get_mobs_on_blood()
- if(targets.len)
- INVOKE_ASYNC(src, .proc/bloodattack, targets, prob(50))
- return TRUE
- return FALSE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/bloodattack(list/targets, handedness)
- var/mob/living/target_one = pick_n_take(targets)
- var/turf/target_one_turf = get_turf(target_one)
- var/mob/living/target_two
- if(targets.len)
- target_two = pick_n_take(targets)
- var/turf/target_two_turf = get_turf(target_two)
- if(target_two.stat != CONSCIOUS || prob(10))
- bloodgrab(target_two_turf, handedness)
- else
- bloodsmack(target_two_turf, handedness)
-
- if(target_one)
- var/list/pools = get_pools(get_turf(target_one), 0)
- if(pools.len)
- target_one_turf = get_turf(target_one)
- if(target_one_turf)
- if(target_one.stat != CONSCIOUS || prob(10))
- bloodgrab(target_one_turf, !handedness)
- else
- bloodsmack(target_one_turf, !handedness)
-
- if(!target_two && target_one)
- var/list/poolstwo = get_pools(get_turf(target_one), 0)
- if(poolstwo.len)
- target_one_turf = get_turf(target_one)
- if(target_one_turf)
- if(target_one.stat != CONSCIOUS || prob(10))
- bloodgrab(target_one_turf, handedness)
- else
- bloodsmack(target_one_turf, handedness)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/bloodsmack(turf/T, handedness)
- if(handedness)
- new /obj/effect/temp_visual/bubblegum_handshard/rightsmack(T)
- else
- new /obj/effect/temp_visual/bubblegum_handshard/leftsmack(T)
- sleep(4)
- for(var/mob/living/L in T)
- if(!faction_check_mob(L))
- to_chat(L, "[src] rends you!")
- playsound(T, attack_sound, 100, TRUE, -1)
- var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
- L.apply_damage(10, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, "melee", null, null, armour_penetration))
- sleep(3)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/bloodgrab(turf/T, handedness)
- if(handedness)
- new /obj/effect/temp_visual/bubblegum_handshard/rightpaw(T)
- new /obj/effect/temp_visual/bubblegum_handshard/rightthumb(T)
- else
- new /obj/effect/temp_visual/bubblegum_handshard/leftpaw(T)
- new /obj/effect/temp_visual/bubblegum_handshard/leftthumb(T)
- sleep(6)
- for(var/mob/living/L in T)
- if(!faction_check_mob(L))
- if(L.stat != CONSCIOUS)
- to_chat(L, "[src] drags you through the blood!")
- playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1)
- var/turf/targetturf = get_step(src, dir)
- L.forceMove(targetturf)
- playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1)
- addtimer(CALLBACK(src, .proc/devour, L), 2)
- sleep(1)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/blood_warp()
- if(Adjacent(target))
- return FALSE
- var/list/can_jaunt = get_pools(get_turf(src), 1)
- if(!can_jaunt.len)
- return FALSE
-
- var/list/pools = get_pools(get_turf(target), 5)
- var/list/pools_to_remove = get_pools(get_turf(target), 4)
- pools -= pools_to_remove
- if(!pools.len)
- return FALSE
-
- var/obj/effect/temp_visual/decoy/DA = new /obj/effect/temp_visual/decoy(loc,src)
- DA.color = "#FF0000"
- var/oldtransform = DA.transform
- DA.transform = matrix()*2
- animate(DA, alpha = 255, color = initial(DA.color), transform = oldtransform, time = 3)
- sleep(3)
- qdel(DA)
-
- var/obj/effect/decal/cleanable/blood/found_bloodpool
- pools = get_pools(get_turf(target), 5)
- pools_to_remove = get_pools(get_turf(target), 4)
- pools -= pools_to_remove
- if(pools.len)
- shuffle_inplace(pools)
- found_bloodpool = pick(pools)
- if(found_bloodpool)
- visible_message("[src] sinks into the blood...")
- playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, TRUE, -1)
- forceMove(get_turf(found_bloodpool))
- playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, TRUE, -1)
- visible_message("And springs back out!")
- blood_enrage()
- return TRUE
- return FALSE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/be_aggressive()
- if(BUBBLEGUM_IS_ENRAGED)
- return TRUE
- if(isliving(target))
- var/mob/living/livingtarget = target
- return (livingtarget.stat != CONSCIOUS)
- return FALSE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/get_retreat_distance()
- return (be_aggressive() ? null : initial(retreat_distance))
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/get_minimum_distance()
- return (be_aggressive() ? 1 : initial(minimum_distance))
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/update_approach()
- retreat_distance = get_retreat_distance()
- minimum_distance = get_minimum_distance()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/blood_enrage()
- if(!BUBBLEGUM_CAN_ENRAGE)
- return FALSE
- enrage_till = world.time + enrage_time
- update_approach()
- change_move_delay(3.75)
- var/newcolor = rgb(149, 10, 10)
- add_atom_colour(newcolor, TEMPORARY_COLOUR_PRIORITY)
- var/datum/callback/cb = CALLBACK(src, .proc/blood_enrage_end)
- addtimer(cb, enrage_time)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/blood_enrage_end(var/newcolor = rgb(149, 10, 10))
- update_approach()
- change_move_delay()
- remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, newcolor)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/change_move_delay(var/newmove = initial(move_to_delay))
- move_to_delay = newmove
- set_varspeed(move_to_delay)
- handle_automated_action() // need to recheck movement otherwise move_to_delay won't update until the next checking aka will be wrong speed for a bit
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/get_pools(turf/T, range)
- . = list()
- for(var/obj/effect/decal/cleanable/nearby in view(T, range))
- if(nearby.can_bloodcrawl_in())
- . += nearby
-
-/obj/effect/decal/cleanable/blood/bubblegumhard
- bloodiness = 0
-
-/obj/effect/decal/cleanable/blood/bubblegumhard/can_bloodcrawl_in()
- return TRUE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/hallucination_charge_around(times = 4, delay = 10, chargepast = 0, useoriginal = 1, radius)
- var/startingangle = rand(1, 360)
- if(!target)
- return
- var/turf/chargeat = get_turf(target)
- var/srcplaced = FALSE
- if(!radius)
- radius = times
- for(var/i = 1 to times)
- var/ang = (startingangle + 360/times * i)
- if(!chargeat)
- return
- var/turf/place = locate(chargeat.x + cos(ang) * radius, chargeat.y + sin(ang) * radius, chargeat.z)
- if(!place)
- continue
- if(!nest || nest && nest.parent && get_dist(nest.parent, place) <= nest_range)
- if(!srcplaced && useoriginal)
- forceMove(place)
- srcplaced = TRUE
- continue
- var/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/B = new /mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination(src.loc)
- B.forceMove(place)
- INVOKE_ASYNC(B, .proc/charge, chargeat, delay, chargepast)
- if(useoriginal)
- charge(chargeat, delay, chargepast)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
- . = ..()
- if(. > 0 && prob(25))
- var/obj/effect/decal/cleanable/blood/gibs/bubblegumhard/B = new /obj/effect/decal/cleanable/blood/gibs/bubblegumhard(loc)
- if(prob(40))
- step(B, pick(GLOB.cardinals))
- else
- B.setDir(pick(GLOB.cardinals))
-
-/obj/effect/decal/cleanable/blood/gibs/bubblegumhard
- name = "thick blood"
- desc = "Thick, splattered blood."
- random_icon_states = list("gib3", "gib5", "gib6")
- bloodiness = 20
-
-/obj/effect/decal/cleanable/blood/gibs/bubblegumhard/can_bloodcrawl_in()
- return TRUE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
- if(!charging)
- ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/AttackingTarget()
- if(!charging)
- . = ..()
- if(.)
- recovery_time = world.time + 30 //can only attack melee once every 3 seconds but rapid_melee gives higher priority
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/bullet_act(obj/item/projectile/P)
- if(BUBBLEGUM_IS_ENRAGED)
- visible_message("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons while enraged!", "You deflect the projectile!")
- playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 300, TRUE)
- return BULLET_ACT_BLOCK
- return ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/ex_act(severity, target)
- if(severity >= EXPLODE_LIGHT)
- return
- severity = EXPLODE_LIGHT // puny mortals
- return ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/proc/CanAllowThrough(atom/movable/mover, turf/target)
- if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination))
- return TRUE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/Goto(target, delay, minimum_distance)
- if(!charging)
- ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/MoveToTarget(list/possible_targets)
- if(!charging)
- ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/Move()
- update_approach()
- if(revving_charge)
- return FALSE
- if(charging)
- new /obj/effect/temp_visual/decoy/fading(loc,src)
- DestroySurroundings()
- ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/Moved(atom/OldLoc, Dir, Forced = FALSE)
- if(Dir)
- new /obj/effect/decal/cleanable/blood/bubblegumhard(src.loc)
- if(charging)
- DestroySurroundings()
- playsound(src, 'sound/effects/meteorimpact.ogg', 200, TRUE, 2, TRUE)
- return ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/Bump(atom/A)
- if(charging)
- if(isturf(A) || isobj(A) && A.density)
- A.ex_act(EXPLODE_HEAVY)
- DestroySurroundings()
- if(isliving(A))
- var/mob/living/L = A
- L.visible_message("[src] slams into [L]!", "[src] tramples you into the ground!")
- src.forceMove(get_turf(L))
- L.apply_damage(istype(src, /mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination) ? 15 : 30, BRUTE)
- playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, TRUE)
- shake_camera(L, 4, 3)
- shake_camera(src, 2, 3)
- ..()
-
-/obj/effect/temp_visual/dragon_swoop/bubblegum
- duration = 10
-
-/obj/effect/temp_visual/bubblegum_handshard
- icon = 'icons/effects/bubblegum.dmi'
- duration = 9
-
-/obj/effect/temp_visual/bubblegum_handshard/rightthumb
- icon_state = "rightthumbgrab"
-
-/obj/effect/temp_visual/bubblegum_handshard/leftthumb
- icon_state = "leftthumbgrab"
-
-/obj/effect/temp_visual/bubblegum_handshard/rightpaw
- icon_state = "rightpawgrab"
- layer = BELOW_MOB_LAYER
-
-/obj/effect/temp_visual/bubblegum_handshard/leftpaw
- icon_state = "leftpawgrab"
- layer = BELOW_MOB_LAYER
-
-/obj/effect/temp_visual/bubblegum_handshard/rightsmack
- icon_state = "rightsmack"
-
-/obj/effect/temp_visual/bubblegum_handshard/leftsmack
- icon_state = "leftsmack"
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination
- name = "bubblegum's hallucination"
- desc = "Is that really just a hallucination?"
- health = 1
- maxHealth = 1
- alpha = 127.5
- crusher_loot = null
- loot = null
- deathmessage = "Explodes into a pool of blood!"
- deathsound = 'sound/effects/splat.ogg'
- true_spawn = FALSE
- mouse_opacity = 0 //This is so clients wont hover and store them, causing them to fail GC
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/Initialize()
- ..()
- toggle_ai(AI_OFF)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/charge(atom/chargeat = target, delay = 3, chargepast = 2)
- ..()
- qdel(src)
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/Destroy()
- new /obj/effect/decal/cleanable/blood(get_turf(src))
- . = ..()
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/CanAllowThrough(atom/movable/mover, turf/target)
- if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum)) // hallucinations should not be stopping bubblegum or eachother
- return TRUE
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/Life()
- return
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
- return
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/OpenFire()
- return
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/AttackingTarget()
- return
-
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hard/hallucination/try_bloodattack()
- return
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index dd68303654..fabd0e5c3d 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/megafauna/colossus
- songs = list("1170" = sound(file = 'modular_sand/sound/ambience/theopenedway.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) //Shadow of the colossus OST
+ songs = list("1170" = sound(file = 'modular_sand/sound/ambience/theopenedway.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) //Shadow of the colossus OST
glorymessageshand = list("grabs the colossus by the leg, and pulls them down! While downed, they climb on his neck and violently rip off their vocal cords!", "goes around the colossus and climbs them by their back, once on top of their shoulder they grab it's arm and aim the blaster at the creature's head, which finishes itself off with a penetrating death bolt that blasts off their head!")
glorymessagescrusher = list("throws their crusher at the colossus' head, which surprisingly works! Humiliated, the angelic creature dies with a big fucking axe stuck on their skull!", "chops off one of the colossus' legs with the crusher, as it falls down they grab the leg and use it as a makeshift club on the creature's head, which explodes in differently-sized giblets on impact!")
glorymessagespka = list("somehow parries a death bolt with a PKA blast, which goes right back to it's owner's torso, opening a hole on them and killing them!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
index f255c145c6..b47eb722ac 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner
- songs = list("1530" = sound(file = 'modular_sand/sound/ambience/lisapebbleman.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) // Doubt the creator would care lol
+ songs = list("1530" = sound(file = 'modular_sand/sound/ambience/lisapebbleman.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) // Doubt the creator would care lol
deathsound = "bodyfall"
glorymessageshand = list("grabs the demonic miner's arm, flips their cleaving saw with the other hand, and forcefully makes them chop off their own head with it!", "grabs demonic miner by their PKA, aims it at their head and then shoots, splattering his brains out!", "rips out both of the demonic miner's arms, then kicks their limp torso on the groundd and curbstomps their head in so hard it explodes!")
glorymessagescrusher = list("chops off the demonic miner's cleaving saw arm in one swift move, then grabs the saw and swings it against their head, chopping their skull vertically in half!", "bashes the miner to the ground with the hilt of their crusher, then elbow drops their skull so hard it explodes in gore!", "chops the demonic miner diagonally with their crusher, not quite cutting through but getting their crusher halfway stuck and killing the moaning fiend!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index ac0168cbfe..268a996bb1 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/megafauna/dragon
- songs = list("1860" = sound(file = 'modular_sand/sound/ambience/duskcreations.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "2350" = sound(file = 'modular_sand/sound/ambience/dragonborn.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) // Andrew is a nice guy, he'll let it slide. Taken from the DUSK OST. Not sure about the skyrim theme though...
+ songs = list("1860" = sound(file = 'modular_sand/sound/ambience/duskcreations.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "2350" = sound(file = 'modular_sand/sound/ambience/dragonborn.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) // Andrew is a nice guy, he'll let it slide. Taken from the DUSK OST. Not sure about the skyrim theme though...
glorymessageshand = list("climbs atop the drake's head as it dangles weakly near the ground, ripping its left horn off and jumping down before swinging it at the drake's face full force, cracking its maw!", "goes around the dragon and rips off their tail, using it's spiked end to beat the dragon's bloodied face until it cracks open and it dies!")
glorymessagescrusher = list("chops off the dragon's head by the neck, and it falls down with a strong thud!", "rams into the dragon's skull with the hilt of their crusher repeatedly and cracking holes into their skull each time, turning it's brain into mush!")
glorymessagespka = list("shoots at the dragon's wings with their PKA, exploding them into bizarre giblets! They then finish the poor creature off with a point-blank blast to the head, exploding it!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm
index 644194ea4b..647e14d9a7 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm
@@ -49,7 +49,7 @@ They deal 35 brute (armor is considered).
var/stunned = FALSE
var/stunduration = 15
var/move_to_charge = 1.5
- songs = list("3850" = sound(file = 'modular_sand/sound/ambience/gladiator.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX))
+ songs = list("3850" = sound(file = 'modular_sand/sound/ambience/gladiator.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC))
loot = list(/obj/structure/closet/crate/necropolis/gladiator)
crusher_loot = list(/obj/structure/closet/crate/necropolis/gladiator/crusher)
glorymessageshand = list("grabs the gladiator's arm, flips their zweihander with the other hand, and forcefully makes them chop off their own head with it!", "grabs the gladiator by their zweihander, and mark detonate them into a shower of gibs!", "rips out both of the gladiator's arms, then kicks their limp torso on the groundd and curbstomps their head in so hard it explodes!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index e6ecbe504c..b214f1b07d 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/hostile/megafauna/hierophant
loot = list(/obj/item/hierophant_club, /obj/item/borg/upgrade/modkit/wall)
crusher_loot = list(/obj/item/hierophant_club, /obj/item/borg/upgrade/modkit/wall)
- songs = list("2610" = sound(file = 'modular_sand/sound/ambience/dummyremix.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "1680" = sound(file = 'modular_sand/sound/ambience/rollermobster.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) //Dummy originally made by Toby Fox, remix by Emsdache. Roller Mobster by Carpenter Brut.
+ songs = list("2610" = sound(file = 'modular_sand/sound/ambience/dummyremix.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "1680" = sound(file = 'modular_sand/sound/ambience/rollermobster.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) //Dummy originally made by Toby Fox, remix by Emsdache. Roller Mobster by Carpenter Brut.
glorymessageshand = list("grabs the floating club by the hilt, and violently smashes it onto the ground, killing it!", "jumps onto the hierophant and rips off their beacon with one hand as it crackles and explodes!")
glorymessagescrusher = list("violently chops the floating club with seemingly no effect, until it falls onto the ground limply!")
glorymessagespka = list("shoots at the floating club in the middle of it's 'face', which seemingly overloads it until it explodes!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm
index a99a87efb2..42c0103515 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm
@@ -231,9 +231,9 @@ Difficulty: Insanely Hard
for(var/mob/M in rangers)
if(!M.client || !(M.client.prefs.toggles & SOUND_MEGAFAUNA))
continue
- M.stop_sound_channel(CHANNEL_JUKEBOX)
+ M.stop_sound_channel(CHANNEL_BOSSMUSIC)
rangers[M] = world.time + current_song_length
- M.playsound_local(null, null, 30, channel = CHANNEL_JUKEBOX, S = song_played)
+ M.playsound_local(null, null, 30, channel = CHANNEL_BOSSMUSIC, S = song_played)
stun_chance = 10
update_icon()
visible_message("\The [src]' wounds close with a flash, and when he emerges, he's even larger than before!")
@@ -259,21 +259,21 @@ Difficulty: Insanely Hard
if(!M.client || !(M.client.prefs.toggles & SOUND_MEGAFAUNA))
continue
if(!(M in rangers) || world.time > rangers[M])
- M.stop_sound_channel(CHANNEL_JUKEBOX)
+ M.stop_sound_channel(CHANNEL_BOSSMUSIC)
rangers[M] = world.time + current_song_length
- M.playsound_local(null, null, 30, channel = CHANNEL_JUKEBOX, S = song_played)
+ M.playsound_local(null, null, 30, channel = CHANNEL_BOSSMUSIC, S = song_played)
for(var/mob/L in rangers)
if(get_dist(src, L) > 10)
rangers -= L
if(!L || !L.client)
continue
- L.stop_sound_channel(CHANNEL_JUKEBOX)
+ L.stop_sound_channel(CHANNEL_BOSSMUSIC)
else
for(var/mob/L in rangers)
rangers -= L
if(!L || !L.client)
continue
- L.stop_sound_channel(CHANNEL_JUKEBOX)
+ L.stop_sound_channel(CHANNEL_BOSSMUSIC)
if(move_to_delay < 3)
move_to_delay += 0.2
if(!phase3 && ((health <= 150 && spellscast == 5) || stat == DEAD)) //begin phase 3, reset spell limit and heal
@@ -297,7 +297,7 @@ Difficulty: Insanely Hard
rangers -= L
if(!L || !L.client)
continue
- L.stop_sound_channel(CHANNEL_JUKEBOX)
+ L.stop_sound_channel(CHANNEL_BOSSMUSIC)
if(phase3)
visible_message("\The [src] shrieks as the seal on his power breaks and he starts to break apart!")
new /obj/structure/ladder/unbreakable/goat(loc)
@@ -313,7 +313,7 @@ Difficulty: Insanely Hard
rangers -= L
if(!L || !L.client)
continue
- L.stop_sound_channel(CHANNEL_JUKEBOX)
+ L.stop_sound_channel(CHANNEL_BOSSMUSIC)
. = ..()
/mob/living/simple_animal/hostile/megafauna/king/AttackingTarget()
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 2aa6ab1367..d84ede4418 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -1,6 +1,6 @@
/mob/living/simple_animal/hostile/megafauna/legion
loot = list(/obj/item/stack/sheet/bone = 3)
- songs = list("3550" = sound(file = 'modular_sand/sound/ambience/mastermind.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "1360" = sound(file = 'modular_sand/sound/ambience/terrariaboss1.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX), "1560" = sound('modular_sand/sound/ambience/megalovania.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) //Threading on some lines here with the DOOM 16 OST. But terraria should be fine, megalovania too.
+ songs = list("3550" = sound(file = 'modular_sand/sound/ambience/mastermind.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "1360" = sound(file = 'modular_sand/sound/ambience/terrariaboss1.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC), "1560" = sound('modular_sand/sound/ambience/megalovania.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) //Threading on some lines here with the DOOM 16 OST. But terraria should be fine, megalovania too.
glorymessageshand = list("punches into the Legion's maw and rips off a floating skull, which they then proceed to use to bash the Legion until it dies!", "punches through both of the Legion's eyeholes with both hands, ripping out a bunch of tiny skulls and killing it!")
glorymessagescrusher = list("slashes the Legion's maw, which falls on the ground as it dies!")
glorymessagespka = list("parries a floating legion skulls with a pka shoot, which goes flying violently into the Legion, bursting through them and killing them in the process!")
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
index 9a09949ccd..e8da379a53 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
@@ -57,7 +57,7 @@
chosensong = songs[chosenlengthstring]
if(chosensong && !songend)
if(M?.client?.prefs?.toggles & SOUND_MEGAFAUNA)
- M.stop_sound_channel(CHANNEL_JUKEBOX)
+ M.stop_sound_channel(CHANNEL_BOSSMUSIC)
songend = chosenlength + world.time
SEND_SOUND(M, chosensong) // so silence boss music will mute moosic for people who don't want that, or it just doesn't play at all if prefs disable it
if(!retaliated)
@@ -71,7 +71,7 @@
enemies |= M.occupant
var/mob/living/O = M.occupant
if(O?.client?.prefs?.toggles & SOUND_MEGAFAUNA)
- O.stop_sound_channel(CHANNEL_JUKEBOX)
+ O.stop_sound_channel(CHANNEL_BOSSMUSIC)
songend = chosenlength + world.time
SEND_SOUND(O, chosensong)
if(!retaliated)
@@ -96,7 +96,7 @@
for(var/mob/living/M in view(src, vision_range))
if(client)
if(M?.client?.prefs?.toggles & SOUND_MEGAFAUNA)
- M.stop_sound_channel(CHANNEL_JUKEBOX)
+ M.stop_sound_channel(CHANNEL_BOSSMUSIC)
songend = chosenlength + world.time
SEND_SOUND(M, chosensong)
if(health <= glorythreshold && !glorykill && stat != DEAD)
@@ -116,7 +116,7 @@
else
for(var/mob/living/M in view(src, vision_range))
if(M?.client?.prefs?.toggles & SOUND_MEGAFAUNA)
- M.stop_sound_channel(CHANNEL_JUKEBOX)
+ M.stop_sound_channel(CHANNEL_BOSSMUSIC)
animate(src, color = initial(color), time = 3)
desc = initial(desc)
var/datum/status_effect/crusher_damage/crusher_dmg = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
@@ -175,6 +175,6 @@
if(!is_station_level(z) || client) //NPC monsters won't heal while on station
adjustBruteLoss(-L.maxHealth/2)
if(L?.client?.prefs?.toggles & SOUND_MEGAFAUNA)
- L.stop_sound_channel(CHANNEL_JUKEBOX)
+ L.stop_sound_channel(CHANNEL_BOSSMUSIC)
L.gib()
..()
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm
index fc60e74ec4..a7acb1803e 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm
@@ -29,7 +29,7 @@
anger_modifier = 0
footstep_type = FOOTSTEP_MOB_HEAVY
mob_biotypes = MOB_ROBOTIC
- songs = list("2930" = sound(file = 'modular_sand/sound/ambience/mbrsystemshock.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_JUKEBOX)) //System shock theme remix by Master Boot Record
+ songs = list("2930" = sound(file = 'modular_sand/sound/ambience/mbrsystemshock.ogg', repeat = 0, wait = 0, volume = 70, channel = CHANNEL_BOSSMUSIC)) //System shock theme remix by Master Boot Record
var/special = FALSE
wander = FALSE
faction = list("mining", "boss")
@@ -123,7 +123,7 @@
INVOKE_ASYNC(src, .proc/plasmaburst, target)
animate(src, color = initial(color), time = 3)
special = FALSE
- else
+ else
var/turf/up = locate(x, y + 10, z)
var/turf/down = locate(x, y - 10, z)
var/turf/left = locate(x - 10, y, z)
@@ -204,7 +204,7 @@
X.preparePixelProjectile(target, startloc)
X.firer = src
X.original = target
- X.fire(otherangle)
+ X.fire(otherangle)
var/obj/item/projectile/Y = new /obj/item/projectile/plasma/rogue(startloc)
playsound(src, 'sound/weapons/laser.ogg', 100, TRUE)
Y.preparePixelProjectile(target, startloc)
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm
index 5cf1ce46d1..de085409b8 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm
@@ -85,7 +85,7 @@ Difficulty: Medium
var/stageThree = FALSE
var/currentPower = 0 //Every few seconds this variable gets higher, when it gets high
//enough it will use a special attack then reset the variable to 0w
- songs = list("2670" = sound(file = 'modular_sand/sound/ambience/furidanger802.ogg', repeat = 0, wait = 0, volume = 100, channel = CHANNEL_JUKEBOX))
+ songs = list("2670" = sound(file = 'modular_sand/sound/ambience/furidanger802.ogg', repeat = 0, wait = 0, volume = 100, channel = CHANNEL_BOSSMUSIC))
glorymessageshand = list("climbs atop the wolf's head as it dangles weakly near the ground, ripping its left eye off and jumping down before punching through it's cranium!", "goes around the wolf and rips off their tail, using it as whip on the fiend")
glorymessagescrusher = list("chops off the wolf's head by it's neck!")
glorymessagespka = list("shoots at the wolf's eyes with their PKA, exploding them into giblets!")
diff --git a/modular_sand/icons/obj/atmospherics/pipes/bluespace.dmi b/modular_sand/icons/obj/atmospherics/pipes/bluespace.dmi
deleted file mode 100644
index 56d9a3cead..0000000000
Binary files a/modular_sand/icons/obj/atmospherics/pipes/bluespace.dmi and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index 48bc34d9e8..34751d2714 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3909,7 +3909,6 @@
#include "modular_sand\code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm"
#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm"
-#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\bubblegumhard.dm"
#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\colossus.dm"
#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\demonic_frost_miner.dm"
#include "modular_sand\code\modules\mob\living\simple_animal\hostile\megafauna\drake.dm"