Adds rainbow slime clusterbangs (#35707)
* - slime - yes * - Adds a volatile reaction * - There is no escape from the standards that live within - Can't wait for the experimentor review
This commit is contained in:
committed by
CitadelStationBot
parent
1bc3908203
commit
24ab7e0a84
@@ -6,28 +6,31 @@
|
||||
name = "clusterbang"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang"
|
||||
var/base_state = "clusterbang"
|
||||
var/payload = /obj/item/grenade/flashbang/cluster
|
||||
var/payload_spawner = /obj/effect/payload_spawner
|
||||
var/prime_sound = 'sound/weapons/armbomb.ogg'
|
||||
var/min_spawned = 4
|
||||
var/max_spawned = 8
|
||||
var/segment_chance = 35
|
||||
|
||||
/obj/item/grenade/clusterbuster/prime()
|
||||
update_mob()
|
||||
var/numspawned = rand(4,8)
|
||||
var/numspawned = rand(min_spawned,max_spawned)
|
||||
var/again = 0
|
||||
|
||||
for(var/more = numspawned,more > 0,more--)
|
||||
if(prob(35))
|
||||
if(prob(segment_chance))
|
||||
again++
|
||||
numspawned--
|
||||
|
||||
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
|
||||
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
for(var/loop in 1 to again)
|
||||
new /obj/item/grenade/clusterbuster/segment(drop_location(), src)//Creates 'segments' that launches a few more payloads
|
||||
|
||||
new payload_spawner(drop_location(), payload, numspawned)//Launches payload
|
||||
playsound(src, prime_sound, 75, 1, -3)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//////////////////////
|
||||
//Clusterbang segment
|
||||
//////////////////////
|
||||
@@ -36,38 +39,64 @@
|
||||
name = "clusterbang segment"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
base_state = "clusterbang_segment"
|
||||
|
||||
/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster)
|
||||
..()
|
||||
icon_state = "clusterbang_segment_active"
|
||||
payload = payload_type
|
||||
active = 1
|
||||
/obj/item/grenade/clusterbuster/segment/Initialize(mapload, obj/item/grenade/clusterbuster/base)
|
||||
. = ..()
|
||||
if(base)
|
||||
name = "[base.name] segment"
|
||||
base_state = "[base.base_state]_segment"
|
||||
icon_state = base_state
|
||||
payload_spawner = base.payload_spawner
|
||||
payload = base.payload
|
||||
prime_sound = base.prime_sound
|
||||
min_spawned = base.min_spawned
|
||||
max_spawned = base.max_spawned
|
||||
icon_state = "[base_state]_active"
|
||||
active = TRUE
|
||||
walk_away(src,loc,rand(1,4))
|
||||
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
|
||||
|
||||
/obj/item/grenade/clusterbuster/segment/prime()
|
||||
|
||||
new /obj/effect/payload_spawner(loc, payload, rand(4,8))
|
||||
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
|
||||
new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned))
|
||||
playsound(src, prime_sound, 75, 1, -3)
|
||||
qdel(src)
|
||||
|
||||
//////////////////////////////////
|
||||
//The payload spawner effect
|
||||
/////////////////////////////////
|
||||
/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
|
||||
/obj/effect/payload_spawner/Initialize(mapload, type, numspawned)
|
||||
..()
|
||||
spawn_payload(type, numspawned)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
for(var/loop = numspawned ,loop > 0, loop--)
|
||||
/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned)
|
||||
for(var/loop in 1 to numspawned)
|
||||
var/obj/item/grenade/P = new type(loc)
|
||||
P.active = 1
|
||||
if(istype(P))
|
||||
P.active = TRUE
|
||||
addtimer(CALLBACK(P, /obj/item/grenade/proc/prime), rand(15,60))
|
||||
walk_away(P,loc,rand(1,4))
|
||||
|
||||
spawn(rand(15,60))
|
||||
if(P && !QDELETED(P))
|
||||
P.prime()
|
||||
qdel(src)
|
||||
/obj/effect/payload_spawner/random_slime
|
||||
var/volatile = FALSE
|
||||
|
||||
/obj/effect/payload_spawner/random_slime/volatile
|
||||
volatile = TRUE
|
||||
|
||||
/obj/item/slime_extract/proc/activate_slime()
|
||||
var/list/slime_chems = list("plasma","water","blood")
|
||||
for(var/i in 1 to slime_chems.len)
|
||||
if(!QDELETED(src))
|
||||
reagents.add_reagent(pick_n_take(slime_chems),5) //Add them in random order so we get all effects
|
||||
|
||||
/obj/effect/payload_spawner/random_slime/spawn_payload(type, numspawned)
|
||||
for(var/loop = numspawned ,loop > 0, loop--)
|
||||
var/chosen = pick(subtypesof(/obj/item/slime_extract))
|
||||
var/obj/item/slime_extract/P = new chosen(loc)
|
||||
if(volatile)
|
||||
addtimer(CALLBACK(P, /obj/item/slime_extract/proc/activate_slime), rand(15,60))
|
||||
walk_away(P,loc,rand(1,4))
|
||||
|
||||
//////////////////////////////////
|
||||
//Custom payload clusterbusters
|
||||
@@ -127,7 +156,6 @@
|
||||
name = "WELCOME TO HELL"
|
||||
payload = /obj/item/grenade/chem_grenade/clf3
|
||||
|
||||
|
||||
//random clusterbuster spawner
|
||||
/obj/item/grenade/clusterbuster/random
|
||||
icon_state = "random_clusterbang"
|
||||
@@ -136,3 +164,14 @@
|
||||
var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster))
|
||||
new real_type(loc)
|
||||
qdel(src)
|
||||
|
||||
//rainbow slime effect
|
||||
/obj/item/grenade/clusterbuster/slime
|
||||
name = "Blorble Blorble"
|
||||
icon_state = "slimebang"
|
||||
base_state = "slimebang"
|
||||
payload_spawner = /obj/effect/payload_spawner/random_slime
|
||||
prime_sound = 'sound/effects/bubbles.ogg'
|
||||
|
||||
/obj/item/grenade/clusterbuster/slime/volatile
|
||||
payload_spawner = /obj/effect/payload_spawner/random_slime/volatile
|
||||
|
||||
Reference in New Issue
Block a user