From faea964e13c2271ae5b98ae1378f6cf2bf3e4bbe Mon Sep 17 00:00:00 2001 From: "petethegoat@gmail.com" Date: Sun, 12 Aug 2012 19:51:08 +0000 Subject: [PATCH] Fixes issue 521. Fixes issue 676. Fixes issue 700. Fixes issue 753. Fixes issue 754. Fixes issue 755. Additionally I slightly cleaned up grenade code and stunglove code, and removed mustardbomb.dm (because it was fucking awful). THIS BUGFIX TRAIN AIN'T STOPPIN' Thanks QualityVan for the issue 521 fix, and thanks Nodrak & Tobba for pointing out my dumbness for issues 753 & 754 respectively. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4382 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/spells/ethereal_jaunt.dm | 24 +-- code/game/machinery/computer/power.dm | 12 ++ code/game/objects/grenades/chem_grenade.dm | 5 + code/game/objects/grenades/grenade.dm | 153 +++++++------- code/game/objects/grenades/mustardbomb.dm | 32 --- code/game/objects/items/weapons/stungloves.dm | 10 +- code/game/objects/watercloset.dm | 6 +- code/game/turf.dm | 1 - code/modules/clothing/gloves.dm | 1 - code/modules/power/cell.dm | 27 --- icons/effects/water.dmi | Bin 13227 -> 4816 bytes tgstation.dme | 198 ------------------ 12 files changed, 109 insertions(+), 360 deletions(-) delete mode 100644 code/game/objects/grenades/mustardbomb.dm diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index 9e99624d0b1..be4c641251d 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -80,28 +80,8 @@ var/turf/newLoc = get_step(src,direction) if(!(newLoc.flags & NOJAUNT)) loc = newLoc -/* - switch(direction) - if(NORTH) - src.y++ - if(SOUTH) - src.y-- - if(EAST) - src.x++ - if(WEST) - src.x-- - if(NORTHEAST) - src.y++ - src.x++ - if(NORTHWEST) - src.y++ - src.x-- - if(SOUTHEAST) - src.y-- - src.x++ - if(SOUTHWEST) - src.y-- - src.x-- */ + else + user << "Some strange aura is blocking the way!" src.canmove = 0 spawn(2) src.canmove = 1 diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index e68dcd2dcad..92a84398f9a 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -11,6 +11,18 @@ idle_power_usage = 20 active_power_usage = 80 +//fix for issue 521, by QualityVan. +//someone should really look into why circuits have a powernet var, it's several kinds of retarded. +/obj/machinery/power/monitor/New() + ..() + var/obj/structure/cable/attached = null + var/turf/T = loc + if(isturf(T)) + attached = locate() in T + if(attached) + powernet = attached.get_powernet() + + /obj/machinery/power/monitor/attack_ai(mob/user) add_fingerprint(user) diff --git a/code/game/objects/grenades/chem_grenade.dm b/code/game/objects/grenades/chem_grenade.dm index 571711028e7..bdd00c3e116 100644 --- a/code/game/objects/grenades/chem_grenade.dm +++ b/code/game/objects/grenades/chem_grenade.dm @@ -13,11 +13,16 @@ var/list/beakers = new/list() var/list/allowed_containers = list("/obj/item/weapon/reagent_containers/glass/beaker", "/obj/item/weapon/reagent_containers/glass/dispenser", "/obj/item/weapon/reagent_containers/glass/bottle") var/affected_area = 3 + New() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src + attack_self(mob/user as mob) + if(stage > 1) + ..() + attackby(obj/item/weapon/W as obj, mob/user as mob)//TODO:Have grenades use the new assembly things if(istype(W,/obj/item/device/assembly_holder) && !stage && path != 2) diff --git a/code/game/objects/grenades/grenade.dm b/code/game/objects/grenades/grenade.dm index 9118374c485..37852c6b82b 100644 --- a/code/game/objects/grenades/grenade.dm +++ b/code/game/objects/grenades/grenade.dm @@ -1,7 +1,6 @@ /obj/item/weapon/grenade - var/det_time = 50 - desc = "It is set to detonate in 5 seconds." name = "grenade" + desc = "A hand held grenade, with an adjustable timer." w_class = 2.0 icon = 'icons/obj/grenade.dmi' icon_state = "grenade" @@ -11,80 +10,94 @@ flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BELT var/active = 0 + var/det_time = 50 - proc/clown_check(var/mob/living/user) - if((CLUMSY in user.mutations) && prob(50)) - user << "\red Huh? How does this thing work?!" - src.active = 1 - src.icon_state = initial(icon_state) + "_active" - playsound(src.loc, 'armbomb.ogg', 75, 1, -3) - spawn(5) - src.prime() - return 0 - return 1 +/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) + if((CLUMSY in user.mutations) && prob(50)) + user << "Huh? How does this thing work?" + active = 1 + icon_state = initial(icon_state) + "_active" + playsound(loc, 'armbomb.ogg', 75, 1, -3) + spawn(5) + if(user) + user.drop_item() + prime() + return 0 + return 1 -/* afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container - if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() - if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc) - user << "\red You prime the [name]! [det_time/10] seconds!" - src.active = 1 - src.icon_state = initial(icon_state) + "_active" - playsound(src.loc, 'armbomb.ogg', 75, 1, -3) - spawn(src.det_time) - src.prime() + +/*/obj/item/weapon/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container + if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() + if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc) + user << "You prime the [name]! [det_time/10] seconds!" + active = 1 + icon_state = initial(icon_state) + "_active" + playsound(loc, 'armbomb.ogg', 75, 1, -3) + spawn(det_time) + prime() + return + user.dir = get_dir(user, target) + user.drop_item() + var/t = (isturf(target) ? target : target.loc) + walk_towards(src, t, 3) + return*/ + + +/obj/item/weapon/grenade/examine() + set src in usr + usr << desc + if(det_time > 1) + usr << "The timer is set to [det_time/10] seconds." + return + usr << "\The [src] is set for instant detonation." + + +/obj/item/weapon/grenade/attack_self(mob/user as mob) + if(!active) + if(clown_check(user)) + user << "You prime the [name]! [det_time/10] seconds!" + active = 1 + icon_state = initial(icon_state) + "_active" + add_fingerprint(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.throw_mode_on() + spawn(det_time) + if(user) + user.drop_item() + prime() return - user.dir = get_dir(user, target) - user.drop_item() - var/t = (isturf(target) ? target : target.loc) - walk_towards(src, t, 3) - return*/ + return - attack_self(mob/user as mob) - if(!active) - if(clown_check(user)) - user << "\red You prime the [name]! [det_time/10] seconds!" - src.active = 1 - src.icon_state = initial(icon_state) + "_active" - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - spawn(src.det_time) - src.prime() - return - return +/obj/item/weapon/grenade/proc/prime() + playsound(loc, 'Welder2.ogg', 25, 1) + var/turf/T = get_turf(src) + if(T) + T.hotspot_expose(700,125) - proc/prime() - playsound(src.loc, 'Welder2.ogg', 25, 1) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(700,125) +/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(isscrewdriver(W)) + switch(det_time) + if ("1") + det_time = 30 + user << "You set the [name] for 3 second detonation time." + if ("30") + det_time = 100 + user << "You set the [name] for 10 second detonation time." + if ("100") + det_time = 1 + user << "You set the [name] for instant detonation." + add_fingerprint(user) + ..() + return +/obj/item/weapon/grenade/attack_hand() + walk(src, null, null) + ..() + return - attackby(obj/item/weapon/W as obj, mob/user as mob) - if (isscrewdriver(W)) - switch(src.det_time) - if ("1") - src.det_time = 30 - user.show_message("\blue You set the [name] for 3 second detonation time.") - if ("30") - src.det_time = 100 - user.show_message("\blue You set the [name] for 10 second detonation time.") - if ("100") - src.det_time = 1 - user.show_message("\blue You set the [name] for instant detonation.") - src.add_fingerprint(user) - src.desc = "It is set to detonate [det_time-1 ? "in [det_time/10] seconds." : "instantly."]" - ..() - return - - attack_hand() - walk(src, null, null) - ..() - return - - attack_paw(mob/user as mob) - return src.attack_hand(user) +/obj/item/weapon/grenade/attack_paw(mob/user as mob) + return attack_hand(user) diff --git a/code/game/objects/grenades/mustardbomb.dm b/code/game/objects/grenades/mustardbomb.dm deleted file mode 100644 index 84960d75fe6..00000000000 --- a/code/game/objects/grenades/mustardbomb.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/weapon/grenade/mustardbomb - desc = "It is set to detonate in 4 seconds." - name = "mustard gas bomb" - icon = 'icons/obj/grenade.dmi' - icon_state = "flashbang" - det_time = 40.0 - item_state = "flashbang" - var/datum/effect/effect/system/mustard_gas_spread/mustard_gas - - New() - ..() - src.mustard_gas = new /datum/effect/effect/system/mustard_gas_spread - src.mustard_gas.attach(src) - src.mustard_gas.set_up(5, 0, usr.loc) - - prime() - playsound(src.loc, 'smoke.ogg', 50, 1, -3) - spawn(0) - src.mustard_gas.start() - sleep(10) - src.mustard_gas.start() - sleep(10) - src.mustard_gas.start() - sleep(10) - src.mustard_gas.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(100) - del(src) - return diff --git a/code/game/objects/items/weapons/stungloves.dm b/code/game/objects/items/weapons/stungloves.dm index 29801a763d4..acfacab4238 100644 --- a/code/game/objects/items/weapons/stungloves.dm +++ b/code/game/objects/items/weapons/stungloves.dm @@ -27,14 +27,15 @@ else if(istype(W, /obj/item/weapon/wirecutters)) if(cell) + cell.updateicon() cell.loc = get_turf(src.loc) - cell = 0 + cell = null user << "You cut the cell away from [src]." update_icon() return if(wired) //wires disappear into the void because fuck that shit wired = 0 - siemens_coefficient = siemens_coefficient_archived + siemens_coefficient = initial(siemens_coefficient) user << "You cut the wires away from [src]." update_icon() ..() @@ -46,7 +47,4 @@ if(wired) overlays += "gloves_wire" if(cell) - overlays += "gloves_cell" - -/obj/item/clothing/gloves/New() - siemens_coefficient_archived = siemens_coefficient \ No newline at end of file + overlays += "gloves_cell" \ No newline at end of file diff --git a/code/game/objects/watercloset.dm b/code/game/objects/watercloset.dm index 9de43d384d0..28a1c24b1c1 100644 --- a/code/game/objects/watercloset.dm +++ b/code/game/objects/watercloset.dm @@ -245,12 +245,12 @@ var/mob/living/carbon/C = M if(watertemp == "freezing") - C.bodytemperature = min(100, C.bodytemperature - 80) + C.bodytemperature = max(80, C.bodytemperature - 80) C << "The water is freezing!" return if(watertemp == "boiling") - C.bodytemperature = max(500, C.bodytemperature + 35) - C.adjustFireLoss(10) + C.bodytemperature = min(500, C.bodytemperature + 35) + C.adjustFireLoss(5) C << "The water is searing!" return diff --git a/code/game/turf.dm b/code/game/turf.dm index ecbc4c0977d..51beb7c09aa 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -1868,4 +1868,3 @@ turf/simulated/floor/proc/update_icon() if(flags & NOJAUNT) return flags |= NOJAUNT - overlays += image('icons/effects/water.dmi',src,"holywater") diff --git a/code/modules/clothing/gloves.dm b/code/modules/clothing/gloves.dm index e851aae6412..57e9f4a4c08 100644 --- a/code/modules/clothing/gloves.dm +++ b/code/modules/clothing/gloves.dm @@ -6,7 +6,6 @@ protective_temperature = 400 heat_transfer_coefficient = 0.25 siemens_coefficient = 0.50 - var/siemens_coefficient_archived = 0 var/wired = 0 var/obj/item/weapon/cell/cell = 0 body_parts_covered = HANDS diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 0833dcd4e59..0a8390c33b7 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -10,7 +10,6 @@ updateicon() /obj/item/weapon/cell/proc/updateicon() - overlays = null if(charge < 0.01) @@ -68,34 +67,8 @@ call(/obj/item/clothing/gloves/space_ninja/proc/drain)("CELL",src,user:wear_suit) return -//Just because someone gets you occasionally with stun gloves doesn't mean you can put in code to kill everyone who tries to make some. /obj/item/weapon/cell/attackby(obj/item/W, mob/user) ..() -//HONK HONK GLOVES NERF -Pete -/* - var/obj/item/clothing/gloves/G = W - if(istype(G)) - // var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - // s.set_up(3, 1, src) - // s.start() - // if (prob(80+(G.siemens_coefficient*100)) && electrocute_mob(user, src, src)) - // return 1 - if(!istype(W, /obj/item/clothing/gloves/yellow)) - if(!G.wired) - user << "You run an electrical current through the gloves, but nothing happens!" - return - - if(charge < 1000) - return - - // G.siemens_coefficient = max(G.siemens_coefficient,0.3) - G.elecgen = 1 - G.uses = min(5, round(charge / 1000)) - use(G.uses*1000) - updateicon() - user << "\red These gloves are now electrically charged!" -*/ - if(istype(W, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = W diff --git a/icons/effects/water.dmi b/icons/effects/water.dmi index 33af95aff1a159d7ac90ad8ecd5c6e02b78cb57f..1cc75401fda42c076656902d28b15eec4293041f 100644 GIT binary patch literal 4816 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 literal 13227 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 ?XVO^E@WL7P@a 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