mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-09 06:04:23 +01:00
Merge remote-tracking branch 'upstream/master' into ContextBasedGrab
This commit is contained in:
@@ -572,9 +572,6 @@ var/global/nologevent = 0
|
||||
<A href='?src=\ref[src];quick_create_object=1'>Quick Create Object</A><br>
|
||||
<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>
|
||||
<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>
|
||||
<br><A href='?src=\ref[src];vsc=airflow'>Edit Airflow Settings</A><br>
|
||||
<A href='?src=\ref[src];vsc=plasma'>Edit Plasma Settings</A><br>
|
||||
<A href='?src=\ref[src];vsc=default'>Choose a default ZAS setting</A><br>
|
||||
"}
|
||||
|
||||
usr << browse(dat, "window=admin2;size=210x280")
|
||||
|
||||
@@ -129,8 +129,6 @@ var/list/admin_verbs_server = list(
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/ZASSettings,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
|
||||
@@ -3048,18 +3048,6 @@
|
||||
src.admincaster_signature = adminscrub(input(usr, "Provide your desired signature", "Network Identity Handler", ""))
|
||||
src.access_news_network()
|
||||
|
||||
else if(href_list["vsc"])
|
||||
if(check_rights(R_ADMIN|R_SERVER))
|
||||
if(href_list["vsc"] == "airflow")
|
||||
vsc.ChangeSettingsDialog(usr,vsc.settings)
|
||||
if(href_list["vsc"] == "plasma")
|
||||
vsc.ChangeSettingsDialog(usr,vsc.plc.settings)
|
||||
// zas_settings.ChangeSettingsDialog(usr,zas_settings.settings)
|
||||
if(href_list["vsc"] == "default")
|
||||
vsc.SetDefault(usr)
|
||||
// zas_settings.SetDefault(usr)
|
||||
// player info stuff
|
||||
|
||||
if(href_list["add_player_info"])
|
||||
var/key = href_list["add_player_info"]
|
||||
var/add = input("Add Player Info") as null|text
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
/client/proc/air_status(turf/target as turf)
|
||||
set category = "Debug"
|
||||
set name = "Display Air Status"
|
||||
|
||||
if(!isturf(target))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/GM = target.return_air()
|
||||
var/burning = 0
|
||||
if(istype(target, /turf/simulated))
|
||||
var/turf/simulated/T = target
|
||||
if(T.active_hotspot)
|
||||
burning = 1
|
||||
|
||||
usr << "\blue @[target.x],[target.y] ([GM.group_multiplier]): O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]"
|
||||
for(var/datum/gas/trace_gas in GM.trace_gases)
|
||||
usr << "[trace_gas.type]: [trace_gas.moles]"
|
||||
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/fix_next_move()
|
||||
set category = "Debug"
|
||||
set name = "Unfreeze Everyone"
|
||||
|
||||
@@ -143,10 +143,6 @@ var/intercom_range_display_status = 0
|
||||
src.verbs += /client/proc/print_jobban_old
|
||||
src.verbs += /client/proc/print_jobban_old_filter
|
||||
src.verbs += /client/proc/forceEvent
|
||||
src.verbs += /client/proc/Zone_Info
|
||||
src.verbs += /client/proc/Test_ZAS_Connection
|
||||
src.verbs += /client/proc/ZoneTick
|
||||
//src.verbs += /client/proc/TestZASRebuild
|
||||
//src.verbs += /client/proc/cmd_admin_rejuvenate
|
||||
|
||||
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -156,6 +156,7 @@
|
||||
ground_zero.assume_air(air_contents)
|
||||
ground_zero.hotspot_expose(1000, 125)
|
||||
|
||||
air_update_turf()
|
||||
if(master)
|
||||
del(master)
|
||||
del(src)
|
||||
@@ -165,4 +166,5 @@
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
T.assume_air(removed)
|
||||
T.assume_air(removed)
|
||||
air_update_turf()
|
||||
@@ -19,6 +19,10 @@
|
||||
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
|
||||
if (tank)
|
||||
tank.explode()
|
||||
if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
|
||||
if(beakerbomb)
|
||||
beakerbomb.heat_beaker()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
|
||||
+137
-208
@@ -1,5 +1,3 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
/obj/item/device/assembly/infra
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
@@ -10,173 +8,133 @@
|
||||
|
||||
bomb_name = "tripwire mine"
|
||||
|
||||
secured = 0
|
||||
|
||||
var/on = 0
|
||||
var/visible = 0
|
||||
var/obj/effect/beam/i_beam/first = null
|
||||
var/obj/effect/beam/i_beam/last = null
|
||||
|
||||
proc
|
||||
trigger_beam()
|
||||
|
||||
describe()
|
||||
return "The infrared trigger is [on?"on":"off"]."
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
on = !on
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
|
||||
toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
on = 0
|
||||
if(first) del(first)
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
/obj/item/device/assembly/infra/describe()
|
||||
return "The infrared trigger is [on?"on":"off"]."
|
||||
|
||||
/obj/item/device/assembly/infra/activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
on = !on
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
attached_overlays = list()
|
||||
if(on)
|
||||
overlays += "infrared_on"
|
||||
attached_overlays += "infrared_on"
|
||||
return 1
|
||||
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
/obj/item/device/assembly/infra/toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
on = 0
|
||||
if(first) qdel(first)
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
/obj/item/device/assembly/infra/update_icon()
|
||||
overlays.Cut()
|
||||
attached_overlays = list()
|
||||
if(on)
|
||||
overlays += "infrared_on"
|
||||
attached_overlays += "infrared_on"
|
||||
|
||||
process()//Old code
|
||||
if(!on)
|
||||
if(first)
|
||||
del(first)
|
||||
return
|
||||
if(first || !secured) return
|
||||
var/turf/T = null
|
||||
if(istype(loc,/turf))
|
||||
T = loc
|
||||
else if (holder)
|
||||
if (istype(holder.loc,/turf))
|
||||
T = holder.loc
|
||||
else if (holder.master && istype(holder.master.loc,/turf)) //for onetankbombs and other tertiary builds with assemblies
|
||||
T = holder.loc.loc
|
||||
else if(istype(loc,/obj/item/weapon/grenade) && istype(loc.loc,/turf))
|
||||
T = loc.loc
|
||||
if(T)
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
|
||||
I.master = src
|
||||
I.density = 1
|
||||
I.dir = dir
|
||||
step(I, I.dir)
|
||||
if(I)
|
||||
I.density = 0
|
||||
first = I
|
||||
I.vis_spread(visible)
|
||||
spawn(0)
|
||||
if(I)
|
||||
//world << "infra: setting limit"
|
||||
I.limit = 8
|
||||
//world << "infra: processing beam \ref[I]"
|
||||
I.process()
|
||||
return
|
||||
return
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
|
||||
attack_hand()
|
||||
del(first)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
Move()
|
||||
var/t = dir
|
||||
..()
|
||||
dir = t
|
||||
del(first)
|
||||
return
|
||||
|
||||
|
||||
holder_movement()
|
||||
if(!holder) return 0
|
||||
del(first)
|
||||
return 1
|
||||
|
||||
|
||||
trigger_beam()
|
||||
if((!secured)||(!on)||(cooldown > 0)) return 0
|
||||
pulse(0)
|
||||
visible_message("\icon[src] *beep* *beep*")
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
interact(mob/user as mob)//TODO: change this this to the wire control panel
|
||||
if(!secured) return
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
|
||||
if(holder)
|
||||
dat += "<BR>Beam direction: [dir2text(dir)] <A href='?src=\ref[src];rotate=-1'>Counter-clockwise</A> | <A href='?src=\ref[src];rotate=1'>Clockwise</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=infra")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
/obj/item/device/assembly/infra/process()
|
||||
if(!on)
|
||||
if(first)
|
||||
qdel(first)
|
||||
return
|
||||
if(!secured)
|
||||
return
|
||||
if(first && last)
|
||||
last.process()
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
|
||||
I.master = src
|
||||
I.density = 1
|
||||
I.dir = dir
|
||||
first = I
|
||||
step(I, I.dir)
|
||||
if(first)
|
||||
I.density = 0
|
||||
I.vis_spread(visible)
|
||||
I.limit = 8
|
||||
I.process()
|
||||
|
||||
if(href_list["rotate"])
|
||||
switch(href_list["rotate"])
|
||||
if("-1")
|
||||
dir = turn(dir,90)
|
||||
update_icon()
|
||||
del(first)
|
||||
if("1")
|
||||
dir = turn(dir,-90)
|
||||
update_icon()
|
||||
del(first)
|
||||
/obj/item/device/assembly/infra/attack_hand()
|
||||
qdel(first)
|
||||
..()
|
||||
return
|
||||
|
||||
if(href_list["state"])
|
||||
on = !(on)
|
||||
update_icon()
|
||||
/obj/item/device/assembly/infra/Move()
|
||||
var/t = dir
|
||||
..()
|
||||
dir = t
|
||||
qdel(first)
|
||||
return
|
||||
|
||||
if(href_list["visible"])
|
||||
visible = !(visible)
|
||||
spawn(0)
|
||||
if(first)
|
||||
first.vis_spread(visible)
|
||||
/obj/item/device/assembly/infra/holder_movement()
|
||||
if(!holder) return 0
|
||||
// dir = holder.dir
|
||||
qdel(first)
|
||||
return 1
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=infra")
|
||||
return
|
||||
/obj/item/device/assembly/infra/proc/trigger_beam()
|
||||
if((!secured)||(!on)||(cooldown > 0))
|
||||
return 0
|
||||
pulse(0)
|
||||
audible_message("\icon[src] *beep* *beep*", null, 3)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
return
|
||||
|
||||
if(usr)
|
||||
attack_self(usr)
|
||||
/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
|
||||
if(!secured) return
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=infra")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/infra/Topic(href, href_list)
|
||||
..()
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
if(href_list["state"])
|
||||
on = !(on)
|
||||
update_icon()
|
||||
if(href_list["visible"])
|
||||
visible = !(visible)
|
||||
if(first)
|
||||
first.vis_spread(visible)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=infra")
|
||||
return
|
||||
if(usr)
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
|
||||
|
||||
verb/rotate()//This could likely be better
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
dir = turn(dir, 90)
|
||||
return
|
||||
dir = turn(dir, 90)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -187,41 +145,30 @@
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "ibeam"
|
||||
var/obj/effect/beam/i_beam/next = null
|
||||
var/obj/effect/beam/i_beam/previous = null
|
||||
var/obj/item/device/assembly/infra/master = null
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
anchored = 1.0
|
||||
flags = 0
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
//world << "beam \ref[src]: hit"
|
||||
if(master)
|
||||
//world << "beam hit \ref[src]: calling master \ref[master].hit"
|
||||
master.trigger_beam()
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/proc/vis_spread(v)
|
||||
//world << "i_beam \ref[src] : vis_spread"
|
||||
visible = v
|
||||
spawn(0)
|
||||
if(next)
|
||||
//world << "i_beam \ref[src] : is next [next.type] \ref[next], calling spread"
|
||||
next.vis_spread(v)
|
||||
return
|
||||
return
|
||||
if(next)
|
||||
next.vis_spread(v)
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/process()
|
||||
//world << "i_beam \ref[src] : process"
|
||||
|
||||
if((loc.density || !(master)))
|
||||
// world << "beam hit loc [loc] or no master [master], deleting"
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
//world << "proccess: [src.left] left"
|
||||
|
||||
if(left > 0)
|
||||
left--
|
||||
if(left < 1)
|
||||
@@ -232,58 +179,40 @@
|
||||
else
|
||||
invisibility = 0
|
||||
|
||||
|
||||
//world << "now [src.left] left"
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc)
|
||||
I.master = master
|
||||
I.density = 1
|
||||
I.dir = dir
|
||||
//world << "created new beam \ref[I] at [I.x] [I.y] [I.z]"
|
||||
step(I, I.dir)
|
||||
|
||||
if(I)
|
||||
//world << "step worked, now at [I.x] [I.y] [I.z]"
|
||||
if(!(next))
|
||||
//world << "no next"
|
||||
if(!next && (limit > 0))
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc)
|
||||
I.master = master
|
||||
I.density = 1
|
||||
I.dir = dir
|
||||
I.previous = src
|
||||
next = I
|
||||
step(I, I.dir)
|
||||
if(next)
|
||||
I.density = 0
|
||||
//world << "spreading"
|
||||
I.vis_spread(visible)
|
||||
next = I
|
||||
spawn(0)
|
||||
//world << "limit = [limit] "
|
||||
if((I && limit > 0))
|
||||
I.limit = limit - 1
|
||||
//world << "calling next process"
|
||||
I.process()
|
||||
return
|
||||
else
|
||||
//world << "is a next: \ref[next], deleting beam \ref[I]"
|
||||
del(I)
|
||||
else
|
||||
//world << "step failed, deleting \ref[next]"
|
||||
del(next)
|
||||
spawn(10)
|
||||
process()
|
||||
return
|
||||
return
|
||||
I.limit = limit - 1
|
||||
master.last = I
|
||||
I.process()
|
||||
|
||||
/obj/effect/beam/i_beam/Bump()
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/Bumped()
|
||||
hit()
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
|
||||
if(istype(AM, /obj/effect/beam))
|
||||
return
|
||||
spawn(0)
|
||||
hit()
|
||||
return
|
||||
return
|
||||
hit()
|
||||
|
||||
/obj/effect/beam/i_beam/Destroy()
|
||||
del(next)
|
||||
..()
|
||||
return
|
||||
if(master.first == src)
|
||||
master.first = null
|
||||
if(next)
|
||||
qdel(next)
|
||||
next = null
|
||||
if(previous)
|
||||
previous.next = null
|
||||
master.last = previous
|
||||
..()
|
||||
@@ -53,6 +53,7 @@
|
||||
affecting = H.get_organ(type)
|
||||
H.Stun(3)
|
||||
if(affecting)
|
||||
affecting.take_damage(1, 0)
|
||||
H.updatehealth()
|
||||
else if(ismouse(target))
|
||||
var/mob/living/simple_animal/mouse/M = target
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Because you really needed another excuse to punch your crewmates."
|
||||
icon_state = "boxing"
|
||||
item_state = "boxing"
|
||||
species_restricted = null
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
/obj/item/clothing/gloves/ring
|
||||
name = "iron ring"
|
||||
desc = "A band that goes around your finger. It's considered gauche to wear more than one."
|
||||
gender = "neuter" // not plural anymore
|
||||
transfer_prints = TRUE
|
||||
icon_state = "ironring"
|
||||
item_state = ""
|
||||
icon = 'icons/obj/clothing/rings.dmi'
|
||||
var/material = "iron"
|
||||
var/stud = 0
|
||||
species_restricted = null
|
||||
|
||||
New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
if(stud)
|
||||
icon_state = "d_[initial(icon_state)]"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
examine()
|
||||
..()
|
||||
usr << "This one is made of [material]."
|
||||
if(stud)
|
||||
usr << "It is adorned with a single gem."
|
||||
|
||||
/obj/item/clothing/gloves/ring/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/stack/sheet/mineral/diamond))
|
||||
var/obj/item/stack/sheet/mineral/diamond/D = I
|
||||
if(stud)
|
||||
usr << "<span class='notice'>The [src] already has a gem.</span>"
|
||||
else
|
||||
if(D.amount >= 1)
|
||||
D.use(1)
|
||||
stud = 1
|
||||
update_icon()
|
||||
usr << "<span class='notice'>You socket the diamond into the [src].</span>"
|
||||
|
||||
// s'pensive
|
||||
/obj/item/clothing/gloves/ring/silver
|
||||
name = "silver ring"
|
||||
icon_state = "silverring"
|
||||
material = "silver"
|
||||
|
||||
/obj/item/clothing/gloves/ring/silver/blessed // todo
|
||||
name = "blessed silver ring"
|
||||
|
||||
/obj/item/clothing/gloves/ring/gold
|
||||
name = "gold ring"
|
||||
icon_state = "goldring"
|
||||
material = "gold"
|
||||
|
||||
/obj/item/clothing/gloves/ring/gold/blessed
|
||||
name = "wedding band"
|
||||
|
||||
// cheap
|
||||
/obj/item/clothing/gloves/ring/plastic
|
||||
name = "white plastic ring"
|
||||
icon_state = "whitering"
|
||||
material = "plastic"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/blue
|
||||
name = "blue plastic ring"
|
||||
icon_state = "bluering"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/red
|
||||
name = "red plastic ring"
|
||||
icon_state = "redring"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/random
|
||||
New()
|
||||
var/c = pick("white","blue","red")
|
||||
name = "[c] plastic ring"
|
||||
icon_state = "[c]ring"
|
||||
|
||||
// weird
|
||||
/obj/item/clothing/gloves/ring/glass
|
||||
name = "glass ring"
|
||||
icon_state = "whitering"
|
||||
material = "glass"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plasma
|
||||
name = "plasma ring"
|
||||
icon_state = "plasmaring"
|
||||
material = "plasma"
|
||||
|
||||
/obj/item/clothing/gloves/ring/uranium
|
||||
name = "uranium ring"
|
||||
icon_state = "uraniumring"
|
||||
material = "uranium"
|
||||
|
||||
// cultish
|
||||
/obj/item/clothing/gloves/ring/shadow
|
||||
name = "shadow ring"
|
||||
icon_state = "shadowring"
|
||||
material = "shadows"
|
||||
@@ -7,3 +7,4 @@
|
||||
else
|
||||
biomass_infestation()
|
||||
spacevines_spawned = 1
|
||||
v
|
||||
@@ -20,8 +20,6 @@
|
||||
opacity = 1
|
||||
var/health = 50
|
||||
|
||||
autoignition_temperature = AUTOIGNITION_WOOD
|
||||
|
||||
/obj/structure/bookcase/initialize()
|
||||
for(var/obj/item/I in loc)
|
||||
if(istype(I, /obj/item/weapon/book))
|
||||
@@ -151,8 +149,6 @@
|
||||
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
|
||||
attack_verb = list("bashed", "whacked", "educated")
|
||||
|
||||
autoignition_temperature = AUTOIGNITION_PAPER
|
||||
|
||||
var/dat // Actual page content
|
||||
var/due_date = 0 // Game time in 1/10th seconds
|
||||
var/author // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
|
||||
@@ -101,6 +101,19 @@
|
||||
overlays = list()
|
||||
string_attached = null
|
||||
user << "<span class='notice'>You detach the string from the coin.</span>"
|
||||
else if(istype(W,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.welding && WT.remove_fuel(0, user))
|
||||
var/typelist = list("iron" = /obj/item/clothing/gloves/ring,
|
||||
"silver" = /obj/item/clothing/gloves/ring/silver,
|
||||
"gold" = /obj/item/clothing/gloves/ring/gold,
|
||||
"plasma" = /obj/item/clothing/gloves/ring/plasma,
|
||||
"uranium" = /obj/item/clothing/gloves/ring/uranium)
|
||||
var/typekey = typelist[cmineral]
|
||||
if(ispath(typekey))
|
||||
user << "\blue You make [src] into a ring."
|
||||
new typekey(get_turf(loc))
|
||||
qdel(src)
|
||||
else ..()
|
||||
|
||||
/obj/item/weapon/coin/attack_self(mob/user as mob)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = TCMB
|
||||
temperature = T0C
|
||||
var/mineral/mineral
|
||||
var/mined_ore = 0
|
||||
var/last_act = 0
|
||||
@@ -392,7 +392,7 @@
|
||||
icon_state = "asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
temperature = T0C
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
has_resources = 1
|
||||
|
||||
@@ -505,7 +505,7 @@
|
||||
if(L == default_language)
|
||||
dat += "<b>[L.name] (:[L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
|
||||
else
|
||||
dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||
dat += "<b>[L.name] (:[L.key])</b> - <a href=\"byond://?src=\ref[src];default_lang=[L]\">set default</a><br/>[L.desc]<br/><br/>"
|
||||
|
||||
src << browse(dat, "window=checklanguage")
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up!
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/IsAdvancedToolUser()
|
||||
return has_fine_manipulation
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
//First, resolve location and get a breath
|
||||
|
||||
if(air_master.current_cycle%4==2)
|
||||
if(mob_master.current_cycle%4==2)
|
||||
//Only try to take a breath every 4 seconds, unless suffocating
|
||||
spawn(0) breathe()
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
update_fire()
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/update_hud()
|
||||
//TODO
|
||||
if (client)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
amount_grown++
|
||||
|
||||
//First, resolve location and get a breath
|
||||
if(air_master.current_cycle%4==2)
|
||||
if(mob_master.current_cycle%4==2)
|
||||
//Only try to take a breath every 4 seconds, unless suffocating
|
||||
spawn(0) breathe()
|
||||
else //Still give containing object the chance to interact
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
stomach_contents.Remove(M)
|
||||
qdel(M)
|
||||
continue
|
||||
if(air_master.current_cycle%3==1)
|
||||
if(mob_master.current_cycle%3==1)
|
||||
if(!(M.status_flags & GODMODE))
|
||||
M.adjustBruteLoss(5)
|
||||
nutrition += 10
|
||||
|
||||
@@ -65,7 +65,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
Die()
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/facehugger/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
/obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
Die()
|
||||
return
|
||||
|
||||
@@ -439,7 +439,12 @@ mob/living
|
||||
|
||||
|
||||
item.throw_at(target, item.throw_range, item.throw_speed, src)
|
||||
|
||||
/*
|
||||
/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
src.IgniteMob()
|
||||
bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10)
|
||||
*/
|
||||
/mob/living/carbon/can_use_hands()
|
||||
if(handcuffed)
|
||||
return 0
|
||||
|
||||
@@ -13,6 +13,11 @@
|
||||
|
||||
playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10)
|
||||
|
||||
for(var/obj/item/organ/I in internal_organs)
|
||||
if(istype(loc,/turf))
|
||||
I.removed(src)
|
||||
I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5)
|
||||
|
||||
for(var/obj/item/organ/external/E in src.organs)
|
||||
if(istype(E, /obj/item/organ/external/chest))
|
||||
continue
|
||||
|
||||
@@ -226,7 +226,6 @@
|
||||
usr << "<span class='deadsay'>[t_He] has a pulse!</span>"
|
||||
|
||||
msg += "<span class='warning'>"
|
||||
|
||||
if(fire_stacks > 0)
|
||||
msg += "[t_He] [t_is] covered in something flammable.\n"
|
||||
if(fire_stacks < 0)
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,1,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,1,0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
var/update = 0
|
||||
var/weapon_message = "Explosive Blast"
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
switch(temp.name)
|
||||
switch(temp.limb_name)
|
||||
if("head")
|
||||
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
|
||||
if("chest")
|
||||
|
||||
@@ -82,5 +82,5 @@
|
||||
|
||||
var/frozen = 0 //used for preventing attacks on admin-frozen people
|
||||
|
||||
fire_dmi = 'icons/mob/OnFire.dmi'
|
||||
fire_sprite = "Standing"
|
||||
var/fire_dmi = 'icons/mob/OnFire.dmi'
|
||||
var/fire_sprite = "Standing"
|
||||
@@ -74,7 +74,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
//No need to update all of these procs if the guy is dead.
|
||||
if(stat != DEAD && !in_stasis)
|
||||
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
|
||||
if(mob_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
|
||||
breathe() //Only try to take a breath every 4 ticks, unless suffocating
|
||||
|
||||
else //Still give containing object the chance to interact
|
||||
@@ -371,7 +371,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
breath = loc.remove_air(breath_moles)
|
||||
|
||||
if(!is_lung_ruptured())
|
||||
if(!breath || breath.total_moles < BREATH_MOLES / 5 || breath.total_moles > BREATH_MOLES * 5)
|
||||
if(!breath || breath.total_moles() < BREATH_MOLES / 5 || breath.total_moles() > BREATH_MOLES * 5)
|
||||
if(prob(5))
|
||||
rupture_lung()
|
||||
|
||||
@@ -382,8 +382,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
handle_breath(breath)
|
||||
|
||||
if(species.name=="Plasmaman")
|
||||
|
||||
if(species.name=="Plasmaman") //this is stupid as fuck
|
||||
// Check if we're wearing our biosuit and mask.
|
||||
if (!istype(wear_suit,/obj/item/clothing/suit/space/eva/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
//testing("Plasmaman [src] leakin'. coverflags=[cover_flags]")
|
||||
@@ -548,6 +547,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
return
|
||||
//END FIRE CODE
|
||||
|
||||
|
||||
/*
|
||||
proc/adjust_body_temperature(current, loc_temp, boost)
|
||||
var/temperature = current
|
||||
@@ -728,12 +728,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
alien = species.reagent_tag
|
||||
reagents.metabolize(src,alien)
|
||||
|
||||
var/total_plasmaloss = 0
|
||||
for(var/obj/item/I in src)
|
||||
if(I.contaminated)
|
||||
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
|
||||
if(!(status_flags & GODMODE)) adjustToxLoss(total_plasmaloss)
|
||||
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(species.flags & REQUIRE_LIGHT)
|
||||
@@ -1418,7 +1412,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
stomach_contents.Remove(M)
|
||||
del(M)
|
||||
continue
|
||||
if(air_master.current_cycle%3==1)
|
||||
if(mob_master.current_cycle%3==1)
|
||||
if(!(M.status_flags & GODMODE))
|
||||
M.adjustBruteLoss(5)
|
||||
nutrition += 10
|
||||
|
||||
@@ -324,10 +324,10 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
//Underwear
|
||||
if(underwear && species.flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear), ICON_OVERLAY)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
|
||||
if(undershirt && species.flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', undershirt), ICON_OVERLAY)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "undershirt[undershirt]_s"), ICON_OVERLAY)
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
@@ -460,16 +460,13 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_fire()
|
||||
|
||||
remove_overlay(FIRE_LAYER)
|
||||
if(on_fire)
|
||||
overlays_standing[FIRE_LAYER] = image("icon"=fire_dmi, "icon_state"=fire_sprite, "layer"=-FIRE_LAYER)
|
||||
else
|
||||
overlays_standing[FIRE_LAYER] = null
|
||||
|
||||
apply_overlay(FIRE_LAYER)
|
||||
|
||||
|
||||
/* --------------------------------------- */
|
||||
//For legacy support.
|
||||
/mob/living/carbon/human/regenerate_icons()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
if (stat != DEAD)
|
||||
if(!istype(src,/mob/living/carbon/monkey/diona)) //still breathing
|
||||
//First, resolve location and get a breath
|
||||
if(air_master.current_cycle%4==2)
|
||||
if(mob_master.current_cycle%4==2)
|
||||
//Only try to take a breath every 4 seconds, unless suffocating
|
||||
breathe()
|
||||
else //Still give containing object the chance to interact
|
||||
@@ -266,7 +266,7 @@
|
||||
if(status_flags & GODMODE)
|
||||
return
|
||||
|
||||
if(!breath || (breath.total_moles == 0))
|
||||
if(!breath || (breath.total_moles() == 0))
|
||||
adjustOxyLoss(7)
|
||||
|
||||
oxygen_alert = max(oxygen_alert, 1)
|
||||
@@ -660,4 +660,4 @@
|
||||
return
|
||||
adjustFireLoss(6)
|
||||
return
|
||||
//END FIRE CODE
|
||||
//END FIRE CODE
|
||||
@@ -221,6 +221,7 @@
|
||||
if(H.reagents)
|
||||
H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
H.toxins_alert = max(H.toxins_alert, 1)
|
||||
|
||||
else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox.
|
||||
var/ratio = (breath.oxygen/vox_oxygen_max) * 1000
|
||||
H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
|
||||
+308
-237
@@ -460,6 +460,9 @@
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
|
||||
/*//////////////////////
|
||||
START RESIST PROCS
|
||||
*///////////////////////
|
||||
|
||||
/mob/living/verb/resist()
|
||||
set name = "Resist"
|
||||
@@ -473,259 +476,327 @@
|
||||
|
||||
//Getting out of someone's inventory.
|
||||
if(istype(src.loc,/obj/item/weapon/holder))
|
||||
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
|
||||
var/mob/M = H.loc //Get our mob holder (if any).
|
||||
|
||||
if(istype(M))
|
||||
M.unEquip(H)
|
||||
M << "[H] wriggles out of your grip!"
|
||||
src << "You wriggle out of [M]'s grip!"
|
||||
else if(istype(H.loc,/obj/item))
|
||||
src << "You struggle free of [H.loc]."
|
||||
H.loc = get_turf(H)
|
||||
|
||||
if(istype(M))
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
return
|
||||
resist_holder()
|
||||
|
||||
//Resisting control by an alien mind.
|
||||
if(istype(src.loc,/mob/living/simple_animal/borer))
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
var/mob/living/captive_brain/H = src
|
||||
|
||||
H << "\red <B>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</B>"
|
||||
B.host << "\red <B>You feel the captive mind of [src] begin to resist your control.</B>"
|
||||
|
||||
spawn(rand(350,450)+B.host.brainloss)
|
||||
|
||||
if(!B || !B.controlling)
|
||||
return
|
||||
|
||||
B.host.adjustBrainLoss(rand(5,10))
|
||||
H << "\red <B>With an immense exertion of will, you regain control of your body!</B>"
|
||||
B.host << "\red <B>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</b>"
|
||||
|
||||
B.detatch()
|
||||
|
||||
verbs -= /mob/living/carbon/proc/release_control
|
||||
verbs -= /mob/living/carbon/proc/punish_host
|
||||
verbs -= /mob/living/carbon/proc/spawn_larvae
|
||||
|
||||
return
|
||||
resist_borer()
|
||||
|
||||
//resisting grabs (as if it helps anyone...)
|
||||
if ((!( L.stat ) && !( L.restrained() )))
|
||||
var/resisting = 0
|
||||
for(var/obj/O in L.requests)
|
||||
L.requests.Remove(O)
|
||||
del(O)
|
||||
resisting++
|
||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||
resisting++
|
||||
if (G.state == 1)
|
||||
del(G)
|
||||
else
|
||||
if (G.state == 2)
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message(text("\red [] has broken free of []'s grip!", L, G.assailant), 1)
|
||||
del(G)
|
||||
else
|
||||
if (G.state == 3)
|
||||
if (prob(5))
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red [] has broken free of []'s headlock!", L, G.assailant), 1)
|
||||
del(G)
|
||||
if(resisting)
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red <B>[] resists!</B>", L), 1)
|
||||
|
||||
if ((!(L.stat) && !(L.restrained())))
|
||||
resist_grab(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
|
||||
|
||||
//unbuckling yourself
|
||||
if(L.buckled && (L.last_special <= world.time) )
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
if( C.handcuffed )
|
||||
C.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
C.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(L))
|
||||
O.show_message("\red <B>[usr] attempts to unbuckle themself!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!C.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(C))
|
||||
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
|
||||
C << "\blue You successfully unbuckle yourself."
|
||||
C.buckled.manual_unbuckle(C)
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
resist_buckle(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
|
||||
|
||||
//Breaking out of a locker?
|
||||
else if( src.loc && (istype(src.loc, /obj/structure/closet)) )
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
|
||||
var/obj/structure/closet/C = L.loc
|
||||
if(C.opened)
|
||||
return //Door's open... wait, why are you in it's contents then?
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
|
||||
else
|
||||
if(!C.welded)
|
||||
return //closed but not welded...
|
||||
// else Meh, lets just keep it at 2 minutes for now
|
||||
// breakout_time++ //Harder to get out of welded lockers than locked lockers
|
||||
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
L.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
L.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
|
||||
for(var/mob/O in viewers(usr.loc))
|
||||
O.show_message("\red <B>The [L.loc] begins to shake violently!</B>", 1)
|
||||
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
|
||||
return
|
||||
|
||||
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return
|
||||
else
|
||||
if(!C.welded)
|
||||
return
|
||||
|
||||
//Well then break it!
|
||||
if(istype(usr.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
SC.desc = "It appears to be broken."
|
||||
SC.icon_state = SC.icon_off
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
SC.broken = 1
|
||||
SC.locked = 0
|
||||
SC.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [SC]!</B>", 1)
|
||||
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = SC.loc
|
||||
BD.attack_hand(usr)
|
||||
SC.open()
|
||||
else
|
||||
C.welded = 0
|
||||
C.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [C]!</B>", 1)
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
else if(src.loc && (istype(src.loc, /obj/structure/closet)))
|
||||
resist_closet()
|
||||
|
||||
//breaking out of handcuffs
|
||||
else if(iscarbon(L))
|
||||
var/mob/living/carbon/CM = L
|
||||
if(CM.on_fire && CM.canmove)
|
||||
CM.fire_stacks -= 5
|
||||
CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
|
||||
CM.update_canmove()
|
||||
CM.spin(32,2)
|
||||
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
|
||||
usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] is trying to break the handcuffs!</B>", CM), 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, 50))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] manages to break the handcuffs!</B>", CM), 1)
|
||||
CM << "\red You successfully break your handcuffs."
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
CM.update_inv_handcuffed()
|
||||
else
|
||||
var/obj/item/weapon/restraints/handcuffs/HC = CM.handcuffed
|
||||
var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/restraints/handcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to remove the handcuffs!</B>", 1)
|
||||
CM << "\blue You successfully remove \the [CM.handcuffed]."
|
||||
CM.unEquip(CM.handcuffed)
|
||||
|
||||
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
|
||||
usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] is trying to break the legcuffs!</B>", CM), 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, 50))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] manages to break the legcuffs!</B>", CM), 1)
|
||||
CM << "\red You successfully break your legcuffs."
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.legcuffed)
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
if(CM.on_fire && CM.canmove)
|
||||
resist_stop_drop_roll(CM) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
|
||||
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))//this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
resist_handcuffs(CM)
|
||||
|
||||
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time)) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
resist_legcuffs(CM)
|
||||
|
||||
/*////////////////////
|
||||
RESIST SUBPROCS
|
||||
*/////////////////////
|
||||
|
||||
/* resist_holder allows small mobs that can be picked up to get out of their holder, so they aren't stuck forever.
|
||||
*/////
|
||||
/mob/living/proc/resist_holder()
|
||||
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
|
||||
var/mob/M = H.loc //Get our mob holder (if any).
|
||||
|
||||
if(istype(M))
|
||||
M.unEquip(H)
|
||||
M << "[H] wriggles out of your grip!"
|
||||
src << "You wriggle out of [M]'s grip!"
|
||||
else if(istype(H.loc,/obj/item))
|
||||
src << "You struggle free of [H.loc]."
|
||||
H.loc = get_turf(H)
|
||||
|
||||
if(istype(M))
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
return
|
||||
|
||||
/* resist_borer allows a mob to regain control of their body after a borer has assumed control.
|
||||
*/////
|
||||
/mob/living/proc/resist_borer()
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
var/mob/living/captive_brain/H = src
|
||||
|
||||
H << "\red <B>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</B>"
|
||||
B.host << "\red <B>You feel the captive mind of [src] begin to resist your control.</B>"
|
||||
|
||||
spawn(rand(350,450)+B.host.brainloss)
|
||||
|
||||
if(!B || !B.controlling)
|
||||
return
|
||||
|
||||
B.host.adjustBrainLoss(rand(5,10))
|
||||
H << "\red <B>With an immense exertion of will, you regain control of your body!</B>"
|
||||
B.host << "\red <B>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</b>"
|
||||
|
||||
B.detatch()
|
||||
|
||||
verbs -= /mob/living/carbon/proc/release_control
|
||||
verbs -= /mob/living/carbon/proc/punish_host
|
||||
verbs -= /mob/living/carbon/proc/spawn_larvae
|
||||
|
||||
return
|
||||
|
||||
/* resist_grab allows a mob to resist a grab from another mob when disarming is not an option/neckgrabbed.
|
||||
*/////
|
||||
/mob/living/proc/resist_grab(var/mob/living/L)
|
||||
var/resisting = 0
|
||||
|
||||
for(var/obj/O in L.requests)
|
||||
L.requests.Remove(O)
|
||||
del(O)
|
||||
resisting++
|
||||
|
||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||
resisting++
|
||||
if (G.state == 1)
|
||||
del(G)
|
||||
|
||||
else
|
||||
if(G.state == 2)
|
||||
if(prob(25))
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message(text("\red [] has broken free of []'s grip!", L, G.assailant), 1)
|
||||
del(G)
|
||||
|
||||
else
|
||||
var/obj/item/weapon/restraints/legcuffs/HC = CM.legcuffed
|
||||
var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to remove the legcuffs!</B>", 1)
|
||||
CM << "\blue You successfully remove \the [CM.legcuffed]."
|
||||
CM.unEquip(CM.legcuffed)
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
if(G.state == 3)
|
||||
if(prob(5))
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red [] has broken free of []'s headlock!", L, G.assailant), 1)
|
||||
del(G)
|
||||
|
||||
if(resisting)
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red <B>[] resists!</B>", L), 1)
|
||||
|
||||
/* resist_buckle allows a mob that is bucklecuffed to break free of the chair/bed/whatever
|
||||
*/////
|
||||
/mob/living/proc/resist_buckle(var/mob/living/L)
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
|
||||
if(C.handcuffed)
|
||||
C.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
C.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
|
||||
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stay still)</span>"
|
||||
for(var/mob/O in viewers(L))
|
||||
O.show_message("\red <B>[usr] attempts to unbuckle themself!</B>", 1)
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!C.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(C))
|
||||
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
|
||||
C << "\blue You successfully unbuckle yourself."
|
||||
C.buckled.manual_unbuckle(C)
|
||||
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
|
||||
/* resist_closet() allows a mob to break out of a welded/locked closet
|
||||
*/////
|
||||
/mob/living/proc/resist_closet()
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
var/mob/living/L = src
|
||||
var/obj/structure/closet/C = L.loc
|
||||
if(C.opened)
|
||||
return //Door's open... wait, why are you in it's contents then?
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
|
||||
else
|
||||
if(!C.welded)
|
||||
return //closed but not welded...
|
||||
// else Meh, lets just keep it at 2 minutes for now
|
||||
// breakout_time++ //Harder to get out of welded lockers than locked lockers
|
||||
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
L.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
L.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
|
||||
for(var/mob/O in viewers(usr.loc))
|
||||
O.show_message("\red <B>The [L.loc] begins to shake violently!</B>", 1)
|
||||
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
|
||||
return
|
||||
|
||||
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return
|
||||
else
|
||||
if(!C.welded)
|
||||
return
|
||||
|
||||
//Well then break it!
|
||||
if(istype(usr.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
SC.desc = "It appears to be broken."
|
||||
SC.icon_state = SC.icon_off
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
SC.broken = 1
|
||||
SC.locked = 0
|
||||
SC.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [SC]!</B>", 1)
|
||||
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = SC.loc
|
||||
BD.attack_hand(usr)
|
||||
SC.open()
|
||||
else
|
||||
C.welded = 0
|
||||
C.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [C]!</B>", 1)
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
|
||||
/* resist_stop_drop_roll allows a mob to stop, drop, and roll in order to put out a fire burning on them.
|
||||
*/////
|
||||
/mob/living/proc/resist_stop_drop_roll(var/mob/living/carbon/CM)
|
||||
CM.fire_stacks -= 5
|
||||
CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
|
||||
CM.update_canmove()
|
||||
CM.spin(32,2)
|
||||
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
|
||||
/* resist_handcuffs allows a mob to break/remove their handcuffs after a delay
|
||||
*/////
|
||||
/mob/living/proc/resist_handcuffs(var/mob/living/carbon/CM)
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
var/obj/item/weapon/restraints/handcuffs/HC = CM.handcuffed
|
||||
|
||||
var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/restraints/handcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
|
||||
var/hulklien = 0 //variable used to define if someone is a hulk or alien
|
||||
|
||||
if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))
|
||||
hulklien = 1
|
||||
breakouttime = 50
|
||||
displaytime = 5
|
||||
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to [hulklien ? "break" : "remove"] the handcuffs!</B>", 1)
|
||||
|
||||
CM << "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.handcuffed]."
|
||||
|
||||
if(hulklien)
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
CM.update_inv_handcuffed()
|
||||
return
|
||||
|
||||
CM.unEquip(CM.handcuffed)
|
||||
|
||||
/* resist_legcuffs allows a mob to break/remove their legcuffs after a delay
|
||||
*/////
|
||||
/mob/living/proc/resist_legcuffs(var/mob/living/carbon/CM)
|
||||
var/obj/item/weapon/restraints/legcuffs/HC = CM.legcuffed
|
||||
|
||||
var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
|
||||
var/hulklien = 0 //variable used to define if someone is a hulk or alien
|
||||
|
||||
if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))
|
||||
hulklien = 1
|
||||
breakouttime = 50
|
||||
displaytime = 5
|
||||
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)"
|
||||
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!</B>", 1)
|
||||
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to [hulklien ? "break" : "remove"] the legcuffs!</B>", 1)
|
||||
|
||||
CM << "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.legcuffed]."
|
||||
|
||||
if(!hulklien)
|
||||
CM.unEquip(CM.legcuffed)
|
||||
|
||||
if(hulklien)
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
qdel(CM.legcuffed)
|
||||
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
|
||||
/*//////////////////////
|
||||
END RESIST PROCS
|
||||
*///////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/proc/spin(spintime, speed)
|
||||
spawn()
|
||||
|
||||
@@ -199,29 +199,9 @@
|
||||
|
||||
return
|
||||
|
||||
//This is called when the mob is thrown into a dense turf
|
||||
/mob/living/proc/turf_collision(var/turf/T, var/speed)
|
||||
src.take_organ_damage(speed*5)
|
||||
|
||||
/mob/living/proc/near_wall(var/direction,var/distance=1)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/turf/last_turf = src.loc
|
||||
var/i = 1
|
||||
|
||||
while(i>0 && i<=distance)
|
||||
if(T.density) //Turf is a wall!
|
||||
return last_turf
|
||||
i++
|
||||
last_turf = T
|
||||
T = get_step(T,direction)
|
||||
|
||||
return 0
|
||||
|
||||
// End BS12 momentum-transfer code.
|
||||
|
||||
//Mobs on Fire
|
||||
/mob/living/proc/IgniteMob()
|
||||
if(fire_stacks > 0)
|
||||
if(fire_stacks > 0 && !on_fire)
|
||||
on_fire = 1
|
||||
src.AddLuminosity(3)
|
||||
update_fire()
|
||||
@@ -237,7 +217,7 @@
|
||||
return
|
||||
|
||||
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
|
||||
fire_stacks = Clamp(fire_stacks + add_fire_stacks, min = -20, max = 20)
|
||||
fire_stacks = Clamp(fire_stacks + add_fire_stacks, min = -20, max = 20)
|
||||
|
||||
/mob/living/proc/handle_fire()
|
||||
if(fire_stacks < 0)
|
||||
@@ -258,6 +238,26 @@
|
||||
|
||||
//Mobs on Fire end
|
||||
|
||||
//This is called when the mob is thrown into a dense turf
|
||||
/mob/living/proc/turf_collision(var/turf/T, var/speed)
|
||||
src.take_organ_damage(speed*5)
|
||||
|
||||
/mob/living/proc/near_wall(var/direction,var/distance=1)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/turf/last_turf = src.loc
|
||||
var/i = 1
|
||||
|
||||
while(i>0 && i<=distance)
|
||||
if(T.density) //Turf is a wall!
|
||||
return last_turf
|
||||
i++
|
||||
last_turf = T
|
||||
T = get_step(T,direction)
|
||||
|
||||
return 0
|
||||
|
||||
// End BS12 momentum-transfer code.
|
||||
|
||||
/mob/living/proc/grabbedby(mob/living/carbon/user,var/supress_message = 0)
|
||||
if(user == src || anchored)
|
||||
return 0
|
||||
|
||||
@@ -36,9 +36,11 @@
|
||||
var/cameraFollow = null
|
||||
|
||||
var/tod = null // Time of death
|
||||
var/update_slimes = 1
|
||||
on_fire = 0 //The "Are we on fire?" var
|
||||
|
||||
var/on_fire = 0 //The "Are we on fire?" var
|
||||
var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20
|
||||
|
||||
var/update_slimes = 1
|
||||
var/specialsauce = 0 //Has this person consumed enough special sauce? IF so they're a ticking time bomb of death.
|
||||
var/implanting = 0 //Used for the mind-slave implant
|
||||
var/silent = null //Can't talk. Value goes down every life proc.
|
||||
|
||||
@@ -49,8 +49,7 @@
|
||||
// DOORS
|
||||
|
||||
// Simply updates the visibility of the area when it opens/closes/destroyed.
|
||||
/obj/machinery/door/update_nearby_tiles(need_rebuild)
|
||||
. = ..(need_rebuild)
|
||||
/obj/machinery/door/proc/update_freelok_sight()
|
||||
// Glass door glass = 1
|
||||
// don't check then?
|
||||
if(!glass && cameranet)
|
||||
|
||||
@@ -419,7 +419,7 @@
|
||||
data["temperature"] = round(env.temperature)
|
||||
data["temperatureC"] = round(env.temperature-T0C)
|
||||
|
||||
var/t_moles = env.total_moles
|
||||
var/t_moles = env.total_moles()
|
||||
var/gases[0]
|
||||
if(t_moles)
|
||||
var/n2[0]
|
||||
|
||||
@@ -50,4 +50,4 @@
|
||||
msg += "\nIt is [pose]"
|
||||
|
||||
usr << msg
|
||||
return
|
||||
return
|
||||
@@ -366,4 +366,4 @@
|
||||
if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them
|
||||
IgniteMob()
|
||||
|
||||
//Robots on fire
|
||||
//Robots on fire
|
||||
@@ -32,11 +32,11 @@
|
||||
else
|
||||
heal_overall_damage(0, -amount)
|
||||
|
||||
/mob/living/silicon/robot/proc/get_damaged_components(var/brute, var/burn)
|
||||
/mob/living/silicon/robot/proc/get_damaged_components(var/brute, var/burn, var/get_all)
|
||||
var/list/datum/robot_component/parts = list()
|
||||
for(var/V in components)
|
||||
var/datum/robot_component/C = components[V]
|
||||
if(C.installed == 1) if((brute && C.brute_damage) || (burn && C.electronics_damage))
|
||||
if(C.installed == 1 || get_all) if((brute && C.brute_damage) || (burn && C.electronics_damage))
|
||||
parts += C
|
||||
return parts
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
if(11 to 15) healths.icon_state = "health4"
|
||||
if(6 to 10) healths.icon_state = "health5"
|
||||
if(1 to 5) healths.icon_state = "health6"
|
||||
else healths.icon_state = "health7"
|
||||
if(0) healths.icon_state = "health7"
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/corgi/Die()
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
health = 50
|
||||
speak_emote = list("whinnys")
|
||||
emote_hear = list("excitedly says")
|
||||
response_help = "nuzzles"
|
||||
response_disarm = "flails it's hooves at"
|
||||
response_help = "pets"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "kicks"
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
@@ -25,37 +25,20 @@
|
||||
status_flags = CANPUSH
|
||||
universal_speak = 1
|
||||
|
||||
Life()
|
||||
..()
|
||||
if(stat == 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm (src.loc)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if((M.client && !( M.blinded )))
|
||||
M.show_message("\red [src] lets out a contented sigh as their form unwinds. ")
|
||||
ghostize()
|
||||
del src
|
||||
return
|
||||
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
if(istype(O, /obj/item/device/soulstone))
|
||||
O.transfer_soul("SHADE", src, user)
|
||||
else
|
||||
if(O.force)
|
||||
var/damage = O.force
|
||||
if (O.damtype == STAMINA)
|
||||
damage = 0
|
||||
health -= damage
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
|
||||
else
|
||||
usr << "\red This weapon is ineffective, it does no damage."
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
/mob/living/simple_animal/pony/Life()
|
||||
..()
|
||||
if(stat == 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(src.loc)
|
||||
src.visible_message("<span class='warning'>\The [src] lets out a contented sigh as their form unwinds.</span>")
|
||||
src.ghostize()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pony/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
if(istype(O, /obj/item/device/soulstone))
|
||||
O.transfer_soul("SHADE", src, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pony/twilight
|
||||
name = "Twilight Sparkle"
|
||||
@@ -145,5 +128,4 @@ mob/living/simple_animal/pony/mac
|
||||
name = "Mac"
|
||||
real_name = "Mac"
|
||||
icon_state = "mac"
|
||||
icon_living = "mac"
|
||||
|
||||
icon_living = "mac"
|
||||
@@ -113,7 +113,7 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list()
|
||||
/obj/cult_viewpoint/proc/get_cult_name()
|
||||
if (cult_name)
|
||||
return cult_name
|
||||
return "An Unknown Servent"
|
||||
return "An Unknown Servant"
|
||||
|
||||
|
||||
/obj/cult_viewpoint/proc/set_cult_name(var/newName)
|
||||
|
||||
@@ -61,6 +61,19 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
if(blood_volume < 560 && blood_volume)
|
||||
var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood
|
||||
if(B) // Make sure there's some blood at all
|
||||
|
||||
if(src.mind) //Handles vampires "eating" blood that isn't their own.
|
||||
if(src.mind in ticker.mode.vampires)
|
||||
for(var/datum/reagent/blood/BL in vessel.reagent_list)
|
||||
if(src.nutrition >= 450)
|
||||
break //We don't want blood tranfusions making vampires fat.
|
||||
if(BL.data["donor"] != src)
|
||||
src.nutrition += (15 * REAGENTS_METABOLISM)
|
||||
BL.volume -= REAGENTS_METABOLISM
|
||||
if(BL.volume <= 0)
|
||||
del(BL)
|
||||
break //Only process one blood per tick, to maintain the same metabolism as nutriment for non-vampires.
|
||||
|
||||
if(B.data["donor"] != src) //If it's not theirs, then we look for theirs
|
||||
for(var/datum/reagent/blood/D in vessel.reagent_list)
|
||||
if(D.data["donor"] == src)
|
||||
|
||||
@@ -22,6 +22,13 @@ var/list/organ_cache = list()
|
||||
// links chemical IDs to number of ticks for which they'll stay in the blood
|
||||
germ_level = 0
|
||||
|
||||
/obj/item/organ/attack_self(mob/user as mob)
|
||||
|
||||
// Convert it to an edible form, yum yum.
|
||||
if(!robotic && user.a_intent == "harm")
|
||||
bitten(user)
|
||||
return
|
||||
|
||||
/obj/item/organ/proc/update_health()
|
||||
return
|
||||
|
||||
@@ -256,3 +263,21 @@ var/list/organ_cache = list()
|
||||
target.update_eyes()
|
||||
..()
|
||||
|
||||
/obj/item/organ/proc/bitten(mob/user)
|
||||
|
||||
if(robotic)
|
||||
return
|
||||
|
||||
user << "\blue You take a bite out of \the [src]."
|
||||
|
||||
user.unEquip(src)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src))
|
||||
O.name = name
|
||||
O.icon_state = dead_icon ? dead_icon : icon_state
|
||||
|
||||
if(fingerprints) O.fingerprints = fingerprints.Copy()
|
||||
if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy()
|
||||
if(fingerprintslast) O.fingerprintslast = fingerprintslast
|
||||
|
||||
user.put_in_active_hand(O)
|
||||
del(src)
|
||||
@@ -6,8 +6,6 @@
|
||||
w_class = 2
|
||||
pressure_resistance = 2
|
||||
|
||||
autoignition_temperature = 522 // Kelvin
|
||||
|
||||
/obj/item/weapon/folder/blue
|
||||
desc = "A blue folder."
|
||||
icon_state = "folder_blue"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
pressure_resistance = 10
|
||||
var/amount = 30 //How much paper is in the bin.
|
||||
var/list/papers = new/list() //List of papers put in the bin for reference.
|
||||
|
||||
/*
|
||||
autoignition_temperature = 519.15 // Kelvin
|
||||
|
||||
/obj/item/weapon/paper_bin/ignite(var/temperature)
|
||||
@@ -24,7 +24,7 @@
|
||||
papers=0
|
||||
amount=0
|
||||
update_icon()
|
||||
|
||||
*///LINDA shit figure out later
|
||||
/obj/item/weapon/paper_bin/MouseDrop(atom/over_object)
|
||||
var/mob/M = usr
|
||||
if(M.restrained() || M.stat || !Adjacent(M))
|
||||
|
||||
@@ -310,7 +310,11 @@
|
||||
pc.Blend(tiny_img,ICON_OVERLAY, 12, 19)
|
||||
|
||||
var/datum/picture/P = new()
|
||||
P.fields["name"] = "photo"
|
||||
if(istype(src,/obj/item/device/camera/digital))
|
||||
P.fields["name"] = input(user,"Name photo:","photo")
|
||||
P.name = P.fields["name"]//So the name is displayed on the print/delete list.
|
||||
else
|
||||
P.fields["name"] = "photo"
|
||||
P.fields["author"] = user
|
||||
P.fields["icon"] = ic
|
||||
P.fields["tiny"] = pc
|
||||
@@ -351,6 +355,82 @@
|
||||
|
||||
return p
|
||||
|
||||
/*****************
|
||||
* digital camera *
|
||||
******************/
|
||||
/obj/item/device/camera/digital
|
||||
name = "digital camera"
|
||||
desc = "A digital camera. A small screen shows there is space for 10 photos left."
|
||||
var/list/datum/picture/saved_pictures = list()
|
||||
pictures_left = 30
|
||||
var/max_storage = 10
|
||||
|
||||
/obj/item/device/camera/digital/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if(!on || !pictures_left || ismob(target.loc)) return
|
||||
captureimage(target, user, flag)
|
||||
|
||||
playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3)
|
||||
|
||||
desc = "A digital camera. A small screen shows that there are currently [saved_pictures.len] pictures stored."
|
||||
icon_state = icon_off
|
||||
on = 0
|
||||
spawn(64)
|
||||
icon_state = icon_on
|
||||
on = 1
|
||||
|
||||
/obj/item/device/camera/digital/captureimage(atom/target, mob/user, flag)
|
||||
if(saved_pictures.len >= max_storage)
|
||||
user << "<span class='notice'>Maximum photo storage capacity reached.</span>"
|
||||
return
|
||||
user << "Picture saved."
|
||||
var/x_c = target.x - (size-1)/2
|
||||
var/y_c = target.y + (size-1)/2
|
||||
var/z_c = target.z
|
||||
var/list/turfs = list()
|
||||
var/mobs = ""
|
||||
for(var/i = 1; i <= size; i++)
|
||||
for(var/j = 1; j <= size; j++)
|
||||
var/turf/T = locate(x_c, y_c, z_c)
|
||||
if(can_capture_turf(T, user))
|
||||
turfs.Add(T)
|
||||
mobs += get_mobs(T)
|
||||
x_c++
|
||||
y_c--
|
||||
x_c = x_c - size
|
||||
|
||||
var/datum/picture/P = createpicture(target, user, turfs, mobs, flag)
|
||||
saved_pictures += P
|
||||
|
||||
/obj/item/device/camera/digital/verb/print_picture()
|
||||
set name = "Print picture"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(saved_pictures.len == 0)
|
||||
usr << "<span class='userdanger'>No images saved.</span>"
|
||||
return
|
||||
if(pictures_left == 0)
|
||||
usr << "<span class='userdanger'>There is no film left to print.</span>"
|
||||
return
|
||||
|
||||
var/datum/picture/P = null
|
||||
P = input("Select image to print:",P) as null|anything in saved_pictures
|
||||
if(P)
|
||||
printpicture(usr,P)
|
||||
pictures_left --
|
||||
|
||||
/obj/item/device/camera/digital/verb/delete_picture()
|
||||
set name = "Delete picture"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(saved_pictures.len == 0)
|
||||
usr << "<span class='userdanger'>No images saved</span>"
|
||||
return
|
||||
var/datum/picture/P = null
|
||||
P = input("Select image to delete:",P) as null|anything in saved_pictures
|
||||
if(P)
|
||||
saved_pictures -= P
|
||||
|
||||
/**************
|
||||
*video camera *
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
/obj/item/weapon/stamp/centcom
|
||||
name = "Nanotrasen Representative's rubber stamp"
|
||||
icon_state = "stamp-cent"
|
||||
_color = "centcom"
|
||||
_color = "internalaffairs"
|
||||
|
||||
/obj/item/weapon/stamp/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -579,7 +579,7 @@
|
||||
|
||||
// called when on fire
|
||||
|
||||
/obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C
|
||||
broken()
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ var/global/list/rad_collectors = list()
|
||||
P.air_contents.toxins = 0
|
||||
eject()
|
||||
else
|
||||
P.air_contents.adjust(tx = -0.001*drainratio)
|
||||
P.air_contents.toxins -= 0.001*drainratio
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
if(!tank || !..()) return //Only do this on a successful shot.
|
||||
|
||||
var/lost_gas_amount = tank.air_contents.total_moles*(pressure_setting/100)
|
||||
var/lost_gas_amount = tank.air_contents.total_moles()*(pressure_setting/100)
|
||||
var/datum/gas_mixture/removed = tank.air_contents.remove(lost_gas_amount)
|
||||
user.loc.assume_air(removed)
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
var/weaken = 0
|
||||
var/paralyze = 0
|
||||
var/irradiate = 0
|
||||
var/slur = 0
|
||||
var/stutter = 0
|
||||
var/eyeblur = 0
|
||||
var/drowsy = 0
|
||||
@@ -79,7 +80,7 @@
|
||||
if(!isliving(target)) return 0
|
||||
if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
return L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, stamina, jitter)
|
||||
return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, agony, blocked, stamina, jitter)
|
||||
|
||||
proc/check_fire(var/mob/living/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not.
|
||||
if(!istype(target) || !istype(user))
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/projectile/bullet/incendiary/shell/Move()
|
||||
..()
|
||||
var/turf/location = get_turf(src)
|
||||
new/obj/fire(location)
|
||||
new/obj/effect/hotspot(location)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
|
||||
@@ -334,7 +334,8 @@ datum
|
||||
|
||||
var/list/seen = viewers(4, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
M << "\blue \icon[my_atom] [C.mix_message]"
|
||||
if(!C.no_message)
|
||||
M << "\blue \icon[my_atom] [C.mix_message]"
|
||||
|
||||
/* if(istype(my_atom, /obj/item/slime_core))
|
||||
var/obj/item/slime_core/ME = my_atom
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
energy = 100
|
||||
max_energy = 100
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
|
||||
dispensable_reagents = list("ice","cream","beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead")
|
||||
dispensable_reagents = list("ice","cream", "cider", "beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead")
|
||||
hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
|
||||
unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
|
||||
hacked_reagents = list("goldschlager","patron", "absinthe", "ethanol", "nothing")
|
||||
@@ -293,11 +293,11 @@
|
||||
energy = 5
|
||||
max_energy = 5
|
||||
amount = 5
|
||||
recharge_delay = 30
|
||||
recharge_delay = 10
|
||||
dispensable_reagents = list()
|
||||
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
|
||||
list("lithium", "sugar", "water", "copper", "mercury", "sodium"),
|
||||
list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron"))
|
||||
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "tungsten", "water"),
|
||||
list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"),
|
||||
list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"))
|
||||
|
||||
/obj/machinery/chem_dispenser/constructable/New()
|
||||
..()
|
||||
@@ -323,7 +323,7 @@
|
||||
time += C.rating
|
||||
for(var/obj/item/weapon/stock_parts/cell/P in component_parts)
|
||||
time += round(P.maxcharge, 10000) / 10000
|
||||
recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
|
||||
recharge_delay = 10 / (time/2) //delay between recharges, double the usual time on lowest 33% less than usual on highest
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
for(i=1, i<=M.rating, i++)
|
||||
dispensable_reagents = sortList(dispensable_reagents | special_reagents[i])
|
||||
|
||||
@@ -223,7 +223,6 @@ datum
|
||||
|
||||
reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if (!istype(T)) return
|
||||
var/CT = cooling_temperature
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(T.wet >= 1) return
|
||||
@@ -245,10 +244,10 @@ datum
|
||||
for(var/mob/living/carbon/slime/M in T)
|
||||
M.apply_water()
|
||||
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-(CT*1000),lowertemp.temperature / CT) ,0)
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
|
||||
lowertemp.react()
|
||||
T.assume_air(lowertemp)
|
||||
qdel(hotspot)
|
||||
@@ -257,13 +256,13 @@ datum
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
src = null
|
||||
var/turf/T = get_turf(O)
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
|
||||
lowertemp.react()
|
||||
T.assume_air(lowertemp)
|
||||
del(hotspot)
|
||||
qdel(hotspot)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
if(!cube.wrapped)
|
||||
@@ -1135,6 +1134,7 @@ datum
|
||||
M.adjustToxLoss(3*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
@@ -1486,9 +1486,9 @@ datum
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
if(prob(50)) M.heal_organ_damage(1,0)
|
||||
if(!(M.mind in ticker.mode.vampires))
|
||||
M.nutrition += nutriment_factor // For hunger and fatness
|
||||
if(prob(50)) M.heal_organ_damage(1,0)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1767,13 +1767,13 @@ datum
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot)
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
|
||||
lowertemp.react()
|
||||
T.assume_air(lowertemp)
|
||||
del(hotspot)
|
||||
qdel(hotspot)
|
||||
|
||||
enzyme
|
||||
name = "Denatured Enzyme"
|
||||
|
||||
@@ -17,6 +17,7 @@ datum
|
||||
var/required_temp = 0
|
||||
var/mix_message = "The solution begins to bubble."
|
||||
var/mix_sound = 'sound/effects/bubbles.ogg'
|
||||
var/no_message = 0
|
||||
|
||||
|
||||
proc
|
||||
@@ -379,6 +380,7 @@ datum
|
||||
mix_message = "The mixture gives off a sharp acidic tang."
|
||||
|
||||
///////Changeling Blood Test/////////////
|
||||
/*
|
||||
changeling_test
|
||||
name = "Changeling blood test"
|
||||
id = "changelingblood"
|
||||
@@ -403,6 +405,7 @@ datum
|
||||
M.show_message( "<span class ='notice'>The blood seems to break apart in the fuel.</span>", 1)
|
||||
holder.del_reagent("blood")
|
||||
return
|
||||
*/
|
||||
|
||||
/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
|
||||
|
||||
@@ -641,19 +644,13 @@ datum
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
|
||||
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
|
||||
sleep(50)
|
||||
var/turf/location = get_turf(holder.my_atom.loc)
|
||||
for(var/turf/simulated/floor/target_tile in range(0,location))
|
||||
|
||||
var/datum/gas_mixture/napalm = new
|
||||
|
||||
napalm.toxins = 25
|
||||
napalm.temperature = 1400
|
||||
|
||||
target_tile.assume_air(napalm)
|
||||
spawn (0) target_tile.hotspot_expose(700, 400)
|
||||
var/turf/simulated/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
|
||||
|
||||
//Yellow
|
||||
slimeoverload
|
||||
|
||||
@@ -90,7 +90,7 @@ datum/reagent/crank/addiction_act_stage4(var/mob/living/M as mob)
|
||||
/datum/chemical_reaction/crank/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
for(var/turf/turf in range(1,T))
|
||||
new /obj/fire(turf)
|
||||
new /obj/effect/hotspot(turf)
|
||||
explosion(T,0,0,2)
|
||||
return
|
||||
|
||||
|
||||
@@ -240,9 +240,9 @@ datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/cheese
|
||||
name = "weird_cheese"
|
||||
id = "weird_cheese"
|
||||
result = "weird_cheese"
|
||||
name = "cheese"
|
||||
id = "cheese"
|
||||
result = "cheese"
|
||||
required_reagents = list("vomit" = 1, "milk" = 1)
|
||||
result_amount = 1
|
||||
mix_message = "The mixture curdles up."
|
||||
|
||||
@@ -102,6 +102,7 @@ datum/reagent/acetone
|
||||
result_amount = 0.5
|
||||
required_temp = 480
|
||||
mix_sound = null
|
||||
no_message = 1
|
||||
|
||||
datum/reagent/colorful_reagent
|
||||
name = "Colorful Reagent"
|
||||
@@ -119,7 +120,7 @@ datum/reagent/colorful_reagent
|
||||
mix_message = "The substance flashes multiple colors and emits the smell of a pocket protector."
|
||||
|
||||
datum/reagent/colorful_reagent/reaction_mob(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
|
||||
if(M)
|
||||
if(M && istype(M))
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
for(var/turf/turf in range(1,T))
|
||||
new /obj/fire(turf)
|
||||
new /obj/effect/hotspot(turf)
|
||||
return
|
||||
|
||||
/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
@@ -58,7 +58,7 @@
|
||||
if(prob(volume/10))
|
||||
F.make_plating()
|
||||
if(istype(F, /turf/simulated/floor/))
|
||||
new /obj/fire(F)
|
||||
new /obj/effect/hotspot(F)
|
||||
if(istype(T, /turf/simulated/wall/))
|
||||
var/turf/simulated/wall/W = T
|
||||
if(prob(volume/10))
|
||||
@@ -175,7 +175,7 @@
|
||||
required_reagents = list("blackpowder" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 474
|
||||
mix_message = "sparks start flying about."
|
||||
no_message = 1
|
||||
mix_sound = null
|
||||
|
||||
datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
|
||||
@@ -295,7 +295,14 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
|
||||
spawn(0)
|
||||
if(S)
|
||||
S.set_up(holder, 10, 0, location)
|
||||
S.start(created_volume >= 10 ? 3 : 2)
|
||||
if(created_volume < 5)
|
||||
S.start(1)
|
||||
if(created_volume >=5 && created_volume < 10)
|
||||
S.start(2)
|
||||
if(created_volume >= 10 && created_volume < 15)
|
||||
S.start(3)
|
||||
if(created_volume >=15)
|
||||
S.start(4)
|
||||
if(holder && holder.my_atom)
|
||||
holder.clear_reagents()
|
||||
return
|
||||
@@ -408,7 +415,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
|
||||
return
|
||||
var/turf/simulated/T = get_turf(holder.my_atom)
|
||||
for(var/turf/simulated/turf in range(created_volume/10,T))
|
||||
new /obj/fire(turf)
|
||||
new /obj/effect/hotspot(turf)
|
||||
return
|
||||
|
||||
/datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob)
|
||||
@@ -551,7 +558,7 @@ datum/reagent/firefighting_foam/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
src = null
|
||||
if(!istype(T, /turf/space))
|
||||
new /obj/effect/decal/cleanable/flour/foam(T) //foam mess; clears up quickly.
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-(CT*1000),lowertemp.temperature / CT) ,0)
|
||||
@@ -563,7 +570,7 @@ datum/reagent/firefighting_foam/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
|
||||
src = null
|
||||
var/turf/T = get_turf(O)
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
|
||||
|
||||
@@ -143,6 +143,7 @@ datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
|
||||
result_amount = 1
|
||||
required_temp = 674
|
||||
mix_sound = null
|
||||
no_message = 1
|
||||
|
||||
datum/reagent/cyanide
|
||||
name = "Cyanide"
|
||||
|
||||
@@ -317,97 +317,4 @@
|
||||
icon_state = "sodawater"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sodawater", 50)
|
||||
|
||||
//Donk Co. Cola//
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/pubber
|
||||
name = "Dr. Pubber"
|
||||
desc = "The beverage of an original crowd. Tastes like an industrial tranquilizer."
|
||||
icon_state = "dr_gibb"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("haloperidol", 4)
|
||||
reagents.add_reagent("morphine", 4)
|
||||
reagents.add_reagent("vhfcs", 10)
|
||||
reagents.add_reagent("cola", 12)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/robust
|
||||
name = "Robust-Eeze"
|
||||
desc = "A carbonated robustness tonic. It has quite a kick."
|
||||
icon_state = "cola"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("methamphetamine", 3)
|
||||
reagents.add_reagent("vhfcs", 10)
|
||||
reagents.add_reagent("cola", 17)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grifeo
|
||||
name = "Grife-O"
|
||||
desc = "The carbonated beverage of a space generation. Contains actual space dust!"
|
||||
icon_state = "griefo"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("radium", 3)
|
||||
reagents.add_reagent("ephedrine", 6)
|
||||
reagents.add_reagent("vhfcs", 10)
|
||||
reagents.add_reagent("cola", 11)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/orangeaid
|
||||
name = "Orange-Aid"
|
||||
desc = "A vitamin tonic that promotes good eyesight and health."
|
||||
icon_state = "starkist"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("orangejuice", 20)
|
||||
reagents.add_reagent("oculine", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/limeaid
|
||||
name = "Lime-Aid"
|
||||
desc = "Antihol mixed with lime juice. A well-known cure for hangovers."
|
||||
icon_state = "space-up"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("limejuice", 20)
|
||||
reagents.add_reagent("antihol", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/runoff
|
||||
name = "Spooky Dan's Runoffa Cola"
|
||||
desc = "A spoooky cola for Halloween! Rumors that Runoff Cola contains actual industrial runoff are unsubstantiated."
|
||||
icon_state = "purple_can"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chlorine", 5)
|
||||
reagents.add_reagent("phosphorus", 5)
|
||||
reagents.add_reagent("mercury", 5)
|
||||
reagents.add_reagent("vhfcs", 10)
|
||||
reagents.add_reagent("cola", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/horror
|
||||
name = "Spooky Dan's Horrortastic Cola"
|
||||
desc = "A terrifying Halloween soda. It's especially frightening if you're diabetic."
|
||||
icon_state = "glowingbeer"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("ectoplasm", 10)
|
||||
reagents.add_reagent("sulfur", 5)
|
||||
reagents.add_reagent("vhfcs", 5)
|
||||
reagents.add_reagent("cola", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grones
|
||||
name = "Grones Soda"
|
||||
desc = "Bursting with 10 different flavors!"
|
||||
icon_state = "grones"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 20)
|
||||
reagents.add_reagent(pick("atropine","serotrotium","lithium","mercury","charcoal","diphenhydramine","spaceacillin","hairgrownium","ephedrine","capsaicin"), 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/decirprevo
|
||||
name = "Decirprevo Bottled Water"
|
||||
desc = "Bottled from our cool natural springs on Europa."
|
||||
icon_state = "waterbottle"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("water", 45)
|
||||
reagents.add_reagent("iodine", 5)
|
||||
reagents.add_reagent("sodawater", 50)
|
||||
@@ -365,211 +365,3 @@
|
||||
desc = "A cup with the british flag emblazoned on it."
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
|
||||
////Stinkeye/// Holy buns don't ever drink this -Fox
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/stinkeye
|
||||
name = "Stinkeye's Special Reserve"
|
||||
desc = "An old bottle labelled 'The Good Stuff'. This probably has enough kick to knock an elephant on its ass."
|
||||
icon_state = "whiskeybottle"
|
||||
volume = 250
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("beer", 30)
|
||||
reagents.add_reagent("wine", 30)
|
||||
reagents.add_reagent("cider", 30)
|
||||
reagents.add_reagent("vodka", 30)
|
||||
reagents.add_reagent("ethanol", 30)
|
||||
reagents.add_reagent("eyenewt", 30)
|
||||
|
||||
////Discount Dan's Soup////// May God have mercy on your souls---and stomachs. -Fox
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup
|
||||
name = "Discount Dan's Quik-Noodles"
|
||||
desc = "A self-heating cup of noodles. There's enough sodium in these to put the Dead Sea to shame."
|
||||
icon_state = "dansoup"
|
||||
volume = 65
|
||||
var/selfheat = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/attack_self(mob/user as mob) //self-heating action!
|
||||
if(selfheat)
|
||||
return
|
||||
else
|
||||
selfheat = 1
|
||||
user << "<span class='notice'>You twist the bottom of the cup. The cup emits a soft clack as the heater triggers.</span>"
|
||||
reagents.add_reagent("pyrosium", 2)
|
||||
reagents.add_reagent("oxygen", 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/random
|
||||
New()
|
||||
..()
|
||||
var/list/list = typesof(/obj/item/weapon/reagent_containers/food/drinks/dansoup) - list(/obj/item/weapon/reagent_containers/food/drinks/dansoup,/obj/item/weapon/reagent_containers/food/drinks/dansoup/random)
|
||||
var/T = pick(list)
|
||||
new T(loc)
|
||||
spawn(0)
|
||||
del src
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/bbq
|
||||
name = "Devil Dan's Quik-Noodles - Brimstone BBQ Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("sulfur", 5)
|
||||
reagents.add_reagent("beff", 5)
|
||||
// reagents.add_reagent("ghostchili", 5) uncomment once ghost chili juice is added
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/macaroni
|
||||
name = "Discount Dan's Quik-Noodles - Macaroni and Imitation Processed Cheese Product Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 9)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("fake_cheese", 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/beef
|
||||
name = "Comrade Dan's Quik-Noodles - Beef Perestroikanoff Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("milk", 3)
|
||||
reagents.add_reagent("enzyme", 3)
|
||||
reagents.add_reagent("beff", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/teriyaki
|
||||
name = "Discount Deng's Quik-Noodles - Teriyaki TVP Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("hydrogenated_soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 14)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("synthflesh", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/gamer
|
||||
name = "Dan's Quik-Noodles - Gamer Grubs Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("????", 10)
|
||||
reagents.add_reagent("potassium", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/mushroom
|
||||
name = "Frycook Dan's Quik-Noodles - Mushroom-Swiss Burger-Bake Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("beff", 2)
|
||||
reagents.add_reagent("weird_cheese", 2)
|
||||
reagents.add_reagent("psilocybin", 6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/ketchup
|
||||
name = "Frycook Dan's Quik-Noodles - Curly Fry Ketchup Hoedown Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("hydrogenated_soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("tomatojuice", 4)
|
||||
reagents.add_reagent("mugwort", 3)
|
||||
reagents.add_reagent("capsaicin", 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/sundae
|
||||
name = "Dessert Dan's Quik-Noodles - Sweet Sundae Noodle Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("vhfcs", 10)
|
||||
reagents.add_reagent("chocolate", 2)
|
||||
reagents.add_reagent("cream", 2)
|
||||
reagents.add_reagent("chocolate_milk", 6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/tuna
|
||||
name = "Descuento Danito's Quik-Noodles - Tuna Melt Taco Fiesta Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("fake_cheese", 3)
|
||||
reagents.add_reagent("mercury", 3)
|
||||
reagents.add_reagent("capsaicin", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/lomein
|
||||
name = "Discount Deng's Quik-Noodles - Sweet and Sour Lo Mein Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("sacid", 3)
|
||||
reagents.add_reagent("vhfcs", 7)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/crab
|
||||
name = "Pirate Dan's Quik-Noodles - Spicy Imitation Crab Meat Paste Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("synthflesh", 3)
|
||||
reagents.add_reagent("saltpetre", 3)
|
||||
reagents.add_reagent("capsaicin", 14)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/sausage
|
||||
name = "Morning Dan's Quik-Noodles - Mechanically Reclaimed Sausage Biscuit Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("hydrogenated_soybeanoil", 4)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("ammonia", 3)
|
||||
reagents.add_reagent("gravy", 4)
|
||||
reagents.add_reagent("coffee", 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dansoup/italian
|
||||
name = "Sconto Danilo's Quik-Noodles - Italian Strozzapreti Lunare Flavor"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chicken_soup", 10)
|
||||
reagents.add_reagent("soybeanoil", 1)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("sodiumchloride", 10)
|
||||
reagents.add_reagent("nicotine", 8)
|
||||
reagents.add_reagent("tomatojuice", 4)
|
||||
reagents.add_reagent("wine", 2)
|
||||
reagents.add_reagent("water", 2)
|
||||
@@ -625,6 +625,19 @@
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/organ
|
||||
|
||||
name = "organ"
|
||||
desc = "It's good for you."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "appendix"
|
||||
filling_color = "#E00D34"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 4)
|
||||
src.bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/appendix
|
||||
//yes, this is the same as meat. I might do something different in future
|
||||
name = "appendix"
|
||||
@@ -3368,119 +3381,4 @@
|
||||
icon_state = "ectoplasm"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("ectoplasm", 10)
|
||||
|
||||
////Discount Dan's Burritos////// May God have mercy on your souls---and stomachs. -Fox
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito
|
||||
name = "Discount Dan's Burrito"
|
||||
desc = "Quite possibly the worst burrito in all of space."
|
||||
icon_state = "danburrito"
|
||||
bitesize = 10
|
||||
var/selfheat = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/attack_self(mob/user as mob) //self-heating action!
|
||||
if(selfheat)
|
||||
return
|
||||
else
|
||||
selfheat = 1
|
||||
user << "<span class='notice'>You crack the burrito like a glow stick, activating the heater mechanism.</span>"
|
||||
reagents.add_reagent("pyrosium", 2)
|
||||
reagents.add_reagent("oxygen", 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/random
|
||||
New()
|
||||
..()
|
||||
var/list/list = typesof(/obj/item/weapon/reagent_containers/food/snacks/danburrito) - list(/obj/item/weapon/reagent_containers/food/snacks/danburrito,/obj/item/weapon/reagent_containers/food/snacks/danburrito/random)
|
||||
var/T = pick(list)
|
||||
new T(loc)
|
||||
spawn(0)
|
||||
del src
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/pizza
|
||||
name = "Sconto Danilo's Burritos - 50% Real Mozzarella Pepperoni Pizza Party Flavor"
|
||||
desc = "A self-heating pizza burrito."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("fake_cheese", 3)
|
||||
reagents.add_reagent("cheese", 3)
|
||||
reagents.add_reagent("pepperoni", 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/pancake
|
||||
name = "Descuento Danito's Burritos - Pancake Sausage Brunch Flavor"
|
||||
desc = "A self-heating breakfast burrito with a buttermilk pancake in lieu of a tortilla. A little frightening."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("hydrogenated_soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("porktonium", 4)
|
||||
reagents.add_reagent("vhfcs", 2)
|
||||
reagents.add_reagent("coffee", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/beans
|
||||
name = "Descuento Danito's Burritos - Spicy Beans and Wieners Ole! Flavor"
|
||||
desc = "A self-heating convenience reinterpretation of Mexican cuisine. The exact mechanism used to heat it is probably best left to speculation."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("lithium", 4)
|
||||
reagents.add_reagent("capsaicin", 6)
|
||||
reagents.add_reagent("beans", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/homestyle
|
||||
name = "Descuento Danito's Burritos - Homestyle Comfort Flavor"
|
||||
desc = "A self-heating burrito just like Mom used to make, if your mother was a souless, automated burrito production line."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("mashedpotatoes", 5)
|
||||
reagents.add_reagent("gravy", 3)
|
||||
reagents.add_reagent("diethylamine", 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/texas
|
||||
name = "Spooky Dan's BOO-ritos - Texas Toast Chainsaw Massacre Flavor"
|
||||
desc = "A self-heating burrito. Isn't that concept scary enough on its own?"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("fake_cheese", 3)
|
||||
reagents.add_reagent("space_drugs", 3)
|
||||
// reagents.add_reagent("cblood", 4) uncomment once actual changeling blood is added
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/beff
|
||||
name = "Descuento Danito's Burritos - Beff and Bean Flavor"
|
||||
desc = "A self-heating convenience reinterpretation of Mexican cuisine. The exact mechanism used to heat it is probably best left to speculation."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("hydrogenated_soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("uranium", 2)
|
||||
reagents.add_reagent("beff", 4)
|
||||
reagents.add_reagent("fake_cheese", 4)
|
||||
reagents.add_reagent("beans", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/nightmare
|
||||
name = "Spooky Dan's BOO-ritos - Nightmare on Elm Meat Flavor"
|
||||
desc = "A self-heating burrito that purports to contain elm-smoked meat. Of some sort. Probably from an animal."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("beff", 3)
|
||||
reagents.add_reagent("synthflesh", 2)
|
||||
reagents.add_reagent("tonguedog", 9)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/danburrito/strawberry
|
||||
name = "Descuento Danito's Burritos - Strawberrito Churro Flavor"
|
||||
desc = "There is no way anyone could possibly justify this."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soybeanoil", 3)
|
||||
reagents.add_reagent("msg", 9)
|
||||
reagents.add_reagent("vhfcs", 8)
|
||||
reagents.add_reagent("oil", 2)
|
||||
reagents.add_reagent("ectoplasm", 10)
|
||||
@@ -1,4 +1,4 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// (Mixing)Glass.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/glass
|
||||
@@ -190,6 +190,7 @@
|
||||
item_state = "beaker"
|
||||
m_amt = 0
|
||||
g_amt = 500
|
||||
var/obj/item/device/assembly_holder/assembly = null
|
||||
|
||||
on_reagent_change()
|
||||
update_icon()
|
||||
@@ -228,6 +229,55 @@
|
||||
if (!is_open_container())
|
||||
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
|
||||
overlays += lid
|
||||
if(assembly)
|
||||
overlays += "assembly"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/verb/remove_assembly()
|
||||
set name = "Remove Assembly"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
if (assembly)
|
||||
usr << "<span class='notice'>You detach [assembly] from \the [src]</span>"
|
||||
usr.put_in_hands(assembly)
|
||||
assembly = null
|
||||
update_icon()
|
||||
else
|
||||
usr << "<span class='notice'>There is no assembly to remove.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/proc/heat_beaker()
|
||||
if(reagents)
|
||||
reagents.chem_temp += 30
|
||||
reagents.handle_reactions()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if (istype(W,/obj/item/device/assembly_holder))
|
||||
if (assembly)
|
||||
usr << "<span class='warning'>The [src] already has an assembly.</span>"
|
||||
return ..()
|
||||
assembly = W
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
overlays += "assembly"
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/HasProximity(atom/movable/AM)
|
||||
if(assembly)
|
||||
assembly.HasProximity(AM)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/Crossed(atom/movable/AM)
|
||||
if(assembly)
|
||||
assembly.Crossed(AM)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/on_found(mob/finder as mob) //for mousetraps
|
||||
if(assembly)
|
||||
assembly.on_found(finder)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/hear_talk(mob/living/M, msg)
|
||||
if(assembly)
|
||||
assembly.hear_talk(M, msg)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large
|
||||
name = "large beaker"
|
||||
|
||||
@@ -405,6 +405,7 @@
|
||||
//Actually transfer the gas
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
air_contents.merge(removed)
|
||||
air_update_turf()
|
||||
|
||||
|
||||
// if full enough, switch to ready mode
|
||||
|
||||
@@ -178,6 +178,14 @@
|
||||
build_path = /obj/item/device/assembly/prox_sensor
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/mousetrap
|
||||
name = "Mousetrap"
|
||||
id = "mousetrap"
|
||||
build_type = AUTOLATHE
|
||||
materials = list("$metal" = 800, "$glass" = 200)
|
||||
build_path = /obj/item/device/assembly/mousetrap
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/timer
|
||||
name = "Timer"
|
||||
id = "timer"
|
||||
|
||||
@@ -39,4 +39,14 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list("$metal" = 30, "$glass" = 10)
|
||||
build_path = /obj/item/weapon/disk/tech_disk
|
||||
category = list("Miscellaneous")
|
||||
|
||||
/datum/design/digital_camera
|
||||
name = "Digital Camera"
|
||||
desc = "Produce an enhanced version of the standard issue camera."
|
||||
id = "digitalcamera"
|
||||
req_tech = list("programming" = 2, "materials" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 500, "$glass" = 300)
|
||||
build_path = /obj/item/device/camera/digital
|
||||
category = list("Miscellaneous")
|
||||
@@ -117,21 +117,22 @@
|
||||
removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000)
|
||||
|
||||
env.merge(removed)
|
||||
air_update_turf()
|
||||
|
||||
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (disabled)
|
||||
return
|
||||
|
||||
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
default_deconstruction_screwdriver(user, "server_o", "server")
|
||||
return 1
|
||||
|
||||
|
||||
if(exchange_parts(user, O))
|
||||
return 1
|
||||
|
||||
|
||||
if (panel_open)
|
||||
if(istype(O, /obj/item/weapon/crowbar))
|
||||
griefProtection()
|
||||
@@ -141,7 +142,7 @@
|
||||
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
|
||||
if (disabled)
|
||||
return
|
||||
|
||||
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
return
|
||||
|
||||
@@ -22,5 +22,5 @@
|
||||
/datum/artifact_effect/gasco2/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.total_moles < max_pressure)
|
||||
if(env && env.total_moles() < max_pressure)
|
||||
env.carbon_dioxide += pick(0, 0, 0.1, rand())
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
/datum/artifact_effect/gasnitro/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.total_moles < max_pressure)
|
||||
if(env && env.total_moles() < max_pressure)
|
||||
env.nitrogen += pick(0, 0, 0.1, rand())
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
/datum/artifact_effect/gasoxy/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.total_moles < max_pressure)
|
||||
if(env && env.total_moles() < max_pressure)
|
||||
env.oxygen += pick(0, 0, 0.1, rand())
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
/datum/artifact_effect/gasplasma/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.total_moles < max_pressure)
|
||||
if(env && env.total_moles() < max_pressure)
|
||||
env.toxins += pick(0, 0, 0.1, rand())
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@
|
||||
/datum/artifact_effect/gassleeping/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.total_moles < max_pressure)
|
||||
if(env && env.total_moles() < max_pressure)
|
||||
var/datum/gas/sleeping_agent/trace_gas = new
|
||||
env.trace_gases += trace_gas
|
||||
trace_gas.moles = pick(0, 0, 0.1, rand())
|
||||
|
||||
@@ -155,84 +155,67 @@
|
||||
if(grav_pulling)
|
||||
supermatter_pull()
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/removed = null
|
||||
var/datum/gas_mixture/env = null
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
|
||||
//ensure that damage doesn't increase too quickly due to super high temperatures resulting from no coolant, for example. We dont want the SM exploding before anyone can react.
|
||||
//We want the cap to scale linearly with power (and explosion_point). Let's aim for a cap of 5 at power = 900 (based on testing, equals roughly 5% per SM alert announcement).
|
||||
var/damage_inc_limit = (power/900)*(explosion_point/1000)*DAMAGE_RATE_LIMIT
|
||||
//Remove gas from surrounding area
|
||||
var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles())
|
||||
|
||||
if(!istype(L, /turf/space))
|
||||
env = L.return_air()
|
||||
removed = env.remove(gasefficency * env.total_moles) //Remove gas from surrounding area
|
||||
if(!removed || !removed.total_moles())
|
||||
damage += max((power-1600)/10, 0)
|
||||
power = min(power, 1600)
|
||||
return 1
|
||||
|
||||
if(!env || !removed || !removed.total_moles)
|
||||
damage += max(((power-(1600*POWER_FACTOR)))/10, 0) //exciting the supermatter in a vacuum means the internal energy is mostly locked inside.
|
||||
else if (grav_pulling) //If supermatter is detonating, remove all air from the zone
|
||||
env.remove(env.total_moles)
|
||||
damage_archived = damage
|
||||
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
|
||||
var/temp_factor = 50
|
||||
|
||||
if(oxygen > 0.8)
|
||||
// with a perfect gas mix, make the power less based on heat
|
||||
icon_state = "[base_icon_state]_glow"
|
||||
else
|
||||
damage_archived = damage
|
||||
// in normal mode, base the produced energy around the heat
|
||||
temp_factor = 30
|
||||
icon_state = base_icon_state
|
||||
|
||||
damage = max( damage + min( ( (removed.temperature - 800) / 150 ), damage_inc_limit ) , 0 )
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload
|
||||
|
||||
var/temp_factor = 100
|
||||
//We've generated power, now let's transfer it to the collectors for storing/usage
|
||||
transfer_energy()
|
||||
|
||||
if(oxygen > 0.8)
|
||||
// with a perfect gas mix, make the power less based on heat
|
||||
icon_state = "[base_icon_state]_glow"
|
||||
else
|
||||
// in normal mode, base the produced energy around the heat
|
||||
temp_factor = 60
|
||||
icon_state = base_icon_state
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//We've generated power, now let's transfer it to the collectors for storing/usage
|
||||
transfer_energy()
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.temperature += (device_energy / THERMAL_RELEASE_MODIFIER)
|
||||
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
removed.temperature = max(0, min(removed.temperature, 2500))
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
|
||||
|
||||
var/thermal_power = THERMAL_RELEASE_MODIFIER
|
||||
|
||||
//This shouldn't be necessary. If the number of moles is low, then heat_capacity should be tiny.
|
||||
//if(removed.total_moles < 35) thermal_power += 750 //If you don't add coolant, you are going to have a bad time.
|
||||
|
||||
removed.temperature += ((device_energy * thermal_power) / removed.heat_capacity())
|
||||
|
||||
removed.temperature = max(0, min(removed.temperature, 10000))
|
||||
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
|
||||
|
||||
removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
|
||||
|
||||
removed.update_values()
|
||||
|
||||
env.merge(removed)
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them.
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1, get_dist(l, src)) ) ) )
|
||||
|
||||
//adjusted range so that a power of 600 (pretty high) results in 8 tiles, roughly the distance from the core to the engine monitoring room.
|
||||
//at power of 1210 this becomes 9 tiles --> increases very very slowly.
|
||||
for(var/mob/living/l in range(src, round((power / 0.146484375) ** 0.25)))
|
||||
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )
|
||||
l.apply_effect(rads, IRRADIATE)
|
||||
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
|
||||
var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) )
|
||||
l.apply_effect(irradiate=rads)
|
||||
|
||||
power -= (power/500)**3 //energy losses due to radiation
|
||||
power -= (power/500)**3
|
||||
|
||||
return 1
|
||||
|
||||
@@ -354,11 +337,4 @@
|
||||
|
||||
if(defer_powernet_rebuild != 2)
|
||||
defer_powernet_rebuild = 0
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/GotoAirflowDest(n) //Supermatter not pushed around by airflow
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter/RepelAirflowDest(n)
|
||||
return
|
||||
return
|
||||
Reference in New Issue
Block a user