mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-17 10:03:50 +01:00
Merge github.com:Baystation12/Baystation12
This commit is contained in:
+7
-1
@@ -162,9 +162,11 @@
|
||||
#define FILE_DIR "code/WorkInProgress"
|
||||
#define FILE_DIR "code/WorkInProgress/Apples"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jumper"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/tajara_sprites"
|
||||
#define FILE_DIR "code/WorkInProgress/Chinsky"
|
||||
#define FILE_DIR "code/WorkInProgress/mapload"
|
||||
#define FILE_DIR "code/WorkInProgress/Mini"
|
||||
@@ -174,7 +176,6 @@
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Spawners"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/ZeroPoint"
|
||||
#define FILE_DIR "code/WorkInProgress/SkyMarshal"
|
||||
#define FILE_DIR "code/WorkInProgress/Tastyfish"
|
||||
#define FILE_DIR "code/WorkInProgress/virus2"
|
||||
@@ -201,6 +202,7 @@
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "maps/backup"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
@@ -404,6 +406,7 @@
|
||||
#include "code\game\events\EventProcs\ninja_equipment.dm"
|
||||
#include "code\game\events\EventProcs\space_ninja.dm"
|
||||
#include "code\game\events\EventProcs\spacevines.dm"
|
||||
#include "code\game\events\EventProcs\wormholes.dm"
|
||||
#include "code\game\events\Events\AlienInfestation.dm"
|
||||
#include "code\game\events\Events\Appendicitis.dm"
|
||||
#include "code\game\events\Events\ElectricalStorm.dm"
|
||||
@@ -434,6 +437,7 @@
|
||||
#include "code\game\gamemodes\changeling\traitor_chan.dm"
|
||||
#include "code\game\gamemodes\cult\cult.dm"
|
||||
#include "code\game\gamemodes\cult\cult_items.dm"
|
||||
#include "code\game\gamemodes\cult\cult_structures.dm"
|
||||
#include "code\game\gamemodes\epidemic\epidemic.dm"
|
||||
#include "code\game\gamemodes\extended\extended.dm"
|
||||
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
||||
@@ -793,6 +797,7 @@
|
||||
#include "code\modules\admin\verbs\adminsay.dm"
|
||||
#include "code\modules\admin\verbs\atmosdebug.dm"
|
||||
#include "code\modules\admin\verbs\BrokenInhands.dm"
|
||||
#include "code\modules\admin\verbs\cinematic.dm"
|
||||
#include "code\modules\admin\verbs\custom_event.dm"
|
||||
#include "code\modules\admin\verbs\deadsay.dm"
|
||||
#include "code\modules\admin\verbs\debug.dm"
|
||||
@@ -1180,6 +1185,7 @@
|
||||
#include "code\WorkInProgress\virus2\monkeydispensor.dm"
|
||||
#include "code\WorkInProgress\virus2\Prob.dm"
|
||||
#include "code\WorkInProgress\Wrongnumber\weldbackpack.dm"
|
||||
#include "interface\interface.dm"
|
||||
#include "interface\skin.dmf"
|
||||
#include "maps\tgstation.2.0.8.dmm"
|
||||
// END_INCLUDE
|
||||
|
||||
@@ -475,6 +475,7 @@ datum
|
||||
return share(sharer)*/
|
||||
|
||||
check_gas_mixture(datum/gas_mixture/sharer)
|
||||
if(!sharer) return 0
|
||||
var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5
|
||||
var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
|
||||
var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5
|
||||
|
||||
@@ -22,6 +22,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
//
|
||||
var/obj/machinery/rust/core/owned_core
|
||||
var/list/dormant_reactant_quantities = new
|
||||
luminosity = 1
|
||||
//
|
||||
var/energy = 0
|
||||
var/mega_energy = 0
|
||||
|
||||
@@ -84,12 +84,14 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
if(owned_field)
|
||||
owned_field.ChangeFieldStrength(field_strength)
|
||||
icon_state = "core1"
|
||||
luminosity = 1
|
||||
return 1
|
||||
|
||||
proc/Shutdown()
|
||||
icon_state = "core0"
|
||||
on = 0
|
||||
del(owned_field)
|
||||
luminosity = 0
|
||||
|
||||
proc/AddParticles(var/name, var/quantity = 1)
|
||||
if(owned_field)
|
||||
@@ -104,6 +106,9 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
Shutdown()
|
||||
return
|
||||
//
|
||||
luminosity = round(owned_field.field_strength/10)
|
||||
luminosity = max(luminosity,1)
|
||||
//
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
Shutdown()
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
New()
|
||||
spawn(0)
|
||||
core_generator = locate() in range(15,src)
|
||||
core_generator = locate() in world
|
||||
|
||||
attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
fuel_injectors.Add("SCRAM")
|
||||
fuel_injectors["SCRAM"] = new/list
|
||||
spawn(0)
|
||||
for(var/obj/machinery/rust/fuel_injector/Injector in range(50,src))
|
||||
for(var/obj/machinery/rust/fuel_injector/Injector in world)
|
||||
if(Injector.stage in fuel_injectors)
|
||||
var/list/targetlist = fuel_injectors[Injector.stage]
|
||||
targetlist.Add(Injector)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
return
|
||||
var/t = "<B>Gyrotron Remote Control Console</B><BR>"
|
||||
t += "<hr>"
|
||||
for(var/obj/machinery/rust/gyrotron/gyro in range(25))
|
||||
for(var/obj/machinery/rust/gyrotron/gyro in world)
|
||||
if(gyro.remoteenabled && gyro.on)
|
||||
t += "<font color=green>Gyrotron operational</font><br>"
|
||||
t += "Operational mode: <font color=blue>"
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon = 'effects.dmi'
|
||||
icon_state = "energynet"
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/obj/machinery/rust/em_field/parent
|
||||
var/mysize = 0
|
||||
|
||||
|
||||
@@ -61,12 +61,6 @@
|
||||
//a lot of these variables are pretty hacked, so dont rely on the comments
|
||||
/obj/machinery/power/supermatter/process()
|
||||
|
||||
var/datum/gas_mixture/env = loc.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/transfer_moles = gasefficency * env.total_moles()
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
//core can no longer spontaneously explode
|
||||
/*
|
||||
previousdet = det
|
||||
@@ -111,15 +105,24 @@
|
||||
#define REACTION_POWER_MODIFIER 0.5 //Higher == more overall power
|
||||
*/
|
||||
|
||||
//100% oxygen atmosphere = 100% plasma production
|
||||
//100% nitrogen atmosphere = 0% plasma production
|
||||
//anything else is halfway in between; an atmosphere with no nitrogen or oxygen will still be at 50% (but steadily rise as more oxygen is made)
|
||||
var/total_moles = removed.total_moles()
|
||||
var/datum/gas_mixture/env = loc.return_air()
|
||||
|
||||
//nothing can happen in a vacuum
|
||||
var/datum/gas_mixture/removed = env
|
||||
var/retardation_factor = 0.5
|
||||
if(total_moles)
|
||||
retardation_factor += removed.oxygen / (total_moles * 2) - removed.nitrogen / (total_moles * 2)
|
||||
else
|
||||
retardation_factor -= 0.25
|
||||
if(env.total_moles())
|
||||
//Remove gas from surrounding area
|
||||
var/transfer_moles = gasefficency * env.total_moles()
|
||||
removed = env.remove(transfer_moles)
|
||||
|
||||
//100% oxygen atmosphere = 100% plasma production
|
||||
//100% nitrogen atmosphere = 0% plasma production
|
||||
//anything else is halfway in between; an atmosphere with no nitrogen or oxygen will still be at 50% (but steadily rise as more oxygen is made)
|
||||
var/total_moles = removed.total_moles()
|
||||
if(total_moles)
|
||||
retardation_factor += removed.oxygen / (total_moles * 2) - removed.nitrogen / (total_moles * 2)
|
||||
else
|
||||
retardation_factor -= 0.25
|
||||
|
||||
var/device_energy = mega_energy * REACTION_POWER_MODIFIER //device energy is provided by the zero point lasers
|
||||
device_energy *= removed.temperature / T0C //environmental heat directly affects device energy
|
||||
|
||||
@@ -14,6 +14,7 @@ log transactions
|
||||
desc = "For all your monetary needs!"
|
||||
icon = 'terminals.dmi'
|
||||
icon_state = "atm"
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
/obj/machinery/engine/laser
|
||||
name = "Zero-point laser"
|
||||
desc = "A super-powerful laser"
|
||||
var/visible = 1
|
||||
var/state = 1.0
|
||||
var/obj/effect/beam/e_beam/first
|
||||
var/power = 500
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "laser"
|
||||
anchored = 1
|
||||
var/id
|
||||
var/on = 0
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
|
||||
/obj/machinery/engine/laser/process()
|
||||
if(on)
|
||||
if(!first)
|
||||
src.first = new /obj/effect/beam/e_beam(src.loc)
|
||||
src.first.master = src
|
||||
src.first.dir = src.dir
|
||||
src.first.power = src.power
|
||||
src.first.freq = src.freq
|
||||
src.first.phase = src.phase
|
||||
src.first.phase_variance = src.phase_variance
|
||||
step(first, dir)
|
||||
if(first)
|
||||
src.first.updatebeam()
|
||||
else
|
||||
src.first.updatebeam()
|
||||
else
|
||||
if(first)
|
||||
del first
|
||||
|
||||
/obj/machinery/engine/laser/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(first)
|
||||
first.setpower(src.power)
|
||||
|
||||
|
||||
/obj/effect/beam/e_beam
|
||||
name = "Laser beam"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "u_laser"
|
||||
var/obj/machinery/engine/laser/master = null
|
||||
var/obj/effect/beam/e_beam/next = null
|
||||
var/power
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/beam/e_beam/New()
|
||||
src.sd_SetLuminosity(4)
|
||||
|
||||
/obj/effect/beam/e_beam/proc/updatebeam()
|
||||
if(!next)
|
||||
if(get_step(src.loc,src.dir))
|
||||
var/obj/effect/beam/e_beam/e = new /obj/effect/beam/e_beam(src.loc)
|
||||
e.dir = src.dir
|
||||
src.next = e
|
||||
e.master = src.master
|
||||
e.power = src.power
|
||||
e.phase = src.phase
|
||||
src.phase+=src.phase_variance
|
||||
e.freq = src.freq
|
||||
e.phase_variance = src.phase_variance
|
||||
if(src.loc.density == 0)
|
||||
for(var/atom/o in src.loc.contents)
|
||||
if(o.density || o == src.master || (ismob(o) && !istype(o, /mob/dead)) )
|
||||
o.laser_act(src)
|
||||
del src
|
||||
return
|
||||
else
|
||||
src.loc.laser_act(src)
|
||||
del e
|
||||
return
|
||||
step(e,e.dir)
|
||||
if(e)
|
||||
e.updatebeam()
|
||||
else
|
||||
next.updatebeam()
|
||||
|
||||
/atom/proc/laser_act(var/obj/effect/beam/e_beam/b)
|
||||
return
|
||||
|
||||
/mob/living/carbon/laser_act(var/obj/effect/beam/e_beam/b)
|
||||
for(var/t in organs)
|
||||
var/datum/organ/external/affecting = organs["[t]"]
|
||||
if (affecting.take_damage(0, b.power/400,0,0))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
|
||||
/obj/effect/beam/e_beam/Bump(atom/Obstacle)
|
||||
Obstacle.laser_act(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/beam/e_beam/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(src.next)
|
||||
src.next.setpower(powera)
|
||||
|
||||
/obj/effect/beam/e_beam/Bumped()
|
||||
src.hit()
|
||||
return
|
||||
|
||||
/obj/effect/beam/e_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/effect/beam))
|
||||
return
|
||||
spawn( 0 )
|
||||
AM.laser_act(src)
|
||||
src.hit()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/beam/e_beam/Del()
|
||||
if(next)
|
||||
del(next)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/effect/beam/e_beam/proc/hit()
|
||||
del src
|
||||
return
|
||||
@@ -1,130 +0,0 @@
|
||||
//The laser control computer
|
||||
//Used to control the lasers
|
||||
/obj/machinery/computer/lasercon
|
||||
name = "Laser control computer"
|
||||
var/obj/machinery/engine/laser/laser = null
|
||||
icon_state = "atmos"
|
||||
var/id
|
||||
var/advanced = 0
|
||||
|
||||
/obj/machinery/computer/lasercon/New()
|
||||
spawn(1)
|
||||
if(istype(src.id,/list))
|
||||
laser = list()
|
||||
for(var/obj/machinery/engine/laser/las in world)
|
||||
if(las.id in src.id)
|
||||
laser += las
|
||||
else
|
||||
for(var/obj/machinery/engine/laser/las in world)
|
||||
if(las.id == src.id)
|
||||
laser = list(las)
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/attack_ai(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/lasercon/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/proc/interact(mob/user)
|
||||
|
||||
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
user.machine = null
|
||||
user << browse(null, "window=powcomp")
|
||||
return
|
||||
|
||||
|
||||
user.machine = src
|
||||
var/t = "<TT><B>Laser status monitor</B><HR>"
|
||||
|
||||
var/obj/machinery/engine/laser/laser = src.laser[1]
|
||||
|
||||
if(!laser)
|
||||
t += "\red No laser found"
|
||||
else
|
||||
|
||||
|
||||
t += "Power level: <A href = '?src=\ref[src];input=-4'>-</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(laser.power,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>+</A><BR>"
|
||||
if(advanced)
|
||||
t += "Frequency: <A href = '?src=\ref[src];freq=-10000'>-</A> <A href = '?src=\ref[src];freq=-1000'>-</A> [add_lspace(laser.freq,5)] <A href = '?src=\ref[src];freq=1000'>+</A> <A href = '?src=\ref[src];freq=10000'>+</A><BR>"
|
||||
|
||||
t += "Output: [laser.on ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
||||
|
||||
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A></TT>"
|
||||
|
||||
user << browse(t, "window=lascomp;size=420x700")
|
||||
onclose(user, "lascomp")
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/Topic(href, href_list)
|
||||
..()
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=lascomp")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
else if( href_list["input"] )
|
||||
var/i = text2num(href_list["input"])
|
||||
var/d = 0
|
||||
switch(i)
|
||||
if(-4)
|
||||
d = -1000
|
||||
if(4)
|
||||
d = 1000
|
||||
if(1)
|
||||
d = 1
|
||||
if(-1)
|
||||
d = -1
|
||||
if(2)
|
||||
d = 10
|
||||
if(-2)
|
||||
d = -10
|
||||
if(3)
|
||||
d = 100
|
||||
if(-3)
|
||||
d = -100
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
laser.power += d
|
||||
laser.setpower(max(1, min(3000, laser.power)))// clamp to range
|
||||
src.updateDialog()
|
||||
else if( href_list["online"] )
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
laser.on = !laser.on
|
||||
src.updateDialog()
|
||||
else if( href_list["freq"] )
|
||||
var/amt = text2num(href_list["freq"])
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
if(laser.freq+amt>0)
|
||||
laser.freq+=amt
|
||||
src.updateDialog()
|
||||
/obj/machinery/computer/lasercon/process()
|
||||
if(!(stat & (NOPOWER|BROKEN)) )
|
||||
use_power(250)
|
||||
|
||||
//src.updateDialog()
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "broken"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 50 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
|
||||
|
||||
/obj/machinery/engine/supermatter
|
||||
name = "Supermatter"
|
||||
desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it."
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
var/gasefficency = 0.25
|
||||
|
||||
var/det = 0
|
||||
var/previousdet = 0
|
||||
var/const/explosiondet = 3500
|
||||
|
||||
var/const/warningtime = 50 // Make the CORE OVERLOAD message repeat only every aprox. ?? seconds
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
|
||||
/obj/machinery/engine/klaxon
|
||||
name = "Emergency Klaxon"
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/machinery/engine/supermatter/sup
|
||||
|
||||
/obj/machinery/engine/klaxon/process()
|
||||
if(!sup)
|
||||
for(var/obj/machinery/engine/supermatter/T in world)
|
||||
sup = T
|
||||
break
|
||||
if(sup.det >= 1)
|
||||
return
|
||||
|
||||
/obj/machinery/engine/supermatter/process()
|
||||
|
||||
var/turf/simulated/L = loc
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/transfer_moles = gasefficency * env.total_moles()
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
previousdet = det
|
||||
det += (removed.temperature - 1000) / 150
|
||||
det = max(det, 0)
|
||||
|
||||
if(det > 0 && removed.temperature > 1000) // while the core is still damaged and it's still worth noting its status
|
||||
if((world.realtime - lastwarning) / 10 >= warningtime)
|
||||
lastwarning = world.realtime
|
||||
if(explosiondet - det <= 300)
|
||||
radioalert("CORE EXPLOSION IMMINENT","Core control computer")
|
||||
else if(det >= previousdet) // The damage is still going up
|
||||
radioalert("CORE OVERLOAD","Core control computer")
|
||||
else // Phew, we're safe
|
||||
radioalert("Core returning to safe operating levels.","Core control computer")
|
||||
|
||||
if(det > explosiondet)
|
||||
roundinfo.core = 1
|
||||
//proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, force = 0)
|
||||
explosion(src.loc,8,15,20,30,1)
|
||||
det = 0
|
||||
|
||||
if (!removed)
|
||||
return 1
|
||||
|
||||
var/power = max(round((removed.temperature - T0C) / 20), 0) //Total laser power plus an overload factor
|
||||
|
||||
//Get the collective laser power
|
||||
for(var/dir in cardinal)
|
||||
var/turf/T = get_step(L, dir)
|
||||
for(var/obj/effect/beam/e_beam/item in T)
|
||||
power += item.power
|
||||
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
|
||||
var/device_energy = oxygen * power
|
||||
|
||||
device_energy *= removed.temperature / T0C
|
||||
|
||||
device_energy = round(device_energy * REACTION_POWER_MODIFIER)
|
||||
|
||||
//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"
|
||||
|
||||
//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 += max((device_energy / THERMAL_RELEASE_MODIFIER), 0)
|
||||
|
||||
removed.temperature = min(removed.temperature, 1500)
|
||||
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(round(device_energy / PLASMA_RELEASE_MODIFIER), 0)
|
||||
|
||||
removed.oxygen += max(round((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER), 0)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
//Not functional currently. -- SkyMarshal
|
||||
/*
|
||||
for(var/mob/living/carbon/l in view(src, 6)) // you have to be seeing the core to get hallucinations
|
||||
if(prob(10) && !(l.glasses && istype(l.glasses, /obj/item/clothing/glasses/meson)))
|
||||
l.hallucination = 50
|
||||
*/
|
||||
for(var/mob/living/l in view(src,3))
|
||||
l.bruteloss += 50
|
||||
l.updatehealth()
|
||||
|
||||
return 1
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/stamperaser
|
||||
name = "Eraser"
|
||||
desc = "Some type of eraser, you guess."
|
||||
name = "eraser"
|
||||
desc = "It looks like some kind of eraser."
|
||||
flags = FPRINT | TABLEPASS
|
||||
icon = 'items.dmi'
|
||||
icon_state = "zippo"
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
var/server_name = null // server name (for world name / status)
|
||||
var/server_suffix = 0 // generate numeric suffix based on server port
|
||||
|
||||
var/medal_hub = null // medal hub name
|
||||
var/medal_password = null // medal hub password
|
||||
|
||||
var/log_ooc = 0 // log OOC channek
|
||||
var/log_ooc = 0 // log OOC channel
|
||||
var/log_access = 0 // log login/logout
|
||||
var/log_say = 0 // log client say
|
||||
var/log_admin = 0 // log admin actions
|
||||
@@ -35,6 +32,7 @@
|
||||
var/Tensioner_Active = 0 // If the tensioner is running.
|
||||
var/allow_Metadata = 0 // Metadata is supported.
|
||||
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||
var/Ticklag = 0.9
|
||||
|
||||
var/list/mode_names = list()
|
||||
var/list/modes = list() // allowed modes
|
||||
@@ -51,6 +49,8 @@
|
||||
|
||||
var/server
|
||||
var/banappeals
|
||||
var/wikiurl
|
||||
var/forumurl
|
||||
|
||||
//Alert level description
|
||||
var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
@@ -211,12 +211,6 @@
|
||||
if ("serversuffix")
|
||||
config.server_suffix = 1
|
||||
|
||||
if ("medalhub")
|
||||
config.medal_hub = value
|
||||
|
||||
if ("medalpass")
|
||||
config.medal_password = value
|
||||
|
||||
if ("hostedby")
|
||||
config.hostedby = value
|
||||
|
||||
@@ -226,6 +220,12 @@
|
||||
if ("banappeals")
|
||||
config.banappeals = value
|
||||
|
||||
if ("wikiurl")
|
||||
config.wikiurl = value
|
||||
|
||||
if ("forumurl")
|
||||
config.forumurl = value
|
||||
|
||||
if ("guest_jobban")
|
||||
config.guest_jobban = 1
|
||||
|
||||
@@ -297,6 +297,9 @@
|
||||
if("useircbot")
|
||||
useircbot = 1
|
||||
|
||||
if("ticklag")
|
||||
Ticklag = text2num(value)
|
||||
|
||||
if("require_heads_alive")
|
||||
config.require_heads_alive = value
|
||||
|
||||
@@ -381,8 +384,8 @@
|
||||
sqllogging = 1
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
/*/datum/configuration/proc/loadforumsql(filename) // -- TLE
|
||||
/*
|
||||
/datum/configuration/proc/loadforumsql(filename) // -- TLE
|
||||
var/text = file2text(filename)
|
||||
|
||||
if (!text)
|
||||
@@ -433,8 +436,8 @@
|
||||
if ("authenticatedgroup")
|
||||
forum_authenticated_group = value
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"*/
|
||||
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
*/
|
||||
/datum/configuration/proc/pick_mode(mode_name)
|
||||
// I wish I didn't have to instance the game modes in order to look up
|
||||
// their information, but it is the only way (at least that I know of).
|
||||
|
||||
@@ -498,7 +498,7 @@ client
|
||||
togglebuildmode(MOB)
|
||||
href_list["datumrefresh"] = href_list["build_mode"]
|
||||
|
||||
/* else if (href_list["direct_control"])
|
||||
else if (href_list["direct_control"])
|
||||
if(!href_list["direct_control"])
|
||||
return
|
||||
var/mob/MOB = locate(href_list["direct_control"])
|
||||
@@ -510,7 +510,7 @@ client
|
||||
return
|
||||
|
||||
if(usr.client)
|
||||
usr.client.cmd_assume_direct_control(MOB)*/
|
||||
usr.client.cmd_assume_direct_control(MOB)
|
||||
|
||||
else if (href_list["delall"])
|
||||
if(!href_list["delall"])
|
||||
|
||||
+4
-4
@@ -454,8 +454,8 @@ datum/mind
|
||||
// copy targets
|
||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||
if (valid_head)
|
||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = src
|
||||
rev_obj.target = O.target
|
||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||
@@ -1011,8 +1011,8 @@ datum/mind
|
||||
// copy targets
|
||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||
if (valid_head)
|
||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = src
|
||||
rev_obj.target = O.target
|
||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
|
||||
//END Admin Things
|
||||
|
||||
//Key auth things
|
||||
// authenticate = 0
|
||||
// var/authenticated = 0
|
||||
// var/authenticating = 0
|
||||
|
||||
var/listen_ooc = 1
|
||||
var/move_delay = 1
|
||||
var/moving = null
|
||||
|
||||
@@ -151,9 +151,7 @@ var
|
||||
shuttlecoming = 0
|
||||
|
||||
join_motd = null
|
||||
auth_motd = null
|
||||
rules = null
|
||||
no_auth_motd = null
|
||||
forceblob = 0
|
||||
|
||||
custom_event_msg = null
|
||||
|
||||
+1
-7
@@ -383,7 +383,6 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
|
||||
|
||||
/obj/hud
|
||||
name = "hud"
|
||||
unacidable = 1
|
||||
@@ -400,9 +399,8 @@
|
||||
var/obj/screen/g_dither = null
|
||||
var/obj/screen/blurry = null
|
||||
var/list/darkMask = null
|
||||
var/obj/screen/station_explosion = null
|
||||
|
||||
var/h_type = /obj/screen
|
||||
var/h_type = /obj/screen //this is like...the most pointless thing ever. Use a god damn define!
|
||||
|
||||
/obj/item
|
||||
name = "item"
|
||||
@@ -418,10 +416,6 @@
|
||||
var/burning = null
|
||||
var/hitsound = null
|
||||
var/w_class = 3.0
|
||||
var/wielded = 0 // 1 if item is two handed and grabbed with two hands
|
||||
var/twohanded = 0 // Two handed and wielded off by default, nyoro~n -Agouri
|
||||
var/force_unwielded = 0
|
||||
var/force_wielded = 0
|
||||
var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
|
||||
flags = FPRINT | TABLEPASS
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
@@ -63,10 +63,19 @@
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/OriginalMob = null
|
||||
|
||||
Del()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
..()
|
||||
/obj/effect/decal/cleanable/blood/Del()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/New()
|
||||
..()
|
||||
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
|
||||
return
|
||||
if(src.loc && isturf(src.loc))
|
||||
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
|
||||
if(B != src)
|
||||
del(B)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip
|
||||
name = "drips of blood"
|
||||
|
||||
+115
-42
@@ -278,6 +278,23 @@
|
||||
plant_type = 0
|
||||
growthstages = 6
|
||||
|
||||
/obj/item/seeds/bluespacetomatoseed
|
||||
name = "pack of blue-space tomato seeds"
|
||||
desc = "These seeds grow into blue-space tomato plants."
|
||||
icon_state = "seed-bluespacetomato"
|
||||
mypath = "/obj/item/seeds/bluespacetomatoseed"
|
||||
species = "bluespacetomato"
|
||||
plantname = "Blue-Space Tomato Plants"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato"
|
||||
lifespan = 25
|
||||
endurance = 15
|
||||
maturation = 8
|
||||
production = 6
|
||||
yield = 2
|
||||
potency = 10
|
||||
plant_type = 0
|
||||
growthstages = 6
|
||||
|
||||
/obj/item/seeds/cornseed
|
||||
name = "pack of corn seeds"
|
||||
desc = "I don't mean to sound corny..."
|
||||
@@ -400,7 +417,7 @@
|
||||
potency = 10
|
||||
oneharvest = 1
|
||||
plant_type = 0
|
||||
growthstages = 5
|
||||
growthstages = 3
|
||||
|
||||
/obj/item/seeds/amanitamycelium
|
||||
name = "pack of fly amanita mycelium"
|
||||
@@ -1143,46 +1160,6 @@
|
||||
reagents.add_reagent("coco", 4+round((potency / 5), 1))
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
//This object is just a transition object. All it does is make a grass tile and delete itself.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
|
||||
seed = "/obj/item/seeds/grassseed"
|
||||
name = "grass"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 20
|
||||
New()
|
||||
new/obj/item/stack/tile/grass(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/money
|
||||
seed = "/obj/item/seeds/cashseed"
|
||||
name = "dosh"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 10
|
||||
New()
|
||||
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
|
||||
if(0 to 10)
|
||||
new/obj/item/weapon/spacecash/(src.loc)
|
||||
if(11 to 20)
|
||||
new/obj/item/weapon/spacecash/c10(src.loc)
|
||||
if(21 to 30)
|
||||
new/obj/item/weapon/spacecash/c20(src.loc)
|
||||
if(31 to 40)
|
||||
new/obj/item/weapon/spacecash/c50(src.loc)
|
||||
if(41 to 50)
|
||||
new/obj/item/weapon/spacecash/c100(src.loc)
|
||||
if(51 to 60)
|
||||
new/obj/item/weapon/spacecash/c200(src.loc)
|
||||
if(61 to 80)
|
||||
new/obj/item/weapon/spacecash/c500(src.loc)
|
||||
else
|
||||
new/obj/item/weapon/spacecash/c1000(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
|
||||
seed = "/obj/item/seeds/sugarcaneseed"
|
||||
name = "sugarcane"
|
||||
@@ -1707,7 +1684,7 @@
|
||||
seed = "/obj/item/seeds/towermycelium"
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
|
||||
user.show_message("<span class='notice'>You make planks out of the [src]!</span>", 1)
|
||||
for(var/i=0,i<2,i++)
|
||||
new /obj/item/stack/sheet/wood (src.loc)
|
||||
@@ -1985,3 +1962,99 @@
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
// *************************************
|
||||
// Complex Grown Object Defines -
|
||||
// Putting these at the bottom so they don't clutter the list up. -Cheridan
|
||||
// *************************************
|
||||
|
||||
//This object is just a transition object. All it does is make a grass tile and delete itself.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
|
||||
seed = "/obj/item/seeds/grassseed"
|
||||
name = "grass"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 20
|
||||
New()
|
||||
new/obj/item/stack/tile/grass(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/money
|
||||
seed = "/obj/item/seeds/cashseed"
|
||||
name = "dosh"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 10
|
||||
New()
|
||||
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
|
||||
if(0 to 10)
|
||||
new/obj/item/weapon/spacecash/(src.loc)
|
||||
if(11 to 20)
|
||||
new/obj/item/weapon/spacecash/c10(src.loc)
|
||||
if(21 to 30)
|
||||
new/obj/item/weapon/spacecash/c20(src.loc)
|
||||
if(31 to 40)
|
||||
new/obj/item/weapon/spacecash/c50(src.loc)
|
||||
if(41 to 50)
|
||||
new/obj/item/weapon/spacecash/c100(src.loc)
|
||||
if(51 to 60)
|
||||
new/obj/item/weapon/spacecash/c200(src.loc)
|
||||
if(61 to 80)
|
||||
new/obj/item/weapon/spacecash/c500(src.loc)
|
||||
else
|
||||
new/obj/item/weapon/spacecash/c1000(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
|
||||
seed = "/obj/item/seeds/bluespacetomatoseed"
|
||||
name = "blue-space tomato"
|
||||
desc = "So lubricated, you might slip through space-time."
|
||||
icon_state = "bluespacetomato"
|
||||
potency = 10
|
||||
origin_tech = "bluespace=3"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
|
||||
reagents.add_reagent("singulo", 1+round((potency / 5), 1))
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/mob/M = usr
|
||||
var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport.
|
||||
var/inner_teleport_radius = potency/15
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(M,outer_teleport_radius))
|
||||
if(T in orange(M,inner_teleport_radius)) continue
|
||||
if(istype(T,/turf/space)) continue
|
||||
if(T.density) continue
|
||||
if(T.x>world.maxx-outer_teleport_radius || T.x<outer_teleport_radius) continue
|
||||
if(T.y>world.maxy-outer_teleport_radius || T.y<outer_teleport_radius) continue
|
||||
turfs += T
|
||||
if(!turfs.len)
|
||||
var/list/turfs_to_pick_from = list()
|
||||
for(var/turf/T in orange(M,outer_teleport_radius))
|
||||
if(!(T in orange(M,inner_teleport_radius)))
|
||||
turfs_to_pick_from += T
|
||||
turfs += pick(/turf in turfs_to_pick_from)
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
switch(rand(1,2))//Allows for easy addition of more bluespace weirdness.
|
||||
if(1) // Teleports the person who threw the tomato.
|
||||
new/obj/effect/effect/sparks(M.loc)
|
||||
new/obj/effect/decal/ash(M.loc) //Leaves a pile of ash behind for dramatic effect.
|
||||
M.loc = picked
|
||||
new/obj/effect/effect/sparks(M.loc) //Two set of sparks, one before the teleport and one after.
|
||||
if(2) //Teleports mob the tomato hit instead.
|
||||
for(var/mob/A in get_turf(hit_atom))
|
||||
new/obj/effect/effect/sparks(A.loc)
|
||||
new/obj/effect/decal/ash(A.loc)
|
||||
A.loc = picked
|
||||
new/obj/effect/effect/sparks(A.loc)
|
||||
src.visible_message("<span class='notice'>The [src.name] has been squashed, causing a distortion in space-time.</span>","<span class='moderate'>You hear a smack.</span>")
|
||||
del(src)
|
||||
return
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 6
|
||||
power_channel = ENVIRON
|
||||
var/network
|
||||
|
||||
New()
|
||||
if(z == 1)
|
||||
@@ -339,7 +340,7 @@
|
||||
layer = 2.6 // a bit above wires
|
||||
|
||||
/obj/machinery/power/generator
|
||||
name = "thermoelectric generator"
|
||||
name = "thermoelectric generator mark I"
|
||||
desc = "It's a high efficiency thermoelectric generator."
|
||||
icon_state = "teg"
|
||||
anchored = 1
|
||||
@@ -352,7 +353,7 @@
|
||||
var/lastgenlev = -1
|
||||
|
||||
/obj/machinery/power/generator_type2
|
||||
name = "thermoelectric generator"
|
||||
name = "thermoelectric generator mark II"
|
||||
desc = "It's a high efficiency thermoelectric generator."
|
||||
icon_state = "teg"
|
||||
anchored = 1
|
||||
|
||||
@@ -332,7 +332,7 @@
|
||||
|
||||
/obj/item/weapon/storage/flashbang_kit
|
||||
name = "flashbangs (WARNING)"
|
||||
desc = "<FONT color=red><B>WARNING: Do not use without reading these preautions!</B></FONT>\n<B>These devices are extremely dangerous and can cause blindness or deafness if used incorrectly.</B>\nThe chemicals contained in these devices have been tuned for maximal effectiveness and due to\nextreme safety precuaiotn shave been incased in a tamper-proof pack. DO NOT ATTEMPT TO OPEN\nFLASH WARNING: Do not use continually. Excercise extreme care when detonating in closed spaces.\n\tMake attemtps not to detonate withing range of 2 meters of the intended target. It is imperative\n\tthat the targets visit a medical professional after usage. Damage to eyes increases extremely per\n\tuse and according to range. Glasses with flash resistant filters DO NOT always work on high powered\n\tflash devices such as this. <B>EXERCISE CAUTION REGARDLESS OF CIRCUMSTANCES</B>\nSOUND WARNING: Do not use continually. Visit a medical professional if hearing is lost.\n\tThere is a slight chance per use of complete deafness. Exercise caution and restraint.\nSTUN WARNING: If the intended or unintended target is too close to detonation the resulting sound\n\tand flash have been known to cause extreme sensory overload resulting in temporary\n\tincapacitation.\n<B>DO NOT USE CONTINUALLY</B>\nOperating Directions:\n\t1. Pull detonnation pin. <B>ONCE THE PIN IS PULLED THE GRENADE CAN NOT BE DISARMED!</B>\n\t2. Throw grenade. <B>NEVER HOLD A LIVE FLASHBANG</B>\n\t3. The grenade will detonste 10 seconds hafter being primed. <B>EXCERCISE CAUTION</B>\n\t-<B>Never prime another grenade until after the first is detonated</B>\nNote: Usage of this pyrotechnic device without authorization is an extreme offense and can\nresult in severe punishment upwards of <B>10 years in prison per use</B>.\n\nDefault 3 second wait till from prime to detonation. This can be switched with a screwdriver\nto 10 seconds.\n\nCopyright of Nanotrasen Industries- Military Armnaments Division\nThis device was created by Nanotrasen Labs a member of the Expert Advisor Corporation"
|
||||
desc = ""
|
||||
icon_state = "flashbang"
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
@@ -601,7 +601,7 @@
|
||||
/obj/item/stack/sheet/plasma,
|
||||
/obj/item/stack/sheet/uranium,
|
||||
/obj/item/stack/sheet/diamond,
|
||||
/obj/item/stack/sheet/clown,
|
||||
// /obj/item/stack/sheet/clown,
|
||||
/obj/item/stack/sheet/plasteel,
|
||||
/obj/item/stack/rods
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//SUPPLY PACKS
|
||||
//NOTE: only secure crate types use the access var (and are lockable)
|
||||
//NOTE: hidden packs only show up when the computer has been hacked.
|
||||
//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
|
||||
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
|
||||
/datum/supply_packs/specialops
|
||||
name = "Special Ops supplies"
|
||||
@@ -389,7 +390,8 @@
|
||||
"/obj/item/seeds/carrotseed",
|
||||
"/obj/item/seeds/sunflowerseed",
|
||||
"/obj/item/seeds/chantermycelium",
|
||||
"/obj/item/seeds/potatoseed")
|
||||
"/obj/item/seeds/potatoseed",
|
||||
"/obj/item/seeds/sugarcaneseed")
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Seeds crate"
|
||||
@@ -711,8 +713,8 @@
|
||||
name = "Ballistic gear crate"
|
||||
contains = list("/obj/item/clothing/suit/armor/bulletproof",
|
||||
"/obj/item/clothing/suit/armor/bulletproof",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/combat2",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/combat2")
|
||||
"/obj/item/weapon/gun/projectile/shotgun/pump/combat",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/pump/combat")
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Ballistic gear crate"
|
||||
@@ -793,5 +795,20 @@
|
||||
..()
|
||||
|
||||
|
||||
/datum/supply_packs/contraband
|
||||
contains = list("/obj/item/weapon/contraband/poster",) //We randomly pick 5 items from this list through the constructor, look below
|
||||
name = "Contraband Crate"
|
||||
cost = 30
|
||||
containertype = "/obj/structure/closet/crate/contraband"
|
||||
containername = "Contraband crate"
|
||||
group = "ERROR"
|
||||
contraband = 1
|
||||
|
||||
/datum/supply_packs/contraband/New()
|
||||
var/list/tempContains = list()
|
||||
for(var/i = 0,i<5,i++)
|
||||
tempContains += pick(contains)
|
||||
src.contains = tempContains
|
||||
..()
|
||||
|
||||
//SUPPLY PACKS
|
||||
@@ -4,6 +4,68 @@
|
||||
throw_range = 20
|
||||
force = 0
|
||||
|
||||
|
||||
/////////Toy Mechs/////////
|
||||
|
||||
/obj/item/toy/prize
|
||||
icon = 'toy.dmi'
|
||||
icon_state = "ripleytoy"
|
||||
|
||||
/obj/item/toy/prize/ripley
|
||||
name = "toy ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 1/11"
|
||||
|
||||
/obj/item/toy/prize/fireripley
|
||||
name = "toy firefighting ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 2/11"
|
||||
icon_state = "fireripleytoy"
|
||||
|
||||
/obj/item/toy/prize/deathripley
|
||||
name = "toy deathsquad ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 3/11"
|
||||
icon_state = "deathripleytoy"
|
||||
|
||||
/obj/item/toy/prize/gygax
|
||||
name = "toy gygax"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 4/11"
|
||||
icon_state = "gygaxtoy"
|
||||
|
||||
/obj/item/toy/prize/durand
|
||||
name = "toy gygax"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 5/11"
|
||||
icon_state = "durandprize"
|
||||
|
||||
/obj/item/toy/prize/honk
|
||||
name = "toy H.O.N.K."
|
||||
desc = "Mini-Mecha action figure! Collect them all! 6/11"
|
||||
icon_state = "honkprize"
|
||||
|
||||
/obj/item/toy/prize/marauder
|
||||
name = "toy marauder"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 7/11"
|
||||
icon_state = "marauderprize"
|
||||
|
||||
/obj/item/toy/prize/seraph
|
||||
name = "toy seraph"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 8/11"
|
||||
icon_state = "seraphprize"
|
||||
|
||||
/obj/item/toy/prize/mauler
|
||||
name = "toy mauler"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 9/11"
|
||||
icon_state = "maulerprize"
|
||||
|
||||
/obj/item/toy/prize/odysseus
|
||||
name = "toy odysseus"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 10/11"
|
||||
icon_state = "odysseusprize"
|
||||
|
||||
/obj/item/toy/prize/phazon
|
||||
name = "toy phazon"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 11/11"
|
||||
icon_state = "phazonprize"
|
||||
|
||||
|
||||
/obj/item/toy/syndicateballoon
|
||||
name = "syndicate balloon"
|
||||
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
hidden_prices = "2;5"
|
||||
points = 15
|
||||
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
||||
charge_type = "engineering"
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
name = "Hot Drinks machine"
|
||||
@@ -306,9 +307,26 @@
|
||||
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola"
|
||||
// product_hideamt = "20"
|
||||
hidden_prices = "1"
|
||||
product_ads = "What the fuck is this shit?;Why would you buy this;holy shit help;i'm stuck;in;a;universe;factory;AAAAAARGH!;HEIL... Stalin?;CAPITALIST PIGS;FUCK THE WEST"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
charge_type = "soda"
|
||||
|
||||
/obj/machinery/vending/tool
|
||||
name = "YouTool"
|
||||
desc = "Tools for tools."
|
||||
icon_state = "tool"
|
||||
icon_deny = "tool-deny"
|
||||
req_access_txt = "12" //Maintenance access
|
||||
product_paths = "/obj/item/weapon/cable_coil/random;/obj/item/weapon/crowbar;/obj/item/weapon/weldingtool;/obj/item/weapon/wirecutters;/obj/item/weapon/wrench;/obj/item/device/analyzer;/obj/item/device/t_scanner"
|
||||
// product_amounts = "10;5;3;5;5;5;5"
|
||||
product_prices = "1;2;3;2;2;2;2"
|
||||
product_prices = "1"
|
||||
product_hidden = "/obj/item/weapon/weldingtool/largetank;/obj/item/device/multitool"
|
||||
// product_hideamt = "2;2"
|
||||
hidden_prices = "4;4"
|
||||
product_coin = "/obj/item/clothing/gloves/yellow"
|
||||
product_coin_amt = "1"
|
||||
charge_type = "engineering"
|
||||
|
||||
/obj/machinery/vending/genetics
|
||||
name = "Genetics Dispenser"
|
||||
desc = "Medical drug dispenser."
|
||||
|
||||
@@ -2,12 +2,6 @@
|
||||
name = "weapon"
|
||||
icon = 'weapons.dmi'
|
||||
|
||||
/obj/item/weapon/offhand
|
||||
name = "offhand"
|
||||
var/linked_weapon_name = ""
|
||||
w_class = 5.0
|
||||
icon_state = "offhand"
|
||||
|
||||
/obj/item/weapon/shield
|
||||
name = "shield"
|
||||
|
||||
@@ -645,7 +639,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
flags = ONBELT
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
|
||||
/obj/item/weapon/clipboard/notebook
|
||||
name = "notebook"
|
||||
@@ -711,17 +705,6 @@
|
||||
icon = 'items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
|
||||
/obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri
|
||||
icon_state = "fireaxe0"
|
||||
name = "fire axe"
|
||||
desc = "A tool for breaking down those obstructions that stop you from fighting that fire." //Less ROBUST. --SkyMarshal
|
||||
force = 5
|
||||
w_class = 4.0
|
||||
flags = ONBACK
|
||||
twohanded = 1
|
||||
force_unwielded = 5
|
||||
force_wielded = 18
|
||||
|
||||
/obj/item/weapon/cane
|
||||
name = "cane"
|
||||
desc = "A cane used by a true gentlemen."
|
||||
|
||||
@@ -117,6 +117,15 @@
|
||||
|
||||
var/walltype = "wall"
|
||||
|
||||
/turf/simulated/wall/heatshield
|
||||
thermal_conductivity = 0
|
||||
opacity = 0
|
||||
name = "Heat Shielding"
|
||||
icon = 'thermal.dmi'
|
||||
icon_state = "thermal"
|
||||
heat_capacity = 625000 //twice the cap of a normal wall
|
||||
walltype = "heatshield"
|
||||
|
||||
/turf/simulated/wall/cult
|
||||
name = "wall"
|
||||
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
|
||||
|
||||
@@ -27,7 +27,6 @@ Today, these people were mean:
|
||||
LoadBans()
|
||||
process_teleport_locs() //Sets up the wizard teleport locations
|
||||
process_ghost_teleport_locs() //Sets up ghost teleport locations.
|
||||
sleep_offline = 1
|
||||
|
||||
if (config.kick_inactive)
|
||||
spawn(30)
|
||||
@@ -201,4 +200,4 @@ proc/countJob(rank)
|
||||
var/mob/M = T.host
|
||||
if(M.client && M.machine == subject)
|
||||
subject.attack_hand(M)
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
|
||||
/world/proc/load_motd()
|
||||
join_motd = file2text("config/motd.txt")
|
||||
auth_motd = file2text("config/motd-auth.txt")
|
||||
no_auth_motd = file2text("config/motd-noauth.txt")
|
||||
|
||||
/world/proc/load_rules()
|
||||
rules = file2text("config/rules.html")
|
||||
@@ -108,8 +106,6 @@
|
||||
|
||||
..()
|
||||
|
||||
sleep(50)
|
||||
|
||||
plmaster = new /obj/effect/overlay( )
|
||||
plmaster.icon = 'tile_effects.dmi'
|
||||
plmaster.icon_state = "plasma"
|
||||
@@ -125,7 +121,8 @@
|
||||
src.update_status()
|
||||
|
||||
master_controller = new /datum/controller/game_controller()
|
||||
spawn(-1) master_controller.setup()
|
||||
spawn(-1)
|
||||
master_controller.setup()
|
||||
return
|
||||
|
||||
//Crispy fullban
|
||||
@@ -197,4 +194,4 @@
|
||||
/obj/effect/decal/point/point()
|
||||
set src in oview()
|
||||
set hidden = 1
|
||||
return
|
||||
return
|
||||
|
||||
+10
-2
@@ -221,9 +221,17 @@
|
||||
if (!output) output = "5"
|
||||
return output
|
||||
|
||||
/proc/isblockon(hnumber, bnumber)
|
||||
/proc/isblockon(hnumber, bnumber , var/UI = 0)
|
||||
|
||||
var/temp2
|
||||
temp2 = hex2num(hnumber)
|
||||
|
||||
if(UI)
|
||||
if(temp2 >= 2050)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
if (bnumber == HULKBLOCK || bnumber == TELEBLOCK)
|
||||
if (temp2 >= 3500 + BLOCKADD)
|
||||
return 1
|
||||
@@ -313,7 +321,7 @@
|
||||
H.g_eyes = hex2num(getblock(structure,9,3))
|
||||
H.b_eyes = hex2num(getblock(structure,10,3))
|
||||
|
||||
if (isblockon(getblock(structure, 11,3),11))
|
||||
if (isblockon(getblock(structure, 11,3),11 , 1))
|
||||
H.gender = FEMALE
|
||||
else
|
||||
H.gender = MALE
|
||||
|
||||
@@ -2,86 +2,87 @@
|
||||
name = "black hole"
|
||||
icon = 'objects.dmi'
|
||||
desc = "FUCK FUCK FUCK AAAHHH"
|
||||
icon_state = "bhole2"
|
||||
opacity = 0
|
||||
icon_state = "bhole3"
|
||||
opacity = 1
|
||||
unacidable = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke
|
||||
|
||||
|
||||
/obj/effect/bhole/New()
|
||||
src.smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||
src.smoke.set_up(5, 0, src)
|
||||
src.smoke.attach(src)
|
||||
src:life()
|
||||
spawn(4)
|
||||
controller()
|
||||
|
||||
/obj/effect/bhole/proc/controller()
|
||||
while(src)
|
||||
|
||||
if(!isturf(loc))
|
||||
del(src)
|
||||
return
|
||||
|
||||
//DESTROYING STUFF AT THE EPICENTER
|
||||
for(var/mob/living/M in orange(1,src))
|
||||
del(M)
|
||||
for(var/obj/O in orange(1,src))
|
||||
del(O)
|
||||
for(var/turf/simulated/ST in orange(1,src))
|
||||
ST.ReplaceWithSpace()
|
||||
|
||||
sleep(6)
|
||||
grav(10, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 8, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 9, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 7, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 5, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 6, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 4, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 3, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 2, 2, 75,25 )
|
||||
sleep(6)
|
||||
|
||||
|
||||
/obj/effect/bhole/Bumped(atom/A)
|
||||
if (istype(A,/mob/living))
|
||||
del(A)
|
||||
else
|
||||
A:ex_act(1.0)
|
||||
|
||||
|
||||
/obj/effect/bhole/proc/life() //Oh man , this will LAG
|
||||
|
||||
if (prob(10))
|
||||
src.anchored = 0
|
||||
step(src,pick(alldirs))
|
||||
if (prob(30))
|
||||
//MOVEMENT
|
||||
if( prob(50) )
|
||||
src.anchored = 0
|
||||
step(src,pick(alldirs))
|
||||
src.anchored = 1
|
||||
src.anchored = 1
|
||||
|
||||
for (var/atom/X in orange(9,src))
|
||||
if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7))
|
||||
if (!X:anchored)
|
||||
step_towards(X,src)
|
||||
/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
|
||||
del(src)
|
||||
return
|
||||
for(var/t = -r, t < r, t++)
|
||||
affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
return
|
||||
|
||||
for (var/atom/B in orange(7,src))
|
||||
if (istype(B,/obj))
|
||||
if (!B:anchored && prob(50))
|
||||
step_towards(B,src)
|
||||
if(prob(10)) B:ex_act(3.0)
|
||||
/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
//Get turf at coordinate
|
||||
var/turf/T = locate(x, y, z)
|
||||
if(isnull(T)) return
|
||||
|
||||
//Pulling and/or ex_act-ing movable atoms in that turf
|
||||
if( prob(pull_chance) )
|
||||
for(var/obj/O in T.contents)
|
||||
if(O.anchored)
|
||||
O.ex_act(ex_act_force)
|
||||
else
|
||||
B:anchored = 0
|
||||
//step_towards(B,src)
|
||||
//B:anchored = 1
|
||||
if(prob(10)) B:ex_act(3.0)
|
||||
else if (istype(B,/turf))
|
||||
if (istype(B,/turf/simulated) && (prob(1) && prob(75)))
|
||||
src.smoke.start()
|
||||
B:ReplaceWithSpace()
|
||||
else if (istype(B,/mob/living))
|
||||
step_towards(B,src)
|
||||
step_towards(O,src)
|
||||
for(var/mob/living/M in T.contents)
|
||||
step_towards(M,src)
|
||||
|
||||
|
||||
for (var/atom/A in orange(4,src))
|
||||
if (istype(A,/obj))
|
||||
if (!A:anchored && prob(90))
|
||||
step_towards(A,src)
|
||||
if(prob(30)) A:ex_act(2.0)
|
||||
else
|
||||
A:anchored = 0
|
||||
//step_towards(A,src)
|
||||
//A:anchored = 1
|
||||
if(prob(30)) A:ex_act(2.0)
|
||||
else if (istype(A,/turf))
|
||||
if (istype(A,/turf/simulated) && prob(1))
|
||||
src.smoke.start()
|
||||
A:ReplaceWithSpace()
|
||||
else if (istype(A,/mob/living))
|
||||
step_towards(A,src)
|
||||
|
||||
|
||||
for (var/atom/D in orange(1,src))
|
||||
//if (hascall(D,"blackholed"))
|
||||
// call(D,"blackholed")(null)
|
||||
// continue
|
||||
if (istype(D,/mob/living))
|
||||
del(D)
|
||||
else
|
||||
D:ex_act(1.0)
|
||||
|
||||
spawn(17)
|
||||
life()
|
||||
//Destroying the turf
|
||||
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
|
||||
var/turf/simulated/ST = T
|
||||
ST.ReplaceWithSpace()
|
||||
return
|
||||
@@ -25,7 +25,7 @@
|
||||
if(/obj/item/weapon/circular_saw) del src
|
||||
if(/obj/item/weapon/kitchen/utensil/knife) del src
|
||||
if(/obj/item/weapon/scalpel) del src
|
||||
if(/obj/item/weapon/fireaxe) del src
|
||||
if(/obj/item/weapon/twohanded/fireaxe) del src
|
||||
if(/obj/item/weapon/hatchet) del src
|
||||
if(/obj/item/weapon/melee/energy) del src
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/proc/wormhole_event()
|
||||
spawn()
|
||||
var/list/pick_turfs = list()
|
||||
for(var/turf/simulated/floor/T in world)
|
||||
if(T.z == 1)
|
||||
pick_turfs += T
|
||||
|
||||
if(pick_turfs.len)
|
||||
//All ready. Announce that bad juju is afoot.
|
||||
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
|
||||
world << sound('spanomalies.ogg')
|
||||
|
||||
//prob(20) can be approximated to 1 wormhole every 5 turfs!
|
||||
//admittedly less random but totally worth it >_<
|
||||
var/event_duration = 3000 //~5 minutes in ticks
|
||||
var/number_of_selections = (pick_turfs.len/5)+1 //+1 to avoid division by zero!
|
||||
var/sleep_duration = round( event_duration / number_of_selections )
|
||||
var/end_time = world.time + event_duration //the time by which the event should have ended
|
||||
|
||||
var/increment = max(1,round(number_of_selections/50))
|
||||
// world << "DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]"
|
||||
|
||||
var/i = 1
|
||||
while( 1 )
|
||||
|
||||
//we've run into overtime. End the event
|
||||
if( end_time < world.time )
|
||||
// world << "DEBUG: we've run into overtime. End the event"
|
||||
return
|
||||
if( !pick_turfs.len )
|
||||
// world << "DEBUG: we've run out of turfs to pick. End the event"
|
||||
return
|
||||
|
||||
//loop it round
|
||||
i += increment
|
||||
i %= pick_turfs.len
|
||||
i++
|
||||
|
||||
//get our enter and exit locations
|
||||
var/turf/simulated/floor/enter = pick_turfs[i]
|
||||
pick_turfs -= enter //remove it from pickable turfs list
|
||||
if( !enter || !istype(enter) ) continue //sanity
|
||||
|
||||
var/turf/simulated/floor/exit = pick(pick_turfs)
|
||||
pick_turfs -= exit
|
||||
if( !exit || !istype(exit) ) continue //sanity
|
||||
|
||||
create_wormhole(enter,exit)
|
||||
|
||||
sleep(sleep_duration) //have a well deserved nap!
|
||||
|
||||
|
||||
//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions?
|
||||
/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf)
|
||||
var/obj/effect/portal/P = new /obj/effect/portal( enter )
|
||||
P.target = exit
|
||||
P.creator = null
|
||||
P.icon = 'objects.dmi'
|
||||
P.failchance = 0
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(300,600))
|
||||
del(P)
|
||||
@@ -0,0 +1,52 @@
|
||||
/obj/structure/cult
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'cult.dmi'
|
||||
|
||||
/obj/structure/cult/talisman
|
||||
name = "Altar"
|
||||
desc = "A bloodstained altar dedicated to Nar-Sie"
|
||||
icon_state = "talismanaltar"
|
||||
|
||||
|
||||
/obj/structure/cult/forge
|
||||
name = "Daemon forge"
|
||||
desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie"
|
||||
icon_state = "forge"
|
||||
|
||||
/obj/structure/cult/pylon
|
||||
name = "Pylon"
|
||||
desc = "A floating crystal that hums with an unearthly energy"
|
||||
icon_state = "pylon"
|
||||
|
||||
|
||||
/obj/structure/cult/tome
|
||||
name = "Desk"
|
||||
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl"
|
||||
icon_state = "tomealtar"
|
||||
|
||||
/obj/structure/cult/pillar
|
||||
name = "Pillar"
|
||||
desc = "This should not exist"
|
||||
icon_state = "pillar"
|
||||
icon = 'magic_pillar.dmi'
|
||||
|
||||
|
||||
/obj/effect/gateway
|
||||
name = "gateway"
|
||||
desc = "You're pretty sure that abyss is staring back"
|
||||
icon = 'cult.dmi'
|
||||
icon_state = "hole"
|
||||
density = 1
|
||||
unacidable = 1
|
||||
anchored = 1.0
|
||||
|
||||
/obj/effect/gateway/Bumped(mob/M as mob|obj)
|
||||
spawn(0)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/gateway/HasEntered(AM as mob|obj)
|
||||
spawn(0)
|
||||
return
|
||||
return
|
||||
@@ -199,13 +199,11 @@
|
||||
world << "\blue<b>[i]..</b>"
|
||||
sleep(10)
|
||||
enter_allowed = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic()
|
||||
sleep(110)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
if(ticker)
|
||||
ticker.station_explosion_cinematic(0,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ Stealth and Camouflage Items;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover and Forger;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:4:Cryptographic Sequencer (Limited uses, almost full access);
|
||||
|
||||
@@ -138,6 +138,107 @@ var/datum/roundinfo/roundinfo = new()
|
||||
return 1
|
||||
|
||||
/datum/controller/gameticker
|
||||
//station_explosion used to be a variable for every mob's hud. Which was a waste!
|
||||
//Now we have a general cinematic centrally held within the gameticker....far more efficient!
|
||||
var/obj/screen/cinematic = null
|
||||
|
||||
//Plus it provides an easy way to make cinematics for other events. Just use this as a template :)
|
||||
proc/station_explosion_cinematic(var/station_missed=0, var/override = null)
|
||||
if( cinematic ) return //already a cinematic in progress!
|
||||
|
||||
//initialise our cinematic screen object
|
||||
cinematic = new(src)
|
||||
cinematic.icon = 'station_explosion.dmi'
|
||||
cinematic.icon_state = "start"
|
||||
cinematic.layer = 20
|
||||
cinematic.mouse_opacity = 0
|
||||
cinematic.screen_loc = "1,3" //TODO resize them
|
||||
|
||||
var/obj/structure/stool/bed/temp_buckle = new(src)
|
||||
//Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around
|
||||
if(station_missed)
|
||||
for(var/mob/M in world)
|
||||
M.buckled = temp_buckle //buckles the mob so it can't do anything
|
||||
if(M.client)
|
||||
M.client.screen += cinematic //show every client the cinematic
|
||||
else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
|
||||
for(var/mob/M in world)
|
||||
M.buckled = temp_buckle
|
||||
if(M.client)
|
||||
M.client.screen += cinematic
|
||||
switch(M.z)
|
||||
if(0) //inside a crate or something
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && T.z==1) //we don't use M.death(0) because it calls a for(/mob) loop and
|
||||
M.health = 0
|
||||
M.stat = DEAD
|
||||
if(1) //on a z-level 1 turf.
|
||||
M.health = 0
|
||||
M.stat = DEAD
|
||||
|
||||
//Now animate the cinematic
|
||||
switch(station_missed)
|
||||
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
|
||||
if(1) //nuke was nearby but (mostly) missed
|
||||
if( mode && !override )
|
||||
override = mode.name
|
||||
switch( override )
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
flick("explode2",cinematic)
|
||||
cinematic.icon_state = "loss_nuke2"
|
||||
else
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
flick("explode2",cinematic)
|
||||
|
||||
else //station was destroyed
|
||||
if( mode && !override )
|
||||
override = mode.name
|
||||
switch( override )
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_nuke"
|
||||
|
||||
if("AI malfunction")
|
||||
flick("start_malf",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_malf"
|
||||
|
||||
if("blob")
|
||||
flick("start_blob",cinematic) //TODO: make a blob one
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_blob" //TODO: make a blob one
|
||||
|
||||
else
|
||||
//default station-destroyed ending
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_general"
|
||||
sleep(100)
|
||||
|
||||
//Tidy-up time!
|
||||
if(cinematic) del(cinematic) //end the cinematic
|
||||
if(temp_buckle) del(temp_buckle) //release everybody
|
||||
return
|
||||
|
||||
|
||||
proc/create_characters()
|
||||
for(var/mob/new_player/player in world)
|
||||
|
||||
@@ -188,14 +188,11 @@
|
||||
world << i
|
||||
sleep(10)
|
||||
enter_allowed = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic()
|
||||
sleep(110)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
//world << "<B>Everyone was killed by the self-destruct!"
|
||||
if(ticker)
|
||||
ticker.station_explosion_cinematic(0,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
/obj/machinery/nuclearbomb/ex_act(severity)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/blob_act()
|
||||
if (src.timing == -1.0)
|
||||
return
|
||||
@@ -160,6 +159,7 @@
|
||||
return
|
||||
|
||||
|
||||
#define NUKERANGE 80
|
||||
/obj/machinery/nuclearbomb/proc/explode()
|
||||
if (src.safety)
|
||||
src.timing = 0
|
||||
@@ -174,57 +174,43 @@
|
||||
ticker.mode.explosion_in_progress = 1
|
||||
sleep(100)
|
||||
|
||||
/*
|
||||
var/turf/ground_zero = get_turf(loc)
|
||||
explosion(ground_zero, 50, 250, 500, 750)
|
||||
|
||||
*/
|
||||
enter_allowed = 0
|
||||
|
||||
|
||||
|
||||
var/off_station = 0
|
||||
var/area/A = get_area(src.loc)
|
||||
if(A && (istype(A,/area/syndicate_station) || A.type == "/area"))
|
||||
off_station = 1
|
||||
if (ticker && ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:herp = syndicate_station_at_station
|
||||
ticker.mode:nuke_off_station = off_station
|
||||
var/turf/bomb_location = get_turf(src)
|
||||
if( bomb_location && (bomb_location.z == 1) )
|
||||
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
|
||||
off_station = 1
|
||||
else
|
||||
off_station = 2
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic(off_station)
|
||||
sleep(110)
|
||||
if (ticker)
|
||||
if(ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:herp = syndicate_station_at_station
|
||||
ticker.mode:nuke_off_station = off_station
|
||||
ticker.station_explosion_cinematic(off_station,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode.explosion_in_progress = 0
|
||||
if(ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:nukes_left --
|
||||
else
|
||||
world << "<B>The station was destoyed by the nuclear blast!</B>"
|
||||
|
||||
if (ticker && ticker.mode)
|
||||
ticker.mode.explosion_in_progress = 0
|
||||
if(ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:nukes_left --
|
||||
ticker.mode.station_was_nuked = (off_station==0)
|
||||
ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
|
||||
//kinda shit but I couldn't get permission to do what I wanted to do.
|
||||
|
||||
else
|
||||
world << "<B>The station was destoyed by the nuclear blast!</B>"
|
||||
ticker.mode.station_was_nuked = 1
|
||||
/*
|
||||
TODO: derped blast should partially damage nearest objects
|
||||
and do not reboot the game. Also make it work properly on other z-levels --rastaf0
|
||||
Further TODO: make nuke detonation work with objectives. Right now, you can't track player
|
||||
location because they are viewing the cinematic (can't get_turf on them to determine z_level
|
||||
as it will return null). Leaving this for you since you apparently plan to work this further. /N
|
||||
*/
|
||||
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
|
||||
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
|
||||
//feedback_set_details("end_error","nuke - unhandled ending")
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
world.Reboot()
|
||||
return
|
||||
feedback_set_details("end_error","nuke - unhandled ending")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
world.Reboot()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/disk/nuclear/Del()
|
||||
if(blobstart.len > 0)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.target = head_mind
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]."
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
/datum/game_mode/revolution/process()
|
||||
checkwin_counter++
|
||||
if(checkwin_counter >= 20)
|
||||
if(checkwin_counter >= 5)
|
||||
if(!finished)
|
||||
ticker.mode.check_win()
|
||||
checkwin_counter = 0
|
||||
@@ -370,7 +370,7 @@
|
||||
var/list/heads = get_all_heads()
|
||||
var/list/targets = new
|
||||
for (var/datum/mind/i in head_revolutionaries)
|
||||
for (var/datum/objective/assassinate/o in i.objectives)
|
||||
for (var/datum/objective/mutiny/o in i.objectives)
|
||||
targets |= o.target
|
||||
if (head_revolutionaries.len!=0 || \
|
||||
revolutionaries.len!=0 || \
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
if("shotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/shotgun/pump/combat(get_turf(H))
|
||||
if("freeze")
|
||||
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
|
||||
if("uzi")
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
|
||||
return ..()
|
||||
if(istype(M, /mob/living/carbon/human/dummy))
|
||||
return..()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#ccccff"
|
||||
idtype = /obj/item/weapon/card/id/gold
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -43,6 +44,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ddddff"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/botanic_leather(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/apron(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/device/analyzer/plant_analyzer(H), H.slot_s_store)
|
||||
H.equip_if_possible(new /obj/item/device/pda/botanist(H), H.slot_belt)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -266,6 +267,7 @@
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/clothing/under/suit_jacket/red(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/pda/librarian(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store)
|
||||
return 1
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffeeaa"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
//Sellection screen color
|
||||
var/selection_color = "#ffffff"
|
||||
|
||||
//the type of the ID the player will have
|
||||
var/idtype = /obj/item/weapon/card/id
|
||||
|
||||
//List of alternate titles, if any
|
||||
var/list/alt_titles
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffddf0"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffddff"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffdddd"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -285,13 +285,20 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!H) return 0
|
||||
if(!title) title = rank
|
||||
var/obj/item/weapon/card/id/C = null
|
||||
switch(rank)
|
||||
if("Cyborg")
|
||||
|
||||
var/datum/job/job = null
|
||||
for(var/datum/job/J in occupations)
|
||||
if(J.title == rank)
|
||||
job = J
|
||||
break
|
||||
|
||||
if(job)
|
||||
if(job.title == "Cyborg")
|
||||
return
|
||||
if("Captain")
|
||||
C = new /obj/item/weapon/card/id/gold(H)
|
||||
else
|
||||
C = new /obj/item/weapon/card/id(H)
|
||||
C = new job.idtype(H)
|
||||
else
|
||||
C = new /obj/item/weapon/card/id(H)
|
||||
if(C)
|
||||
C.registered_name = H.real_name
|
||||
C.assignment = title
|
||||
|
||||
@@ -66,11 +66,12 @@
|
||||
dat += text("[]\t-Toxin Content %: []</FONT><BR>", (occupant.getToxLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getToxLoss())
|
||||
dat += text("[]\t-Burn Severity %: []</FONT><BR>", (occupant.getFireLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getFireLoss())
|
||||
dat += text("<HR>Paralysis Summary %: [] ([] seconds left!)<BR>", occupant.paralysis, round(occupant.paralysis / 4))
|
||||
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
||||
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
||||
dat += text("[]\tDermaline: [] units</FONT><BR>", (occupant.reagents.get_reagent_amount("dermaline") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dermaline"))
|
||||
dat += text("[]\tBicaridine: [] units<BR>", (occupant.reagents.get_reagent_amount("bicaridine") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("bicaridine"))
|
||||
dat += text("[]\tDexalin: [] units<BR>", (occupant.reagents.get_reagent_amount("dexalin") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dexalin"))
|
||||
if(occupant.reagents)
|
||||
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
||||
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
||||
dat += text("[]\tDermaline: [] units</FONT><BR>", (occupant.reagents.get_reagent_amount("dermaline") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dermaline"))
|
||||
dat += text("[]\tBicaridine: [] units<BR>", (occupant.reagents.get_reagent_amount("bicaridine") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("bicaridine"))
|
||||
dat += text("[]\tDexalin: [] units<BR>", (occupant.reagents.get_reagent_amount("dexalin") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dexalin"))
|
||||
dat += text("<HR><A href='?src=\ref[];refresh=1'>Refresh meter readings each second</A><BR><A href='?src=\ref[];inap=1'>Inject Inaprovaline</A><BR><A href='?src=\ref[];stox=1'>Inject Soporific</A><BR><A href='?src=\ref[];derm=1'>Inject Dermaline</A><BR><A href='?src=\ref[];bic=1'>Inject Bicaridine</A><BR><A href='?src=\ref[];dex=1'>Inject Dexalin</A>", src, src, src, src, src, src)
|
||||
else
|
||||
dat += "The sleeper is empty."
|
||||
|
||||
@@ -1191,8 +1191,17 @@ table tr:first-child th:first-child { border: none;}
|
||||
A = A.loc
|
||||
if (!( istype(A, /area) ))
|
||||
return
|
||||
for(var/area/RA in A.related)
|
||||
RA.firereset()
|
||||
if(network)
|
||||
for(var/obj/machinery/door/firedoor/D in world)
|
||||
if(!D.blocked && D.net_id == src.network)
|
||||
if(D.operating)
|
||||
D.nextstate = CLOSED
|
||||
else if(!D.density)
|
||||
spawn(0)
|
||||
D.close()
|
||||
else
|
||||
for(var/area/RA in A.related)
|
||||
RA.firereset()
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/proc/alarm()
|
||||
@@ -1202,8 +1211,17 @@ table tr:first-child th:first-child { border: none;}
|
||||
A = A.loc
|
||||
if (!( istype(A, /area) ))
|
||||
return
|
||||
for(var/area/RA in A.related)
|
||||
RA.firealert()
|
||||
if(network)
|
||||
for(var/obj/machinery/door/firedoor/D in world)
|
||||
if(!D.blocked && D.net_id == src.network)
|
||||
if(D.operating)
|
||||
D.nextstate = OPEN
|
||||
else if(!D.density)
|
||||
spawn(0)
|
||||
D.open()
|
||||
else
|
||||
for(var/area/RA in A.related)
|
||||
RA.firealert()
|
||||
//playsound(src.loc, 'signal.ogg', 75, 0)
|
||||
return
|
||||
|
||||
|
||||
@@ -39,31 +39,4 @@
|
||||
var/area/A2 = T2.loc
|
||||
if ( istype(A2) && A2.master && A2.master == A )
|
||||
SCRUBBER.on = scrubber_state
|
||||
SCRUBBER.update_icon()
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/mining_shuttle/attack_hand(user as mob)
|
||||
src.add_fingerprint(usr)
|
||||
var/dat
|
||||
dat = text("<center>Mining shuttle:<br> <b><A href='?src=\ref[src];move=[1]'>Send</A></b></center>")
|
||||
user << browse("[dat]", "window=miningshuttle;size=200x100")
|
||||
|
||||
/obj/machinery/computer/mining_shuttle/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["move"])
|
||||
if(ticker.mode.name == "blob")
|
||||
if(ticker.mode:declared)
|
||||
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
if (!mining_shuttle_moving)
|
||||
usr << "\blue Shuttle recieved message and will be sent shortly."
|
||||
move_mining_shuttle()
|
||||
else
|
||||
usr << "\blue Shuttle is already moving."
|
||||
|
||||
SCRUBBER.update_icon()
|
||||
@@ -262,19 +262,17 @@ var/global/list/autolathe_recipes_hidden = list( \
|
||||
restart:
|
||||
if(outputAmount > 0)
|
||||
if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier)
|
||||
busy = 1
|
||||
|
||||
use_power(power)
|
||||
icon_state = "autolathe"
|
||||
flick("autolathe_n",src)
|
||||
spawn(16)
|
||||
|
||||
if(!busy)
|
||||
busy = 1
|
||||
use_power(power)
|
||||
spawn(16)
|
||||
use_power(power)
|
||||
spawn(16)
|
||||
flick("autolathe_n",src)
|
||||
src.m_amount -= template.m_amt*multiplier
|
||||
src.g_amount -= template.g_amt*multiplier
|
||||
if(src.m_amount < 0)
|
||||
|
||||
@@ -792,15 +792,6 @@
|
||||
src.visible_message("\red [src] drives over [H]!")
|
||||
playsound(src.loc, 'splat.ogg', 50, 1)
|
||||
|
||||
/*
|
||||
if(ismob(load))
|
||||
var/mob/M = load
|
||||
if(M.reagents.has_reagent("beer"))
|
||||
M.unlock_medal("DUI", 1)
|
||||
if(M.reagents.has_reagent("space_drugs") && istype(H) && H.wear_id.assignment == "Security Officer")
|
||||
M.unlock_medel("Ridin' Dirty",1)
|
||||
*/
|
||||
|
||||
var/damage = rand(5,15)
|
||||
H.apply_damage(2*damage, BRUTE, "head")
|
||||
H.apply_damage(2*damage, BRUTE, "chest")
|
||||
@@ -933,7 +924,7 @@
|
||||
var/list/kv = list(
|
||||
"type" = "mulebot",
|
||||
"name" = suffix,
|
||||
"loca" = loc.loc, // area
|
||||
"loca" = (loc ? loc.loc : "Unknown"), // somehow loc can be null and cause a runtime - Quarxink
|
||||
"mode" = mode,
|
||||
"powr" = (cell ? cell.percent() : 0),
|
||||
"dest" = destination,
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
/obj/item/weapon/circuitboard/scan_consolenew
|
||||
name = "Circuit board (DNA Machine)"
|
||||
build_path = "/obj/machinery/scan_consolenew"
|
||||
build_path = "/obj/machinery/computer/scan_consolenew"
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
/obj/item/weapon/circuitboard/communications
|
||||
name = "Circuit board (Communications)"
|
||||
@@ -147,6 +147,7 @@
|
||||
name = "Circuit board (Supply shuttle console)"
|
||||
build_path = "/obj/machinery/computer/supplycomp"
|
||||
origin_tech = "programming=3"
|
||||
var/contraband_enabled = 0
|
||||
/obj/item/weapon/circuitboard/operating
|
||||
name = "Circuit board (Operating Computer)"
|
||||
build_path = "/obj/machinery/computer/operating"
|
||||
@@ -207,6 +208,28 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/device/multitool))
|
||||
var/catastasis = src.contraband_enabled
|
||||
var/opposite_catastasis
|
||||
if(catastasis)
|
||||
opposite_catastasis = "STANDARD"
|
||||
catastasis = "BROAD"
|
||||
else
|
||||
opposite_catastasis = "BROAD"
|
||||
catastasis = "STANDARD"
|
||||
|
||||
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
|
||||
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
|
||||
if("Switch to STANDARD","Switch to BROAD")
|
||||
src.contraband_enabled = !src.contraband_enabled
|
||||
|
||||
if("Cancel")
|
||||
return
|
||||
else
|
||||
user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
|
||||
return
|
||||
|
||||
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
|
||||
switch(state)
|
||||
if(0)
|
||||
@@ -306,4 +329,8 @@
|
||||
if(circuit.id) B:id = circuit.id
|
||||
if(circuit.records) B:records = circuit.records
|
||||
if(circuit.frequency) B:frequency = circuit.frequency
|
||||
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||
var/obj/machinery/computer/supplycomp/SC = B
|
||||
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||
SC.can_order_contraband = C.contraband_enabled
|
||||
del(src)
|
||||
|
||||
@@ -188,7 +188,10 @@
|
||||
if ("modify")
|
||||
if (modify)
|
||||
data_core.manifest_modify(modify.registered_name, modify.assignment)
|
||||
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
|
||||
if(istype(modify,/obj/item/weapon/card/id/fluff/lifetime))
|
||||
modify.name = text("[modify.registered_name]'s Lifetime ID Card ([modify.assignment])")
|
||||
else
|
||||
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
|
||||
if(ishuman(usr))
|
||||
modify.loc = usr.loc
|
||||
if(!usr.get_active_hand())
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
//only load blast doors for map-defined departments for the moment
|
||||
switch(department)
|
||||
if("Engineering")
|
||||
if("SinguloEngineering-Antiqua")
|
||||
connectedDoorIds.Add("Engineering Primary Access")
|
||||
connectedDoorIds.Add("Engineering Secondary Access")
|
||||
connectedDoorIds.Add("Fore Maintenance Access")
|
||||
@@ -28,7 +28,13 @@
|
||||
connectedDoorIds.Add("Atmospheric Storage Rad Shielding")
|
||||
connectedDoorIds.Add("Construction Storage Rad Shielding")
|
||||
connectedDoorIds.Add("Engineering Secure Storage")
|
||||
if("Medbay")
|
||||
if("RustEngineering-Antiqua")
|
||||
connectedDoorIds.Add("Port vessel entry")
|
||||
connectedDoorIds.Add("Starboard vessel entry")
|
||||
connectedDoorIds.Add("Central aft shell access")
|
||||
connectedDoorIds.Add("Port aft shell access")
|
||||
connectedDoorIds.Add("Starboard aft shell access")
|
||||
if("Medbay-Exodus")
|
||||
connectedDoorIds.Add("Genetics Outer Shutters")
|
||||
connectedDoorIds.Add("Genetics Inner Shutters")
|
||||
connectedDoorIds.Add("Chemistry Outer Shutters")
|
||||
|
||||
@@ -65,7 +65,7 @@ for reference:
|
||||
var/health = 100.0
|
||||
var/maxhealth = 100.0
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/stack/sheet/wood))
|
||||
if (src.health < src.maxhealth)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
@@ -88,7 +88,7 @@ for reference:
|
||||
else
|
||||
if (src.health <= 0)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red <B>The barricade is smashed appart!</B>"
|
||||
O << "\red <B>The barricade is smashed apart!</B>"
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
@@ -99,14 +99,14 @@ for reference:
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red <B>The barricade is blown appart!</B>"
|
||||
O << "\red <B>The barricade is blown apart!</B>"
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red <B>The barricade is blown appart!</B>"
|
||||
O << "\red <B>The barricade is blown apart!</B>"
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
@@ -115,7 +115,7 @@ for reference:
|
||||
|
||||
meteorhit()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red <B>The barricade is smashed appart!</B>"
|
||||
O << "\red <B>The barricade is smashed apart!</B>"
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/wood(get_turf(src))
|
||||
|
||||
@@ -395,15 +395,15 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
|
||||
var/obj/item/weapon/pai_cable/cable = C
|
||||
cable.plugin(src, user)
|
||||
else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/fireaxe) )
|
||||
else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) )
|
||||
var/beingcrowbarred = null
|
||||
if(istype(C, /obj/item/weapon/crowbar) )
|
||||
beingcrowbarred = 1 //derp, Agouri
|
||||
else
|
||||
beingcrowbarred = 0
|
||||
if ( ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open && (!src.arePowerSystemsOn() || (stat & NOPOWER)) && !src.locked) && beingcrowbarred == 1 )
|
||||
if( beingcrowbarred && (density && welded && !operating && src.p_open && (!src.arePowerSystemsOn() || stat & NOPOWER) && !src.locked) )
|
||||
playsound(src.loc, 'Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics into the airlock assembly.")
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
|
||||
if(do_after(user,40))
|
||||
user << "\blue You removed the airlock electronics!"
|
||||
switch(src.doortype)
|
||||
@@ -415,6 +415,10 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
if(5) new/obj/structure/door_assembly/door_assembly_mai( src.loc )
|
||||
if(6) new/obj/structure/door_assembly/door_assembly_ext( src.loc )
|
||||
if(7) new/obj/structure/door_assembly/door_assembly_g( src.loc )
|
||||
if(14) new/obj/structure/door_assembly/door_assembly_com/glass( src.loc )
|
||||
if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc ) //issue 301 -mysthic
|
||||
if(16) new/obj/structure/door_assembly/door_assembly_sec/glass( src.loc )
|
||||
if(17) new/obj/structure/door_assembly/door_assembly_med/glass( src.loc )
|
||||
var/obj/item/weapon/airlock_electronics/ae
|
||||
if (!electronics)
|
||||
ae = new/obj/item/weapon/airlock_electronics( src.loc )
|
||||
@@ -433,8 +437,8 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
if ((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked )))
|
||||
|
||||
if(beingcrowbarred == 0) //being fireaxe'd
|
||||
var/obj/item/weapon/fireaxe/F = C
|
||||
if(F.wielded == 1)
|
||||
var/obj/item/weapon/twohanded/fireaxe/F = C
|
||||
if(F:wielded)
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("opening")
|
||||
@@ -470,8 +474,8 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
else
|
||||
if ((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
|
||||
if(beingcrowbarred == 0)
|
||||
var/obj/item/weapon/fireaxe/F = C
|
||||
if(F.wielded == 1)
|
||||
var/obj/item/weapon/twohanded/fireaxe/F = C
|
||||
if(F:wielded)
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("closing")
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
|
||||
|
||||
dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
|
||||
dat += "<a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/>"
|
||||
dat += "<a href='?src=\ref[src];tp=-600'>-</a> <a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/> <A href='?src=\ref[src];tp=600'>+</a><br/>"
|
||||
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
if(F.last_flash && (F.last_flash + 150) > world.time)
|
||||
@@ -176,7 +176,7 @@
|
||||
var/tp = text2num(href_list["tp"])
|
||||
var/timeleft = timeleft()
|
||||
timeleft += tp
|
||||
timeleft = min(max(round(timeleft), 0), 600)
|
||||
timeleft = min(max(round(timeleft), 0), 3600)
|
||||
timeset(timeleft)
|
||||
//src.timing = 1
|
||||
//src.closedoor()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
var/nextstate = null
|
||||
|
||||
var/net_id
|
||||
|
||||
Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
@@ -38,7 +38,7 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1))
|
||||
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))
|
||||
if(blocked || operating) return
|
||||
if(src.density)
|
||||
spawn(0)
|
||||
@@ -52,7 +52,8 @@
|
||||
|
||||
|
||||
process()
|
||||
if(operating || stat & NOPOWER || !nextstate) return
|
||||
if(operating || stat & NOPOWER || !nextstate)
|
||||
return
|
||||
switch(nextstate)
|
||||
if(OPEN)
|
||||
spawn()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) ))
|
||||
if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))
|
||||
return
|
||||
if ((src.density && (stat & NOPOWER) && !( src.operating )))
|
||||
spawn( 0 )
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) ))
|
||||
if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))
|
||||
return
|
||||
if ((src.density && (stat & NOPOWER) && !( src.operating )))
|
||||
spawn( 0 )
|
||||
|
||||
@@ -20,8 +20,15 @@
|
||||
var/planted = 0 // Is it occupied?
|
||||
var/harvest = 0 //Ready to harvest?
|
||||
var/obj/item/seeds/myseed = null // The currently planted seed
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj ,/obj/item/projectile/energy/floramut))
|
||||
if(src.planted)
|
||||
src.mutate()
|
||||
else if(istype(Proj ,/obj/item/projectile/energy/florayield))
|
||||
if(src.planted && src.myseed.yield < 2)
|
||||
src.myseed.yield += 1
|
||||
|
||||
obj/machinery/hydroponics/process()
|
||||
|
||||
@@ -96,10 +103,12 @@ obj/machinery/hydroponics/process()
|
||||
if(src.age > src.myseed.production && (src.age - src.lastproduce) > src.myseed.production && (!src.harvest && !src.dead))
|
||||
var/m_count = 0
|
||||
while(m_count < src.mutmod)
|
||||
if(prob(90))
|
||||
if(prob(85))
|
||||
src.mutate()
|
||||
else if(prob(30))
|
||||
src.hardmutate()
|
||||
else if(prob(5))
|
||||
src.mutatespecie()
|
||||
m_count++;
|
||||
if(src.yieldmod > 0 && src.myseed.yield != -1) // Unharvestable shouldn't be harvested
|
||||
src.harvest = 1
|
||||
@@ -301,6 +310,14 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/angelmycelium
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/lemonseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/cashseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/ambrosiavulgarisseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/ambrosiadeusseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/plumpmycelium ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/walkingmushroommycelium
|
||||
@@ -331,6 +348,10 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
if(71 to 100)
|
||||
src.myseed = new /obj/item/seeds/killertomatoseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/bluetomatoseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/bluespacetomatoseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/grapeseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/greengrapeseed
|
||||
@@ -382,6 +403,8 @@ obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent in
|
||||
spawn(5) // Wait a while
|
||||
src.updateicon()
|
||||
src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!")
|
||||
else
|
||||
usr << "The few weeds in the tray seem to react, but only for a moment..."
|
||||
return
|
||||
|
||||
|
||||
@@ -397,12 +420,12 @@ obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutatepest() // Until someone makes a spaceworm, this is commented out
|
||||
// if ( src.pestlevel > 5 )
|
||||
// user << "The worms seem to behave oddly..."
|
||||
if ( src.pestlevel > 5 )
|
||||
src.visible_message("The pests seem to behave oddly...")
|
||||
// spawn(10)
|
||||
// new /obj/effect/alien/spaceworm(src.loc)
|
||||
// else
|
||||
//user << "Nothing happens..."
|
||||
else
|
||||
usr << "The pests seem to behave oddly, but quickly settle down..." //Modified to give a better idea of what's happening when you inject mutagen. There's still nothing proper to spawn here though. -Cheridan
|
||||
return
|
||||
|
||||
|
||||
@@ -458,7 +481,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (81 to 90) src.mutatespecie()
|
||||
if (66 to 80) src.hardmutate()
|
||||
if (41 to 65) src.mutate()
|
||||
if (21 to 41) user << "Nothing happens..."
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) src.mutateweed()
|
||||
if (1 to 10) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
@@ -583,11 +606,26 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (81 to 90) src.mutatespecie()
|
||||
if (66 to 80) src.hardmutate()
|
||||
if (41 to 65) src.mutate()
|
||||
if (21 to 41) user << "Nothing happens..."
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) src.mutateweed()
|
||||
if (1 to 10) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
// The best stuff there is. For testing/debugging.
|
||||
|
||||
if(S.reagents.has_reagent("adminordrazine", 1))
|
||||
src.waterlevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.health += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.nutrilevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.pestlevel -= rand(1,5)
|
||||
src.weedlevel -= rand(1,5)
|
||||
if(S.reagents.has_reagent("adminordrazine", 5))
|
||||
switch(rand(100))
|
||||
if (66 to 100) src.mutatespecie()
|
||||
if (33 to 65) src.mutateweed()
|
||||
if (1 to 32) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
S.reagents.clear_reagents()
|
||||
if (src.weedlevel < 0 ) // Make sure it won't go overoboard
|
||||
src.weedlevel = 0
|
||||
@@ -839,6 +877,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if (realName)
|
||||
podman.real_name = realName
|
||||
podman.original_name = realName //don't want a random ghost name if we die again
|
||||
else
|
||||
podman.real_name = "pod person" //No null names!!
|
||||
|
||||
@@ -946,3 +985,39 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
planted = 0
|
||||
dead = 0
|
||||
updateicon()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk!
|
||||
name = "soil"
|
||||
icon = 'hydroponics.dmi'
|
||||
icon_state = "soil"
|
||||
density = 0
|
||||
New()
|
||||
..()
|
||||
updateicon() // Same as normal but with the overlays removed - Cheridan.
|
||||
overlays = null
|
||||
if(src.planted)
|
||||
if(dead)
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-dead")
|
||||
else if(src.harvest)
|
||||
if(src.myseed.plant_type == 2) // Shrooms don't have a -harvest graphic
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]")
|
||||
else
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-harvest")
|
||||
else if(src.age < src.myseed.maturation)
|
||||
var/t_growthstate = ((src.age / src.myseed.maturation) * src.myseed.growthstages )
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[round(t_growthstate)]")
|
||||
src.lastproduce = src.age
|
||||
else
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]")
|
||||
|
||||
if(myseed)
|
||||
if(luminosity && !istype(myseed,/obj/item/seeds/glowshroom))
|
||||
sd_SetLuminosity(0)
|
||||
else if(!luminosity && istype(myseed,/obj/item/seeds/glowshroom))
|
||||
sd_SetLuminosity(myseed.potency/10)
|
||||
else
|
||||
if(luminosity)
|
||||
sd_SetLuminosity(0)
|
||||
return
|
||||
@@ -65,10 +65,21 @@ the blender or the processor: Processor items are solid objects and Blender resu
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) //Will only blend food items. Add others in this else clause.
|
||||
user.drop_item()
|
||||
O.loc = src
|
||||
user << "You drop the [O] into the blender."
|
||||
else if (istype(O, /obj/item/weapon/plantbag)) //Allows plant bags to empty into the blender.
|
||||
for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents)
|
||||
O.contents -= G
|
||||
G.loc = src
|
||||
if(src.contents.len >= 10 || src.reagents.total_volume >= 80) //Sanity checking so the blender doesn't overfill
|
||||
user << "You fill the blender to the brim."
|
||||
break
|
||||
if(src.contents.len < 10 && src.reagents.total_volume < 80)
|
||||
user << "You empty the plant bag into the blender."
|
||||
else
|
||||
user << "That probably won't blend."
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/blender/verb/blend() //Blend shit. Note: In the actual blending loop, make sure it can't include the jug.
|
||||
set category = "Object"
|
||||
set name = "Turn Blender On"
|
||||
|
||||
@@ -615,11 +615,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //list that will contain r
|
||||
if( istype(I, /obj/item/device/pda) )
|
||||
var/obj/item/device/pda/P = I
|
||||
if(P.id)
|
||||
src.scanned_user = "[P.id.registered] ([P.id.assignment])"
|
||||
src.scanned_user = "[P.id.registered_name] ([P.id.assignment])"
|
||||
src.screen=2
|
||||
else
|
||||
var/obj/item/weapon/card/id/T = I
|
||||
src.scanned_user = text("[T.registered] ([T.assignment])")
|
||||
src.scanned_user = text("[T.registered_name] ([T.assignment])")
|
||||
src.screen=2*/ //Obsolete after autorecognition
|
||||
|
||||
if (src.isbroken)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
user << "\red Someone's already washing something here."
|
||||
return
|
||||
|
||||
if (istype(O, (/obj/item/weapon/reagent_containers/glass/bucket || /obj/item/weapon/reagent_containers/glass/watercan)))
|
||||
if (istype(O, /obj/item/weapon/reagent_containers/glass/bucket))
|
||||
O:reagents.add_reagent("water", 70)
|
||||
user.visible_message( \
|
||||
"\blue [user] fills the [O] using the [src].", \
|
||||
|
||||
+132
-24
@@ -1,9 +1,26 @@
|
||||
var/global/datum/controller/game_controller/master_controller //Set in world.New()
|
||||
var/global/datum/failsafe/Failsafe
|
||||
var/global/controllernum = "no"
|
||||
var/global/controller_iteration = 0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
datum/controller/game_controller
|
||||
var/processing = 1
|
||||
|
||||
var/global/air_master_ready = 0
|
||||
var/global/tension_master_ready = 0
|
||||
var/global/sun_ready = 0
|
||||
var/global/mobs_ready = 0
|
||||
var/global/diseases_ready = 0
|
||||
var/global/machines_ready = 0
|
||||
var/global/objects_ready = 0
|
||||
var/global/networks_ready = 0
|
||||
var/global/powernets_ready = 0
|
||||
var/global/ticker_ready = 0
|
||||
|
||||
proc
|
||||
setup()
|
||||
setup_objects()
|
||||
@@ -28,7 +45,13 @@ datum/controller/game_controller
|
||||
if(!tension_master)
|
||||
tension_master = new /datum/tension()
|
||||
|
||||
world.tick_lag = 0.9
|
||||
world.tick_lag = config.Ticklag
|
||||
|
||||
// Sleep for about 5 seconds to allow background initialization procs to finish
|
||||
sleep(50)
|
||||
|
||||
// Now that the game is world is fully initialized, pause server until a user connects.
|
||||
world.sleep_offline = 1
|
||||
|
||||
setup_objects()
|
||||
|
||||
@@ -80,57 +103,142 @@ datum/controller/game_controller
|
||||
|
||||
process()
|
||||
|
||||
if(!Failsafe)
|
||||
Failsafe = new /datum/failsafe
|
||||
spawn(0)
|
||||
Failsafe.spin()
|
||||
|
||||
|
||||
if(!processing)
|
||||
return 0
|
||||
controllernum = "yes"
|
||||
spawn (100) controllernum = "no"
|
||||
spawn (100)
|
||||
controllernum = "no"
|
||||
|
||||
controller_iteration++
|
||||
|
||||
var/start_time = world.timeofday
|
||||
|
||||
air_master.process()
|
||||
air_master_ready = 0
|
||||
tension_master_ready = 0
|
||||
sun_ready = 0
|
||||
mobs_ready = 0
|
||||
diseases_ready = 0
|
||||
machines_ready = 0
|
||||
objects_ready = 0
|
||||
networks_ready = 0
|
||||
powernets_ready = 0
|
||||
ticker_ready = 0
|
||||
|
||||
tension_master.process()
|
||||
|
||||
|
||||
|
||||
|
||||
spawn(0)
|
||||
air_master.process()
|
||||
air_master_ready = 1
|
||||
spawn(0)
|
||||
tension_master.process()
|
||||
tension_master_ready = 1
|
||||
|
||||
sleep(1)
|
||||
|
||||
sun.calc_position()
|
||||
spawn(0)
|
||||
sun.calc_position()
|
||||
sun_ready = 1
|
||||
|
||||
sleep(-1)
|
||||
|
||||
for(var/mob/M in world)
|
||||
M.Life()
|
||||
spawn(0)
|
||||
for(var/mob/M in world)
|
||||
M.Life()
|
||||
mobs_ready = 1
|
||||
|
||||
|
||||
|
||||
sleep(-1)
|
||||
|
||||
for(var/datum/disease/D in active_diseases)
|
||||
D.process()
|
||||
spawn(0)
|
||||
for(var/datum/disease/D in active_diseases)
|
||||
D.process()
|
||||
diseases_ready = 1
|
||||
|
||||
for(var/obj/machinery/machine in machines)
|
||||
if(machine)
|
||||
machine.process()
|
||||
if(machine && machine.use_power)
|
||||
machine.auto_use_power()
|
||||
spawn(0)
|
||||
for(var/obj/machinery/machine in machines)
|
||||
if(machine)
|
||||
machine.process()
|
||||
if(machine && machine.use_power)
|
||||
machine.auto_use_power()
|
||||
|
||||
machines_ready = 1
|
||||
|
||||
sleep(-1)
|
||||
sleep(1)
|
||||
|
||||
for(var/obj/object in processing_objects)
|
||||
object.process()
|
||||
spawn(0)
|
||||
for(var/obj/object in processing_objects)
|
||||
object.process()
|
||||
objects_ready = 1
|
||||
|
||||
for(var/datum/pipe_network/network in pipe_networks)
|
||||
network.process()
|
||||
spawn(0)
|
||||
for(var/datum/pipe_network/network in pipe_networks)
|
||||
network.process()
|
||||
networks_ready = 1
|
||||
|
||||
for(var/datum/powernet/P in powernets)
|
||||
P.reset()
|
||||
spawn(0)
|
||||
for(var/datum/powernet/P in powernets)
|
||||
P.reset()
|
||||
powernets_ready = 1
|
||||
|
||||
sleep(-1)
|
||||
|
||||
ticker.process()
|
||||
spawn(0)
|
||||
ticker.process()
|
||||
ticker_ready = 1
|
||||
|
||||
sleep(world.timeofday+10-start_time) // This is fine for our tick lag. DMTG
|
||||
sleep(world.timeofday+10-start_time)// Don't touch this. DMTG
|
||||
|
||||
spawn process()
|
||||
while(!air_master_ready || !tension_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready)
|
||||
sleep(1)
|
||||
|
||||
spawn
|
||||
process()
|
||||
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/datum/failsafe // This thing pretty much just keeps poking the master controller
|
||||
var/spinning = 1
|
||||
var/current_iteration = 0
|
||||
|
||||
/datum/failsafe/proc/spin()
|
||||
if(!master_controller) // Well fuck. How did this happen?
|
||||
sleep(50)
|
||||
if(!master_controller)
|
||||
master_controller = new /datum/controller/game_controller()
|
||||
spawn(-1)
|
||||
master_controller.setup()
|
||||
|
||||
else
|
||||
while(spinning)
|
||||
current_iteration = controller_iteration
|
||||
sleep(600) // Wait 15 seconds
|
||||
if(current_iteration == controller_iteration) // Mm. The master controller hasn't ticked yet.
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder)
|
||||
M << "<font color='red' size='2'><b> Warning. The Master Controller has not fired in the last 60 seconds. Restart recommended. Automatic restart in 60 seconds.</b></font>"
|
||||
|
||||
sleep(600)
|
||||
if(current_iteration == controller_iteration)
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder)
|
||||
M << "<font color='red' size='2'><b> Warning. The Master Controller has not fired in the last 2 minutes. Automatic restart beginning.</b></font>"
|
||||
master_controller.process()
|
||||
sleep(150)
|
||||
else
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder)
|
||||
M << "<font color='red' size='2'><b> The Master Controller has fired. Automatic restart aborted.</b></font>"
|
||||
|
||||
@@ -200,6 +200,10 @@
|
||||
var/disabled = 0 //malf
|
||||
|
||||
action(atom/target)
|
||||
if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve
|
||||
disabled = 1
|
||||
else
|
||||
disabled = 0
|
||||
if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock))
|
||||
target = get_turf(target)
|
||||
if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/structure/closet/fireaxecabinet
|
||||
name = "Fire Axe Cabinet"
|
||||
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
|
||||
var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe
|
||||
var/obj/item/weapon/twohanded/fireaxe/fireaxe = new/obj/item/weapon/twohanded/fireaxe
|
||||
icon_state = "fireaxe1000"
|
||||
icon_closed = "fireaxe1000"
|
||||
icon_opened = "fireaxe1100"
|
||||
@@ -51,9 +51,9 @@
|
||||
src.localopened = 1
|
||||
update_icon()
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/fireaxe) && src.localopened)
|
||||
if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened)
|
||||
if(!fireaxe)
|
||||
if(O.wielded)
|
||||
if(O:wielded)
|
||||
user << "\red Unwield the axe first."
|
||||
return
|
||||
fireaxe = O
|
||||
|
||||
@@ -125,6 +125,16 @@
|
||||
icon_state = "pda-lawyer"
|
||||
ttone = "objection"
|
||||
|
||||
/obj/item/device/pda/botanist
|
||||
//default_cartridge = /obj/item/weapon/cartridge/botanist
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/librarian
|
||||
icon_state = "pda-libb"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
|
||||
silent = 1 //Quiet in the library!
|
||||
|
||||
/*
|
||||
* The Actual PDA
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/access_clown = 0
|
||||
var/access_mime = 0
|
||||
var/access_janitor = 0
|
||||
// var/access_flora = 0
|
||||
var/access_reagent_scanner = 0
|
||||
var/access_remote_door = 0 //Control some blast doors remotely!!
|
||||
var/remote_door_id = ""
|
||||
@@ -73,6 +74,12 @@
|
||||
icon_state = "cart-mi"
|
||||
access_mime = 1
|
||||
var/mime_charges = 5
|
||||
/*
|
||||
botanist
|
||||
name = "Green Thumb v4.20"
|
||||
icon_state = "cart-b"
|
||||
access_flora = 1
|
||||
*/
|
||||
|
||||
signal
|
||||
name = "generic signaler cartridge"
|
||||
|
||||
@@ -12,20 +12,6 @@
|
||||
..()
|
||||
user.update_clothing()
|
||||
|
||||
// So you can't drop the Offhand
|
||||
if(istype(src, /obj/item/weapon/offhand))
|
||||
user.drop_item(src)
|
||||
|
||||
var/obj/item/O_r = user.r_hand
|
||||
var/obj/item/O_l = user.l_hand
|
||||
if(O_r.twohanded)
|
||||
if(O_r.wielded)
|
||||
user.drop_item(O_r)
|
||||
if(O_l.twohanded)
|
||||
if(O_l.wielded)
|
||||
user.drop_item(O_l)
|
||||
del(src)
|
||||
|
||||
// called just as an item is picked up (loc is not yet changed)
|
||||
/obj/item/proc/pickup(mob/user)
|
||||
return
|
||||
@@ -231,38 +217,6 @@
|
||||
if(istype(W, /obj/item/device/detective_scanner))
|
||||
return
|
||||
|
||||
/obj/item/attack_self(mob/user as mob)
|
||||
..()
|
||||
if(twohanded)
|
||||
if(wielded) //Trying to unwield it
|
||||
wielded = 0
|
||||
force = force_unwielded
|
||||
src.name = "[initial(name)] (Unwielded)"
|
||||
src.update_icon() //If needed by the particular item
|
||||
user << "\blue You are now carrying the [initial(name)] with one hand."
|
||||
|
||||
if(istype(user.get_inactive_hand(),/obj/item/weapon/offhand))
|
||||
del user.get_inactive_hand()
|
||||
return
|
||||
else //Trying to wield it
|
||||
if(user.get_inactive_hand())
|
||||
user << "\red You need your other hand to be empty"
|
||||
return
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
src.name = "[initial(name)] (Wielded)"
|
||||
src.update_icon() //If needed by the particular item
|
||||
user << "\blue You grab the [initial(name)] with both hands."
|
||||
|
||||
var/obj/item/weapon/offhand/O = new /obj/item/weapon/offhand(user) ////Let's reserve his other hand~
|
||||
O.name = text("[initial(src.name)] - Offhand")
|
||||
O.desc = "Your second grip on the [initial(src.name)]"
|
||||
if(user.hand)
|
||||
user.r_hand = O ///Place dat offhand in the opposite hand
|
||||
else
|
||||
user.l_hand = O
|
||||
O.layer = 20
|
||||
return
|
||||
|
||||
mob/proc/flash_weak_pain()
|
||||
flick("weak_pain",pain)
|
||||
@@ -343,39 +297,46 @@ mob/proc/flash_weak_pain()
|
||||
Metroid.SStun = 0
|
||||
|
||||
spawn(0)
|
||||
Metroid.canmove = 0
|
||||
step_away(Metroid, user)
|
||||
if(prob(25 + power*2))
|
||||
sleep(2)
|
||||
if(Metroid)
|
||||
Metroid.canmove = 0
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
if(prob(25 + power))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
|
||||
else
|
||||
if(prob(10 + power*2))
|
||||
if(Metroid)
|
||||
if(Metroid.Victim)
|
||||
if(prob(80) && !Metroid.client)
|
||||
Metroid.Discipline++
|
||||
|
||||
if(Metroid.Victim)
|
||||
if(prob(80) && !Metroid.client)
|
||||
Metroid.Discipline++
|
||||
if(Metroid.Discipline == 1)
|
||||
Metroid.attacked = 0
|
||||
|
||||
if(Metroid.Discipline == 1)
|
||||
Metroid.attacked = 0
|
||||
spawn()
|
||||
if(Metroid)
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
if(Metroid)
|
||||
Metroid.SStun = 0
|
||||
|
||||
spawn()
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
Metroid.SStun = 0
|
||||
|
||||
Metroid.Victim = null
|
||||
Metroid.anchored = 0
|
||||
Metroid.Victim = null
|
||||
Metroid.anchored = 0
|
||||
|
||||
|
||||
spawn(0)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 0
|
||||
if(prob(25 + power*4))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
Metroid.canmove = 0
|
||||
if(prob(25 + power*4))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
|
||||
|
||||
var/showname = "."
|
||||
if(user)
|
||||
|
||||
@@ -144,12 +144,47 @@
|
||||
user << "\red You cannot directly fill this object."
|
||||
return
|
||||
|
||||
|
||||
var/trans = 0
|
||||
|
||||
if(ismob(target))
|
||||
if(istype(target , /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/victim = target
|
||||
|
||||
var/obj/item/safe_thing = null
|
||||
if( victim.wear_mask )
|
||||
if ( victim.wear_mask.flags & MASKCOVERSEYES )
|
||||
safe_thing = victim.wear_mask
|
||||
if( victim.head )
|
||||
if ( victim.head.flags & MASKCOVERSEYES )
|
||||
safe_thing = victim.head
|
||||
if(victim.glasses)
|
||||
if ( !safe_thing )
|
||||
safe_thing = victim.glasses
|
||||
|
||||
if(safe_thing)
|
||||
if(!safe_thing.reagents)
|
||||
safe_thing.create_reagents(100)
|
||||
trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red <B>[] tries to squirt something into []'s eyes, but fails!</B>", user, target), 1)
|
||||
spawn(5)
|
||||
src.reagents.reaction(safe_thing, TOUCH)
|
||||
|
||||
|
||||
user << "\blue You transfer [trans] units of the solution."
|
||||
if (src.reagents.total_volume<=0)
|
||||
filled = 0
|
||||
icon_state = "dropper[filled]"
|
||||
return
|
||||
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red <B>[] drips something onto []!</B>", user, target), 1)
|
||||
O.show_message(text("\red <B>[] squirts something into []'s eyes!</B>", user, target), 1)
|
||||
src.reagents.reaction(target, TOUCH)
|
||||
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
user << "\blue You transfer [trans] units of the solution."
|
||||
if (src.reagents.total_volume<=0)
|
||||
filled = 0
|
||||
@@ -227,7 +262,7 @@
|
||||
|
||||
|
||||
afterattack(atom/A, mob/user as mob)
|
||||
if(istype(A,/area/shuttle))//||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
|
||||
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
|
||||
disabled = 1
|
||||
else
|
||||
disabled = 0
|
||||
|
||||
@@ -71,6 +71,10 @@ RCD
|
||||
|
||||
|
||||
afterattack(atom/A, mob/user as mob)
|
||||
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//Nanotrasen Matter Jammer TM -Sieve
|
||||
disabled = 1
|
||||
else
|
||||
disabled = 0
|
||||
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock)))
|
||||
return
|
||||
|
||||
|
||||
@@ -405,16 +405,16 @@ ZIPPO
|
||||
src.item_state = icon_on
|
||||
if( istype(src,/obj/item/weapon/lighter/zippo) )
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red Without even breaking stride, [] flips open and lights the [] in one smooth movement.", user, src), 1)
|
||||
O.show_message(text("\red Without even breaking stride, [] flips open and lights [] in one smooth movement.", user, src), 1)
|
||||
else
|
||||
if(prob(75))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red After a few attempts, [user] manages to light the [src].", 1)
|
||||
O.show_message("\red After a few attempts, [user] manages to light [src].", 1)
|
||||
else
|
||||
user << "\red <b>You burn yourself while lighting the lighter.</b>"
|
||||
user.adjustFireLoss(5)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red After a few attempts, [user] manages to light the [src], they however burn their finger in the process.", 1)
|
||||
O.show_message("\red After a few attempts, [user] manages to light [src], they however burn their finger in the process.", 1)
|
||||
|
||||
user.total_luminosity += 2
|
||||
processing_objects.Add(src)
|
||||
|
||||
@@ -149,7 +149,7 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy))
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy))
|
||||
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
|
||||
new /obj/item/clothing/head/helmet/hardhat/pumpkinhead (user.loc)
|
||||
del(src)
|
||||
|
||||
@@ -202,32 +202,69 @@ NOTEBOOK
|
||||
user << "\blue You stamp the paper with your rubber stamp."
|
||||
|
||||
if(istype(P, /obj/item/weapon/stamperaser))
|
||||
if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
|
||||
return
|
||||
src.info = src.infoold
|
||||
src.infoold = null
|
||||
for(var/i, i <= stamped.len, i++)
|
||||
switch(stamped[i])
|
||||
if(/obj/item/weapon/stamp/captain)
|
||||
src.overlays -= "paper_stamped_cap"
|
||||
if(/obj/item/weapon/stamp/hop)
|
||||
src.overlays -= "paper_stamped_hop"
|
||||
if(/obj/item/weapon/stamp/hos)
|
||||
src.overlays -= "paper_stamped_hos"
|
||||
if(/obj/item/weapon/stamp/ce)
|
||||
src.overlays -= "paper_stamped_ce"
|
||||
if(/obj/item/weapon/stamp/rd)
|
||||
src.overlays -= "paper_stamped_rd"
|
||||
if(/obj/item/weapon/stamp/cmo)
|
||||
src.overlays -= "paper_stamped_cmo"
|
||||
if(/obj/item/weapon/stamp/denied)
|
||||
src.overlays -= "paper_stamped_denied"
|
||||
if(/obj/item/weapon/stamp/clown)
|
||||
src.overlays -= "paper_stamped_clown"
|
||||
else
|
||||
src.overlays -= "paper_stamped"
|
||||
stamped = list()
|
||||
user << "\blue You sucessfully remove those pesky stamps."
|
||||
switch(alert("Would you like to erase all stamps, or forge one?","Choose.","Erase","Forge"))
|
||||
if("Erase")
|
||||
if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
|
||||
return
|
||||
src.info = src.infoold
|
||||
src.infoold = null
|
||||
src.overlays -= "paper_stamped_cap"
|
||||
src.overlays -= "paper_stamped_hop"
|
||||
src.overlays -= "paper_stamped_hos"
|
||||
src.overlays -= "paper_stamped_ce"
|
||||
src.overlays -= "paper_stamped_rd"
|
||||
src.overlays -= "paper_stamped_cmo"
|
||||
src.overlays -= "paper_stamped_denied"
|
||||
src.overlays -= "paper_stamped_clown"
|
||||
src.overlays -= "paper_stamped"
|
||||
stamped = list()
|
||||
user << "\blue You sucessfully remove those pesky stamps."
|
||||
return
|
||||
if("Forge")
|
||||
if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
|
||||
return
|
||||
if(!src.infoold)
|
||||
src.infoold = src.info
|
||||
var/forgename = ""
|
||||
var/stamptype = ""
|
||||
var/pathtype = ""
|
||||
var/list/stamps = list("Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "DENIED")
|
||||
stamptype = input("Select a stamp type.", null) in stamps
|
||||
if(stamptype == "Captain")
|
||||
src.overlays += "paper_stamped_cap"
|
||||
forgename = "captain's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/captain"
|
||||
else if(stamptype == "Head of Personnel")
|
||||
src.overlays += "paper_stamped_hop"
|
||||
forgename = "head of personnel's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/hop"
|
||||
else if(stamptype == "Head of Security")
|
||||
src.overlays += "paper_stamped_hos"
|
||||
forgename = "head of security's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/hos"
|
||||
else if(stamptype == "Chief Engineer")
|
||||
src.overlays += "paper_stamped_ce"
|
||||
forgename = "chief engineers's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/ce"
|
||||
else if(stamptype == "Research Director")
|
||||
src.overlays += "paper_stamped_rd"
|
||||
forgename = "research director's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/rd"
|
||||
else if(stamptype == "Chief Medical Officer")
|
||||
src.overlays += "paper_stamped_cmo"
|
||||
forgename = "chief medical officer's rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/cmo"
|
||||
else if(stamptype == "DENIED")
|
||||
src.overlays += "paper_stamped_denied"
|
||||
forgename = "\improper DENIED rubber stamp"
|
||||
pathtype = "/obj/item/weapon/stamp/denied"
|
||||
src.info += text("<BR><i>This paper has been stamped with the [].</i><BR>", forgename)
|
||||
if(!stamped)
|
||||
stamped = new
|
||||
stamped += pathtype
|
||||
|
||||
user << "\blue You forge a stamp on the paper."
|
||||
return
|
||||
|
||||
/*
|
||||
else
|
||||
|
||||
@@ -1548,6 +1548,10 @@ CIRCULAR SAW
|
||||
return
|
||||
|
||||
if(3.0)
|
||||
if(M.changeling && M.changeling.changeling_fakedeath)
|
||||
user << "\red The neural tissue regrows before your eyes as you cut it."
|
||||
return
|
||||
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] has \his spine's connection to the brain severed with [src] by [user].", 1)
|
||||
|
||||
@@ -13,7 +13,7 @@ WELDINGTOOOL
|
||||
desc = "A wrench with common uses. Can be found in your hand."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "wrench"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
@@ -44,7 +44,7 @@ WELDINGTOOOL
|
||||
name = "Welding Tool"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "welder"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -310,7 +310,7 @@ WELDINGTOOOL
|
||||
desc = "This cuts wires."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "cutters"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 6.0
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
|
||||
@@ -2,27 +2,115 @@
|
||||
##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ########
|
||||
####################################################################*/
|
||||
|
||||
///General Offhand object properties///
|
||||
//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn
|
||||
//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons.
|
||||
//It also tidies stuff up elsewhere.
|
||||
|
||||
////////////FIREAXE!//////////////
|
||||
/obj/item/weapon/twohanded
|
||||
var/wielded = 0
|
||||
var/force_unwielded = 0
|
||||
var/force_wielded = 0
|
||||
|
||||
/obj/item/weapon/twohanded/proc/unwield()
|
||||
wielded = 0
|
||||
force = force_unwielded
|
||||
name = "[initial(name)]"
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
|
||||
icon_state = text("fireaxe[]",wielded)
|
||||
/obj/item/weapon/twohanded/proc/wield()
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
name = "[initial(name)] (Wielded)"
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/dropped(mob/user as mob)
|
||||
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
|
||||
//bit of a hack but it keeps other code pretty neat and with fewer conditionals
|
||||
var/obj/item/weapon/twohanded/O
|
||||
if(user)
|
||||
if(user.l_hand)
|
||||
O = user.l_hand
|
||||
else
|
||||
O = user.r_hand
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return unwield()
|
||||
|
||||
/obj/item/weapon/twohanded/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/fireaxe/pickup(mob/user)
|
||||
wielded = 0
|
||||
name = "Fire Axe (Unwielded)"
|
||||
/obj/item/weapon/twohanded/pickup(mob/user)
|
||||
unwield()
|
||||
|
||||
/obj/item/weapon/fireaxe/attack_self(mob/user as mob)
|
||||
/obj/item/weapon/twohanded/attack_self(mob/user as mob)
|
||||
if( istype(user,/mob/living/carbon/monkey) )
|
||||
user << "\red It's too heavy for you to fully wield"
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
|
||||
//welp, all is good, now to see if he's trying do twohandedly wield it or unwield it
|
||||
|
||||
..()
|
||||
if(wielded) //Trying to unwield it
|
||||
unwield()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
|
||||
/obj/item/weapon/offhand/dropped(mob/user as mob)
|
||||
del(src)
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
|
||||
else //Trying to wield it
|
||||
if(user.get_inactive_hand())
|
||||
user << "<span class='warning'>You need your other hand to be empty</span>"
|
||||
return
|
||||
wield()
|
||||
user << "<span class='notice'>You grab the [initial(name)] with both hands.</span>"
|
||||
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
|
||||
O.name = "[initial(name)] - offhand"
|
||||
O.desc = "Your second grip on the [initial(name)]"
|
||||
if(user.hand)
|
||||
user.r_hand = O ///Place dat offhand in the opposite hand
|
||||
else
|
||||
user.l_hand = O
|
||||
O.layer = 20
|
||||
return
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
w_class = 5.0
|
||||
icon_state = "offhand"
|
||||
name = "offhand"
|
||||
|
||||
unwield()
|
||||
del(src)
|
||||
|
||||
wield()
|
||||
del(src)
|
||||
|
||||
////////////FIREAXE!//////////////
|
||||
/obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
|
||||
icon_state = "fireaxe0"
|
||||
name = "fire axe"
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 5
|
||||
w_class = 4.0
|
||||
flags = ONBACK
|
||||
force_unwielded = 5
|
||||
force_wielded = 18
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
|
||||
icon_state = "fireaxe[wielded]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
..()
|
||||
if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit
|
||||
if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it
|
||||
var/obj/structure/window/W = A
|
||||
|
||||
new /obj/item/weapon/shard( W.loc )
|
||||
if(W.reinf) new /obj/item/stack/rods( W.loc)
|
||||
|
||||
if (W.dir == SOUTHWEST)
|
||||
new /obj/item/weapon/shard( W.loc )
|
||||
if(W.reinf) new /obj/item/stack/rods( W.loc)
|
||||
del(A)
|
||||
@@ -243,4 +243,36 @@
|
||||
|
||||
/obj/structure/mineral_door/transparent/diamond
|
||||
mineralType = "diamond"
|
||||
hardness = 10
|
||||
hardness = 10
|
||||
|
||||
/obj/structure/mineral_door/wood
|
||||
mineralType = "wood"
|
||||
hardness = 1
|
||||
|
||||
Open()
|
||||
isSwitchingStates = 1
|
||||
playsound(loc, 'doorcreaky.ogg', 100, 1)
|
||||
flick("[mineralType]opening",src)
|
||||
sleep(10)
|
||||
density = 0
|
||||
opacity = 0
|
||||
state = 1
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
|
||||
Close()
|
||||
isSwitchingStates = 1
|
||||
playsound(loc, 'doorcreaky.ogg', 100, 1)
|
||||
flick("[mineralType]closing",src)
|
||||
sleep(10)
|
||||
density = 1
|
||||
opacity = 1
|
||||
state = 0
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
|
||||
Dismantle(devastated = 0)
|
||||
if(!devastated)
|
||||
for(var/i = 1, i <= oreAmount, i++)
|
||||
new/obj/item/stack/sheet/wood(get_turf(src))
|
||||
del(src)
|
||||
@@ -441,6 +441,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
// Oh my god; the comms are down or something because the signal hasn't been broadcasted yet.
|
||||
// Send a mundane broadcast with limited targets:
|
||||
|
||||
//THIS IS TEMPORARY.
|
||||
if(!connection) return //~Carn
|
||||
|
||||
Broadcast_Message(connection, M, voicemask, M.voice_message,
|
||||
src, message, displayname, jobname, real_name, M.voice_name,
|
||||
filter_type, signal.data["compression"])
|
||||
|
||||
@@ -10,6 +10,7 @@ SILVER
|
||||
|
||||
//Sandstone
|
||||
var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
|
||||
new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \
|
||||
/* new/datum/stack_recipe("sandstone wall", ???), \
|
||||
new/datum/stack_recipe("sandstone floor", ???),\*/
|
||||
|
||||
@@ -4,8 +4,10 @@ WOOD PLANKS
|
||||
*/
|
||||
|
||||
var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
|
||||
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/wood, 2), \
|
||||
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 30, one_per_turf = 1, on_floor = 1),\
|
||||
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 30, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/wood
|
||||
|
||||
@@ -38,6 +38,15 @@
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
|
||||
/obj/structure/closet/crate/contraband
|
||||
name = "Contraband crate"
|
||||
desc = "A random assortment of items manufactured by providers NOT listed under Nanotrasen's whitelist."
|
||||
icon = 'storage.dmi'
|
||||
icon_state = "crate"
|
||||
density = 1
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
|
||||
/obj/structure/closet/crate/medical
|
||||
desc = "A medical crate."
|
||||
name = "Medical crate"
|
||||
|
||||
@@ -160,6 +160,58 @@ obj/structure
|
||||
/obj/structure/girder/reinforced
|
||||
icon_state = "reinforced"
|
||||
state = 2
|
||||
|
||||
/obj/structure/cultgirder
|
||||
icon= 'cult.dmi'
|
||||
icon_state= "cultgirder"
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 2
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
if(do_after(user,40))
|
||||
user << "\blue You dissasembled the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
if(do_after(user,30))
|
||||
user << "\blue You slice apart the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
blob_act()
|
||||
if(prob(40))
|
||||
del(src)
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
del(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
// LATTICE
|
||||
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
if(air_contents.oxygen < 1)
|
||||
if(air_contents.oxygen < 1 && loc==usr)
|
||||
usr << text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
playsound(usr, 'alert.ogg', 50, 1)
|
||||
usr << sound('alert.ogg')
|
||||
|
||||
|
||||
/obj/item/weapon/tank/plasma
|
||||
|
||||
@@ -18,10 +18,9 @@
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
if(air_contents.oxygen < 0.4)
|
||||
if(air_contents.oxygen < 0.2 && loc==usr)
|
||||
usr << text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
playsound(usr, 'alert.ogg', 50, 1)
|
||||
|
||||
usr << sound('alert.ogg')
|
||||
|
||||
/obj/item/weapon/tank/emergency_oxygen/engi
|
||||
icon_state = "emergency_engi"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/device/transfer_valve
|
||||
icon = 'assemblies.dmi'
|
||||
name = "Tank transfer valve" // because that's what it is exadv1 and don't you dare change it
|
||||
name = "tank transfer valve"
|
||||
icon_state = "valve_1"
|
||||
desc = "Regulates the transfer of air between two tanks"
|
||||
var/obj/item/weapon/tank/tank_one
|
||||
@@ -19,34 +19,34 @@
|
||||
attackby(obj/item/item, mob/user)
|
||||
if(istype(item, /obj/item/weapon/tank))
|
||||
if(tank_one && tank_two)
|
||||
user << "\red There are already two tanks attached, remove one first!"
|
||||
user << "<span class='warning'>There are already two tanks attached, remove one first.</span>"
|
||||
return
|
||||
|
||||
if(!tank_one)
|
||||
tank_one = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "\blue You attach the tank to the transfer valve"
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
else if(!tank_two)
|
||||
tank_two = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "\blue You attach the tank to the transfer valve!"
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
|
||||
update_icon()
|
||||
//TODO: Have this take an assemblyholder
|
||||
else if(isassembly(item))
|
||||
var/obj/item/device/assembly/A = item
|
||||
if(A.secured)
|
||||
user << "\red The device is secured!"
|
||||
user << "<span class='notice'>The device is secured.</span>"
|
||||
return
|
||||
if(attached_device)
|
||||
user << "\red There is already an device attached to the valve, remove it first!"
|
||||
user << "<span class='warning'>There is already an device attached to the valve, remove it first.</span>"
|
||||
return
|
||||
user.remove_from_mob(item)
|
||||
attached_device = A
|
||||
A.loc = src
|
||||
user << "\blue You attach the [item] to the valve controls and secure it!"
|
||||
user << "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>"
|
||||
A.holder = src
|
||||
A.toggle_secure()
|
||||
|
||||
@@ -75,39 +75,38 @@
|
||||
onclose(user, "trans_valve")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat|| usr.restrained())
|
||||
if ( usr.stat || usr.restrained() )
|
||||
return
|
||||
if (src.loc == usr)
|
||||
if(href_list["tankone"])
|
||||
if(tank_one && href_list["tankone"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_one.loc = get_turf(src)
|
||||
tank_one = null
|
||||
update_icon()
|
||||
if(href_list["tanktwo"])
|
||||
else if(tank_two && href_list["tanktwo"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_two.loc = get_turf(src)
|
||||
tank_two = null
|
||||
update_icon()
|
||||
if(href_list["open"])
|
||||
else if(href_list["open"])
|
||||
toggle_valve()
|
||||
if(href_list["rem_device"])
|
||||
if(attached_device)
|
||||
else if(attached_device)
|
||||
if(href_list["rem_device"])
|
||||
attached_device.loc = get_turf(src)
|
||||
attached_device:holder = null
|
||||
attached_device = null
|
||||
update_icon()
|
||||
if(href_list["device"])
|
||||
attached_device.attack_self(usr)
|
||||
update_icon()
|
||||
if(href_list["device"])
|
||||
attached_device.attack_self(usr)
|
||||
|
||||
src.attack_self(usr)
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
return
|
||||
|
||||
process_activation(var/obj/item/device/D)
|
||||
if(toggle)
|
||||
|
||||
@@ -203,17 +203,3 @@
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>The mousetrap is triggered by [A].</B>"), 1)
|
||||
src.triggered(null)
|
||||
|
||||
/obj/item/weapon/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
..()
|
||||
if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit
|
||||
if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it
|
||||
var/obj/structure/window/W = A
|
||||
|
||||
new /obj/item/weapon/shard( W.loc )
|
||||
if(W.reinf) new /obj/item/stack/rods( W.loc)
|
||||
|
||||
if (W.dir == SOUTHWEST)
|
||||
new /obj/item/weapon/shard( W.loc )
|
||||
if(W.reinf) new /obj/item/stack/rods( W.loc)
|
||||
del(A)
|
||||
@@ -95,6 +95,7 @@ var/list/supply_groups = new()
|
||||
circuit = "/obj/item/weapon/circuitboard/supplycomp"
|
||||
var/temp = null
|
||||
var/hacked = 0
|
||||
var/can_order_contraband = 0
|
||||
|
||||
/obj/machinery/computer/supplycomp/New()
|
||||
// add the supply pack groups, if they haven't already been added
|
||||
@@ -141,6 +142,7 @@ var/list/supply_groups = new()
|
||||
var/containername = null
|
||||
var/access = null
|
||||
var/hidden = 0
|
||||
var/contraband = 0
|
||||
var/group = "Miscellaneous"
|
||||
|
||||
/proc/supply_ticker()
|
||||
@@ -348,7 +350,7 @@ This method wont take into account storage items developed in the future and doe
|
||||
src.temp = "Supply points: [supply_shuttle_points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
for(var/S in (typesof(/datum/supply_packs) - /datum/supply_packs - /datum/supply_packs/charge) )
|
||||
var/datum/supply_packs/N = new S()
|
||||
if(N.hidden) continue //Have to send the type instead of a reference to
|
||||
if(N.hidden || N.contraband) continue //Have to send the type instead of a reference to
|
||||
if(N.group != G) continue //correct group?
|
||||
src.temp += "<A href='?src=\ref[src];doorder=[N.type]'>[N.name]</A> Cost: [N.cost] " //the obj because it would get caught by the garbage
|
||||
src.temp += "<A href='?src=\ref[src];printform=[N.type]'>Print Requisition</A><br>" //collector. oh well.
|
||||
@@ -490,6 +492,8 @@ This method wont take into account storage items developed in the future and doe
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
var/obj/item/weapon/circuitboard/supplycomp/M = new /obj/item/weapon/circuitboard/supplycomp( A )
|
||||
if(src.can_order_contraband)
|
||||
M.contraband_enabled = 1
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
@@ -567,6 +571,7 @@ This method wont take into account storage items developed in the future and doe
|
||||
for(var/S in (typesof(/datum/supply_packs) - /datum/supply_packs - /datum/supply_packs/charge) )
|
||||
var/datum/supply_packs/N = new S()
|
||||
if(N.hidden && !src.hacked) continue //Have to send the type instead of a reference to
|
||||
if(N.contraband && !src.can_order_contraband){continue;} //Agouri -Kavalamarker
|
||||
if(N.group != G) continue //correct group?
|
||||
src.temp += "<A href='?src=\ref[src];doorder=[N.type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
src.temp += "<BR><A href='?src=\ref[src];order=1'>Back</A>" //collector. oh well.
|
||||
|
||||
+3
-17
@@ -25,7 +25,7 @@
|
||||
/mob/living/carbon/proc/throw_item(atom/target)
|
||||
src.throw_mode_off()
|
||||
|
||||
if(usr.stat)
|
||||
if(usr.stat || !target)
|
||||
return
|
||||
if(target.type == /obj/screen) return
|
||||
|
||||
@@ -33,19 +33,6 @@
|
||||
|
||||
if(!item) return
|
||||
|
||||
if(istype(item,/obj/item))
|
||||
var/obj/item/IT = item
|
||||
if(IT.twohanded)
|
||||
if(IT.wielded)
|
||||
if(hand)
|
||||
var/obj/item/weapon/offhand/O = r_hand
|
||||
del O
|
||||
else
|
||||
var/obj/item/weapon/offhand/O = l_hand
|
||||
del O
|
||||
|
||||
IT.wielded = 0
|
||||
IT.name = initial(IT.name)
|
||||
|
||||
|
||||
u_equip(item)
|
||||
@@ -141,7 +128,7 @@
|
||||
..()
|
||||
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed)
|
||||
if(!target) return 0
|
||||
if(!target || !src) return 0
|
||||
//use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
|
||||
src.throwing = 1
|
||||
|
||||
@@ -168,7 +155,7 @@
|
||||
|
||||
|
||||
|
||||
while(((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
|
||||
while(src && target &&((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
|
||||
// only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up
|
||||
if(error < 0)
|
||||
var/atom/step = get_step(src, dy)
|
||||
@@ -194,7 +181,6 @@
|
||||
if(dist_since_sleep >= speed)
|
||||
dist_since_sleep = 0
|
||||
sleep(1)
|
||||
|
||||
a = get_area(src.loc)
|
||||
else
|
||||
var/error = dist_y/2 - dist_x
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
|
||||
else
|
||||
playsound(src, "clownstep", 20, 1)
|
||||
|
||||
switch (src.wet)
|
||||
if(1)
|
||||
if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
|
||||
@@ -307,6 +308,7 @@
|
||||
if(!devastated)
|
||||
playsound(src.loc, 'Welder.ogg', 100, 1)
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/structure/cultgirder(src)
|
||||
else
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/effect/decal/remains/human(src)
|
||||
@@ -322,6 +324,12 @@
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
|
||||
for(var/obj/O in src.contents) //Eject contents!
|
||||
if(istype(O,/obj/effect/decal/poster))
|
||||
var/obj/effect/decal/poster/P = O
|
||||
P.roll_and_drop(src)
|
||||
else
|
||||
O.loc = src
|
||||
ReplaceWithPlating(explode)
|
||||
|
||||
/turf/simulated/wall/examine()
|
||||
@@ -509,6 +517,12 @@
|
||||
var/obj/item/apc_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
//Poster stuff
|
||||
else if(istype(W,/obj/item/weapon/contraband/poster))
|
||||
place_poster(W,user)
|
||||
return
|
||||
|
||||
else
|
||||
return attack_hand(user)
|
||||
return
|
||||
@@ -744,6 +758,11 @@
|
||||
var/obj/item/apc_frame/AH = W
|
||||
AH.try_build(src)
|
||||
|
||||
//Poster stuff
|
||||
else if(istype(W,/obj/item/weapon/contraband/poster))
|
||||
place_poster(W,user)
|
||||
return
|
||||
|
||||
//Finally, CHECKING FOR FALSE WALLS if it isn't damaged
|
||||
else if(!d_state)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
|
||||
The old goon auth/beta code is here:
|
||||
|
||||
/client/proc/authorize()
|
||||
set name = "Authorize"
|
||||
|
||||
@@ -45,8 +42,9 @@ The old goon auth/beta code is here:
|
||||
src << "Try again using the <b>Authorize</b> command, sometimes the server will hiccup and not correctly authorize."
|
||||
src << "\blue[no_auth_motd]"
|
||||
src.authenticating = 0
|
||||
*/
|
||||
|
||||
|
||||
/* The old goon auth/beta code is here
|
||||
/client/proc/beta_tester_auth()
|
||||
set name = "Tester?"
|
||||
/*if(istester(src))
|
||||
@@ -167,4 +165,4 @@ var/list/beta_tester_keylist
|
||||
goon_savefile()
|
||||
return 1
|
||||
return 0
|
||||
*/
|
||||
*/
|
||||
@@ -12,7 +12,9 @@
|
||||
/mob/verb/ooc(msg as text)
|
||||
set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite
|
||||
set category = "OOC"
|
||||
|
||||
if (IsGuestKey(src.key))
|
||||
src << "You are not authorized to communicate over these channels."
|
||||
return
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
if(!msg)
|
||||
return
|
||||
@@ -36,17 +38,17 @@
|
||||
|
||||
for (var/client/C)
|
||||
if (src.client.holder && (!src.client.stealth || C.holder))
|
||||
// C << "<span class=\"adminooc\"><span class=\"prefix\">OOC:</span> <span class=\"name\">[src.key]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
if (src.client.holder.rank == "Admin Observer")
|
||||
C << "<span class=\"gfartooc\"><span class=\"prefix\">OOC:</span> <span class=\"name\">[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
C << "<span class='adminobserverooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else if (src.client.holder.rank == "Retired Admin")
|
||||
C << "<span class=\"ooc\"><span class=\"prefix\">OOC:</span> <span class=\"name\">[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
C << "<span class='ooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else if (src.client.holder.level >= 5)
|
||||
C << "<font color=[src.client.ooccolor]><b><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></b></font>"
|
||||
else
|
||||
C << "<font color=[src.client.ooccolor]><b><span class=\"prefix\">OOC:</span> <span class=\"name\">[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</span> <span class=\"message\">[msg]</span></b></font>"
|
||||
C << "<span class='adminooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>"
|
||||
|
||||
else if (C.listen_ooc)
|
||||
C << "<span class=\"ooc\"><span class=\"prefix\">OOC:</span> <span class=\"name\">[src.client.stealth ? src.client.fakekey : src.key]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
|
||||
C << "<span class='ooc'><span class='prefix'>OOC:</span> <EM>[src.client.stealth ? src.client.fakekey : src.key]:</EM> <span class='message'>[msg]</span></span>"
|
||||
/*
|
||||
/mob/verb/goonsay(msg as text)
|
||||
set name = "Goonsay"
|
||||
|
||||
+1
-1
@@ -408,7 +408,7 @@
|
||||
|
||||
for(var/mob/CM in world)
|
||||
if(CM.client)
|
||||
if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
|
||||
if( config.vote_no_default || (config.vote_no_dead && CM.stat == 2) )
|
||||
CM.client.vote = "none"
|
||||
else
|
||||
CM.client.vote = "default"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user