mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
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
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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')
|
||||
|
||||
87
code/game/gamemodes/events/black_hole.dm
Normal file
87
code/game/gamemodes/events/black_hole.dm
Normal file
@@ -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()
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 <B>The meter on the tank indicates you are almost out of air!</B>")
|
||||
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()
|
||||
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
if(air_contents.oxygen < 1)
|
||||
usr << text("\red <B>The meter on the tank indicates you are almost out of air!</B>")
|
||||
usr << text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
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 <B>The meter on the tank indicates you are almost out of air!</B>")
|
||||
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 <B>[] has been knocked unconscious!</B>", 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()
|
||||
..()
|
||||
|
||||
35
code/game/objects/tanks/emergency.dm
Normal file
35
code/game/objects/tanks/emergency.dm
Normal file
@@ -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 <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
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
|
||||
94
code/game/objects/tanks/jetpack.dm
Normal file
94
code/game/objects/tanks/jetpack.dm
Normal file
@@ -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 <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
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"
|
||||
32
code/game/objects/tanks/oxygen.dm
Normal file
32
code/game/objects/tanks/oxygen.dm
Normal file
@@ -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 <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
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"
|
||||
@@ -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)
|
||||
|
||||
@@ -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,15 +93,14 @@
|
||||
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)
|
||||
return
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
process()
|
||||
if(timing && (time >= 0))
|
||||
time--
|
||||
if(time <= 0)
|
||||
if(timing && time <= 0)
|
||||
timing = 0
|
||||
toggle_scan()
|
||||
time = 10
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
process()
|
||||
if(timing && (time >= 0))
|
||||
time--
|
||||
if(time <= 0)
|
||||
if(timing && time <= 0)
|
||||
timing = 0
|
||||
timer_end()
|
||||
time = 10
|
||||
|
||||
@@ -11,21 +11,21 @@
|
||||
creating_blob = 0
|
||||
|
||||
|
||||
/mob/living/blob/New()
|
||||
New()
|
||||
real_name += " [pick(rand(1, 99))]"
|
||||
name = real_name
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/blob/say(var/message)
|
||||
say(var/message)
|
||||
return//No talking for you
|
||||
|
||||
|
||||
/mob/living/blob/emote(var/act,var/m_type=1,var/message = null)
|
||||
emote(var/act,var/m_type=1,var/message = null)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/blob/Life()
|
||||
Life()
|
||||
set invisibility = 0
|
||||
set background = 1
|
||||
|
||||
@@ -35,11 +35,8 @@
|
||||
src.gib()
|
||||
|
||||
|
||||
/mob/living/blob
|
||||
proc
|
||||
|
||||
clamp_values()
|
||||
stunned = 0//No stun here
|
||||
proc/clamp_values()
|
||||
stunned = 0
|
||||
paralysis = 0
|
||||
weakened = 0
|
||||
sleeping = 0
|
||||
@@ -52,12 +49,12 @@
|
||||
return
|
||||
|
||||
|
||||
UpdateDamage()
|
||||
proc/UpdateDamage()
|
||||
health = 60 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/blob/death(gibbed)
|
||||
death(gibbed)
|
||||
if(key)
|
||||
var/mob/dead/observer/ghost = new(src)
|
||||
ghost.name = ghost_name
|
||||
@@ -68,12 +65,18 @@
|
||||
return ..(gibbed)
|
||||
|
||||
|
||||
/mob/living/blob/blob_act()
|
||||
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()
|
||||
set category = "Blob"
|
||||
set name = "Create Node"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,8 +202,7 @@
|
||||
M.animate_movement = 2
|
||||
return
|
||||
|
||||
else
|
||||
if(mob.confused)
|
||||
else if(mob.confused)
|
||||
step(mob, pick(cardinal))
|
||||
else
|
||||
. = ..()
|
||||
@@ -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++
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user