Merge pull request #2058 from Fox-McCloud/cluster-grenade-cleanup

Cluster Grenade Cleanup
This commit is contained in:
Mark van Alphen
2015-09-16 20:22:38 +02:00
11 changed files with 318 additions and 296 deletions
+1 -1
View File
@@ -276,7 +276,7 @@
/mob/living/simple_animal/hostile/hivebot,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/pirate)
visible_message("\red Something falls out of the [src]!")
var/obj/item/weapon/grenade/flashbang/clusterbang/C = new(src.loc)
var/obj/item/weapon/grenade/clusterbuster/C = new(src.loc)
C.prime()
spawn(10)
new menace(src.loc)
@@ -415,8 +415,7 @@
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("aluminum", 25)
B1.reagents.add_reagent("incendiaryfuel",25)
B1.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("plasma", 25)
B2.reagents.add_reagent("sacid", 25)
@@ -485,6 +484,26 @@
beakers += B2
update_icon()
/obj/item/weapon/grenade/chem_grenade/facid
name = "acid grenade"
desc = "Used for melting armoured opponents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/facid/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("facid", 280)
B1.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
B2.reagents.add_reagent("sugar", 20)
B2.reagents.add_reagent("facid", 260)
beakers += B1
beakers += B2
update_icon()
/obj/item/weapon/grenade/chem_grenade/tabungas
payload_name = "tabungas"
desc = "Contains tabun gas; extremely deadly and fast acting; use with extreme caution."
@@ -0,0 +1,266 @@
////////////////////
//Clusterbang
////////////////////
/obj/item/weapon/grenade/clusterbuster
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
name = "clusterbang"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang"
var/payload = /obj/item/weapon/grenade/flashbang/cluster
/obj/item/weapon/grenade/clusterbuster/prime()
update_mob()
var/numspawned = rand(4,8)
var/again = 0
for(var/more = numspawned,more > 0,more--)
if(prob(35))
again++
numspawned--
for(var/loop = again ,loop > 0, loop--)
new /obj/item/weapon/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)
qdel(src)
//////////////////////
//Clusterbang segment
//////////////////////
/obj/item/weapon/grenade/clusterbuster/segment
desc = "A smaller segment of a clusterbang. Better run."
name = "clusterbang segment"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
/obj/item/weapon/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/weapon/grenade/flashbang/cluster)
..()
icon_state = "clusterbang_segment_active"
payload = payload_type
active = 1
walk_away(src,loc,rand(1,4))
spawn(rand(15,60))
prime()
/obj/item/weapon/grenade/clusterbuster/segment/prime()
new /obj/effect/payload_spawner(loc, payload, rand(4,8))
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
qdel(src)
//////////////////////////////////
//The payload spawner effect
/////////////////////////////////
/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
for(var/loop = numspawned ,loop > 0, loop--)
var/obj/item/weapon/grenade/P = new type(loc)
if(istype(P, /obj/item/weapon/grenade))
P.active = 1
walk_away(P,loc,rand(1,4))
spawn(rand(15,60))
if(P && isnull(P.gcDestroyed))
if(istype(P, /obj/item/weapon/grenade))
P.prime()
qdel(src)
//////////////////////////////////
//Custom payload clusterbusters
/////////////////////////////////
/obj/item/weapon/grenade/flashbang/cluster
icon_state = "flashbang_active"
banglet = 1
/obj/item/weapon/grenade/clusterbuster/emp
name = "Electromagnetic Storm"
payload = /obj/item/weapon/grenade/empgrenade
/obj/item/weapon/grenade/clusterbuster/smoke
name = "Ninja Vanish"
payload = /obj/item/weapon/grenade/smokebomb
/obj/item/weapon/grenade/clusterbuster/metalfoam
name = "Instant Concrete"
payload = /obj/item/weapon/grenade/chem_grenade/metalfoam
/obj/item/weapon/grenade/clusterbuster/inferno
name = "Inferno"
payload = /obj/item/weapon/grenade/chem_grenade/incendiary
/obj/item/weapon/grenade/clusterbuster/antiweed
name = "RoundDown"
payload = /obj/item/weapon/grenade/chem_grenade/antiweed
/obj/item/weapon/grenade/clusterbuster/cleaner
name = "Mr. Proper"
payload = /obj/item/weapon/grenade/chem_grenade/cleaner
/obj/item/weapon/grenade/clusterbuster/teargas
name = "Oignon Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/teargas
/obj/item/weapon/grenade/clusterbuster/facid
name = "Aciding Rain"
payload = /obj/item/weapon/grenade/chem_grenade/facid
/obj/item/weapon/grenade/clusterbuster/syndieminibomb
name = "SyndiWrath"
payload = /obj/item/weapon/grenade/syndieminibomb
/obj/item/weapon/grenade/clusterbuster/spawner_manhacks
name = "iViscerator"
payload = /obj/item/weapon/grenade/spawnergrenade/manhacks
/obj/item/weapon/grenade/clusterbuster/spawner_spesscarp
name = "Invasion of the Space Carps"
payload = /obj/item/weapon/grenade/spawnergrenade/spesscarp
/obj/item/weapon/grenade/clusterbuster/monster
name = "Monster Megabomb"
payload = /obj/item/weapon/grenade/chem_grenade/large/monster
/obj/item/weapon/grenade/clusterbuster/meat
name = "Mega Meat Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/meat
/obj/item/weapon/grenade/clusterbuster/nervegas
name = "Nerve Gas Clusterbomb"
payload = /obj/item/weapon/grenade/chem_grenade/tabungas
/obj/item/weapon/grenade/clusterbuster/megadirt
name = "Megamaid's Revenge Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/dirt
/obj/item/weapon/grenade/clusterbuster/ultima
name = "Earth Shattering Kaboom"
desc = "Contains one Aludium Q-36 explosive space modulator."
payload = /obj/item/weapon/grenade/chem_grenade/explosion
/obj/item/weapon/grenade/clusterbuster/lube
name = "Newton's First Law"
desc = "An object in motion remains in motion."
payload = /obj/item/weapon/grenade/chem_grenade/lube
/obj/item/weapon/grenade/clusterbuster/hippie
name = "Hippie Grenade"
desc = "Almost as good as the summer of '69."
payload = /obj/item/weapon/grenade/chem_grenade/drugs
/obj/item/weapon/grenade/clusterbuster/holy
name = "Purification Grenade"
desc = "Blessed excessively."
payload = /obj/item/weapon/grenade/chem_grenade/holywater
/obj/item/weapon/grenade/clusterbuster/hellwater
name = "Righteous Fury"
desc = "It's righteous, not badminnery."
payload = /obj/item/weapon/grenade/chem_grenade/hellwater
/obj/item/weapon/grenade/clusterbuster/booze
name = "Booze Grenade"
payload = /obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink
/obj/item/weapon/grenade/clusterbuster/honk
name = "Mega Honk Grenade"
payload = /obj/item/weapon/bananapeel
/obj/item/weapon/grenade/clusterbuster/honk_evil
name = "Evil Mega Honk Grenade"
payload = /obj/item/weapon/grenade/clown_grenade
/obj/item/weapon/grenade/clusterbuster/xmas
name = "Christmas Miracle"
payload = /obj/item/weapon/a_gift
/obj/item/weapon/grenade/clusterbuster/dirt
name = "Megamaid's Job Security Grenade"
payload = /obj/effect/decal/cleanable/random
/obj/item/weapon/grenade/clusterbuster/apocalypsefake
name = "Fun Bomb"
desc = "Not like the other bomb."
payload = /obj/item/toy/spinningtoy
/obj/item/weapon/grenade/clusterbuster/apocalypse
name = "Apocalypse Bomb"
desc = "No matter what, do not EVER use this."
payload = /obj/singularity
/obj/item/weapon/grenade/clusterbuster/tools
name = "Quick Repair Grenade"
desc = "An assistant's every dream."
payload = /obj/random/tool
/obj/item/weapon/grenade/clusterbuster/tools
name = "Engineering Deployment Platfom"
desc = "For the that time when gearing up was just too hard."
payload = /obj/random/tech_supply
/obj/item/weapon/grenade/clusterbuster/toys
name = "Toy Delivery System"
desc = "Who needs skill at arcades anyway?"
payload = /obj/item/toy/random
/obj/item/weapon/grenade/clusterbuster/banquet
name = "Bork Bork Bonanza"
desc = "Bork bork bork."
payload = /obj/item/weapon/grenade/clusterbuster/banquet/child
/obj/item/weapon/grenade/clusterbuster/banquet/child
payload = /obj/item/weapon/grenade/chem_grenade/large/feast
/obj/item/weapon/grenade/clusterbuster/aviary
name = "Poly-Poly Grenade"
desc = "That's an uncomfortable number of birds."
payload = /mob/living/simple_animal/parrot
/obj/item/weapon/grenade/clusterbuster/monkey
name = "Barrel of Monkeys"
desc = "Not really that much fun."
payload = /mob/living/carbon/human/monkey
/obj/item/weapon/grenade/clusterbuster/fluffy
name = "Fluffy Love Bomb"
desc = "Exactly as snuggly as it sounds."
payload = /mob/living/simple_animal/pet/corgi/puppy
/obj/item/weapon/grenade/clusterbuster/fox
name = "Troublemaking Grenade"
desc = "More trouble than two foxes combined."
payload = /mob/living/simple_animal/pet/fox
/obj/item/weapon/grenade/clusterbuster/crab
name = "Crab Grenade"
desc = "Reserved for those pesky request."
payload = /mob/living/simple_animal/crab
////////////Clusterbuster of Clusterbusters////////////
/obj/item/weapon/grenade/clusterbuster/mega_fox
name = "Mega Troublemaking Grenade."
payload = /obj/item/weapon/grenade/clusterbuster/fox
/obj/item/weapon/grenade/clusterbuster/mega_bang
name = "For when stunlocking is just too short."
payload = /obj/item/weapon/grenade/clusterbuster
/obj/item/weapon/grenade/clusterbuster/mega_syndieminibomb
name = "Mega SyndiWrath."
payload = /obj/item/weapon/grenade/clusterbuster/syndieminibomb
/obj/item/weapon/grenade/clusterbuster/mega_honk_evil
name = "Mega Evil Mega Honk Grenade."
payload = /obj/item/weapon/grenade/clusterbuster/honk_evil
/obj/item/weapon/grenade/clusterbuster/mega_emp
name = "Electromagnetic Storm"
payload = /obj/item/weapon/grenade/clusterbuster/emp
@@ -47,6 +47,22 @@
B.reagents.add_reagent("holywater",100)
beakers += B
/obj/item/weapon/grenade/chem_grenade/hellwater
payload_name = "hell water"
desc = "And he struck them down with an unholy fury that burn like one-thousands badmins."
stage = 2
det_time = 30
New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("hellwater",80)
B1.reagents.add_reagent("sugar",20)
B2.reagents.add_reagent("hellwater", 60)
B2.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
/obj/item/weapon/grenade/chem_grenade/drugs
payload_name = "miracle"
@@ -253,17 +269,6 @@
beakers += B1
beakers += B2
// Slime Clusterbusters
/*/obj/item/weapon/grenade/clusterbuster/bluespace
name = "Bluespace Megabomb"
desc = "Widely regarded as proof that while there is a God, He is Insane."
payload = /obj/item/weapon/grenade/chem_grenade/large/bluespace*/
/obj/item/weapon/grenade/clusterbuster/monster
name = "Monster Megabomb"
desc = "Widely regarded as proof that there is no God."
payload = /obj/item/weapon/grenade/chem_grenade/large/monster
// --------------------------------------
// Syndie Kits
// --------------------------------------
@@ -291,171 +296,4 @@
new /obj/item/weapon/grenade/chem_grenade/lube(src)
new /obj/item/device/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/device/assembly/signaler(src)
return
// --------------------------------------
// Clusterbuster Variable Payload Grenade
// Adapted from flashbang/clusterbang
// --------------------------------------
/obj/item/weapon/grenade/clusterbuster
desc = "This highly intimidating bunch of hardware seems eager to be let loose."
name = "Clusterbang"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang"
var/payload = /obj/item/weapon/grenade/flashbang
// Subtypes
// Serious grenades
/obj/item/weapon/grenade/clusterbuster/explosion
name = "Cluster Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/explosion
/obj/item/weapon/grenade/clusterbuster/emp
name = "Electromagnetic Storm"
payload = /obj/item/weapon/grenade/chem_grenade/emp
/obj/item/weapon/grenade/clusterbuster/smoke
name = "Ninja Vanish"
payload = /obj/item/weapon/grenade/smokebomb
// Not serious grenades
/obj/item/weapon/grenade/clusterbuster/meat
name = "Mega Meat Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/meat
/obj/item/weapon/grenade/clusterbuster/booze
name = "Booze Grenade"
payload = /obj/item/weapon/reagent_containers/food/drinks/bottle/random_drink
/obj/item/weapon/grenade/clusterbuster/honk
name = "Mega Honk Grenade"
payload = /obj/item/weapon/bananapeel
/obj/item/weapon/grenade/clusterbuster/xmas
name = "Christmas Miracle"
payload = /obj/item/weapon/a_gift
/obj/item/weapon/grenade/clusterbuster/dirt
name = "Megamaid's Job Security Grenade"
payload = /obj/effect/decal/cleanable/random
/obj/item/weapon/grenade/clusterbuster/megadirt
name = "Megamaid's Revenge Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/dirt
/obj/item/weapon/grenade/clusterbuster/inferno
name = "Little Boy"
payload = /obj/item/weapon/grenade/chem_grenade/incendiary
/obj/item/weapon/grenade/clusterbuster/apocalypsefake
name = "Fun Bomb"
desc = "Not like the other bomb."
payload = /obj/item/toy/spinningtoy
// Grenades that should never see the light of day
/obj/item/weapon/grenade/clusterbuster/apocalypse
name = "Apocalypse Bomb"
desc = "No matter what, do not EVER use this."
payload = /obj/singularity
/obj/item/weapon/grenade/clusterbuster/ultima
name = "Earth Shattering Kaboom"
desc = "Contains one Aludium Q-36 explosive space modulator."
payload = /obj/item/weapon/grenade/chem_grenade/explosion
/obj/item/weapon/grenade/clusterbuster/lube
name = "Newton's First Law"
desc = "An object in motion remains in motion."
payload = /obj/item/weapon/grenade/chem_grenade/lube
/*/obj/item/weapon/grenade/clusterbuster/bluespace
name = "Maximum Warp"
desc = "Spacetime: Nice job breaking it, hero."
payload = /obj/item/weapon/grenade/chem_grenade/large/bluespace*/
/obj/item/weapon/grenade/clusterbuster/monster
name = "The Monster Mash"
desc = "It's a graveyeard smash."
payload = /obj/item/weapon/grenade/chem_grenade/large/monster
/obj/item/weapon/grenade/clusterbuster/banquet
name = "Bork Bork Bonanza"
desc = "Bork bork bork."
payload = /obj/item/weapon/grenade/clusterbuster/banquet/child
child
payload = /obj/item/weapon/grenade/chem_grenade/large/feast
// Mob spawning grenades
/obj/item/weapon/grenade/clusterbuster/aviary
name = "Poly-Poly Grenade"
desc = "That's an uncomfortable number of birds."
payload = /mob/living/simple_animal/parrot
/obj/item/weapon/grenade/clusterbuster/monkey
name = "Barrel of Monkeys"
desc = "Not really that much fun."
payload = /mob/living/carbon/human/monkey
/obj/item/weapon/grenade/clusterbuster/fluffy
name = "Fluffy Love Bomb"
desc = "Exactly as snuggly as it sounds."
payload = /mob/living/simple_animal/pet/corgi/puppy
/obj/item/weapon/grenade/clusterbuster/prime()
var/numspawned = rand(4,8)
var/again = 0
for(var/more = numspawned,more > 0,more--)
if(prob(35))
again++
numspawned --
for(,numspawned > 0, numspawned--)
spawn(0)
new /obj/item/weapon/grenade/clusterbuster/node(src.loc,payload,name)//Launches payload
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
for(,again > 0, again--)
spawn(0)
new /obj/item/weapon/grenade/clusterbuster/segment(src.loc,payload,name)//Creates a 'segment' that launches more payloads
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
spawn(0)
qdel(src)
return
/obj/item/weapon/grenade/clusterbuster/segment
desc = "What's happening? Aaah!"
name = "clusterbuster segment"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
/obj/item/weapon/grenade/clusterbuster/segment/New(var/turf/newloc,var/T,var/N)//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode
icon_state = "clusterbang_segment_active"
active = 1
payload = T
name = N
var/stepdist = rand(1,5) //How far to step
var/temploc = src.loc //Saves the current location to know where to step away from
walk_away(src,temploc,stepdist) //I must go, my people need me
var/dettime = rand(15,60)
spawn(dettime)
prime()
/obj/item/weapon/grenade/clusterbuster/segment/prime()
var/numspawned = rand(4,8)
for(var/more = numspawned,more > 0,more--)
if(prob(35))
numspawned --
for(,numspawned > 0, numspawned--)
new /obj/item/weapon/grenade/clusterbuster/node(src.loc,payload)
spawn(0)
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
qdel(src)
return
/obj/item/weapon/grenade/clusterbuster/node/New(var/turf/newloc,var/T,var/N)
icon_state = "flashbang_active"
active = 1
payload = T
name = N
var/stepdist = rand(1,4)
var/temploc = src.loc
walk_away(src,temploc,stepdist)
var/dettime = rand(15,60)
spawn(dettime)
var/atom/A = new payload(loc)
if(istype(A,/obj/item/weapon/grenade))
A:prime()
if(istype(A,/obj/singularity)) // I can't emphasize enough how much you should never use this grenade
A:energy = 200
qdel(src)
return
@@ -21,7 +21,7 @@
/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M)
M.show_message("<span class='warning'>BANG</span>", 2)
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
playsound(loc, 'sound/effects/bang.ogg', 25, 1)
//Checking for protections
var/eye_safety = 0
@@ -48,12 +48,12 @@
M << "<span class='warning'>Your eyes start to burn badly!</span>"
else
M << "<span class='warning'>The flash blinds you!</span>"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
if(!banglet)
if (E.damage >= E.min_broken_damage)
M << "<span class='warning'>You can't see anything!</span>"
//Bang
if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
if((loc == M) || loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
M.Stun(10)
M.Weaken(10)
if(!ear_safety)
@@ -63,81 +63,10 @@
M.ear_deaf = max(M.ear_deaf,15)
if (M.ear_damage >= 15)
M << "<span class='warning'>Your ears start to ring badly!</span>"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
if(!banglet)
if(prob(M.ear_damage - 10 + 5))
M << "<span class='warning'>You can't hear anything!</span>"
M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "<span class='warning'>Your ears start to ring!</span>"
////////////////////
//Clusterbang
////////////////////
/obj/item/weapon/grenade/flashbang/clusterbang
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
name = "clusterbang"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang"
/obj/item/weapon/grenade/flashbang/clusterbang/prime()
update_mob()
var/numspawned = rand(4,8)
var/again = 0
for(var/more = numspawned,more > 0,more--)
if(prob(35))
again++
numspawned--
for(var/loop = numspawned, loop > 0, loop--)
new /obj/item/weapon/grenade/flashbang/cluster(loc)//Launches flashbangs
for(var/loop = again ,loop > 0, loop--)
new /obj/item/weapon/grenade/flashbang/clusterbang/segment(loc)//Creates a 'segment' that launches a few more flashbangs
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
qdel(src)
//////////////////////
//Clusterbang segment
//////////////////////
/obj/item/weapon/grenade/flashbang/clusterbang/segment
desc = "A smaller segment of a clusterbang. Better run."
name = "clusterbang segment"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
/obj/item/weapon/grenade/flashbang/clusterbang/segment/New()
..()
icon_state = "clusterbang_segment_active"
active = 1
walk_away(src,loc,rand(1,4))
spawn(rand(15,60))
prime()
/obj/item/weapon/grenade/flashbang/clusterbang/segment/prime()
update_mob()
var/numspawned = rand(4,8)
for(var/loop = numspawned ,loop > 0, loop--)
new /obj/item/weapon/grenade/flashbang/cluster(loc)
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
qdel(src)
////////////////////////////////
//Clusterbang spawned flashbang
////////////////////////////////
/obj/item/weapon/grenade/flashbang/cluster/New()
..()
icon_state = "flashbang_active"
active = 1
banglet = 1
walk_away(src,loc,rand(1,3))
spawn(rand(15,60))
prime()
M << "<span class='warning'>Your ears start to ring!</span>"
@@ -81,7 +81,7 @@
New()
..()
new /obj/item/weapon/grenade/flashbang/clusterbang(src)
new /obj/item/weapon/grenade/clusterbuster(src)
/obj/item/weapon/storage/lockbox/medal