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"