From 4fb864ed1bbea0bd5d0bafd5fb0f1fcd2177f342 Mon Sep 17 00:00:00 2001 From: Aranclanos Date: Mon, 1 Jul 2013 02:08:20 -0300 Subject: [PATCH] Made a new proc for grenades, update_mob(), it will be called in all the different prime() procs. This will drop the grenade of a mob and update his sprite, using the proper inventory proc. It will be only triggered if the loc is a mob. Standardized all the grenades files. --- .../items/weapons/grenades/chem_grenade.dm | 4 + .../items/weapons/grenades/emgrenade.dm | 9 +- .../items/weapons/grenades/flashbang.dm | 173 +++++++++--------- .../objects/items/weapons/grenades/grenade.dm | 15 +- .../items/weapons/grenades/smokebomb.dm | 44 ++--- .../items/weapons/grenades/spawnergrenade.dm | 35 ++-- .../items/weapons/grenades/syndieminibomb.dm | 9 +- 7 files changed, 141 insertions(+), 148 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2abf087a824..516aeb52008 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -157,6 +157,8 @@ playsound(loc, 'sound/effects/bamf.ogg', 50, 1) + update_mob() + for(var/obj/item/weapon/reagent_containers/glass/G in beakers) G.reagents.trans_to(src, G.reagents.total_volume) @@ -208,6 +210,8 @@ playsound(loc, 'sound/effects/bamf.ogg', 50, 1) + update_mob() + if(valid_core) for(var/obj/item/weapon/reagent_containers/glass/G in beakers) G.reagents.trans_to(valid_core, G.reagents.total_volume) diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index 9edf68a60ac..77ca1d65bea 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -4,9 +4,8 @@ item_state = "emp" origin_tech = "materials=2;magnets=3" - prime() - ..() - if(empulse(src, 4, 10)) - del(src) - return +/obj/item/weapon/grenade/empgrenade/prime() + update_mob() + empulse(src, 4, 10) + del(src) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 2ff047a7465..36ea6b5521e 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -5,98 +5,97 @@ origin_tech = "materials=2;combat=1" var/banglet = 0 - prime() - ..() - for(var/obj/structure/closet/L in view(get_turf(src), null)) - if(locate(/mob/living/carbon/, L)) - for(var/mob/living/carbon/M in L) - bang(get_turf(src), M) +/obj/item/weapon/grenade/flashbang/prime() + update_mob() + for(var/obj/structure/closet/L in view(get_turf(src), null)) + if(locate(/mob/living/carbon/, L)) + for(var/mob/living/carbon/M in L) + bang(get_turf(src), M) - for(var/mob/living/carbon/M in viewers(get_turf(src), null)) - bang(get_turf(src), M) + for(var/mob/living/carbon/M in viewers(get_turf(src), null)) + bang(get_turf(src), M) - for(var/obj/effect/blob/B in view(8,get_turf(src))) //Blob damage here - var/damage = round(30/(get_dist(B,get_turf(src))+1)) - B.health -= damage - B.update_icon() - del(src) - return + for(var/obj/effect/blob/B in view(8,get_turf(src))) //Blob damage here + var/damage = round(30/(get_dist(B,get_turf(src))+1)) + B.health -= damage + B.update_icon() + del(src) - proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. - if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging - for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions. - S.active = 0 // -- Polymorph - S.icon_state = "shield0" +/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. + if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging + for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions. + S.active = 0 // -- Polymorph + S.icon_state = "shield0" - M << "\red BANG" - playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) + M << "\red BANG" + playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) //Checking for protections - var/eye_safety = 0 - var/ear_safety = 0 - if(iscarbon(M)) - eye_safety = M.eyecheck() - if(ishuman(M)) - if(istype(M:ears, /obj/item/clothing/ears/earmuffs)) - ear_safety += 2 - if(HULK in M.mutations) - ear_safety += 1 - if(istype(M:head, /obj/item/clothing/head/helmet)) - ear_safety += 1 + var/eye_safety = 0 + var/ear_safety = 0 + if(iscarbon(M)) + eye_safety = M.eyecheck() + if(ishuman(M)) + if(istype(M:ears, /obj/item/clothing/ears/earmuffs)) + ear_safety += 2 + if(HULK in M.mutations) + ear_safety += 1 + if(istype(M:head, /obj/item/clothing/head/helmet)) + ear_safety += 1 //Flashing everyone - if(eye_safety < 1) - flick("e_flash", M.flash) - M.eye_stat += rand(1, 3) - M.Stun(2) - M.Weaken(10) + if(eye_safety < 1) + flick("e_flash", M.flash) + M.eye_stat += rand(1, 3) + M.Stun(2) + M.Weaken(10) //Now applying sound - if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) - if(ear_safety > 0) - M.Stun(2) - M.Weaken(1) + if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) + if(ear_safety > 0) + M.Stun(2) + M.Weaken(1) + else + M.Stun(10) + M.Weaken(3) + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(1, 10) else - M.Stun(10) - M.Weaken(3) - if ((prob(14) || (M == src.loc && prob(70)))) - M.ear_damage += rand(1, 10) - else - M.ear_damage += rand(0, 5) - M.ear_deaf = max(M.ear_deaf,15) + M.ear_damage += rand(0, 5) + M.ear_deaf = max(M.ear_deaf,15) - else if(get_dist(M, T) <= 5) - if(!ear_safety) - M.Stun(8) - M.ear_damage += rand(0, 3) - M.ear_deaf = max(M.ear_deaf,10) + else if(get_dist(M, T) <= 5) + if(!ear_safety) + M.Stun(8) + M.ear_damage += rand(0, 3) + M.ear_deaf = max(M.ear_deaf,10) - else if(!ear_safety) - M.Stun(4) - M.ear_damage += rand(0, 1) - M.ear_deaf = max(M.ear_deaf,5) + else if(!ear_safety) + M.Stun(4) + M.ear_damage += rand(0, 1) + M.ear_deaf = max(M.ear_deaf,5) //This really should be in mob not every check - if (M.eye_stat >= 20) - M << "\red Your eyes start to burn badly!" - M.disabilities |= NEARSIGHTED - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.eye_stat - 20 + 1)) - M << "\red You can't see anything!" - M.sdisabilities |= BLIND - if (M.ear_damage >= 15) - M << "\red Your ears start to ring badly!" - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.ear_damage - 10 + 5)) - M << "\red You can't hear anything!" - M.sdisabilities |= DEAF - else - if (M.ear_damage >= 5) - M << "\red Your ears start to ring!" - M.update_icons() + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= NEARSIGHTED + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (prob(M.eye_stat - 20 + 1)) + M << "\red You can't see anything!" + M.sdisabilities |= BLIND + if (M.ear_damage >= 15) + M << "\red Your ears start to ring badly!" + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (prob(M.ear_damage - 10 + 5)) + M << "\red You can't hear anything!" + M.sdisabilities |= DEAF + else + if (M.ear_damage >= 5) + M << "\red Your ears start to ring!" + M.update_icons() /obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve @@ -106,6 +105,7 @@ 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--) @@ -124,7 +124,6 @@ playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) spawn(0) del(src) - return /obj/item/weapon/grenade/flashbang/clusterbang/segment desc = "A smaller segment of a clusterbang. Better run." @@ -135,7 +134,6 @@ /obj/item/weapon/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode icon_state = "clusterbang_segment_active" active = 1 - banglet = 1 var/stepdist = rand(1,4)//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 @@ -145,6 +143,7 @@ ..() /obj/item/weapon/grenade/flashbang/clusterbang/segment/prime() + update_mob() var/numspawned = rand(4,8) for(var/more = numspawned,more > 0,more--) if(prob(35)) @@ -156,17 +155,15 @@ playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) spawn(0) del(src) - return /obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang - spawn(0) - icon_state = "flashbang_active" - active = 1 - banglet = 1 - var/stepdist = rand(1,3) - var/temploc = src.loc - walk_away(src,temploc,stepdist) - var/dettime = rand(15,60) - spawn(dettime) - prime() - ..() \ No newline at end of file + ..() + icon_state = "flashbang_active" + active = 1 + banglet = 1 + var/stepdist = rand(1,3) + var/temploc = src.loc + walk_away(src,temploc,stepdist) + var/dettime = rand(15,60) + spawn(dettime) + prime() \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index eeaf7ada8ca..7619df49775 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -69,18 +69,15 @@ var/mob/living/carbon/C = user C.throw_mode_on() spawn(det_time) - if(user) - user.drop_item() prime() - return - return /obj/item/weapon/grenade/proc/prime() -// playsound(loc, 'sound/items/Welder2.ogg', 25, 1) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(700,125) + +/obj/item/weapon/grenade/proc/update_mob() + if(ismob(loc)) + var/mob/M = loc + M.drop_from_inventory(src) /obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -100,12 +97,10 @@ user << "You set the [name] for instant detonation." add_fingerprint(user) ..() - return /obj/item/weapon/grenade/attack_hand() walk(src, null, null) ..() - return /obj/item/weapon/grenade/attack_paw(mob/user as mob) return attack_hand(user) diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index ea6ab037bc4..da5c22b8177 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -9,27 +9,27 @@ slot_flags = SLOT_BELT var/datum/effect/effect/system/bad_smoke_spread/smoke - New() - ..() - src.smoke = new /datum/effect/effect/system/bad_smoke_spread - src.smoke.attach(src) +/obj/item/weapon/grenade/smokebomb/New() + ..() + src.smoke = new /datum/effect/effect/system/bad_smoke_spread + src.smoke.attach(src) - prime() - playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - src.smoke.set_up(10, 0, usr.loc) - spawn(0) - src.smoke.start() - sleep(10) - src.smoke.start() - sleep(10) - src.smoke.start() - sleep(10) - src.smoke.start() +/obj/item/weapon/grenade/smokebomb/prime() + update_mob() + playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) + src.smoke.set_up(10, 0, usr.loc) + spawn(0) + src.smoke.start() + sleep(10) + src.smoke.start() + sleep(10) + src.smoke.start() + sleep(10) + src.smoke.start() - for(var/obj/effect/blob/B in view(8,src)) - var/damage = round(30/(get_dist(B,src)+1)) - B.health -= damage - B.update_icon() - sleep(80) - del(src) - return + for(var/obj/effect/blob/B in view(8,src)) + var/damage = round(30/(get_dist(B,src)+1)) + B.health -= damage + B.update_icon() + sleep(80) + del(src) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index efb6ac1e755..9546c9c166b 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -9,27 +9,26 @@ var/spawner_type = null // must be an object path var/deliveryamt = 1 // amount of type to deliver - prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. + update_mob() + if(spawner_type && deliveryamt) + // Make a quick flash + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/carbon/human/M in viewers(T, null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) // flash dose faggots - if(spawner_type && deliveryamt) - // Make a quick flash - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(T, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type + x.loc = T + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) - for(var/i=1, i<=deliveryamt, i++) - var/atom/movable/x = new spawner_type - x.loc = T - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(x, pick(NORTH,SOUTH,EAST,WEST)) + // Spawn some hostile syndicate critters - // Spawn some hostile syndicate critters - - del(src) - return + del(src) /obj/item/weapon/grenade/spawnergrenade/manhacks name = "manhack delivery grenade" diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm index f6328964dfe..7dbb3431e62 100644 --- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -6,8 +6,7 @@ item_state = "flashbang" origin_tech = "materials=3;magnets=4;syndicate=4" - prime() - explosion(src.loc,1,2,4) - del(src) - - return \ No newline at end of file +/obj/item/weapon/grenade/syndieminibomb/prime() + update_mob() + explosion(src.loc,1,2,4) + del(src) \ No newline at end of file