From fbd0a5a9b54bd00ecfc5a6f05bf0167a1ddd7e76 Mon Sep 17 00:00:00 2001 From: "mport2004@gmail.com" Date: Sat, 5 Nov 2011 05:25:22 +0000 Subject: [PATCH] Timers will no longer go off when you set them to 0 unless they are on. Unsimulated turfs can be climbed on once more. Small blobs can use the blob to move around in space. Jetpacks now have a toggle for the stabilization. Jetpack fuel use has been reset to .01. Moved most of the tanks over to a new folder and files so they are not all crammed into one. The meteor event actually spawns more than one wave worth of meteors. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2488 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj.dm | 14 -- code/game/gamemodes/events.dm | 80 +------- code/game/gamemodes/events/black_hole.dm | 87 +++++++++ code/game/objects/items.dm | 2 +- code/game/objects/tank.dm | 172 +----------------- code/game/objects/tanks/emergency.dm | 35 ++++ code/game/objects/tanks/jetpack.dm | 94 ++++++++++ code/game/objects/tanks/oxygen.dm | 32 ++++ code/game/throwing.dm | 3 +- code/game/turf.dm | 18 +- code/modules/assembly/proximity.dm | 2 +- code/modules/assembly/timer.dm | 2 +- code/modules/mob/living/blob/blob.dm | 99 +++++----- .../mob/living/carbon/human/human_movement.dm | 7 +- code/modules/mob/mob_movement.dm | 23 ++- code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/projectile/automatic.dm | 2 +- tgstation.dme | 5 + 18 files changed, 350 insertions(+), 329 deletions(-) create mode 100644 code/game/gamemodes/events/black_hole.dm create mode 100644 code/game/objects/tanks/emergency.dm create mode 100644 code/game/objects/tanks/jetpack.dm create mode 100644 code/game/objects/tanks/oxygen.dm diff --git a/code/defines/obj.dm b/code/defines/obj.dm index b73b5c4f36..ef980d1369 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -57,20 +57,6 @@ //state = 1 for playing : default //state = 2 for observing -/obj/effect/bhole - name = "black hole" - icon = 'objects.dmi' - desc = "FUCK FUCK FUCK AAAHHH" - icon_state = "bhole2" - opacity = 0 - unacidable = 1 - density = 0 - anchored = 1 - var/datum/effect/effect/system/harmless_smoke_spread/smoke - - - - /obj/effect/beam name = "beam" unacidable = 1//Just to be sure. diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 55641843ee..e724d369e2 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -24,10 +24,10 @@ world << sound('meteors.ogg') spawn(100) meteor_wave() + spawn_meteors() + spawn(700) meteor_wave() - spawn(500) - meteor_wave() - meteor_wave() + spawn_meteors() if(2) command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert") @@ -85,80 +85,6 @@ IonStorm() -/obj/effect/bhole/New() - src.smoke = new /datum/effect/effect/system/harmless_smoke_spread() - src.smoke.set_up(5, 0, src) - src.smoke.attach(src) - src:life() - -/obj/effect/bhole/Bumped(atom/A) - if (istype(A,/mob/living)) - del(A) - else - A:ex_act(1.0) - -/obj/effect/bhole/proc/life() //Oh man , this will LAG - - if (prob(10)) - src.anchored = 0 - step(src,pick(alldirs)) - if (prob(30)) - step(src,pick(alldirs)) - src.anchored = 1 - - for (var/atom/X in orange(9,src)) - if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7)) - if (!X:anchored) - step_towards(X,src) - - for (var/atom/B in orange(7,src)) - if (istype(B,/obj)) - if (!B:anchored && prob(50)) - step_towards(B,src) - if(prob(10)) B:ex_act(3.0) - else - B:anchored = 0 - //step_towards(B,src) - //B:anchored = 1 - if(prob(10)) B:ex_act(3.0) - else if (istype(B,/turf)) - if (istype(B,/turf/simulated) && (prob(1) && prob(75))) - src.smoke.start() - B:ReplaceWithSpace() - else if (istype(B,/mob/living)) - step_towards(B,src) - - - for (var/atom/A in orange(4,src)) - if (istype(A,/obj)) - if (!A:anchored && prob(90)) - step_towards(A,src) - if(prob(30)) A:ex_act(2.0) - else - A:anchored = 0 - //step_towards(A,src) - //A:anchored = 1 - if(prob(30)) A:ex_act(2.0) - else if (istype(A,/turf)) - if (istype(A,/turf/simulated) && prob(1)) - src.smoke.start() - A:ReplaceWithSpace() - else if (istype(A,/mob/living)) - step_towards(A,src) - - - for (var/atom/D in orange(1,src)) - //if (hascall(D,"blackholed")) - // call(D,"blackholed")(null) - // continue - if (istype(D,/mob/living)) - del(D) - else - D:ex_act(1.0) - - spawn(17) - life() - /proc/power_failure() command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure") world << sound('poweroff.ogg') diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm new file mode 100644 index 0000000000..4320e444e8 --- /dev/null +++ b/code/game/gamemodes/events/black_hole.dm @@ -0,0 +1,87 @@ +/obj/effect/bhole + name = "black hole" + icon = 'objects.dmi' + desc = "FUCK FUCK FUCK AAAHHH" + icon_state = "bhole2" + opacity = 0 + unacidable = 1 + density = 0 + anchored = 1 + var/datum/effect/effect/system/harmless_smoke_spread/smoke + + +/obj/effect/bhole/New() + src.smoke = new /datum/effect/effect/system/harmless_smoke_spread() + src.smoke.set_up(5, 0, src) + src.smoke.attach(src) + src:life() + + +/obj/effect/bhole/Bumped(atom/A) + if (istype(A,/mob/living)) + del(A) + else + A:ex_act(1.0) + + +/obj/effect/bhole/proc/life() //Oh man , this will LAG + + if (prob(10)) + src.anchored = 0 + step(src,pick(alldirs)) + if (prob(30)) + step(src,pick(alldirs)) + src.anchored = 1 + + for (var/atom/X in orange(9,src)) + if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7)) + if (!X:anchored) + step_towards(X,src) + + for (var/atom/B in orange(7,src)) + if (istype(B,/obj)) + if (!B:anchored && prob(50)) + step_towards(B,src) + if(prob(10)) B:ex_act(3.0) + else + B:anchored = 0 + //step_towards(B,src) + //B:anchored = 1 + if(prob(10)) B:ex_act(3.0) + else if (istype(B,/turf)) + if (istype(B,/turf/simulated) && (prob(1) && prob(75))) + src.smoke.start() + B:ReplaceWithSpace() + else if (istype(B,/mob/living)) + step_towards(B,src) + + + for (var/atom/A in orange(4,src)) + if (istype(A,/obj)) + if (!A:anchored && prob(90)) + step_towards(A,src) + if(prob(30)) A:ex_act(2.0) + else + A:anchored = 0 + //step_towards(A,src) + //A:anchored = 1 + if(prob(30)) A:ex_act(2.0) + else if (istype(A,/turf)) + if (istype(A,/turf/simulated) && prob(1)) + src.smoke.start() + A:ReplaceWithSpace() + else if (istype(A,/mob/living)) + step_towards(A,src) + + + for (var/atom/D in orange(1,src)) + //if (hascall(D,"blackholed")) + // call(D,"blackholed")(null) + // continue + if (istype(D,/mob/living)) + del(D) + else + D:ex_act(1.0) + + spawn(17) + life() \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index aba6910e44..b8aacbd87e 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -141,7 +141,7 @@ if(W.loc == my_target) break sleep(2) - if(istype(usr.loc, /turf/space)) + if(istype(usr.loc, /turf/space)|| (user.flags & NOGRAV)) user.inertia_dir = get_dir(target, user) step(user, user.inertia_dir) diff --git a/code/game/objects/tank.dm b/code/game/objects/tank.dm index aa81000293..72d5c1c051 100644 --- a/code/game/objects/tank.dm +++ b/code/game/objects/tank.dm @@ -18,100 +18,31 @@ /obj/item/weapon/tank/anesthetic name = "Gas Tank (Sleeping Agent)" - desc = "Seriously, who uses this anymore?" + desc = "A N2O/O2 gas mix" icon_state = "anesthetic" item_state = "an_tank" -/obj/item/weapon/tank/jetpack - name = "Jetpack (Oxygen)" - desc = "A pack of jets it appears." - icon_state = "jetpack0" - var/on = 0.0 - w_class = 4.0 - item_state = "jetpack" - var/datum/effect/effect/system/ion_trail_follow/ion_trail - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - //volume = 140 //jetpack sould be larger, but then it will never deplete -rastaf0 -/obj/item/weapon/tank/jetpack/void_jetpack - name = "Void Jetpack (oxygen)" - desc = "It works well in a void." - icon_state = "voidjetpack0" - item_state = "jetpack-void" - -/obj/item/weapon/tank/jetpack/black_jetpack - name = "Black Jetpack (oxygen)" - desc = "A black model of jetpacks." - icon_state = "black_jetpack0" - item_state = "jetpack-black" - -/obj/item/weapon/tank/oxygen - name = "Gas Tank (Oxygen)" - desc = "A tank of oxygen" - icon_state = "oxygen" - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - -/obj/item/weapon/tank/oxygen/yellow - name = "Gas Tank (Oxygen)" - desc = "A tank of oxygen meant for firefighters." - icon_state = "oxygen_f" - -/obj/item/weapon/tank/oxygen/red - name = "Gas Tank (Oxygen)" - desc = "A tank of oxygen meant for firefighters." - icon_state = "oxygen_fr" - -/obj/item/weapon/tank/oxygen/examine() - set src in usr - ..() - if(air_contents.oxygen < 10) - usr << text("\red The meter on the tank indicates you are almost out of air!") - playsound(usr, 'alert.ogg', 50, 1) /obj/item/weapon/tank/air name = "Gas Tank (Air Mix)" desc = "Mixed anyone?" icon_state = "oxygen" -/obj/item/weapon/tank/air/examine() - set src in usr - ..() - if(air_contents.oxygen < 1) - usr << text("\red The meter on the tank indicates you are almost out of air!") - playsound(usr, 'alert.ogg', 50, 1) + + examine() + set src in usr + ..() + if(air_contents.oxygen < 1) + usr << text("\red The meter on the [src.name] indicates you are almost out of air!") + playsound(usr, 'alert.ogg', 50, 1) + /obj/item/weapon/tank/plasma name = "Gas Tank (BIOHAZARD)" desc = "Contains dangerous plasma. Do not inhale." icon_state = "plasma" -/obj/item/weapon/tank/emergency_oxygen - name = "emergency oxygen tank" - desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actualy need it." - icon_state = "emergency" - flags = FPRINT | TABLEPASS | ONBELT | CONDUCT - w_class = 2.0 - force = 4.0 - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) - -/obj/item/weapon/tank/emergency_oxygen/engi - icon_state = "emergency_engi" - name = "extended-capacity emergency oxygen tank" - volume = 6 //Engineers are always superior. -errorage (dangercon 2011) - -/obj/item/weapon/tank/emergency_oxygen/double - icon_state = "emergency_double" - name = "Double Emergency Oxygen Tank" - volume = 10 //These have the same emoung of gas in them as air tanks, but can be worn on your belt -errorage (dangercon 2011) - -/obj/item/weapon/tank/emergency_oxygen/examine() - set src in usr - ..() - if(air_contents.oxygen < 0.4) - usr << text("\red The meter on the tank indicates you are almost out of air!") - playsound(usr, 'alert.ogg', 50, 1) - /obj/item/weapon/tank/blob_act() if(prob(50)) @@ -265,32 +196,7 @@ else if(integrity < 3) integrity++ -/* redundant. --rastaf0 -/obj/item/weapon/tank/attack(mob/M as mob, mob/user as mob) - ..() -*/ - /* - if ((prob(30) && M.stat < 2)) - var/mob/living/carbon/human/H = M -// ******* Check - - if ((istype(H, /mob/living/carbon/human) && istype(H, /obj/item/clothing/head) && H.flags & 8 && prob(80))) - M << "\red The helmet protects you from being hit hard in the head!" - return - var/time = rand(2, 6) - if (prob(90)) - if (M.paralysis < time) - M.paralysis = time - else - if (M.stunned < time) - M.stunned = time - if(M.stat != 2) M.stat = 1 - for(var/mob/O in viewers(M, null)) - if ((O.client && !( O.blinded ))) - O << text("\red [] has been knocked unconscious!", M) - return - */ /obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -386,66 +292,6 @@ src.air_contents.nitrogen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD return -/obj/item/weapon/tank/oxygen/New() - ..() - - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - return - -/obj/item/weapon/tank/emergency_oxygen/New() - ..() - - src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - return - -/obj/item/weapon/tank/jetpack/New() - ..() - src.ion_trail = new /datum/effect/effect/system/ion_trail_follow() - src.ion_trail.set_up(src) - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - return - -/obj/item/weapon/tank/jetpack/verb/toggle() - set name = "Toggle Jetpack" - set category = "Object" - src.on = !( src.on ) - if(src.name == "Void Jetpack (oxygen)") //Slight change added by me. i didn't make it an if-elseif because some of you might want to add other types of resprited packs :3 -Agouri - src.icon_state = text("voidjetpack[]", src.on) - else if(src.name == "Black Jetpack (oxygen)") - src.icon_state = text("black_jetpack[]", src.on) - else - src.icon_state = text("jetpack[]", src.on) - if(src.on) - src.ion_trail.start() - else - src.ion_trail.stop() - return - -/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/living/user as mob) - if (!( src.on )) - return 0 - if ((num < 0.005 || src.air_contents.total_moles() < num)) - src.ion_trail.stop() - return 0 - - var/datum/gas_mixture/G = src.air_contents.remove(num) - - if (G.oxygen >= 0.005) - return 1 - if (G.toxins > 0.001) - if (user) - var/d = G.toxins / 2 - d = min(abs(user.health + 100), d, 25) - user.take_organ_damage(0,d) - return (G.oxygen >= 0.0025 ? 0.5 : 0) - else - if (G.oxygen >= 0.0025) - return 0.5 - else - return 0 - //G = null - del(G) - return /obj/item/weapon/tank/anesthetic/New() ..() diff --git a/code/game/objects/tanks/emergency.dm b/code/game/objects/tanks/emergency.dm new file mode 100644 index 0000000000..10af832592 --- /dev/null +++ b/code/game/objects/tanks/emergency.dm @@ -0,0 +1,35 @@ +/obj/item/weapon/tank/emergency_oxygen + name = "emergency oxygen tank" + desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it." + icon_state = "emergency" + flags = FPRINT | TABLEPASS | ONBELT | CONDUCT + w_class = 2.0 + force = 4.0 + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) + + + New() + ..() + src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + return + + + examine() + set src in usr + ..() + if(air_contents.oxygen < 0.4) + usr << text("\red The meter on the [src.name] indicates you are almost out of air!") + playsound(usr, 'alert.ogg', 50, 1) + + +/obj/item/weapon/tank/emergency_oxygen/engi + icon_state = "emergency_engi" + name = "extended-capacity emergency oxygen tank" + volume = 6 + + +/obj/item/weapon/tank/emergency_oxygen/double + icon_state = "emergency_double" + name = "Double Emergency Oxygen Tank" + volume = 10 diff --git a/code/game/objects/tanks/jetpack.dm b/code/game/objects/tanks/jetpack.dm new file mode 100644 index 0000000000..cf07c57349 --- /dev/null +++ b/code/game/objects/tanks/jetpack.dm @@ -0,0 +1,94 @@ + +/obj/item/weapon/tank/jetpack + name = "Jetpack (Oxygen)" + desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." + icon_state = "jetpack0" + w_class = 4.0 + item_state = "jetpack" + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + var + datum/effect/effect/system/ion_trail_follow/ion_trail + on = 0.0 + stabilization_on = 0 + + + New() + ..() + src.ion_trail = new /datum/effect/effect/system/ion_trail_follow() + src.ion_trail.set_up(src) + src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + return + + + examine() + set src in usr + ..() + if(air_contents.oxygen < 10) + usr << text("\red The meter on the [src.name] indicates you are almost out of air!") + playsound(usr, 'alert.ogg', 50, 1) + return + + + verb/toggle_rockets() + set name = "Toggle Jetpack Stabilization" + set category = "Object" + src.stabilization_on = !( src.stabilization_on ) + usr << "You toggle the stabilization [stabilization_on? "on":"off"]." + return + + + verb/toggle() + set name = "Toggle Jetpack" + set category = "Object" + src.on = !( src.on ) + if(src.name == "Void Jetpack (oxygen)") //Slight change added by me. i didn't make it an if-elseif because some of you might want to add other types of resprited packs :3 -Agouri + src.icon_state = text("voidjetpack[]", src.on) + else if(src.name == "Black Jetpack (oxygen)") + src.icon_state = text("black_jetpack[]", src.on) + else + src.icon_state = text("jetpack[]", src.on) + if(src.on) + src.ion_trail.start() + else + src.ion_trail.stop() + return + + + proc/allow_thrust(num, mob/living/user as mob) + if (!( src.on )) + return 0 + if ((num < 0.005 || src.air_contents.total_moles() < num)) + src.ion_trail.stop() + return 0 + + var/datum/gas_mixture/G = src.air_contents.remove(num) + + if (G.oxygen >= 0.005) + return 1 + if (G.toxins > 0.001) + if (user) + var/d = G.toxins / 2 + d = min(abs(user.health + 100), d, 25) + user.take_organ_damage(0,d) + return (G.oxygen >= 0.0025 ? 0.5 : 0) + else + if (G.oxygen >= 0.0025) + return 0.5 + else + return 0 + del(G) + return + + +/obj/item/weapon/tank/jetpack/void_jetpack + name = "Void Jetpack (Oxygen)" + desc = "It works well in a void." + icon_state = "voidjetpack0" + item_state = "jetpack-void" + + +/obj/item/weapon/tank/jetpack/black_jetpack + name = "Black Jetpack (Oxygen)" + desc = "A black model of jetpacks." + icon_state = "black_jetpack0" + item_state = "jetpack-black" diff --git a/code/game/objects/tanks/oxygen.dm b/code/game/objects/tanks/oxygen.dm new file mode 100644 index 0000000000..2ce809aeaa --- /dev/null +++ b/code/game/objects/tanks/oxygen.dm @@ -0,0 +1,32 @@ + +/obj/item/weapon/tank/oxygen + name = "Gas Tank (Oxygen)" + desc = "A tank of oxygen" + icon_state = "oxygen" + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + + + New() + ..() + src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + return + + + examine() + set src in usr + ..() + if(air_contents.oxygen < 10) + usr << text("\red The meter on the [src.name] indicates you are almost out of air!") + playsound(usr, 'alert.ogg', 50, 1) + + +/obj/item/weapon/tank/oxygen/yellow + name = "Gas Tank (Oxygen)" + desc = "A tank of oxygen, this one is yellow." + icon_state = "oxygen_f" + + +/obj/item/weapon/tank/oxygen/red + name = "Gas Tank (Oxygen)" + desc = "A tank of oxygen, this one is red." + icon_state = "oxygen_fr" diff --git a/code/game/throwing.dm b/code/game/throwing.dm index 0cfa256f6e..12e7696f91 100644 --- a/code/game/throwing.dm +++ b/code/game/throwing.dm @@ -64,7 +64,8 @@ item.layer = initial(item.layer) src.visible_message("\red [src] has thrown [item].") - if(istype(src.loc, /turf/space)) //they're in space, move em one space in the opposite direction + + if(istype(src.loc, /turf/space) || (src.flags & NOGRAV)) //they're in space, move em one space in the opposite direction src.inertia_dir = get_dir(target, src) step(src, inertia_dir) item.throw_at(target, item.throw_range, item.throw_speed) diff --git a/code/game/turf.dm b/code/game/turf.dm index aa84b8c5e1..756a87c200 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -77,8 +77,7 @@ if(ismob(M)) if(M.flags & NOGRAV) inertial_drift(M) - return - if(!istype(src, /turf/space)) + else if(!istype(src, /turf/space)) M:inertia_dir = 0 ..() for(var/atom/A as mob|obj|turf|area in src) @@ -94,17 +93,16 @@ return /turf/proc/inertial_drift(atom/movable/A as mob|obj) - if (!(A.last_move)) return - if ((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) + if(!(A.last_move)) return + if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) var/mob/M = A - if(M.Process_Spacemove()) return + if(M.Process_Spacemove(1)) + M.inertia_dir = 0 + return spawn(5) if((M && !(M.anchored) && (M.loc == src))) - if(M.inertia_dir) - step(M, M.inertia_dir) - else - M.inertia_dir = M.last_move - step(M, M.inertia_dir) + M.inertia_dir = M.last_move + step(M, M.inertia_dir) return /turf/proc/levelupdate() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index d9933a956c..97142fd25a 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -60,7 +60,7 @@ process() if(timing && (time >= 0)) time-- - if(time <= 0) + if(timing && time <= 0) timing = 0 toggle_scan() time = 10 diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 7a6ad00e74..18c58e3db3 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -51,7 +51,7 @@ process() if(timing && (time >= 0)) time-- - if(time <= 0) + if(timing && time <= 0) timing = 0 timer_end() time = 10 diff --git a/code/modules/mob/living/blob/blob.dm b/code/modules/mob/living/blob/blob.dm index 6530400f2e..e280d3542c 100644 --- a/code/modules/mob/living/blob/blob.dm +++ b/code/modules/mob/living/blob/blob.dm @@ -11,67 +11,70 @@ creating_blob = 0 -/mob/living/blob/New() - real_name += " [pick(rand(1, 99))]" - name = real_name - ..() + New() + real_name += " [pick(rand(1, 99))]" + name = real_name + ..() -/mob/living/blob/say(var/message) - return//No talking for you + say(var/message) + return//No talking for you -/mob/living/blob/emote(var/act,var/m_type=1,var/message = null) - return + emote(var/act,var/m_type=1,var/message = null) + return -/mob/living/blob/Life() - set invisibility = 0 - set background = 1 - - clamp_values() - UpdateDamage() - if(health < 0) - src.gib() - - -/mob/living/blob - proc + Life() + set invisibility = 0 + set background = 1 clamp_values() - stunned = 0//No stun here - paralysis = 0 - weakened = 0 - sleeping = 0 - bruteloss = max(bruteloss, 0) - toxloss = max(toxloss, 0) - oxyloss = max(oxyloss, 0) - fireloss = max(fireloss, 0) - if(stat) - stat = 0 - return - - UpdateDamage() - health = 60 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss) - return + if(health < 0) + src.gib() -/mob/living/blob/death(gibbed) - if(key) - var/mob/dead/observer/ghost = new(src) - ghost.name = ghost_name - ghost.real_name = ghost_name - ghost.key = key - if (ghost.client) - ghost.client.eye = ghost - return ..(gibbed) + proc/clamp_values() + stunned = 0 + paralysis = 0 + weakened = 0 + sleeping = 0 + bruteloss = max(bruteloss, 0) + toxloss = max(toxloss, 0) + oxyloss = max(oxyloss, 0) + fireloss = max(fireloss, 0) + if(stat) + stat = 0 + return -/mob/living/blob/blob_act() - src << "The blob attempts to reabsorb you." - toxloss += 20 - return + proc/UpdateDamage() + health = 60 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss) + return + + + death(gibbed) + if(key) + var/mob/dead/observer/ghost = new(src) + ghost.name = ghost_name + ghost.real_name = ghost_name + ghost.key = key + if (ghost.client) + ghost.client.eye = ghost + return ..(gibbed) + + + blob_act() + src << "The blob attempts to reabsorb you." + toxloss += 20 + return + + + Process_Spacemove() + if(locate(/obj/effect/blob) in oview(1,src)) + return 1 + return (..()) /mob/living/blob/verb/create_node() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 813c18fc87..4c7a9d1fba 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -1,19 +1,22 @@ -/mob/living/carbon/human/Process_Spacemove() +/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0) //Can we act if(restrained()) return 0 //Do we have a working jetpack if(istype(back, /obj/item/weapon/tank/jetpack)) var/obj/item/weapon/tank/jetpack/J = back - if(J.allow_thrust(0.005, src)) + if(check_drift && J.stabilization_on && !lying && J.allow_thrust(0.01, src)) inertia_dir = 0 return 1 + if(!check_drift && J.allow_thrust(0.01, src)) + return 1 //If no working jetpack then use the other checks if(..()) return 1 return 0 + /mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5) //If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such. if(stat) prob_slip += 50 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index add18cb400..c8d6404d89 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -140,7 +140,7 @@ if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV)) - if(!mob.Process_Spacemove()) return 0 + if(!mob.Process_Spacemove(0)) return 0 if(isobj(mob.loc) || ismob(mob.loc))//Inside an object, tell it we moved var/atom/O = mob.loc @@ -202,14 +202,13 @@ M.animate_movement = 2 return + else if(mob.confused) + step(mob, pick(cardinal)) else - if(mob.confused) - step(mob, pick(cardinal)) - else - . = ..() - for(var/obj/effect/speech_bubble/S in range(1, mob)) - if(S.parent == mob) - S.loc = mob.loc + . = ..() + for(var/obj/effect/speech_bubble/S in range(1, mob)) + if(S.parent == mob) + S.loc = mob.loc moving = 0 return . @@ -300,7 +299,7 @@ ///Called by /client/Move() ///For moving in space ///Return 1 for movement 0 for none -/mob/proc/Process_Spacemove() +/mob/proc/Process_Spacemove(var/check_drift = 0) //First check to see if we can do things if(restrained()) return 0 @@ -312,6 +311,12 @@ if((istype(turf,/turf/simulated)) && !(istype(turf,/turf/simulated/floor))) dense_object++ break + if(istype(turf,/turf/unsimulated/floor) && !(src.flags & NOGRAV)) + dense_object++ + break + if((istype(turf,/turf/unsimulated)) && !(istype(turf,/turf/unsimulated/floor))) + dense_object++ + break if(!dense_object && (locate(/obj/structure/lattice) in oview(1, src))) dense_object++ diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index d6a42c68fc..4624c000b2 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -9,13 +9,13 @@ origin_tech = "combat=3;magnets=2" projectile_type = "/obj/item/projectile/beam" + obj/item/weapon/gun/energy/laser/retro name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." - /obj/item/weapon/gun/energy/laser/captain icon_state = "caplaser" desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 074445c994..4302409803 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -24,7 +24,7 @@ /obj/item/weapon/gun/projectile/automatic/c20r name = "C-20r SMG" - desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses .12mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp" + desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses 12mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp" icon_state = "c20r" item_state = "c20r" w_class = 3.0 diff --git a/tgstation.dme b/tgstation.dme index 1040177bb9..29f2f24a9d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -75,6 +75,7 @@ #define FILE_DIR "code/game/objects/secstorage" #define FILE_DIR "code/game/objects/stacks" #define FILE_DIR "code/game/objects/storage" +#define FILE_DIR "code/game/objects/tanks" #define FILE_DIR "code/game/structure" #define FILE_DIR "code/game/verbs" #define FILE_DIR "code/js" @@ -371,6 +372,7 @@ #include "code\game\gamemodes\changeling\traitor_chan.dm" #include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult_items.dm" +#include "code\game\gamemodes\events\black_hole.dm" #include "code\game\gamemodes\events\clang.dm" #include "code\game\gamemodes\events\dust.dm" #include "code\game\gamemodes\events\kudzu.dm" @@ -668,6 +670,9 @@ #include "code\game\objects\storage\lockbox.dm" #include "code\game\objects\storage\storage.dm" #include "code\game\objects\storage\toolbox.dm" +#include "code\game\objects\tanks\emergency.dm" +#include "code\game\objects\tanks\jetpack.dm" +#include "code\game\objects\tanks\oxygen.dm" #include "code\game\structure\structure.dm" #include "code\game\verbs\AI_status.dm" #include "code\game\verbs\authorize.dm"