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:
BordListian
2018-02-17 07:46:32 +01:00
committed by CitadelStationBot
parent 1bc3908203
commit 24ab7e0a84
3 changed files with 93 additions and 30 deletions
@@ -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