mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 20:23:26 +00:00
Merge branch 'master' of github.com:Baystation12/Baystation12
Conflicts: config/config.txt
This commit is contained in:
@@ -87,8 +87,6 @@
|
|||||||
#define FILE_DIR "code/js"
|
#define FILE_DIR "code/js"
|
||||||
#define FILE_DIR "code/modules"
|
#define FILE_DIR "code/modules"
|
||||||
#define FILE_DIR "code/modules/admin"
|
#define FILE_DIR "code/modules/admin"
|
||||||
#define FILE_DIR "code/modules/admin/new"
|
|
||||||
#define FILE_DIR "code/modules/admin/new/verbs"
|
|
||||||
#define FILE_DIR "code/modules/admin/verbs"
|
#define FILE_DIR "code/modules/admin/verbs"
|
||||||
#define FILE_DIR "code/modules/assembly"
|
#define FILE_DIR "code/modules/assembly"
|
||||||
#define FILE_DIR "code/modules/chemical"
|
#define FILE_DIR "code/modules/chemical"
|
||||||
@@ -104,6 +102,7 @@
|
|||||||
#define FILE_DIR "code/modules/DetectiveWork"
|
#define FILE_DIR "code/modules/DetectiveWork"
|
||||||
#define FILE_DIR "code/modules/flufftext"
|
#define FILE_DIR "code/modules/flufftext"
|
||||||
#define FILE_DIR "code/modules/food"
|
#define FILE_DIR "code/modules/food"
|
||||||
|
#define FILE_DIR "code/modules/maps"
|
||||||
#define FILE_DIR "code/modules/mining"
|
#define FILE_DIR "code/modules/mining"
|
||||||
#define FILE_DIR "code/modules/mob"
|
#define FILE_DIR "code/modules/mob"
|
||||||
#define FILE_DIR "code/modules/mob/dead"
|
#define FILE_DIR "code/modules/mob/dead"
|
||||||
@@ -174,7 +173,6 @@
|
|||||||
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
|
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
|
||||||
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
|
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
|
||||||
#define FILE_DIR "code/WorkInProgress/Ported/Spawners"
|
#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/SkyMarshal"
|
||||||
#define FILE_DIR "code/WorkInProgress/Tastyfish"
|
#define FILE_DIR "code/WorkInProgress/Tastyfish"
|
||||||
#define FILE_DIR "code/WorkInProgress/virus2"
|
#define FILE_DIR "code/WorkInProgress/virus2"
|
||||||
@@ -201,6 +199,7 @@
|
|||||||
#define FILE_DIR "icons/vending_icons"
|
#define FILE_DIR "icons/vending_icons"
|
||||||
#define FILE_DIR "interface"
|
#define FILE_DIR "interface"
|
||||||
#define FILE_DIR "maps"
|
#define FILE_DIR "maps"
|
||||||
|
#define FILE_DIR "maps/RandomZLevels"
|
||||||
#define FILE_DIR "sound"
|
#define FILE_DIR "sound"
|
||||||
#define FILE_DIR "sound/AI"
|
#define FILE_DIR "sound/AI"
|
||||||
#define FILE_DIR "sound/ambience"
|
#define FILE_DIR "sound/ambience"
|
||||||
@@ -404,6 +403,7 @@
|
|||||||
#include "code\game\events\EventProcs\ninja_equipment.dm"
|
#include "code\game\events\EventProcs\ninja_equipment.dm"
|
||||||
#include "code\game\events\EventProcs\space_ninja.dm"
|
#include "code\game\events\EventProcs\space_ninja.dm"
|
||||||
#include "code\game\events\EventProcs\spacevines.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\AlienInfestation.dm"
|
||||||
#include "code\game\events\Events\Appendicitis.dm"
|
#include "code\game\events\Events\Appendicitis.dm"
|
||||||
#include "code\game\events\Events\ElectricalStorm.dm"
|
#include "code\game\events\Events\ElectricalStorm.dm"
|
||||||
@@ -434,6 +434,7 @@
|
|||||||
#include "code\game\gamemodes\changeling\traitor_chan.dm"
|
#include "code\game\gamemodes\changeling\traitor_chan.dm"
|
||||||
#include "code\game\gamemodes\cult\cult.dm"
|
#include "code\game\gamemodes\cult\cult.dm"
|
||||||
#include "code\game\gamemodes\cult\cult_items.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\epidemic\epidemic.dm"
|
||||||
#include "code\game\gamemodes\extended\extended.dm"
|
#include "code\game\gamemodes\extended\extended.dm"
|
||||||
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
||||||
@@ -488,6 +489,7 @@
|
|||||||
#include "code\game\machinery\flasher.dm"
|
#include "code\game\machinery\flasher.dm"
|
||||||
#include "code\game\machinery\floodlight.dm"
|
#include "code\game\machinery\floodlight.dm"
|
||||||
#include "code\game\machinery\Freezer.dm"
|
#include "code\game\machinery\Freezer.dm"
|
||||||
|
#include "code\game\machinery\gateway.dm"
|
||||||
#include "code\game\machinery\hologram.dm"
|
#include "code\game\machinery\hologram.dm"
|
||||||
#include "code\game\machinery\hydroponics.dm"
|
#include "code\game\machinery\hydroponics.dm"
|
||||||
#include "code\game\machinery\igniter.dm"
|
#include "code\game\machinery\igniter.dm"
|
||||||
@@ -538,13 +540,13 @@
|
|||||||
#include "code\game\machinery\computer\atmos_alert.dm"
|
#include "code\game\machinery\computer\atmos_alert.dm"
|
||||||
#include "code\game\machinery\computer\buildandrepair.dm"
|
#include "code\game\machinery\computer\buildandrepair.dm"
|
||||||
#include "code\game\machinery\computer\camera_monitor.dm"
|
#include "code\game\machinery\computer\camera_monitor.dm"
|
||||||
|
#include "code\game\machinery\computer\card.dm"
|
||||||
#include "code\game\machinery\computer\cloning.dm"
|
#include "code\game\machinery\computer\cloning.dm"
|
||||||
#include "code\game\machinery\computer\communications.dm"
|
#include "code\game\machinery\computer\communications.dm"
|
||||||
#include "code\game\machinery\computer\computer.dm"
|
#include "code\game\machinery\computer\computer.dm"
|
||||||
#include "code\game\machinery\computer\crew.dm"
|
#include "code\game\machinery\computer\crew.dm"
|
||||||
#include "code\game\machinery\computer\HolodeckControl.dm"
|
#include "code\game\machinery\computer\HolodeckControl.dm"
|
||||||
#include "code\game\machinery\computer\hologram.dm"
|
#include "code\game\machinery\computer\hologram.dm"
|
||||||
#include "code\game\machinery\computer\id.dm"
|
|
||||||
#include "code\game\machinery\computer\law.dm"
|
#include "code\game\machinery\computer\law.dm"
|
||||||
#include "code\game\machinery\computer\lockdown.dm"
|
#include "code\game\machinery\computer\lockdown.dm"
|
||||||
#include "code\game\machinery\computer\medical.dm"
|
#include "code\game\machinery\computer\medical.dm"
|
||||||
@@ -668,6 +670,7 @@
|
|||||||
#include "code\game\objects\closets\secure\cargo.dm"
|
#include "code\game\objects\closets\secure\cargo.dm"
|
||||||
#include "code\game\objects\closets\secure\civilian.dm"
|
#include "code\game\objects\closets\secure\civilian.dm"
|
||||||
#include "code\game\objects\closets\secure\engineering.dm"
|
#include "code\game\objects\closets\secure\engineering.dm"
|
||||||
|
#include "code\game\objects\closets\secure\hydroponics.dm"
|
||||||
#include "code\game\objects\closets\secure\medical.dm"
|
#include "code\game\objects\closets\secure\medical.dm"
|
||||||
#include "code\game\objects\closets\secure\personal.dm"
|
#include "code\game\objects\closets\secure\personal.dm"
|
||||||
#include "code\game\objects\closets\secure\research.dm"
|
#include "code\game\objects\closets\secure\research.dm"
|
||||||
@@ -793,11 +796,12 @@
|
|||||||
#include "code\modules\admin\verbs\adminsay.dm"
|
#include "code\modules\admin\verbs\adminsay.dm"
|
||||||
#include "code\modules\admin\verbs\atmosdebug.dm"
|
#include "code\modules\admin\verbs\atmosdebug.dm"
|
||||||
#include "code\modules\admin\verbs\BrokenInhands.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\custom_event.dm"
|
||||||
#include "code\modules\admin\verbs\deadsay.dm"
|
#include "code\modules\admin\verbs\deadsay.dm"
|
||||||
#include "code\modules\admin\verbs\debug.dm"
|
#include "code\modules\admin\verbs\debug.dm"
|
||||||
#include "code\modules\admin\verbs\diagnostics.dm"
|
#include "code\modules\admin\verbs\diagnostics.dm"
|
||||||
#include "code\modules\admin\verbs\getruntimelog.dm"
|
#include "code\modules\admin\verbs\getlogs.dm"
|
||||||
#include "code\modules\admin\verbs\gimmicks.dm"
|
#include "code\modules\admin\verbs\gimmicks.dm"
|
||||||
#include "code\modules\admin\verbs\mapping.dm"
|
#include "code\modules\admin\verbs\mapping.dm"
|
||||||
#include "code\modules\admin\verbs\massmodvar.dm"
|
#include "code\modules\admin\verbs\massmodvar.dm"
|
||||||
@@ -872,6 +876,11 @@
|
|||||||
#include "code\modules\food\food.dm"
|
#include "code\modules\food\food.dm"
|
||||||
#include "code\modules\food\meat.dm"
|
#include "code\modules\food\meat.dm"
|
||||||
#include "code\modules\food\recipes_microwave.dm"
|
#include "code\modules\food\recipes_microwave.dm"
|
||||||
|
#include "code\modules\maps\dmm_suite.dm"
|
||||||
|
#include "code\modules\maps\randomZlevel.dm"
|
||||||
|
#include "code\modules\maps\reader.dm"
|
||||||
|
#include "code\modules\maps\SwapMaps.dm"
|
||||||
|
#include "code\modules\maps\writer.dm"
|
||||||
#include "code\modules\mining\machine_input_output_plates.dm"
|
#include "code\modules\mining\machine_input_output_plates.dm"
|
||||||
#include "code\modules\mining\machine_processing.dm"
|
#include "code\modules\mining\machine_processing.dm"
|
||||||
#include "code\modules\mining\machine_stacking.dm"
|
#include "code\modules\mining\machine_stacking.dm"
|
||||||
@@ -883,6 +892,7 @@
|
|||||||
#include "code\modules\mining\money_bag.dm"
|
#include "code\modules\mining\money_bag.dm"
|
||||||
#include "code\modules\mining\ores_materials_coins.dm"
|
#include "code\modules\mining\ores_materials_coins.dm"
|
||||||
#include "code\modules\mining\satchel_ore_box.dm"
|
#include "code\modules\mining\satchel_ore_box.dm"
|
||||||
|
#include "code\modules\mob\death.dm"
|
||||||
#include "code\modules\mob\login.dm"
|
#include "code\modules\mob\login.dm"
|
||||||
#include "code\modules\mob\logout.dm"
|
#include "code\modules\mob\logout.dm"
|
||||||
#include "code\modules\mob\mob.dm"
|
#include "code\modules\mob\mob.dm"
|
||||||
@@ -891,9 +901,11 @@
|
|||||||
#include "code\modules\mob\mob_grab.dm"
|
#include "code\modules\mob\mob_grab.dm"
|
||||||
#include "code\modules\mob\mob_helpers.dm"
|
#include "code\modules\mob\mob_helpers.dm"
|
||||||
#include "code\modules\mob\mob_movement.dm"
|
#include "code\modules\mob\mob_movement.dm"
|
||||||
|
#include "code\modules\mob\mob_transformation_simple.dm"
|
||||||
#include "code\modules\mob\say.dm"
|
#include "code\modules\mob\say.dm"
|
||||||
#include "code\modules\mob\screen.dm"
|
#include "code\modules\mob\screen.dm"
|
||||||
#include "code\modules\mob\transform_procs.dm"
|
#include "code\modules\mob\transform_procs.dm"
|
||||||
|
#include "code\modules\mob\dead\death.dm"
|
||||||
#include "code\modules\mob\dead\observer\hud.dm"
|
#include "code\modules\mob\dead\observer\hud.dm"
|
||||||
#include "code\modules\mob\dead\observer\login.dm"
|
#include "code\modules\mob\dead\observer\login.dm"
|
||||||
#include "code\modules\mob\dead\observer\observer.dm"
|
#include "code\modules\mob\dead\observer\observer.dm"
|
||||||
@@ -907,6 +919,7 @@
|
|||||||
#include "code\modules\mob\living\carbon\give.dm"
|
#include "code\modules\mob\living\carbon\give.dm"
|
||||||
#include "code\modules\mob\living\carbon\shock.dm"
|
#include "code\modules\mob\living\carbon\shock.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\alien.dm"
|
#include "code\modules\mob\living\carbon\alien\alien.dm"
|
||||||
|
#include "code\modules\mob\living\carbon\alien\death.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\say.dm"
|
#include "code\modules\mob\living\carbon\alien\say.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
|
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\humanoid\death.dm"
|
#include "code\modules\mob\living\carbon\alien\humanoid\death.dm"
|
||||||
@@ -973,6 +986,7 @@
|
|||||||
#include "code\modules\mob\living\carbon\monkey\npc.dm"
|
#include "code\modules\mob\living\carbon\monkey\npc.dm"
|
||||||
#include "code\modules\mob\living\carbon\monkey\powers.dm"
|
#include "code\modules\mob\living\carbon\monkey\powers.dm"
|
||||||
#include "code\modules\mob\living\carbon\monkey\say.dm"
|
#include "code\modules\mob\living\carbon\monkey\say.dm"
|
||||||
|
#include "code\modules\mob\living\silicon\death.dm"
|
||||||
#include "code\modules\mob\living\silicon\say.dm"
|
#include "code\modules\mob\living\silicon\say.dm"
|
||||||
#include "code\modules\mob\living\silicon\silicon.dm"
|
#include "code\modules\mob\living\silicon\silicon.dm"
|
||||||
#include "code\modules\mob\living\silicon\ai\ai.dm"
|
#include "code\modules\mob\living\silicon\ai\ai.dm"
|
||||||
@@ -1022,6 +1036,7 @@
|
|||||||
#include "code\modules\mob\organ\organ_external.dm"
|
#include "code\modules\mob\organ\organ_external.dm"
|
||||||
#include "code\modules\mob\organ\organ_internal.dm"
|
#include "code\modules\mob\organ\organ_internal.dm"
|
||||||
#include "code\modules\mob\organ\pain.dm"
|
#include "code\modules\mob\organ\pain.dm"
|
||||||
|
#include "code\modules\mob\simple_animal\behemoth.dm"
|
||||||
#include "code\modules\mob\simple_animal\cat.dm"
|
#include "code\modules\mob\simple_animal\cat.dm"
|
||||||
#include "code\modules\mob\simple_animal\constructs.dm"
|
#include "code\modules\mob\simple_animal\constructs.dm"
|
||||||
#include "code\modules\mob\simple_animal\corgi.dm"
|
#include "code\modules\mob\simple_animal\corgi.dm"
|
||||||
@@ -1143,8 +1158,6 @@
|
|||||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
|
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
|
||||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
|
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
|
||||||
#include "code\WorkInProgress\Chinsky\ashtray.dm"
|
#include "code\WorkInProgress\Chinsky\ashtray.dm"
|
||||||
#include "code\WorkInProgress\mapload\dmm_suite.dm"
|
|
||||||
#include "code\WorkInProgress\mapload\reader.dm"
|
|
||||||
#include "code\WorkInProgress\Mini\ATM.dm"
|
#include "code\WorkInProgress\Mini\ATM.dm"
|
||||||
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
||||||
#include "code\WorkInProgress\Mini\pipe_heater.dm"
|
#include "code\WorkInProgress\Mini\pipe_heater.dm"
|
||||||
@@ -1180,6 +1193,7 @@
|
|||||||
#include "code\WorkInProgress\virus2\monkeydispensor.dm"
|
#include "code\WorkInProgress\virus2\monkeydispensor.dm"
|
||||||
#include "code\WorkInProgress\virus2\Prob.dm"
|
#include "code\WorkInProgress\virus2\Prob.dm"
|
||||||
#include "code\WorkInProgress\Wrongnumber\weldbackpack.dm"
|
#include "code\WorkInProgress\Wrongnumber\weldbackpack.dm"
|
||||||
|
#include "interface\interface.dm"
|
||||||
#include "interface\skin.dmf"
|
#include "interface\skin.dmf"
|
||||||
#include "maps\tgstation.2.0.8.dmm"
|
#include "maps\tgstation.2.0.8.dmm"
|
||||||
// END_INCLUDE
|
// END_INCLUDE
|
||||||
|
|||||||
@@ -475,6 +475,7 @@ datum
|
|||||||
return share(sharer)*/
|
return share(sharer)*/
|
||||||
|
|
||||||
check_gas_mixture(datum/gas_mixture/sharer)
|
check_gas_mixture(datum/gas_mixture/sharer)
|
||||||
|
if(!sharer) return 0
|
||||||
var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5
|
var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5
|
||||||
var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
|
var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
|
||||||
var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5
|
var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5
|
||||||
|
|||||||
@@ -195,15 +195,15 @@
|
|||||||
..()
|
..()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
// var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||||
var/list/blood_DNA_temp[1]
|
// var/list/blood_DNA_temp[1]
|
||||||
blood_DNA_temp[1] = list(H.dna.unique_enzymes, H.dna.b_type)
|
// blood_DNA_temp[1] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||||
B.blood_DNA = blood_DNA_temp
|
// B.blood_DNA = blood_DNA_temp
|
||||||
B.virus2 = H.virus2
|
// B.virus2 = H.virus2
|
||||||
for(var/datum/disease/D in H.viruses)
|
// for(var/datum/disease/D in H.viruses)
|
||||||
var/datum/disease/newDisease = new D.type
|
// var/datum/disease/newDisease = new D.type
|
||||||
B.viruses += newDisease
|
// B.viruses += newDisease
|
||||||
newDisease.holder = B
|
// newDisease.holder = B
|
||||||
|
|
||||||
H:weakened = max(H:weakened,2)
|
H:weakened = max(H:weakened,2)
|
||||||
H:updatehealth()
|
H:updatehealth()
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
|||||||
//
|
//
|
||||||
var/obj/machinery/rust/core/owned_core
|
var/obj/machinery/rust/core/owned_core
|
||||||
var/list/dormant_reactant_quantities = new
|
var/list/dormant_reactant_quantities = new
|
||||||
|
luminosity = 1
|
||||||
//
|
//
|
||||||
var/energy = 0
|
var/energy = 0
|
||||||
var/mega_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)
|
if(owned_field)
|
||||||
owned_field.ChangeFieldStrength(field_strength)
|
owned_field.ChangeFieldStrength(field_strength)
|
||||||
icon_state = "core1"
|
icon_state = "core1"
|
||||||
|
luminosity = 1
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
proc/Shutdown()
|
proc/Shutdown()
|
||||||
icon_state = "core0"
|
icon_state = "core0"
|
||||||
on = 0
|
on = 0
|
||||||
del(owned_field)
|
del(owned_field)
|
||||||
|
luminosity = 0
|
||||||
|
|
||||||
proc/AddParticles(var/name, var/quantity = 1)
|
proc/AddParticles(var/name, var/quantity = 1)
|
||||||
if(owned_field)
|
if(owned_field)
|
||||||
@@ -104,6 +106,9 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
|||||||
Shutdown()
|
Shutdown()
|
||||||
return
|
return
|
||||||
//
|
//
|
||||||
|
luminosity = round(owned_field.field_strength/10)
|
||||||
|
luminosity = max(luminosity,1)
|
||||||
|
//
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
Shutdown()
|
Shutdown()
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
New()
|
New()
|
||||||
spawn(0)
|
spawn(0)
|
||||||
core_generator = locate() in range(15,src)
|
core_generator = locate() in world
|
||||||
|
|
||||||
attack_ai(mob/user)
|
attack_ai(mob/user)
|
||||||
attack_hand(user)
|
attack_hand(user)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
fuel_injectors.Add("SCRAM")
|
fuel_injectors.Add("SCRAM")
|
||||||
fuel_injectors["SCRAM"] = new/list
|
fuel_injectors["SCRAM"] = new/list
|
||||||
spawn(0)
|
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)
|
if(Injector.stage in fuel_injectors)
|
||||||
var/list/targetlist = fuel_injectors[Injector.stage]
|
var/list/targetlist = fuel_injectors[Injector.stage]
|
||||||
targetlist.Add(Injector)
|
targetlist.Add(Injector)
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
return
|
return
|
||||||
var/t = "<B>Gyrotron Remote Control Console</B><BR>"
|
var/t = "<B>Gyrotron Remote Control Console</B><BR>"
|
||||||
t += "<hr>"
|
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)
|
if(gyro.remoteenabled && gyro.on)
|
||||||
t += "<font color=green>Gyrotron operational</font><br>"
|
t += "<font color=green>Gyrotron operational</font><br>"
|
||||||
t += "Operational mode: <font color=blue>"
|
t += "Operational mode: <font color=blue>"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
icon = 'effects.dmi'
|
icon = 'effects.dmi'
|
||||||
icon_state = "energynet"
|
icon_state = "energynet"
|
||||||
density = 0
|
density = 0
|
||||||
|
anchored = 1
|
||||||
var/obj/machinery/rust/em_field/parent
|
var/obj/machinery/rust/em_field/parent
|
||||||
var/mysize = 0
|
var/mysize = 0
|
||||||
|
|
||||||
|
|||||||
@@ -61,12 +61,6 @@
|
|||||||
//a lot of these variables are pretty hacked, so dont rely on the comments
|
//a lot of these variables are pretty hacked, so dont rely on the comments
|
||||||
/obj/machinery/power/supermatter/process()
|
/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
|
//core can no longer spontaneously explode
|
||||||
/*
|
/*
|
||||||
previousdet = det
|
previousdet = det
|
||||||
@@ -111,15 +105,24 @@
|
|||||||
#define REACTION_POWER_MODIFIER 0.5 //Higher == more overall power
|
#define REACTION_POWER_MODIFIER 0.5 //Higher == more overall power
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//100% oxygen atmosphere = 100% plasma production
|
var/datum/gas_mixture/env = loc.return_air()
|
||||||
//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)
|
//nothing can happen in a vacuum
|
||||||
var/total_moles = removed.total_moles()
|
var/datum/gas_mixture/removed = env
|
||||||
var/retardation_factor = 0.5
|
var/retardation_factor = 0.5
|
||||||
if(total_moles)
|
if(env.total_moles())
|
||||||
retardation_factor += removed.oxygen / (total_moles * 2) - removed.nitrogen / (total_moles * 2)
|
//Remove gas from surrounding area
|
||||||
else
|
var/transfer_moles = gasefficency * env.total_moles()
|
||||||
retardation_factor -= 0.25
|
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
|
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
|
device_energy *= removed.temperature / T0C //environmental heat directly affects device energy
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
t_his = "her"
|
t_his = "her"
|
||||||
t_him = "her"
|
t_him = "her"
|
||||||
|
|
||||||
msg += "<EM>\a [src], one of the cat-like Tajarans.</EM>!\n"
|
msg += "<EM>\a [src], one of the cat-like Tajarans</EM>!\n"
|
||||||
|
|
||||||
//uniform
|
//uniform
|
||||||
if (src.w_uniform && !skipjumpsuit)
|
if (src.w_uniform && !skipjumpsuit)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "tajaran"
|
name = "tajaran"
|
||||||
real_name = "tajaran"
|
real_name = "tajaran"
|
||||||
voice_name = "tajaran"
|
voice_name = "tajaran"
|
||||||
icon = 'mob.dmi'
|
icon = 'tajaran.dmi'
|
||||||
icon_state = "m-none"
|
icon_state = "m-none"
|
||||||
var/list/tajspeak_letters
|
var/list/tajspeak_letters
|
||||||
//
|
//
|
||||||
@@ -41,10 +41,10 @@
|
|||||||
var/fat = ""
|
var/fat = ""
|
||||||
/*if (mutations & FAT)
|
/*if (mutations & FAT)
|
||||||
fat = "fat"*/
|
fat = "fat"*/
|
||||||
|
/*
|
||||||
if (mutations & HULK)
|
if (mutations & HULK)
|
||||||
overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]")
|
overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]")
|
||||||
|
*/
|
||||||
if (mutations & COLD_RESISTANCE)
|
if (mutations & COLD_RESISTANCE)
|
||||||
overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]")
|
overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]")
|
||||||
|
|
||||||
@@ -354,37 +354,8 @@
|
|||||||
overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||||
belt.screen_loc = ui_belt
|
belt.screen_loc = ui_belt
|
||||||
|
|
||||||
if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see the face
|
|
||||||
if (wear_id)
|
|
||||||
if (istype(wear_id, /obj/item/weapon/card/id))
|
|
||||||
var/obj/item/weapon/card/id/id = wear_id
|
|
||||||
if (id.registered_name)
|
|
||||||
name = id.registered_name
|
|
||||||
else
|
|
||||||
name = "Unknown"
|
|
||||||
else if (istype(wear_id, /obj/item/device/pda))
|
|
||||||
var/obj/item/device/pda/pda = wear_id
|
|
||||||
if (pda.owner)
|
|
||||||
name = pda.owner
|
|
||||||
else
|
|
||||||
name = "Unknown"
|
|
||||||
else
|
|
||||||
name = "Unknown"
|
|
||||||
else
|
|
||||||
if (wear_id)
|
|
||||||
if (istype(wear_id, /obj/item/weapon/card/id))
|
|
||||||
var/obj/item/weapon/card/id/id = wear_id
|
|
||||||
if (id.registered_name != real_name)
|
|
||||||
name = "[real_name] (as [id.registered_name])"
|
|
||||||
|
|
||||||
|
name = get_visible_name()
|
||||||
else if (istype(wear_id, /obj/item/device/pda))
|
|
||||||
var/obj/item/device/pda/pda = wear_id
|
|
||||||
if (pda.owner)
|
|
||||||
if (pda.owner != real_name)
|
|
||||||
name = "[real_name] (as [pda.owner])"
|
|
||||||
else
|
|
||||||
name = real_name
|
|
||||||
|
|
||||||
if (wear_id)
|
if (wear_id)
|
||||||
wear_id.screen_loc = ui_id
|
wear_id.screen_loc = ui_id
|
||||||
@@ -489,6 +460,8 @@
|
|||||||
stand_icon = new /icon('tajaran.dmi', "torso_[g]_s")
|
stand_icon = new /icon('tajaran.dmi', "torso_[g]_s")
|
||||||
lying_icon = new /icon('tajaran.dmi', "torso_[g]_l")
|
lying_icon = new /icon('tajaran.dmi', "torso_[g]_l")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var/husk = (mutations & HUSK)
|
var/husk = (mutations & HUSK)
|
||||||
//var/obese = (mutations & FAT)
|
//var/obese = (mutations & FAT)
|
||||||
|
|
||||||
@@ -620,4 +593,95 @@
|
|||||||
del(eyes_s)
|
del(eyes_s)
|
||||||
|
|
||||||
/mob/living/carbon/human/tajaran/co2overloadtime = null
|
/mob/living/carbon/human/tajaran/co2overloadtime = null
|
||||||
/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70
|
/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70
|
||||||
|
|
||||||
|
|
||||||
|
/* //This is silly. -- Erthilo
|
||||||
|
/mob/living/carbon/human/tajaran/Emissary/
|
||||||
|
unacidable = 1
|
||||||
|
var/aegis = 1
|
||||||
|
|
||||||
|
/mob/living/carbon/human/tajaran/Emissary/New()
|
||||||
|
|
||||||
|
..()
|
||||||
|
|
||||||
|
reagents.add_reagent("hyperzine", 5000) //From the dark, to the light, it's a supersonic flight!
|
||||||
|
// Gotta keep it going!
|
||||||
|
if (!(mutations & HULK))
|
||||||
|
mutations |= HULK
|
||||||
|
|
||||||
|
if (!(mutations & LASER))
|
||||||
|
mutations |= LASER
|
||||||
|
|
||||||
|
if (!(mutations & XRAY))
|
||||||
|
mutations |= XRAY
|
||||||
|
sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||||
|
see_in_dark = 8
|
||||||
|
see_invisible = 2
|
||||||
|
|
||||||
|
if (!(mutations & COLD_RESISTANCE))
|
||||||
|
mutations |= COLD_RESISTANCE
|
||||||
|
|
||||||
|
if (!(mutations & TK))
|
||||||
|
mutations |= TK
|
||||||
|
|
||||||
|
if(!(mutations & HEAL))
|
||||||
|
mutations |= HEAL
|
||||||
|
|
||||||
|
spawn(0)
|
||||||
|
while(src)
|
||||||
|
adjustBruteLoss(-10)
|
||||||
|
adjustToxLoss(-10)
|
||||||
|
adjustOxyLoss(-10)
|
||||||
|
adjustFireLoss(-10)
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/carbon/human/tajaran/Emissary/ex_act()
|
||||||
|
return
|
||||||
|
|
||||||
|
/mob/living/carbon/human/tajaran/Emissary/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
|
||||||
|
if(istype(target , /obj/machinery/door/airlock))
|
||||||
|
if(target:locked)
|
||||||
|
target:locked = 0
|
||||||
|
if(!target:density)
|
||||||
|
return 1
|
||||||
|
if(target:operating > 0)
|
||||||
|
return
|
||||||
|
if(!ticker)
|
||||||
|
return 0
|
||||||
|
if(!target:operating)
|
||||||
|
target:operating = 1
|
||||||
|
|
||||||
|
target:animate("opening")
|
||||||
|
target:sd_SetOpacity(0)
|
||||||
|
sleep(10)
|
||||||
|
target:layer = 2.7
|
||||||
|
target:density = 0
|
||||||
|
target:update_icon()
|
||||||
|
target:sd_SetOpacity(0)
|
||||||
|
target:update_nearby_tiles()
|
||||||
|
|
||||||
|
target:operating = -1
|
||||||
|
|
||||||
|
user << "You force the door open, shearing the bolts and burning out the motor."
|
||||||
|
|
||||||
|
if(target:operating)
|
||||||
|
target:operating = -1
|
||||||
|
else if(istype(target , /obj/machinery/door/firedoor))
|
||||||
|
target:open()
|
||||||
|
|
||||||
|
/mob/living/carbon/human/tajaran/Emissary/Life()
|
||||||
|
|
||||||
|
..()
|
||||||
|
|
||||||
|
if (!(mutations & HULK))
|
||||||
|
mutations |= HULK
|
||||||
|
|
||||||
|
|
||||||
|
if((stat == 2) && aegis)
|
||||||
|
src.show_message("\red [src]'s eyes open suddenlly.", 3, "\red \"I gave a solemn vow to never die for long.\"", 2)
|
||||||
|
src.heal_overall_damage(9001,9001)
|
||||||
|
src.stat = 0
|
||||||
|
aegis = 0
|
||||||
|
*/
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
@@ -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
|
/obj/item/weapon/stamperaser
|
||||||
name = "Eraser"
|
name = "eraser"
|
||||||
desc = "Some type of eraser, you guess."
|
desc = "It looks like some kind of eraser."
|
||||||
flags = FPRINT | TABLEPASS
|
flags = FPRINT | TABLEPASS
|
||||||
icon = 'items.dmi'
|
icon = 'items.dmi'
|
||||||
icon_state = "zippo"
|
icon_state = "zippo"
|
||||||
|
|||||||
@@ -2,10 +2,7 @@
|
|||||||
var/server_name = null // server name (for world name / status)
|
var/server_name = null // server name (for world name / status)
|
||||||
var/server_suffix = 0 // generate numeric suffix based on server port
|
var/server_suffix = 0 // generate numeric suffix based on server port
|
||||||
|
|
||||||
var/medal_hub = null // medal hub name
|
var/log_ooc = 0 // log OOC channel
|
||||||
var/medal_password = null // medal hub password
|
|
||||||
|
|
||||||
var/log_ooc = 0 // log OOC channek
|
|
||||||
var/log_access = 0 // log login/logout
|
var/log_access = 0 // log login/logout
|
||||||
var/log_say = 0 // log client say
|
var/log_say = 0 // log client say
|
||||||
var/log_admin = 0 // log admin actions
|
var/log_admin = 0 // log admin actions
|
||||||
@@ -35,6 +32,8 @@
|
|||||||
var/Tensioner_Active = 0 // If the tensioner is running.
|
var/Tensioner_Active = 0 // If the tensioner is running.
|
||||||
var/allow_Metadata = 0 // Metadata is supported.
|
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/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||||
|
var/Ticklag = 0.9
|
||||||
|
var/Tickcomp = 0
|
||||||
|
|
||||||
var/list/mode_names = list()
|
var/list/mode_names = list()
|
||||||
var/list/modes = list() // allowed modes
|
var/list/modes = list() // allowed modes
|
||||||
@@ -51,6 +50,8 @@
|
|||||||
|
|
||||||
var/server
|
var/server
|
||||||
var/banappeals
|
var/banappeals
|
||||||
|
var/wikiurl
|
||||||
|
var/forumurl
|
||||||
|
|
||||||
//Alert level description
|
//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."
|
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 +212,6 @@
|
|||||||
if ("serversuffix")
|
if ("serversuffix")
|
||||||
config.server_suffix = 1
|
config.server_suffix = 1
|
||||||
|
|
||||||
if ("medalhub")
|
|
||||||
config.medal_hub = value
|
|
||||||
|
|
||||||
if ("medalpass")
|
|
||||||
config.medal_password = value
|
|
||||||
|
|
||||||
if ("hostedby")
|
if ("hostedby")
|
||||||
config.hostedby = value
|
config.hostedby = value
|
||||||
|
|
||||||
@@ -226,6 +221,12 @@
|
|||||||
if ("banappeals")
|
if ("banappeals")
|
||||||
config.banappeals = value
|
config.banappeals = value
|
||||||
|
|
||||||
|
if ("wikiurl")
|
||||||
|
config.wikiurl = value
|
||||||
|
|
||||||
|
if ("forumurl")
|
||||||
|
config.forumurl = value
|
||||||
|
|
||||||
if ("guest_jobban")
|
if ("guest_jobban")
|
||||||
config.guest_jobban = 1
|
config.guest_jobban = 1
|
||||||
|
|
||||||
@@ -297,6 +298,12 @@
|
|||||||
if("useircbot")
|
if("useircbot")
|
||||||
useircbot = 1
|
useircbot = 1
|
||||||
|
|
||||||
|
if("ticklag")
|
||||||
|
Ticklag = text2num(value)
|
||||||
|
|
||||||
|
if("tickcomp")
|
||||||
|
Tickcomp = 1
|
||||||
|
|
||||||
if("require_heads_alive")
|
if("require_heads_alive")
|
||||||
config.require_heads_alive = value
|
config.require_heads_alive = value
|
||||||
|
|
||||||
@@ -381,8 +388,8 @@
|
|||||||
sqllogging = 1
|
sqllogging = 1
|
||||||
else
|
else
|
||||||
diary << "Unknown setting in configuration: '[name]'"
|
diary << "Unknown setting in configuration: '[name]'"
|
||||||
|
/* //Don't touch this, we don't use it. DMTG
|
||||||
/*/datum/configuration/proc/loadforumsql(filename) // -- TLE
|
/datum/configuration/proc/loadforumsql(filename) // -- TLE
|
||||||
var/text = file2text(filename)
|
var/text = file2text(filename)
|
||||||
|
|
||||||
if (!text)
|
if (!text)
|
||||||
@@ -433,8 +440,8 @@
|
|||||||
if ("authenticatedgroup")
|
if ("authenticatedgroup")
|
||||||
forum_authenticated_group = value
|
forum_authenticated_group = value
|
||||||
else
|
else
|
||||||
diary << "Unknown setting in configuration: '[name]'"*/
|
diary << "Unknown setting in configuration: '[name]'"
|
||||||
|
*/
|
||||||
/datum/configuration/proc/pick_mode(mode_name)
|
/datum/configuration/proc/pick_mode(mode_name)
|
||||||
// I wish I didn't have to instance the game modes in order to look up
|
// 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).
|
// their information, but it is the only way (at least that I know of).
|
||||||
|
|||||||
@@ -167,10 +167,10 @@ client
|
|||||||
|
|
||||||
if(istype(D,/atom))
|
if(istype(D,/atom))
|
||||||
var/atom/A = D
|
var/atom/A = D
|
||||||
body += "<a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=name'><b>[D]</b></a>"
|
if(ismob(A))
|
||||||
if(A.dir)
|
body += "<a href='byond://?src=\ref[src];rename=\ref[D]'><b>[D]</b></a>"
|
||||||
body += "<br><font size='1'><a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=left'><<</a> <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=right'>>></a></font>"
|
if(A.dir)
|
||||||
if(istype(A,/mob))
|
body += "<br><font size='1'><a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=left'><<</a> <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=right'>>></a></font>"
|
||||||
var/mob/M = A
|
var/mob/M = A
|
||||||
body += "<br><font size='1'><a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=ckey'>[M.ckey ? M.ckey : "No ckey"]</a> / <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=real_name'>[M.real_name ? M.real_name : "No real name"]</a></font>"
|
body += "<br><font size='1'><a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=ckey'>[M.ckey ? M.ckey : "No ckey"]</a> / <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=real_name'>[M.real_name ? M.real_name : "No real name"]</a></font>"
|
||||||
body += {"
|
body += {"
|
||||||
@@ -185,6 +185,10 @@ client
|
|||||||
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
|
else
|
||||||
|
body += "<a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=name'><b>[D]</b></a>"
|
||||||
|
if(A.dir)
|
||||||
|
body += "<br><font size='1'><a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=left'><<</a> <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=right'>>></a></font>"
|
||||||
else
|
else
|
||||||
body += "<b>[D]</b>"
|
body += "<b>[D]</b>"
|
||||||
|
|
||||||
@@ -239,7 +243,8 @@ client
|
|||||||
body += "<option value='byond://?src=\ref[src];ninja=\ref[D]'>Make Space Ninja</option>"
|
body += "<option value='byond://?src=\ref[src];ninja=\ref[D]'>Make Space Ninja</option>"
|
||||||
body += "<option value='byond://?src=\ref[src];godmode=\ref[D]'>Toggle Godmode</option>"
|
body += "<option value='byond://?src=\ref[src];godmode=\ref[D]'>Toggle Godmode</option>"
|
||||||
body += "<option value='byond://?src=\ref[src];build_mode=\ref[D]'>Toggle Build Mode</option>"
|
body += "<option value='byond://?src=\ref[src];build_mode=\ref[D]'>Toggle Build Mode</option>"
|
||||||
// body += "<option value='byond://?src=\ref[src];direct_control=\ref[D]'>Assume Direct Control</option>"
|
body += "<option value='byond://?src=\ref[src];direct_control=\ref[D]'>Assume Direct Control</option>"
|
||||||
|
body += "<option value='byond://?src=\ref[src];drop_everything=\ref[D]'>Drop Everything</option>"
|
||||||
if(ishuman(D))
|
if(ishuman(D))
|
||||||
body += "<option value>---</option>"
|
body += "<option value>---</option>"
|
||||||
body += "<option value='byond://?src=\ref[src];makeai=\ref[D]'>Make AI</option>"
|
body += "<option value='byond://?src=\ref[src];makeai=\ref[D]'>Make AI</option>"
|
||||||
@@ -385,359 +390,404 @@ client
|
|||||||
|
|
||||||
return html
|
return html
|
||||||
|
|
||||||
Topic(href, href_list, hsrc)
|
//All BYOND links pass through client/Topic() FIRST and are then directed to [hsrc]/Topic() by the ..() call at the end.
|
||||||
|
client/Topic(href, href_list, hsrc)
|
||||||
|
|
||||||
if (href_list["Vars"])
|
//search the href for script injection //This is a temporary measure
|
||||||
debug_variables(locate(href_list["Vars"]))
|
if( findtext(href,"<script",1,0) )
|
||||||
else if (href_list["varnameedit"])
|
world.log << "Attempted use of scripts within a topic call, by [src]"
|
||||||
if(!href_list["datumedit"] || !href_list["varnameedit"])
|
message_admins("Attempted use of scripts within a topic call, by [src]")
|
||||||
usr << "Varedit error: Not all information has been sent Contact a coder."
|
del(usr)
|
||||||
return
|
return
|
||||||
var/DAT = locate(href_list["datumedit"])
|
|
||||||
if(!DAT)
|
|
||||||
usr << "Item not found"
|
|
||||||
return
|
|
||||||
if(!istype(DAT,/datum) && !istype(DAT,/client))
|
|
||||||
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
|
|
||||||
return
|
|
||||||
modify_variables(DAT, href_list["varnameedit"], 1)
|
|
||||||
else if (href_list["varnamechange"])
|
|
||||||
if(!href_list["datumchange"] || !href_list["varnamechange"])
|
|
||||||
usr << "Varedit error: Not all information has been sent. Contact a coder."
|
|
||||||
return
|
|
||||||
var/DAT = locate(href_list["datumchange"])
|
|
||||||
if(!DAT)
|
|
||||||
usr << "Item not found"
|
|
||||||
return
|
|
||||||
if(!istype(DAT,/datum) && !istype(DAT,/client))
|
|
||||||
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
|
|
||||||
return
|
|
||||||
modify_variables(DAT, href_list["varnamechange"], 0)
|
|
||||||
else if (href_list["varnamemass"])
|
|
||||||
if(!href_list["datummass"] || !href_list["varnamemass"])
|
|
||||||
usr << "Varedit error: Not all information has been sent. Contact a coder."
|
|
||||||
return
|
|
||||||
var/atom/A = locate(href_list["datummass"])
|
|
||||||
if(!A)
|
|
||||||
usr << "Item not found"
|
|
||||||
return
|
|
||||||
if(!istype(A,/atom))
|
|
||||||
usr << "Can't mass edit an item of this type. Type must be /atom, so an object, turf, mob or area. You cannot mass edit clients!"
|
|
||||||
return
|
|
||||||
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
|
|
||||||
else if (href_list["mob_player_panel"])
|
|
||||||
if(!href_list["mob_player_panel"])
|
|
||||||
return
|
|
||||||
var/mob/MOB = locate(href_list["mob_player_panel"])
|
|
||||||
if(!MOB)
|
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.holder.show_player_panel(MOB)
|
|
||||||
href_list["datumrefresh"] = href_list["mob_player_panel"]
|
|
||||||
else if (href_list["give_spell"])
|
|
||||||
if(!href_list["give_spell"])
|
|
||||||
return
|
|
||||||
var/mob/MOB = locate(href_list["give_spell"])
|
|
||||||
if(!MOB)
|
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.give_spell(MOB)
|
|
||||||
href_list["datumrefresh"] = href_list["give_spell"]
|
|
||||||
else if (href_list["ninja"])
|
|
||||||
if(!href_list["ninja"])
|
|
||||||
return
|
|
||||||
var/mob/MOB = locate(href_list["ninja"])
|
|
||||||
if(!MOB)
|
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.cmd_admin_ninjafy(MOB)
|
|
||||||
href_list["datumrefresh"] = href_list["ninja"]
|
|
||||||
else if (href_list["godmode"])
|
|
||||||
if(!href_list["godmode"])
|
|
||||||
return
|
|
||||||
var/mob/MOB = locate(href_list["godmode"])
|
|
||||||
if(!MOB)
|
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.cmd_admin_godmode(MOB)
|
|
||||||
href_list["datumrefresh"] = href_list["godmode"]
|
|
||||||
else if (href_list["gib"])
|
|
||||||
if(!href_list["gib"])
|
|
||||||
return
|
|
||||||
var/mob/MOB = locate(href_list["gib"])
|
|
||||||
if(!MOB)
|
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.cmd_admin_gib(MOB)
|
|
||||||
|
|
||||||
else if (href_list["build_mode"])
|
if(href_list["priv_msg"])
|
||||||
if(!href_list["build_mode"])
|
var/client/C = locate(href_list["priv_msg"])
|
||||||
return
|
if(ismob(C)) //Old stuff can pass in mobs instead of clients
|
||||||
var/mob/MOB = locate(href_list["build_mode"])
|
var/mob/M = C
|
||||||
if(!MOB)
|
C = M.client
|
||||||
return
|
cmd_admin_pm(C,null)
|
||||||
if(!ismob(MOB))
|
return
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
togglebuildmode(MOB)
|
|
||||||
href_list["datumrefresh"] = href_list["build_mode"]
|
|
||||||
|
|
||||||
/* else if (href_list["direct_control"])
|
else
|
||||||
if(!href_list["direct_control"])
|
//THIS **REALLY** NEEDS TO BE REWRITTEN AS obj/admin/Topic or something. As a matter of urgency.
|
||||||
return
|
if( (usr.client == src) && src.holder )
|
||||||
var/mob/MOB = locate(href_list["direct_control"])
|
if (href_list["Vars"])
|
||||||
if(!MOB)
|
debug_variables(locate(href_list["Vars"]))
|
||||||
return
|
|
||||||
if(!ismob(MOB))
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(usr.client)
|
//~CARN: for renaming mobs (updates their real_name and their ID/PDA if applicable).
|
||||||
usr.client.cmd_assume_direct_control(MOB)*/
|
else if (href_list["rename"])
|
||||||
|
var/new_name = input(usr,"What would you like to name this mob?","Input a name") as text|null
|
||||||
|
if(!new_name) return
|
||||||
|
var/mob/M = locate(href_list["rename"])
|
||||||
|
if(!istype(M)) return
|
||||||
|
|
||||||
else if (href_list["delall"])
|
message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].", 1)
|
||||||
if(!href_list["delall"])
|
if(istype(M, /mob/living/carbon/human))
|
||||||
return
|
for(var/obj/item/weapon/card/id/ID in M.contents)
|
||||||
var/atom/A = locate(href_list["delall"])
|
if(ID.registered_name == M.real_name)
|
||||||
if(!A)
|
ID.name = "[new_name]'s ID Card ([ID.assignment])"
|
||||||
return
|
ID.registered_name = new_name
|
||||||
if(!isobj(A))
|
break
|
||||||
usr << "This can only be used on objects (of type /obj)"
|
for(var/obj/item/device/pda/PDA in M.contents)
|
||||||
return
|
if(PDA.owner == M.real_name)
|
||||||
if(!A.type)
|
PDA.name = "PDA-[new_name] ([PDA.ownjob])"
|
||||||
return
|
PDA.owner = new_name
|
||||||
var/action_type = alert("Strict type ([A.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel")
|
break
|
||||||
if(!action_type || action_type == "Cancel")
|
M.real_name = new_name
|
||||||
return
|
M.name = new_name
|
||||||
if(alert("Are you really sure you want to delete all objects of type [A.type]?",,"Yes","No") != "Yes")
|
M.original_name = new_name
|
||||||
return
|
href_list["datumrefresh"] = href_list["rename"]
|
||||||
if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes")
|
|
||||||
return
|
else if (href_list["varnameedit"])
|
||||||
var/a_type = A.type
|
if(!href_list["datumedit"] || !href_list["varnameedit"])
|
||||||
if(action_type == "Strict type")
|
usr << "Varedit error: Not all information has been sent Contact a coder."
|
||||||
var/i = 0
|
|
||||||
for(var/obj/O in world)
|
|
||||||
if(O.type == a_type)
|
|
||||||
i++
|
|
||||||
del(O)
|
|
||||||
if(!i)
|
|
||||||
usr << "No objects of this type exist"
|
|
||||||
return
|
return
|
||||||
log_admin("[key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ")
|
var/DAT = locate(href_list["datumedit"])
|
||||||
message_admins("\blue [key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ", 1)
|
if(!DAT)
|
||||||
else if(action_type == "Type and subtypes")
|
usr << "Item not found"
|
||||||
var/i = 0
|
|
||||||
for(var/obj/O in world)
|
|
||||||
if(istype(O,a_type))
|
|
||||||
i++
|
|
||||||
del(O)
|
|
||||||
if(!i)
|
|
||||||
usr << "No objects of this type exist"
|
|
||||||
return
|
return
|
||||||
log_admin("[key_name(usr)] deleted all objects of scrict type with subtypes [a_type] ([i] objects deleted) ")
|
if(!istype(DAT,/datum) && !istype(DAT,/client))
|
||||||
message_admins("\blue [key_name(usr)] deleted all objects of type with subtypes [a_type] ([i] objects deleted) ", 1)
|
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
|
||||||
|
return
|
||||||
|
modify_variables(DAT, href_list["varnameedit"], 1)
|
||||||
|
else if (href_list["varnamechange"])
|
||||||
|
if(!href_list["datumchange"] || !href_list["varnamechange"])
|
||||||
|
usr << "Varedit error: Not all information has been sent. Contact a coder."
|
||||||
|
return
|
||||||
|
var/DAT = locate(href_list["datumchange"])
|
||||||
|
if(!DAT)
|
||||||
|
usr << "Item not found"
|
||||||
|
return
|
||||||
|
if(!istype(DAT,/datum) && !istype(DAT,/client))
|
||||||
|
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
|
||||||
|
return
|
||||||
|
modify_variables(DAT, href_list["varnamechange"], 0)
|
||||||
|
else if (href_list["varnamemass"])
|
||||||
|
if(!href_list["datummass"] || !href_list["varnamemass"])
|
||||||
|
usr << "Varedit error: Not all information has been sent. Contact a coder."
|
||||||
|
return
|
||||||
|
var/atom/A = locate(href_list["datummass"])
|
||||||
|
if(!A)
|
||||||
|
usr << "Item not found"
|
||||||
|
return
|
||||||
|
if(!istype(A,/atom))
|
||||||
|
usr << "Can't mass edit an item of this type. Type must be /atom, so an object, turf, mob or area. You cannot mass edit clients!"
|
||||||
|
return
|
||||||
|
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
|
||||||
|
else if (href_list["mob_player_panel"])
|
||||||
|
if(!href_list["mob_player_panel"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["mob_player_panel"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.holder.show_player_panel(MOB)
|
||||||
|
href_list["datumrefresh"] = href_list["mob_player_panel"]
|
||||||
|
else if (href_list["give_spell"])
|
||||||
|
if(!href_list["give_spell"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["give_spell"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.give_spell(MOB)
|
||||||
|
href_list["datumrefresh"] = href_list["give_spell"]
|
||||||
|
else if (href_list["ninja"])
|
||||||
|
if(!href_list["ninja"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["ninja"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.cmd_admin_ninjafy(MOB)
|
||||||
|
href_list["datumrefresh"] = href_list["ninja"]
|
||||||
|
else if (href_list["godmode"])
|
||||||
|
if(!href_list["godmode"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["godmode"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.cmd_admin_godmode(MOB)
|
||||||
|
href_list["datumrefresh"] = href_list["godmode"]
|
||||||
|
else if (href_list["gib"])
|
||||||
|
if(!href_list["gib"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["gib"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.cmd_admin_gib(MOB)
|
||||||
|
|
||||||
else if (href_list["explode"])
|
else if (href_list["build_mode"])
|
||||||
if(!href_list["explode"])
|
if(!href_list["build_mode"])
|
||||||
return
|
return
|
||||||
var/atom/A = locate(href_list["explode"])
|
var/mob/MOB = locate(href_list["build_mode"])
|
||||||
if(!A)
|
if(!MOB)
|
||||||
return
|
return
|
||||||
if(!isobj(A) && !ismob(A) && !isturf(A))
|
if(!ismob(MOB))
|
||||||
return
|
return
|
||||||
src.cmd_admin_explosion(A)
|
if(!src.holder)
|
||||||
href_list["datumrefresh"] = href_list["explode"]
|
return
|
||||||
else if (href_list["emp"])
|
togglebuildmode(MOB)
|
||||||
if(!href_list["emp"])
|
href_list["datumrefresh"] = href_list["build_mode"]
|
||||||
return
|
|
||||||
var/atom/A = locate(href_list["emp"])
|
|
||||||
if(!A)
|
|
||||||
return
|
|
||||||
if(!isobj(A) && !ismob(A) && !isturf(A))
|
|
||||||
return
|
|
||||||
src.cmd_admin_emp(A)
|
|
||||||
href_list["datumrefresh"] = href_list["emp"]
|
|
||||||
else if (href_list["mark_object"])
|
|
||||||
if(!href_list["mark_object"])
|
|
||||||
return
|
|
||||||
var/datum/D = locate(href_list["mark_object"])
|
|
||||||
if(!D)
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
src.holder.marked_datum = D
|
|
||||||
href_list["datumrefresh"] = href_list["mark_object"]
|
|
||||||
else if (href_list["rotatedatum"])
|
|
||||||
if(!href_list["rotatedir"])
|
|
||||||
return
|
|
||||||
var/atom/A = locate(href_list["rotatedatum"])
|
|
||||||
if(!A)
|
|
||||||
return
|
|
||||||
if(!istype(A,/atom))
|
|
||||||
usr << "This can only be done to objects of type /atom"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
return
|
|
||||||
switch(href_list["rotatedir"])
|
|
||||||
if("right")
|
|
||||||
A.dir = turn(A.dir, -45)
|
|
||||||
if("left")
|
|
||||||
A.dir = turn(A.dir, 45)
|
|
||||||
href_list["datumrefresh"] = href_list["rotatedatum"]
|
|
||||||
else if (href_list["makemonkey"])
|
|
||||||
var/mob/M = locate(href_list["makemonkey"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
|
|
||||||
else if (href_list["makerobot"])
|
|
||||||
var/mob/M = locate(href_list["makerobot"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
|
|
||||||
else if (href_list["makealien"])
|
|
||||||
var/mob/M = locate(href_list["makealien"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("makealien"=href_list["makealien"]))
|
|
||||||
else if (href_list["makemetroid"])
|
|
||||||
var/mob/M = locate(href_list["makemetroid"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("makemetroid"=href_list["makemetroid"]))
|
|
||||||
else if (href_list["makeai"])
|
|
||||||
var/mob/M = locate(href_list["makeai"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("makeai"=href_list["makeai"]))
|
|
||||||
else if (href_list["makeaisilent"])
|
|
||||||
var/mob/M = locate(href_list["makeaisilent"])
|
|
||||||
if(!M)
|
|
||||||
return
|
|
||||||
if(!ishuman(M))
|
|
||||||
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
|
||||||
return
|
|
||||||
if(!src.holder)
|
|
||||||
usr << "You are not an administrator."
|
|
||||||
return
|
|
||||||
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
|
||||||
if(!action_type || action_type == "Cancel")
|
|
||||||
return
|
|
||||||
if(!M)
|
|
||||||
usr << "Mob doesn't exist anymore"
|
|
||||||
return
|
|
||||||
holder.Topic(href, list("makeaisilent"=href_list["makeaisilent"]))
|
|
||||||
else if (href_list["adjustDamage"] && href_list["mobToDamage"])
|
|
||||||
var/mob/M = locate(href_list["mobToDamage"])
|
|
||||||
var/Text = locate(href_list["adjustDamage"])
|
|
||||||
|
|
||||||
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
|
else if (href_list["drop_everything"])
|
||||||
if(Text == "brute")
|
if(!href_list["drop_everything"])
|
||||||
M.adjustBruteLoss(amount)
|
return
|
||||||
else if(Text == "fire")
|
var/mob/MOB = locate(href_list["drop_everything"])
|
||||||
M.adjustFireLoss(amount)
|
if(!MOB)
|
||||||
else if(Text == "toxin")
|
return
|
||||||
M.adjustToxLoss(amount)
|
if(!ismob(MOB))
|
||||||
else if(Text == "oxygen")
|
return
|
||||||
M.adjustOxyLoss(amount)
|
if(!src.holder)
|
||||||
else if(Text == "brain")
|
return
|
||||||
M.adjustBrainLoss(amount)
|
|
||||||
else if(Text == "clone")
|
if(usr.client)
|
||||||
M.adjustCloneLoss(amount)
|
usr.client.cmd_admin_drop_everything(MOB)
|
||||||
|
|
||||||
|
else if (href_list["direct_control"])
|
||||||
|
if(!href_list["direct_control"])
|
||||||
|
return
|
||||||
|
var/mob/MOB = locate(href_list["direct_control"])
|
||||||
|
if(!MOB)
|
||||||
|
return
|
||||||
|
if(!ismob(MOB))
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(usr.client)
|
||||||
|
usr.client.cmd_assume_direct_control(MOB)
|
||||||
|
|
||||||
|
else if (href_list["delall"])
|
||||||
|
if(!href_list["delall"])
|
||||||
|
return
|
||||||
|
var/atom/A = locate(href_list["delall"])
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
if(!isobj(A))
|
||||||
|
usr << "This can only be used on objects (of type /obj)"
|
||||||
|
return
|
||||||
|
if(!A.type)
|
||||||
|
return
|
||||||
|
var/action_type = alert("Strict type ([A.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(alert("Are you really sure you want to delete all objects of type [A.type]?",,"Yes","No") != "Yes")
|
||||||
|
return
|
||||||
|
if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes")
|
||||||
|
return
|
||||||
|
var/a_type = A.type
|
||||||
|
if(action_type == "Strict type")
|
||||||
|
var/i = 0
|
||||||
|
for(var/obj/O in world)
|
||||||
|
if(O.type == a_type)
|
||||||
|
i++
|
||||||
|
del(O)
|
||||||
|
if(!i)
|
||||||
|
usr << "No objects of this type exist"
|
||||||
|
return
|
||||||
|
log_admin("[key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ")
|
||||||
|
message_admins("\blue [key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ", 1)
|
||||||
|
else if(action_type == "Type and subtypes")
|
||||||
|
var/i = 0
|
||||||
|
for(var/obj/O in world)
|
||||||
|
if(istype(O,a_type))
|
||||||
|
i++
|
||||||
|
del(O)
|
||||||
|
if(!i)
|
||||||
|
usr << "No objects of this type exist"
|
||||||
|
return
|
||||||
|
log_admin("[key_name(usr)] deleted all objects of scrict type with subtypes [a_type] ([i] objects deleted) ")
|
||||||
|
message_admins("\blue [key_name(usr)] deleted all objects of type with subtypes [a_type] ([i] objects deleted) ", 1)
|
||||||
|
|
||||||
|
else if (href_list["explode"])
|
||||||
|
if(!href_list["explode"])
|
||||||
|
return
|
||||||
|
var/atom/A = locate(href_list["explode"])
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
if(!isobj(A) && !ismob(A) && !isturf(A))
|
||||||
|
return
|
||||||
|
src.cmd_admin_explosion(A)
|
||||||
|
href_list["datumrefresh"] = href_list["explode"]
|
||||||
|
else if (href_list["emp"])
|
||||||
|
if(!href_list["emp"])
|
||||||
|
return
|
||||||
|
var/atom/A = locate(href_list["emp"])
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
if(!isobj(A) && !ismob(A) && !isturf(A))
|
||||||
|
return
|
||||||
|
src.cmd_admin_emp(A)
|
||||||
|
href_list["datumrefresh"] = href_list["emp"]
|
||||||
|
else if (href_list["mark_object"])
|
||||||
|
if(!href_list["mark_object"])
|
||||||
|
return
|
||||||
|
var/datum/D = locate(href_list["mark_object"])
|
||||||
|
if(!D)
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
src.holder.marked_datum = D
|
||||||
|
href_list["datumrefresh"] = href_list["mark_object"]
|
||||||
|
else if (href_list["rotatedatum"])
|
||||||
|
if(!href_list["rotatedir"])
|
||||||
|
return
|
||||||
|
var/atom/A = locate(href_list["rotatedatum"])
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
if(!istype(A,/atom))
|
||||||
|
usr << "This can only be done to objects of type /atom"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
return
|
||||||
|
switch(href_list["rotatedir"])
|
||||||
|
if("right")
|
||||||
|
A.dir = turn(A.dir, -45)
|
||||||
|
if("left")
|
||||||
|
A.dir = turn(A.dir, 45)
|
||||||
|
href_list["datumrefresh"] = href_list["rotatedatum"]
|
||||||
|
else if (href_list["makemonkey"])
|
||||||
|
var/mob/M = locate(href_list["makemonkey"])
|
||||||
|
if(!M)
|
||||||
|
return
|
||||||
|
if(!ishuman(M))
|
||||||
|
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
usr << "You are not an administrator."
|
||||||
|
return
|
||||||
|
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(!M)
|
||||||
|
usr << "Mob doesn't exist anymore"
|
||||||
|
return
|
||||||
|
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
|
||||||
|
else if (href_list["makerobot"])
|
||||||
|
var/mob/M = locate(href_list["makerobot"])
|
||||||
|
if(!M)
|
||||||
|
return
|
||||||
|
if(!ishuman(M))
|
||||||
|
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
usr << "You are not an administrator."
|
||||||
|
return
|
||||||
|
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(!M)
|
||||||
|
usr << "Mob doesn't exist anymore"
|
||||||
|
return
|
||||||
|
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
|
||||||
|
else if (href_list["makealien"])
|
||||||
|
var/mob/M = locate(href_list["makealien"])
|
||||||
|
if(!M)
|
||||||
|
return
|
||||||
|
if(!ishuman(M))
|
||||||
|
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
usr << "You are not an administrator."
|
||||||
|
return
|
||||||
|
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(!M)
|
||||||
|
usr << "Mob doesn't exist anymore"
|
||||||
|
return
|
||||||
|
holder.Topic(href, list("makealien"=href_list["makealien"]))
|
||||||
|
else if (href_list["makemetroid"])
|
||||||
|
var/mob/M = locate(href_list["makemetroid"])
|
||||||
|
if(!M)
|
||||||
|
return
|
||||||
|
if(!ishuman(M))
|
||||||
|
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
usr << "You are not an administrator."
|
||||||
|
return
|
||||||
|
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(!M)
|
||||||
|
usr << "Mob doesn't exist anymore"
|
||||||
|
return
|
||||||
|
holder.Topic(href, list("makemetroid"=href_list["makemetroid"]))
|
||||||
|
else if (href_list["makeai"])
|
||||||
|
var/mob/M = locate(href_list["makeai"])
|
||||||
|
if(!M)
|
||||||
|
return
|
||||||
|
if(!ishuman(M))
|
||||||
|
usr << "This can only be done to objects of type /mob/living/carbon/human"
|
||||||
|
return
|
||||||
|
if(!src.holder)
|
||||||
|
usr << "You are not an administrator."
|
||||||
|
return
|
||||||
|
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
|
||||||
|
if(!action_type || action_type == "Cancel")
|
||||||
|
return
|
||||||
|
if(!M)
|
||||||
|
usr << "Mob doesn't exist anymore"
|
||||||
|
return
|
||||||
|
holder.Topic(href, list("makeai"=href_list["makeai"]))
|
||||||
|
else if (href_list["adjustDamage"] && href_list["mobToDamage"])
|
||||||
|
var/mob/M = locate(href_list["mobToDamage"])
|
||||||
|
var/Text = locate(href_list["adjustDamage"])
|
||||||
|
|
||||||
|
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
|
||||||
|
if(Text == "brute")
|
||||||
|
M.adjustBruteLoss(amount)
|
||||||
|
else if(Text == "fire")
|
||||||
|
M.adjustFireLoss(amount)
|
||||||
|
else if(Text == "toxin")
|
||||||
|
M.adjustToxLoss(amount)
|
||||||
|
else if(Text == "oxygen")
|
||||||
|
M.adjustOxyLoss(amount)
|
||||||
|
else if(Text == "brain")
|
||||||
|
M.adjustBrainLoss(amount)
|
||||||
|
else if(Text == "clone")
|
||||||
|
M.adjustCloneLoss(amount)
|
||||||
|
else
|
||||||
|
usr << "You caused an error. DEBUG: Text:[Text] Mob:[M]"
|
||||||
|
return
|
||||||
|
|
||||||
|
if(amount != 0)
|
||||||
|
log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [M] ")
|
||||||
|
message_admins("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [M] ", 1)
|
||||||
|
href_list["datumrefresh"] = href_list["mobToDamage"]
|
||||||
else
|
else
|
||||||
usr << "You caused an error. DEBUG: Text:[Text] Mob:[M]"
|
..()
|
||||||
return
|
|
||||||
|
|
||||||
if(amount != 0)
|
if (href_list["datumrefresh"])
|
||||||
log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [M] ")
|
if(!href_list["datumrefresh"])
|
||||||
message_admins("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [M] ", 1)
|
return
|
||||||
href_list["datumrefresh"] = href_list["mobToDamage"]
|
var/datum/DAT = locate(href_list["datumrefresh"])
|
||||||
else
|
if(!DAT)
|
||||||
..()
|
return
|
||||||
|
if(!istype(DAT,/datum))
|
||||||
|
return
|
||||||
|
src.debug_variables(DAT)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
if (href_list["datumrefresh"])
|
//Ok, all done with that admin crap. redirect it to the Topic for hsrc
|
||||||
if(!href_list["datumrefresh"])
|
..()
|
||||||
return
|
|
||||||
var/datum/DAT = locate(href_list["datumrefresh"])
|
|
||||||
if(!DAT)
|
|
||||||
return
|
|
||||||
if(!istype(DAT,/datum))
|
|
||||||
return
|
|
||||||
src.debug_variables(DAT)
|
|
||||||
|
|||||||
@@ -100,6 +100,7 @@
|
|||||||
|
|
||||||
var/turf/destturf
|
var/turf/destturf
|
||||||
var/turf/curturf = get_turf(teleatom)
|
var/turf/curturf = get_turf(teleatom)
|
||||||
|
var/area/destarea = get_area(destination)
|
||||||
if(precision)
|
if(precision)
|
||||||
var/list/posturfs = circlerangeturfs(destination,precision)
|
var/list/posturfs = circlerangeturfs(destination,precision)
|
||||||
destturf = safepick(posturfs)
|
destturf = safepick(posturfs)
|
||||||
@@ -125,6 +126,7 @@
|
|||||||
// Re-Apply lum
|
// Re-Apply lum
|
||||||
teleatom.sd_SetLuminosity(prevlum)
|
teleatom.sd_SetLuminosity(prevlum)
|
||||||
|
|
||||||
|
destarea.Entered(teleatom)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -972,6 +972,10 @@ var/global/datum/tension/tension_master
|
|||||||
//del(spawn_location) // Commenting this out for multiple commando teams.
|
//del(spawn_location) // Commenting this out for multiple commando teams.
|
||||||
return new_syndicate_commando
|
return new_syndicate_commando
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/proc/create_borg_death_commando(obj/spawn_location, name)
|
/proc/create_borg_death_commando(obj/spawn_location, name)
|
||||||
|
|
||||||
var/mob/living/silicon/robot/new_borg_deathsquad = new(spawn_location.loc, 1)
|
var/mob/living/silicon/robot/new_borg_deathsquad = new(spawn_location.loc, 1)
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ datum/mind
|
|||||||
recipient << browse(output,"window=memory")
|
recipient << browse(output,"window=memory")
|
||||||
|
|
||||||
proc/edit_memory()
|
proc/edit_memory()
|
||||||
|
if(!ticker || !ticker.mode)
|
||||||
|
alert("Not before round-start!", "Alert")
|
||||||
|
return
|
||||||
|
|
||||||
var/out = "<B>[current.real_name]</B><br>"
|
var/out = "<B>[current.real_name]</B><br>"
|
||||||
out += "Assigned role: [assigned_role]. <a href='?src=\ref[src];role_edit=1'>Edit</a><br>"
|
out += "Assigned role: [assigned_role]. <a href='?src=\ref[src];role_edit=1'>Edit</a><br>"
|
||||||
out += "Factions and special roles:<br>"
|
out += "Factions and special roles:<br>"
|
||||||
@@ -68,12 +72,12 @@ datum/mind
|
|||||||
if (ticker.mode.config_tag=="revolution")
|
if (ticker.mode.config_tag=="revolution")
|
||||||
text = uppertext(text)
|
text = uppertext(text)
|
||||||
text = "<i><b>[text]</b></i>: "
|
text = "<i><b>[text]</b></i>: "
|
||||||
if (assigned_role in command_positions)
|
/* if (assigned_role in command_positions)
|
||||||
text += "<b>HEAD</b>|officer|employee|headrev|rev"
|
text += "<b>HEAD</b>|officer|employee|headrev|rev"
|
||||||
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
||||||
text += "head|<b>OFFICER</b>|employee|headre|rev"
|
text += "head|<b>OFFICER</b>|employee|headre|rev"*/
|
||||||
else if (src in ticker.mode.head_revolutionaries)
|
if (src in ticker.mode.head_revolutionaries)
|
||||||
text = "head|officer|<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
text = "<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||||
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
||||||
|
|
||||||
var/list/L = current.get_contents()
|
var/list/L = current.get_contents()
|
||||||
@@ -90,9 +94,9 @@ datum/mind
|
|||||||
if (objectives.len==0)
|
if (objectives.len==0)
|
||||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
|
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
|
||||||
else if (src in ticker.mode.revolutionaries)
|
else if (src in ticker.mode.revolutionaries)
|
||||||
text += "head|officer|<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
text += "<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
||||||
else
|
else
|
||||||
text += "head|officer|<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||||
sections["revolution"] = text
|
sections["revolution"] = text
|
||||||
|
|
||||||
/** CULT ***/
|
/** CULT ***/
|
||||||
@@ -100,19 +104,19 @@ datum/mind
|
|||||||
if (ticker.mode.config_tag=="cult")
|
if (ticker.mode.config_tag=="cult")
|
||||||
text = uppertext(text)
|
text = uppertext(text)
|
||||||
text = "<i><b>[text]</b></i>: "
|
text = "<i><b>[text]</b></i>: "
|
||||||
if (assigned_role in command_positions)
|
/* if (assigned_role in command_positions)
|
||||||
text += "<b>HEAD</b>|officer|employee|cultist"
|
text += "<b>HEAD</b>|officer|employee|cultist"
|
||||||
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
||||||
text += "head|<b>OFFICER</b>|employee|cultist"
|
text += "head|<b>OFFICER</b>|employee|cultist"*/
|
||||||
else if (src in ticker.mode.cult)
|
if (src in ticker.mode.cult)
|
||||||
text += "head|officer|<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
|
text += "<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
|
||||||
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
|
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
|
||||||
/*
|
/*
|
||||||
if (objectives.len==0)
|
if (objectives.len==0)
|
||||||
text += "<br>Objectives are empty! Set to sacrifice and <a href='?src=\ref[src];cult=escape'>escape</a> or <a href='?src=\ref[src];cult=summon'>summon</a>."
|
text += "<br>Objectives are empty! Set to sacrifice and <a href='?src=\ref[src];cult=escape'>escape</a> or <a href='?src=\ref[src];cult=summon'>summon</a>."
|
||||||
*/
|
*/
|
||||||
else
|
else
|
||||||
text += "head|officer|<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
|
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
|
||||||
sections["cult"] = text
|
sections["cult"] = text
|
||||||
|
|
||||||
/** WIZARD ***/
|
/** WIZARD ***/
|
||||||
@@ -454,8 +458,8 @@ datum/mind
|
|||||||
// copy targets
|
// copy targets
|
||||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||||
if (valid_head)
|
if (valid_head)
|
||||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||||
var/datum/objective/assassinate/rev_obj = new
|
var/datum/objective/mutiny/rev_obj = new
|
||||||
rev_obj.owner = src
|
rev_obj.owner = src
|
||||||
rev_obj.target = O.target
|
rev_obj.target = O.target
|
||||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||||
@@ -1011,8 +1015,8 @@ datum/mind
|
|||||||
// copy targets
|
// copy targets
|
||||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||||
if (valid_head)
|
if (valid_head)
|
||||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||||
var/datum/objective/assassinate/rev_obj = new
|
var/datum/objective/mutiny/rev_obj = new
|
||||||
rev_obj.owner = src
|
rev_obj.owner = src
|
||||||
rev_obj.target = O.target
|
rev_obj.target = O.target
|
||||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ datum/shuttle_controller
|
|||||||
|
|
||||||
emergency_shuttle
|
emergency_shuttle
|
||||||
process()
|
process()
|
||||||
if(!online) return
|
if(!online)
|
||||||
|
return
|
||||||
var/timeleft = timeleft()
|
var/timeleft = timeleft()
|
||||||
if(timeleft > 1e5) // midnight rollover protection
|
if(timeleft > 1e5) // midnight rollover protection
|
||||||
timeleft = 0
|
timeleft = 0
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
range = -1
|
range = -1
|
||||||
include_user = 1
|
include_user = 1
|
||||||
|
|
||||||
|
|
||||||
|
var phaseshift = 0
|
||||||
var/jaunt_duration = 50 //in deciseconds
|
var/jaunt_duration = 50 //in deciseconds
|
||||||
|
|
||||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
|
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
|
||||||
@@ -25,26 +27,45 @@
|
|||||||
animation.icon_state = "liquify"
|
animation.icon_state = "liquify"
|
||||||
animation.layer = 5
|
animation.layer = 5
|
||||||
animation.master = holder
|
animation.master = holder
|
||||||
flick("liquify",animation)
|
if(phaseshift == 1)
|
||||||
target.loc = holder
|
animation.dir = target.dir
|
||||||
target.client.eye = holder
|
flick("phase_shift",animation)
|
||||||
var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
|
target.loc = holder
|
||||||
steam.set_up(10, 0, mobloc)
|
target.client.eye = holder
|
||||||
steam.start()
|
sleep(jaunt_duration)
|
||||||
sleep(jaunt_duration)
|
mobloc = get_turf(target.loc)
|
||||||
mobloc = get_turf(target.loc)
|
animation.loc = mobloc
|
||||||
animation.loc = mobloc
|
target.canmove = 0
|
||||||
steam.location = mobloc
|
sleep(20)
|
||||||
steam.start()
|
animation.dir = target.dir
|
||||||
target.canmove = 0
|
flick("phase_shift2",animation)
|
||||||
sleep(20)
|
sleep(5)
|
||||||
flick("reappear",animation)
|
target.loc = mobloc
|
||||||
sleep(5)
|
target.canmove = 1
|
||||||
target.loc = mobloc
|
target.client.eye = target
|
||||||
target.canmove = 1
|
del(animation)
|
||||||
target.client.eye = target
|
del(holder)
|
||||||
del(animation)
|
else
|
||||||
del(holder)
|
flick("liquify",animation)
|
||||||
|
target.loc = holder
|
||||||
|
target.client.eye = holder
|
||||||
|
var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
|
||||||
|
steam.set_up(10, 0, mobloc)
|
||||||
|
steam.start()
|
||||||
|
sleep(jaunt_duration)
|
||||||
|
mobloc = get_turf(target.loc)
|
||||||
|
animation.loc = mobloc
|
||||||
|
steam.location = mobloc
|
||||||
|
steam.start()
|
||||||
|
target.canmove = 0
|
||||||
|
sleep(20)
|
||||||
|
flick("reappear",animation)
|
||||||
|
sleep(5)
|
||||||
|
target.loc = mobloc
|
||||||
|
target.canmove = 1
|
||||||
|
target.client.eye = target
|
||||||
|
del(animation)
|
||||||
|
del(holder)
|
||||||
|
|
||||||
/obj/effect/dummy/spell_jaunt
|
/obj/effect/dummy/spell_jaunt
|
||||||
name = "water"
|
name = "water"
|
||||||
|
|||||||
@@ -317,5 +317,5 @@
|
|||||||
invocation_type = "none"
|
invocation_type = "none"
|
||||||
range = -1
|
range = -1
|
||||||
include_user = 1
|
include_user = 1
|
||||||
|
phaseshift = 1
|
||||||
jaunt_duration = 50 //in deciseconds
|
jaunt_duration = 50 //in deciseconds
|
||||||
|
|||||||
@@ -144,12 +144,15 @@ proc/process_ghost_teleport_locs()
|
|||||||
music = "music/escape.ogg"
|
music = "music/escape.ogg"
|
||||||
|
|
||||||
/area/shuttle/escape/station
|
/area/shuttle/escape/station
|
||||||
|
name = "Emergency Shuttle Station"
|
||||||
icon_state = "shuttle2"
|
icon_state = "shuttle2"
|
||||||
|
|
||||||
/area/shuttle/escape/centcom
|
/area/shuttle/escape/centcom
|
||||||
|
name = "Emergency Shuttle Centcom"
|
||||||
icon_state = "shuttle"
|
icon_state = "shuttle"
|
||||||
|
|
||||||
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
||||||
|
name = "Emergency Shuttle Transit"
|
||||||
icon_state = "shuttle"
|
icon_state = "shuttle"
|
||||||
|
|
||||||
/area/shuttle/escape_pod1
|
/area/shuttle/escape_pod1
|
||||||
@@ -481,6 +484,9 @@ proc/process_ghost_teleport_locs()
|
|||||||
|
|
||||||
|
|
||||||
//PRISON
|
//PRISON
|
||||||
|
/area/prison
|
||||||
|
name = "Brig Prison Wing"
|
||||||
|
icon_state = "brig"
|
||||||
|
|
||||||
/area/prison/arrival_airlock
|
/area/prison/arrival_airlock
|
||||||
name = "Prison Station Airlock"
|
name = "Prison Station Airlock"
|
||||||
@@ -1032,7 +1038,7 @@ proc/process_ghost_teleport_locs()
|
|||||||
//Security
|
//Security
|
||||||
|
|
||||||
/area/security/main
|
/area/security/main
|
||||||
name = "Security"
|
name = "Security Office"
|
||||||
icon_state = "security"
|
icon_state = "security"
|
||||||
|
|
||||||
/area/security/lobby
|
/area/security/lobby
|
||||||
@@ -1498,6 +1504,21 @@ proc/process_ghost_teleport_locs()
|
|||||||
icon_state = "tcomsatlounge"
|
icon_state = "tcomsatlounge"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/area/turret_protected/AssistantRoom
|
||||||
|
name = "Assistant Room"
|
||||||
|
icon_state = "storage"
|
||||||
|
sd_lighting = 0
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
/*
|
/*
|
||||||
Lists of areas to be used with is_type_in_list.
|
Lists of areas to be used with is_type_in_list.
|
||||||
|
|||||||
@@ -17,9 +17,6 @@
|
|||||||
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
||||||
///Chemistry.
|
///Chemistry.
|
||||||
|
|
||||||
//Detective Work, used for the duplicate data points kept in the scanners
|
|
||||||
var/list/original_atom
|
|
||||||
|
|
||||||
proc/assume_air(datum/air_group/giver)
|
proc/assume_air(datum/air_group/giver)
|
||||||
del(giver)
|
del(giver)
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -14,6 +14,11 @@
|
|||||||
|
|
||||||
//END Admin Things
|
//END Admin Things
|
||||||
|
|
||||||
|
//Key auth things
|
||||||
|
// authenticate = 0
|
||||||
|
// var/authenticated = 0
|
||||||
|
// var/authenticating = 0
|
||||||
|
|
||||||
var/listen_ooc = 1
|
var/listen_ooc = 1
|
||||||
var/move_delay = 1
|
var/move_delay = 1
|
||||||
var/moving = null
|
var/moving = null
|
||||||
|
|||||||
@@ -151,9 +151,7 @@ var
|
|||||||
shuttlecoming = 0
|
shuttlecoming = 0
|
||||||
|
|
||||||
join_motd = null
|
join_motd = null
|
||||||
auth_motd = null
|
|
||||||
rules = null
|
rules = null
|
||||||
no_auth_motd = null
|
|
||||||
forceblob = 0
|
forceblob = 0
|
||||||
|
|
||||||
custom_event_msg = null
|
custom_event_msg = null
|
||||||
@@ -230,4 +228,4 @@ var
|
|||||||
|
|
||||||
// For FTP requests. (i.e. downloading runtime logs.)
|
// For FTP requests. (i.e. downloading runtime logs.)
|
||||||
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
|
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
|
||||||
fileaccess_timer = 600 //Cannot access files by ftp until the game is finished setting up and stuff.
|
fileaccess_timer = 1800 //Cannot access files by ftp until the game is finished setting up and stuff.
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
var/icon/stand_icon = null
|
var/icon/stand_icon = null
|
||||||
var/icon/lying_icon = null
|
var/icon/lying_icon = null
|
||||||
var/icon/resting_icon = null
|
var/icon/resting_icon = null
|
||||||
|
var/icon/running_icon = null
|
||||||
|
|
||||||
var/last_b_state = 1.0
|
var/last_b_state = 1.0
|
||||||
|
|
||||||
|
|||||||
@@ -383,7 +383,6 @@
|
|||||||
opacity = 0
|
opacity = 0
|
||||||
density = 0
|
density = 0
|
||||||
|
|
||||||
|
|
||||||
/obj/hud
|
/obj/hud
|
||||||
name = "hud"
|
name = "hud"
|
||||||
unacidable = 1
|
unacidable = 1
|
||||||
@@ -400,9 +399,8 @@
|
|||||||
var/obj/screen/g_dither = null
|
var/obj/screen/g_dither = null
|
||||||
var/obj/screen/blurry = null
|
var/obj/screen/blurry = null
|
||||||
var/list/darkMask = 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
|
/obj/item
|
||||||
name = "item"
|
name = "item"
|
||||||
@@ -418,10 +416,6 @@
|
|||||||
var/burning = null
|
var/burning = null
|
||||||
var/hitsound = null
|
var/hitsound = null
|
||||||
var/w_class = 3.0
|
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
|
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
|
flags = FPRINT | TABLEPASS
|
||||||
pass_flags = PASSTABLE
|
pass_flags = PASSTABLE
|
||||||
|
|||||||
@@ -58,45 +58,6 @@
|
|||||||
var/temp = null
|
var/temp = null
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/hologram_comp
|
|
||||||
name = "Hologram Computer"
|
|
||||||
desc = "Rumoured to control holograms."
|
|
||||||
icon = 'stationobjs.dmi'
|
|
||||||
icon_state = "holo_console0"
|
|
||||||
var/obj/machinery/hologram/projector/projector = null
|
|
||||||
var/temp = null
|
|
||||||
var/lumens = 0.0
|
|
||||||
var/h_r = 245.0
|
|
||||||
var/h_g = 245.0
|
|
||||||
var/h_b = 245.0
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/secure_data
|
|
||||||
name = "Security Records"
|
|
||||||
desc = "Used to view and edit personnel's security records"
|
|
||||||
icon_state = "security"
|
|
||||||
req_access = list(access_security)
|
|
||||||
circuit = "/obj/item/weapon/circuitboard/secure_data"
|
|
||||||
var/obj/item/weapon/card/id/scan = null
|
|
||||||
var/obj/item/weapon/disk/records/disk = null
|
|
||||||
var/authenticated = null
|
|
||||||
var/rank = null
|
|
||||||
var/screen = null
|
|
||||||
var/datum/data/record/active1 = null
|
|
||||||
var/datum/data/record/active2 = null
|
|
||||||
var/a_id = null
|
|
||||||
var/temp = null
|
|
||||||
var/printing = null
|
|
||||||
var/can_change_id = 0
|
|
||||||
var/list/Perp
|
|
||||||
var/tempname = null
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/secure_data/detective_computer
|
|
||||||
icon = 'computer.dmi'
|
|
||||||
icon_state = "messyfiles"
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/security
|
/obj/machinery/computer/security
|
||||||
name = "Security Cameras"
|
name = "Security Cameras"
|
||||||
desc = "Used to access the various cameras on the station."
|
desc = "Used to access the various cameras on the station."
|
||||||
|
|||||||
@@ -63,10 +63,20 @@
|
|||||||
var/datum/disease2/disease/virus2 = null
|
var/datum/disease2/disease/virus2 = null
|
||||||
var/OriginalMob = null
|
var/OriginalMob = null
|
||||||
|
|
||||||
Del()
|
/obj/effect/decal/cleanable/blood/Del()
|
||||||
for(var/datum/disease/D in viruses)
|
for(var/datum/disease/D in viruses)
|
||||||
D.cure(0)
|
D.cure(0)
|
||||||
..()
|
..()
|
||||||
|
/* //This breaks a few blood related things, thankfully we don't get too many decals -- Erthilo
|
||||||
|
/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
|
/obj/effect/decal/cleanable/blood/drip
|
||||||
name = "drips of blood"
|
name = "drips of blood"
|
||||||
|
|||||||
@@ -278,6 +278,23 @@
|
|||||||
plant_type = 0
|
plant_type = 0
|
||||||
growthstages = 6
|
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
|
/obj/item/seeds/cornseed
|
||||||
name = "pack of corn seeds"
|
name = "pack of corn seeds"
|
||||||
desc = "I don't mean to sound corny..."
|
desc = "I don't mean to sound corny..."
|
||||||
@@ -400,7 +417,7 @@
|
|||||||
potency = 10
|
potency = 10
|
||||||
oneharvest = 1
|
oneharvest = 1
|
||||||
plant_type = 0
|
plant_type = 0
|
||||||
growthstages = 5
|
growthstages = 3
|
||||||
|
|
||||||
/obj/item/seeds/amanitamycelium
|
/obj/item/seeds/amanitamycelium
|
||||||
name = "pack of fly amanita mycelium"
|
name = "pack of fly amanita mycelium"
|
||||||
@@ -1143,46 +1160,6 @@
|
|||||||
reagents.add_reagent("coco", 4+round((potency / 5), 1))
|
reagents.add_reagent("coco", 4+round((potency / 5), 1))
|
||||||
bitesize = 1+round(reagents.total_volume / 2, 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
|
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
|
||||||
seed = "/obj/item/seeds/sugarcaneseed"
|
seed = "/obj/item/seeds/sugarcaneseed"
|
||||||
name = "sugarcane"
|
name = "sugarcane"
|
||||||
@@ -1707,7 +1684,7 @@
|
|||||||
seed = "/obj/item/seeds/towermycelium"
|
seed = "/obj/item/seeds/towermycelium"
|
||||||
|
|
||||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
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)
|
user.show_message("<span class='notice'>You make planks out of the [src]!</span>", 1)
|
||||||
for(var/i=0,i<2,i++)
|
for(var/i=0,i<2,i++)
|
||||||
new /obj/item/stack/sheet/wood (src.loc)
|
new /obj/item/stack/sheet/wood (src.loc)
|
||||||
@@ -1985,3 +1962,99 @@
|
|||||||
New()
|
New()
|
||||||
src.pixel_x = rand(-5.0, 5)
|
src.pixel_x = rand(-5.0, 5)
|
||||||
src.pixel_y = 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
|
idle_power_usage = 2
|
||||||
active_power_usage = 6
|
active_power_usage = 6
|
||||||
power_channel = ENVIRON
|
power_channel = ENVIRON
|
||||||
|
var/network
|
||||||
|
|
||||||
New()
|
New()
|
||||||
if(z == 1)
|
if(z == 1)
|
||||||
@@ -258,10 +259,9 @@
|
|||||||
|
|
||||||
/obj/machinery/driver_button
|
/obj/machinery/driver_button
|
||||||
name = "mass driver button"
|
name = "mass driver button"
|
||||||
desc = "FIRE AWAY!"
|
|
||||||
icon = 'objects.dmi'
|
icon = 'objects.dmi'
|
||||||
icon_state = "launcherbtt"
|
icon_state = "launcherbtt"
|
||||||
desc = "A remote control switch for a Mass Driver."
|
desc = "A remote control switch for a mass driver."
|
||||||
var/id = null
|
var/id = null
|
||||||
var/active = 0
|
var/active = 0
|
||||||
anchored = 1.0
|
anchored = 1.0
|
||||||
@@ -271,7 +271,6 @@
|
|||||||
|
|
||||||
/obj/machinery/ignition_switch
|
/obj/machinery/ignition_switch
|
||||||
name = "ignition switch"
|
name = "ignition switch"
|
||||||
desc = "It activates an igniter."
|
|
||||||
icon = 'objects.dmi'
|
icon = 'objects.dmi'
|
||||||
icon_state = "launcherbtt"
|
icon_state = "launcherbtt"
|
||||||
desc = "A remote control switch for a mounted igniter."
|
desc = "A remote control switch for a mounted igniter."
|
||||||
@@ -282,6 +281,18 @@
|
|||||||
idle_power_usage = 2
|
idle_power_usage = 2
|
||||||
active_power_usage = 4
|
active_power_usage = 4
|
||||||
|
|
||||||
|
/obj/machinery/flasher_button
|
||||||
|
name = "flasher button"
|
||||||
|
desc = "A remote control switch for a mounted flasher."
|
||||||
|
icon = 'objects.dmi'
|
||||||
|
icon_state = "launcherbtt"
|
||||||
|
var/id = null
|
||||||
|
var/active = 0
|
||||||
|
anchored = 1.0
|
||||||
|
use_power = 1
|
||||||
|
idle_power_usage = 2
|
||||||
|
active_power_usage = 4
|
||||||
|
|
||||||
/obj/machinery/teleport
|
/obj/machinery/teleport
|
||||||
name = "teleport"
|
name = "teleport"
|
||||||
icon = 'stationobjs.dmi'
|
icon = 'stationobjs.dmi'
|
||||||
@@ -339,7 +350,7 @@
|
|||||||
layer = 2.6 // a bit above wires
|
layer = 2.6 // a bit above wires
|
||||||
|
|
||||||
/obj/machinery/power/generator
|
/obj/machinery/power/generator
|
||||||
name = "thermoelectric generator"
|
name = "thermoelectric generator mark I"
|
||||||
desc = "It's a high efficiency thermoelectric generator."
|
desc = "It's a high efficiency thermoelectric generator."
|
||||||
icon_state = "teg"
|
icon_state = "teg"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
@@ -352,7 +363,7 @@
|
|||||||
var/lastgenlev = -1
|
var/lastgenlev = -1
|
||||||
|
|
||||||
/obj/machinery/power/generator_type2
|
/obj/machinery/power/generator_type2
|
||||||
name = "thermoelectric generator"
|
name = "thermoelectric generator mark II"
|
||||||
desc = "It's a high efficiency thermoelectric generator."
|
desc = "It's a high efficiency thermoelectric generator."
|
||||||
icon_state = "teg"
|
icon_state = "teg"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
|
|||||||
@@ -332,7 +332,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/storage/flashbang_kit
|
/obj/item/weapon/storage/flashbang_kit
|
||||||
name = "flashbangs (WARNING)"
|
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"
|
icon_state = "flashbang"
|
||||||
item_state = "syringe_kit"
|
item_state = "syringe_kit"
|
||||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||||
@@ -601,7 +601,7 @@
|
|||||||
/obj/item/stack/sheet/plasma,
|
/obj/item/stack/sheet/plasma,
|
||||||
/obj/item/stack/sheet/uranium,
|
/obj/item/stack/sheet/uranium,
|
||||||
/obj/item/stack/sheet/diamond,
|
/obj/item/stack/sheet/diamond,
|
||||||
/obj/item/stack/sheet/clown,
|
// /obj/item/stack/sheet/clown,
|
||||||
/obj/item/stack/sheet/plasteel,
|
/obj/item/stack/sheet/plasteel,
|
||||||
/obj/item/stack/rods
|
/obj/item/stack/rods
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
//SUPPLY PACKS
|
//SUPPLY PACKS
|
||||||
//NOTE: only secure crate types use the access var (and are lockable)
|
//NOTE: only secure crate types use the access var (and are lockable)
|
||||||
//NOTE: hidden packs only show up when the computer has been hacked.
|
//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.
|
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
|
||||||
/datum/supply_packs/specialops
|
/datum/supply_packs/specialops
|
||||||
name = "Special Ops supplies"
|
name = "Special Ops supplies"
|
||||||
@@ -389,7 +390,8 @@
|
|||||||
"/obj/item/seeds/carrotseed",
|
"/obj/item/seeds/carrotseed",
|
||||||
"/obj/item/seeds/sunflowerseed",
|
"/obj/item/seeds/sunflowerseed",
|
||||||
"/obj/item/seeds/chantermycelium",
|
"/obj/item/seeds/chantermycelium",
|
||||||
"/obj/item/seeds/potatoseed")
|
"/obj/item/seeds/potatoseed",
|
||||||
|
"/obj/item/seeds/sugarcaneseed")
|
||||||
cost = 10
|
cost = 10
|
||||||
containertype = /obj/structure/closet/crate/hydroponics
|
containertype = /obj/structure/closet/crate/hydroponics
|
||||||
containername = "Seeds crate"
|
containername = "Seeds crate"
|
||||||
@@ -711,8 +713,8 @@
|
|||||||
name = "Ballistic gear crate"
|
name = "Ballistic gear crate"
|
||||||
contains = list("/obj/item/clothing/suit/armor/bulletproof",
|
contains = list("/obj/item/clothing/suit/armor/bulletproof",
|
||||||
"/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/pump/combat",
|
||||||
"/obj/item/weapon/gun/projectile/shotgun/combat2")
|
"/obj/item/weapon/gun/projectile/shotgun/pump/combat")
|
||||||
cost = 50
|
cost = 50
|
||||||
containertype = "/obj/structure/closet/crate/secure"
|
containertype = "/obj/structure/closet/crate/secure"
|
||||||
containername = "Ballistic gear crate"
|
containername = "Ballistic gear crate"
|
||||||
@@ -779,10 +781,10 @@
|
|||||||
"/obj/item/clothing/head/collectable/xenom",
|
"/obj/item/clothing/head/collectable/xenom",
|
||||||
"/obj/item/clothing/head/collectable/xenom",
|
"/obj/item/clothing/head/collectable/xenom",
|
||||||
"/obj/item/clothing/head/collectable/petehat")
|
"/obj/item/clothing/head/collectable/petehat")
|
||||||
name = "Collectable Hat Crate!"
|
name = "Collectable hat crate!"
|
||||||
cost = 200
|
cost = 200
|
||||||
containertype = "/obj/structure/closet/crate/hat"
|
containertype = "/obj/structure/closet/crate/hat"
|
||||||
containername = "Collectable Hats Crate! Brought to you by Bass.inc!"
|
containername = "Collectable hats crate! Brought to you by Bass.inc!"
|
||||||
group = "Clothing"
|
group = "Clothing"
|
||||||
|
|
||||||
/datum/supply_packs/hats/New()
|
/datum/supply_packs/hats/New()
|
||||||
@@ -793,5 +795,18 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/supply_packs/contraband
|
||||||
|
contains = list("/obj/item/weapon/contraband/poster","/obj/item/weapon/cigpacket/dromedaryco") //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"
|
||||||
|
contraband = 1
|
||||||
|
group = "NanoTrasen Contraband Storage"
|
||||||
|
|
||||||
//SUPPLY PACKS
|
/datum/supply_packs/poster/New()
|
||||||
|
var/list/tempContains = list()
|
||||||
|
for(var/i = 0,i<5,i++)
|
||||||
|
tempContains += pick(contains)
|
||||||
|
src.contains = tempContains
|
||||||
|
..()
|
||||||
@@ -4,9 +4,71 @@
|
|||||||
throw_range = 20
|
throw_range = 20
|
||||||
force = 0
|
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
|
/obj/item/toy/syndicateballoon
|
||||||
name = "syndicate balloon"
|
name = "red balloon"
|
||||||
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
|
desc = "Looks like a red balloon with a large \"S\" on it."
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
throw_speed = 4
|
throw_speed = 4
|
||||||
throw_range = 20
|
throw_range = 20
|
||||||
|
|||||||
@@ -92,6 +92,7 @@
|
|||||||
hidden_prices = "2;5"
|
hidden_prices = "2;5"
|
||||||
points = 15
|
points = 15
|
||||||
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
||||||
|
charge_type = "engineering"
|
||||||
|
|
||||||
/obj/machinery/vending/coffee
|
/obj/machinery/vending/coffee
|
||||||
name = "Hot Drinks machine"
|
name = "Hot Drinks machine"
|
||||||
@@ -306,9 +307,26 @@
|
|||||||
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola"
|
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola"
|
||||||
// product_hideamt = "20"
|
// product_hideamt = "20"
|
||||||
hidden_prices = "1"
|
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"
|
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
|
/obj/machinery/vending/genetics
|
||||||
name = "Genetics Dispenser"
|
name = "Genetics Dispenser"
|
||||||
desc = "Medical drug dispenser."
|
desc = "Medical drug dispenser."
|
||||||
|
|||||||
@@ -2,12 +2,6 @@
|
|||||||
name = "weapon"
|
name = "weapon"
|
||||||
icon = 'weapons.dmi'
|
icon = 'weapons.dmi'
|
||||||
|
|
||||||
/obj/item/weapon/offhand
|
|
||||||
name = "offhand"
|
|
||||||
var/linked_weapon_name = ""
|
|
||||||
w_class = 5.0
|
|
||||||
icon_state = "offhand"
|
|
||||||
|
|
||||||
/obj/item/weapon/shield
|
/obj/item/weapon/shield
|
||||||
name = "shield"
|
name = "shield"
|
||||||
|
|
||||||
@@ -578,7 +572,8 @@
|
|||||||
icon_state = "id"
|
icon_state = "id"
|
||||||
item_state = "card-id"
|
item_state = "card-id"
|
||||||
var/access = list()
|
var/access = list()
|
||||||
var/registered_name = null
|
var/registered_name = null // The name registered_name on the card
|
||||||
|
|
||||||
var/assignment = null
|
var/assignment = null
|
||||||
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
|
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
|
||||||
var/dorm = 0 // determines if this ID has claimed a dorm already
|
var/dorm = 0 // determines if this ID has claimed a dorm already
|
||||||
@@ -645,7 +640,7 @@
|
|||||||
w_class = 2.0
|
w_class = 2.0
|
||||||
throw_speed = 3
|
throw_speed = 3
|
||||||
throw_range = 10
|
throw_range = 10
|
||||||
flags = ONBELT
|
flags = FPRINT | TABLEPASS | ONBELT
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/notebook
|
/obj/item/weapon/clipboard/notebook
|
||||||
name = "notebook"
|
name = "notebook"
|
||||||
@@ -711,17 +706,6 @@
|
|||||||
icon = 'items.dmi'
|
icon = 'items.dmi'
|
||||||
icon_state = "red_crowbar"
|
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
|
/obj/item/weapon/cane
|
||||||
name = "cane"
|
name = "cane"
|
||||||
desc = "A cane used by a true gentlemen."
|
desc = "A cane used by a true gentlemen."
|
||||||
@@ -772,6 +756,17 @@
|
|||||||
item_state = "fire_extinguisher"
|
item_state = "fire_extinguisher"
|
||||||
m_amt = 90
|
m_amt = 90
|
||||||
|
|
||||||
|
/obj/item/weapon/extinguisher/mini
|
||||||
|
name = "fire extinguisher"
|
||||||
|
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
||||||
|
icon_state = "miniFE0"
|
||||||
|
flags = FPRINT | USEDELAY | TABLEPASS
|
||||||
|
throwforce = 5
|
||||||
|
w_class = 2.0
|
||||||
|
force = 6.0
|
||||||
|
item_state = "miniFE"
|
||||||
|
m_amt = 0
|
||||||
|
|
||||||
/obj/item/weapon/f_card
|
/obj/item/weapon/f_card
|
||||||
name = "finger print card"
|
name = "finger print card"
|
||||||
desc = "Used to take fingerprints."
|
desc = "Used to take fingerprints."
|
||||||
@@ -979,6 +974,10 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
|||||||
name = "paper - 'Standard Operating Procedure'"
|
name = "paper - 'Standard Operating Procedure'"
|
||||||
info = "Alert Levels:<BR>\nBlue- Emergency<BR>\n\t1. Caused by fire<BR>\n\t2. Caused by manual interaction<BR>\n\tAction:<BR>\n\t\tClose all fire doors. These can only be opened by reseting the alarm<BR>\nRed- Ejection/Self Destruct<BR>\n\t1. Caused by module operating computer.<BR>\n\tAction:<BR>\n\t\tAfter the specified time the module will eject completely.<BR>\n<BR>\nEngine Maintenance Instructions:<BR>\n\tShut off ignition systems:<BR>\n\tActivate internal power<BR>\n\tActivate orbital balance matrix<BR>\n\tRemove volatile liquids from area<BR>\n\tWear a fire suit<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nToxin Laboratory Procedure:<BR>\n\tWear a gas mask regardless<BR>\n\tGet an oxygen tank.<BR>\n\tActivate internal atmosphere<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nDisaster Procedure:<BR>\n\tFire:<BR>\n\t\tActivate sector fire alarm.<BR>\n\t\tMove to a safe area.<BR>\n\t\tGet a fire suit<BR>\n\t\tAfter:<BR>\n\t\t\tAssess Damage<BR>\n\t\t\tRepair damages<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tMeteor Shower:<BR>\n\t\tActivate fire alarm<BR>\n\t\tMove to the back of ship<BR>\n\t\tAfter<BR>\n\t\t\tRepair damage<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tAccidental Reentry:<BR>\n\t\tActivate fire alrms in front of ship.<BR>\n\t\tMove volatile matter to a fire proof area!<BR>\n\t\tGet a fire suit.<BR>\n\t\tStay secure until an emergency ship arrives.<BR>\n<BR>\n\t\tIf ship does not arrive-<BR>\n\t\t\tEvacuate to a nearby safe area!"
|
info = "Alert Levels:<BR>\nBlue- Emergency<BR>\n\t1. Caused by fire<BR>\n\t2. Caused by manual interaction<BR>\n\tAction:<BR>\n\t\tClose all fire doors. These can only be opened by reseting the alarm<BR>\nRed- Ejection/Self Destruct<BR>\n\t1. Caused by module operating computer.<BR>\n\tAction:<BR>\n\t\tAfter the specified time the module will eject completely.<BR>\n<BR>\nEngine Maintenance Instructions:<BR>\n\tShut off ignition systems:<BR>\n\tActivate internal power<BR>\n\tActivate orbital balance matrix<BR>\n\tRemove volatile liquids from area<BR>\n\tWear a fire suit<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nToxin Laboratory Procedure:<BR>\n\tWear a gas mask regardless<BR>\n\tGet an oxygen tank.<BR>\n\tActivate internal atmosphere<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nDisaster Procedure:<BR>\n\tFire:<BR>\n\t\tActivate sector fire alarm.<BR>\n\t\tMove to a safe area.<BR>\n\t\tGet a fire suit<BR>\n\t\tAfter:<BR>\n\t\t\tAssess Damage<BR>\n\t\t\tRepair damages<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tMeteor Shower:<BR>\n\t\tActivate fire alarm<BR>\n\t\tMove to the back of ship<BR>\n\t\tAfter<BR>\n\t\t\tRepair damage<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tAccidental Reentry:<BR>\n\t\tActivate fire alrms in front of ship.<BR>\n\t\tMove volatile matter to a fire proof area!<BR>\n\t\tGet a fire suit.<BR>\n\t\tStay secure until an emergency ship arrives.<BR>\n<BR>\n\t\tIf ship does not arrive-<BR>\n\t\t\tEvacuate to a nearby safe area!"
|
||||||
|
|
||||||
|
/obj/item/weapon/paper/armoury
|
||||||
|
name = "paper - 'Armoury Inventory'"
|
||||||
|
info = "<div align='center'><img src='http://i265.photobucket.com/albums/ii207/Mr_Bombastic_Bucket/WikiLogo.png'><br><b><h1>Armoury Inventory</h1></b></div><hr><br><div align='center'><table border='3'><tr><td>Item</td><td>Stock</td><td>In Use</td><td>Notes</td></tr><tr><td>Ablative Armour Vest</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Beanbag Shells</td><td>12</td><td>0</td><td>-</td></tr><tr><td>Body Bags</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Bulletproof Vest</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Chemical Implant Kit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Combat Shotguns</td><td>2</td><td>0</td><td>-</td></tr><tr><td>Deployable Barrier</td><td>9</td><td>0</td><td>-</td></tr><tr><td>Deployable Flashers</td><td>4</td><td>0</td><td>-</td></tr><tr><td>Energy Gun</td><td>6</td><td>0</td><td>-</td></tr><tr><td>Flashbangs</td><td>7</td><td>0</td><td>-</td></tr><tr><td>Gas Mask</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Handcuffs</td><td>7</td><td>0</td><td>-</td></tr><tr><td>Ion Rifle</td><td>1</td><td>0</td><td>-</td></tr><tr><td>L3 Biohazard Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>L4 EOD Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Laser Gun</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Lockbox</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Loyalty Implants Lockbox</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Pepper Sprayers</td><td>2</td><td>0</td><td>-</td></tr><tr><td>RIG Helmet</td><td>1</td><td>0</td><td>-</td></tr><tr><td>RIG Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Riot Helmet</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Riot Shield</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Riot Suit</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Stun Baton</td><td>5</td><td>0</td><td>-</td></tr><tr><td>Taser</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Tracking Implant Kit</td><td>1</td><td>0</td><td>-</td></tr></table></div><br/><hr/><br/><div align='center'><table border='3'><tr><td>Officer Name</td><td>Items Withdrawn</td><td>Notes</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr></table><br/><hr/><br/><p><i>List maintained by NSS Exodus, Warden, <INSERT WARDEN NAME HERE></i></p></div>"
|
||||||
|
|
||||||
/obj/item/weapon/paper_bin
|
/obj/item/weapon/paper_bin
|
||||||
name = "Paper Bin"
|
name = "Paper Bin"
|
||||||
desc = "This contains many papers."
|
desc = "This contains many papers."
|
||||||
@@ -1222,6 +1221,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
|||||||
g_amt = 50
|
g_amt = 50
|
||||||
var/rigged = 0 // true if rigged to explode
|
var/rigged = 0 // true if rigged to explode
|
||||||
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
|
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
|
||||||
|
var/construction_cost = list("metal"=750,"glass"=75)
|
||||||
|
var/construction_time=100
|
||||||
|
|
||||||
/obj/item/weapon/cell/crap
|
/obj/item/weapon/cell/crap
|
||||||
name = "\improper NanoTrasen Brand Rechargable AA Battery"
|
name = "\improper NanoTrasen Brand Rechargable AA Battery"
|
||||||
@@ -1239,23 +1240,29 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
|||||||
/obj/item/weapon/cell/high
|
/obj/item/weapon/cell/high
|
||||||
name = "high-capacity power cell"
|
name = "high-capacity power cell"
|
||||||
origin_tech = "powerstorage=2"
|
origin_tech = "powerstorage=2"
|
||||||
|
icon_state = "hcell"
|
||||||
maxcharge = 10000
|
maxcharge = 10000
|
||||||
g_amt = 60
|
g_amt = 60
|
||||||
|
|
||||||
/obj/item/weapon/cell/super
|
/obj/item/weapon/cell/super
|
||||||
name = "super-capacity power cell"
|
name = "super-capacity power cell"
|
||||||
origin_tech = "powerstorage=5"
|
origin_tech = "powerstorage=5"
|
||||||
|
icon_state = "scell"
|
||||||
maxcharge = 20000
|
maxcharge = 20000
|
||||||
g_amt = 70
|
g_amt = 70
|
||||||
|
construction_cost = list("metal"=750,"glass"=100)
|
||||||
|
|
||||||
/obj/item/weapon/cell/hyper
|
/obj/item/weapon/cell/hyper
|
||||||
name = "hyper-capacity power cell"
|
name = "hyper-capacity power cell"
|
||||||
origin_tech = "powerstorage=6"
|
origin_tech = "powerstorage=6"
|
||||||
|
icon_state = "hpcell"
|
||||||
maxcharge = 30000
|
maxcharge = 30000
|
||||||
g_amt = 80
|
g_amt = 80
|
||||||
|
construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200)
|
||||||
|
|
||||||
/obj/item/weapon/cell/infinite
|
/obj/item/weapon/cell/infinite
|
||||||
name = "infinite-capacity power cell!"
|
name = "infinite-capacity power cell!"
|
||||||
|
icon_state = "icell"
|
||||||
origin_tech = null
|
origin_tech = null
|
||||||
maxcharge = 30000
|
maxcharge = 30000
|
||||||
g_amt = 80
|
g_amt = 80
|
||||||
@@ -1908,6 +1915,13 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
|||||||
icon = 'wizard.dmi'
|
icon = 'wizard.dmi'
|
||||||
icon_state = "ectoplasm"
|
icon_state = "ectoplasm"
|
||||||
|
|
||||||
|
/obj/item/weapon/research//Makes testing much less of a pain -Sieve
|
||||||
|
name = "research"
|
||||||
|
icon = 'stock_parts.dmi'
|
||||||
|
icon_state = "capacitor"
|
||||||
|
desc = "A debug item for research."
|
||||||
|
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8"
|
||||||
|
|
||||||
/obj/item/weapon/appendix
|
/obj/item/weapon/appendix
|
||||||
name = "appendix"
|
name = "appendix"
|
||||||
desc = "An appendix which looks perfectly healthy."
|
desc = "An appendix which looks perfectly healthy."
|
||||||
|
|||||||
@@ -286,6 +286,21 @@ proc/isInSight(var/atom/A, var/atom/B)
|
|||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
proc/doafterattack(obj/target , obj/source)
|
||||||
|
|
||||||
|
if (istype(target, /obj/item/weapon/storage/ ))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
else if (locate (/obj/structure/table, source.loc))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
else if (!istype(target.loc, /turf/))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
|
||||||
proc/check_can_reach(atom/user, atom/target)
|
proc/check_can_reach(atom/user, atom/target)
|
||||||
if(!in_range(user,target))
|
if(!in_range(user,target))
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -127,6 +127,19 @@
|
|||||||
index = findtext(t, char)
|
index = findtext(t, char)
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
//For sanitizing user inputs
|
||||||
|
/proc/reject_bad_text(var/text)
|
||||||
|
if(length(text) > 512) return //message too long
|
||||||
|
var/non_whitespace = 0
|
||||||
|
for(var/i=1, i<=length(text), i++)
|
||||||
|
switch(text2ascii(text,i))
|
||||||
|
if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or /
|
||||||
|
if(127 to 255) return //rejects weird letters like <20>
|
||||||
|
if(0 to 31) return //more weird stuff
|
||||||
|
if(32) //whitespace
|
||||||
|
else non_whitespace = 1
|
||||||
|
if(non_whitespace) return text //only accepts the text if it has some non-spaces
|
||||||
|
|
||||||
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
|
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
|
||||||
var/list/strip_chars = list("<",">","&","'")
|
var/list/strip_chars = list("<",">","&","'")
|
||||||
t = copytext(t,1,limit)
|
t = copytext(t,1,limit)
|
||||||
@@ -700,6 +713,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
|||||||
newname = dd_replacetext(newname, ">", "'")
|
newname = dd_replacetext(newname, ">", "'")
|
||||||
M.real_name = newname
|
M.real_name = newname
|
||||||
M.name = newname
|
M.name = newname
|
||||||
|
M.original_name = newname
|
||||||
|
|
||||||
/*/proc/clname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea
|
/*/proc/clname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea
|
||||||
var/randomname = pick(clown_names)
|
var/randomname = pick(clown_names)
|
||||||
@@ -731,6 +745,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
|||||||
newname = dd_replacetext(newname, ">", "'")
|
newname = dd_replacetext(newname, ">", "'")
|
||||||
M.real_name = newname
|
M.real_name = newname
|
||||||
M.name = newname
|
M.name = newname
|
||||||
|
M.original_name = newname
|
||||||
|
|
||||||
for (var/obj/item/device/pda/pda in M.contents)
|
for (var/obj/item/device/pda/pda in M.contents)
|
||||||
if (pda.owner == oldname)
|
if (pda.owner == oldname)
|
||||||
@@ -738,9 +753,9 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
|||||||
pda.name = "PDA-[newname] ([pda.ownjob])"
|
pda.name = "PDA-[newname] ([pda.ownjob])"
|
||||||
break
|
break
|
||||||
for(var/obj/item/weapon/card/id/id in M.contents)
|
for(var/obj/item/weapon/card/id/id in M.contents)
|
||||||
if(id.registered == oldname)
|
if(id.registered_name == oldname)
|
||||||
id.registered = newname
|
id.registered_name = newname
|
||||||
id.name = "[id.registered]'s ID Card ([id.assignment])"
|
id.name = "[id.registered_name]'s ID Card ([id.assignment])"
|
||||||
break*/
|
break*/
|
||||||
|
|
||||||
/proc/ionnum()
|
/proc/ionnum()
|
||||||
@@ -1827,6 +1842,13 @@ proc/get_opposite(var/checkdir)
|
|||||||
count++
|
count++
|
||||||
return count
|
return count
|
||||||
|
|
||||||
|
proc/get_mob_with_client_list()
|
||||||
|
var/list/mobs = list()
|
||||||
|
for(var/mob/M in world)
|
||||||
|
if (M.client)
|
||||||
|
mobs += M
|
||||||
|
return mobs
|
||||||
|
|
||||||
/proc/reverse_direction(var/dir)
|
/proc/reverse_direction(var/dir)
|
||||||
switch(dir)
|
switch(dir)
|
||||||
if(NORTH)
|
if(NORTH)
|
||||||
|
|||||||
@@ -117,6 +117,15 @@
|
|||||||
|
|
||||||
var/walltype = "wall"
|
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
|
/turf/simulated/wall/cult
|
||||||
name = "wall"
|
name = "wall"
|
||||||
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
|
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
|
||||||
@@ -128,7 +137,7 @@
|
|||||||
icon = 'shuttle.dmi'
|
icon = 'shuttle.dmi'
|
||||||
thermal_conductivity = 0.05
|
thermal_conductivity = 0.05
|
||||||
heat_capacity = 0
|
heat_capacity = 0
|
||||||
layer = 2.1
|
layer = 2
|
||||||
|
|
||||||
/turf/simulated/shuttle/wall
|
/turf/simulated/shuttle/wall
|
||||||
name = "wall"
|
name = "wall"
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ world
|
|||||||
|
|
||||||
|
|
||||||
Topic(href, href_list[])
|
Topic(href, href_list[])
|
||||||
world << "Received a Topic() call!"
|
// world << "Received a Topic() call!"
|
||||||
world << "[href]"
|
// world << "[href]"
|
||||||
for(var/a in href_list)
|
// for(var/a in href_list)
|
||||||
world << "[a]"
|
// world << "[a]"
|
||||||
if(href_list["hello"])
|
// if(href_list["hello"])
|
||||||
world << "Hello world!"
|
// world << "Hello world!"
|
||||||
return "Hello world!"
|
// return "Hello world!"
|
||||||
world << "End of Topic() call."
|
// world << "End of Topic() call."
|
||||||
..()
|
// ..()
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
"}
|
"}
|
||||||
|
|
||||||
diaryofmeanpeople = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] Attack.log")
|
diaryofmeanpeople = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] Attack.log")
|
||||||
@@ -15,19 +14,13 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
|||||||
|
|
||||||
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||||
---------------------
|
---------------------
|
||||||
Dear Diary....
|
|
||||||
Today, these people were mean:
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
jobban_loadbanfile()
|
jobban_loadbanfile()
|
||||||
jobban_updatelegacybans()
|
jobban_updatelegacybans()
|
||||||
LoadBans()
|
LoadBans()
|
||||||
process_teleport_locs() //Sets up the wizard teleport locations
|
process_teleport_locs() //Sets up the wizard teleport locations
|
||||||
process_ghost_teleport_locs() //Sets up ghost teleport locations.
|
process_ghost_teleport_locs() //Sets up ghost teleport locations.
|
||||||
sleep_offline = 1
|
|
||||||
|
|
||||||
if (config.kick_inactive)
|
if (config.kick_inactive)
|
||||||
spawn(30)
|
spawn(30)
|
||||||
@@ -187,15 +180,18 @@ proc/countJob(rank)
|
|||||||
return equipped
|
return equipped
|
||||||
|
|
||||||
/proc/AutoUpdateAI(obj/subject)
|
/proc/AutoUpdateAI(obj/subject)
|
||||||
|
/*
|
||||||
if (subject!=null)
|
if (subject!=null)
|
||||||
for(var/mob/living/silicon/ai/M in world)
|
for(var/mob/living/silicon/ai/M in world)
|
||||||
if ((M.client && M.machine == subject))
|
if ((M.client && M.machine == subject))
|
||||||
subject.attack_ai(M)
|
subject.attack_ai(M)
|
||||||
|
*/
|
||||||
|
|
||||||
/proc/AutoUpdateTK(obj/subject)
|
/proc/AutoUpdateTK(obj/subject)
|
||||||
if (subject!=null)
|
/* if (subject!=null)
|
||||||
for(var/obj/item/tk_grab/T in world)
|
for(var/obj/item/tk_grab/T in world)
|
||||||
if (T.host)
|
if (T.host)
|
||||||
var/mob/M = T.host
|
var/mob/M = T.host
|
||||||
if(M.client && M.machine == subject)
|
if(M.client && M.machine == subject)
|
||||||
subject.attack_hand(M)
|
subject.attack_hand(M)
|
||||||
|
*/
|
||||||
|
|||||||
@@ -2,17 +2,6 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/atom/proc/attack_hand(mob/user as mob)
|
/atom/proc/attack_hand(mob/user as mob)
|
||||||
if(ishuman(user) || ismonkey(user))
|
|
||||||
if (user.hand)
|
|
||||||
var/datum/organ/external/temp = user:organs["l_hand"]
|
|
||||||
if(temp.destroyed)
|
|
||||||
user << "\red Yo- wait a minute."
|
|
||||||
return
|
|
||||||
else
|
|
||||||
var/datum/organ/external/temp = user:organs["r_hand"]
|
|
||||||
if(temp.destroyed)
|
|
||||||
user << "\red Yo- wait a minute."
|
|
||||||
return
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/atom/proc/attack_paw(mob/user as mob)
|
/atom/proc/attack_paw(mob/user as mob)
|
||||||
@@ -115,68 +104,68 @@
|
|||||||
if(isnull(M.key)) return
|
if(isnull(M.key)) return
|
||||||
if (!( flags ) & 256)
|
if (!( flags ) & 256)
|
||||||
return
|
return
|
||||||
|
//Smudge up dem prints some
|
||||||
|
for(var/P in fingerprints)
|
||||||
|
var/test_print = stars(fingerprints[P], rand(85,95))
|
||||||
|
if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
|
||||||
|
fingerprints.Remove(P)
|
||||||
|
else
|
||||||
|
fingerprints[P] = test_print
|
||||||
if (ishuman(M))
|
if (ishuman(M))
|
||||||
|
//Add the list if it does not exist.
|
||||||
if(!fingerprintshidden)
|
if(!fingerprintshidden)
|
||||||
fingerprintshidden = list()
|
fingerprintshidden = list()
|
||||||
|
//Fibers~
|
||||||
add_fibers(M)
|
add_fibers(M)
|
||||||
|
//He has no prints!
|
||||||
if (M.mutations2 & mFingerprints)
|
if (M.mutations2 & mFingerprints)
|
||||||
if(fingerprintslast != M.key)
|
if(fingerprintslast != M.key)
|
||||||
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
|
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
|
||||||
fingerprintslast = M.key
|
fingerprintslast = M.key
|
||||||
return 0
|
return 0
|
||||||
|
//Now, lets get to the dirty work.
|
||||||
|
//First, make sure their DNA makes sense.
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
|
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
|
||||||
if(!istype(H.dna, /datum/dna))
|
if(!istype(H.dna, /datum/dna))
|
||||||
H.dna = new /datum/dna(null)
|
H.dna = new /datum/dna(null)
|
||||||
H.check_dna()
|
H.check_dna()
|
||||||
|
//Now, deal with gloves.
|
||||||
if (H.gloves && H.gloves != src)
|
if (H.gloves && H.gloves != src)
|
||||||
if(fingerprintslast != H.key)
|
if(fingerprintslast != H.key)
|
||||||
fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||||
fingerprintslast = H.key
|
fingerprintslast = H.key
|
||||||
H.gloves.add_fingerprint(M)
|
H.gloves.add_fingerprint(M)
|
||||||
|
//Deal with gloves the pass finger/palm prints.
|
||||||
if(H.gloves != src)
|
if(H.gloves != src)
|
||||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||||
return 0
|
return 0
|
||||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex) && !istype(H.gloves, /obj/item/clothing/gloves/fingerless))
|
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex) && !istype(H.gloves, /obj/item/clothing/gloves/fingerless))
|
||||||
return 0
|
return 0
|
||||||
|
//More adminstuffz
|
||||||
if(fingerprintslast != H.key)
|
if(fingerprintslast != H.key)
|
||||||
fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
||||||
fingerprintslast = H.key
|
fingerprintslast = H.key
|
||||||
|
//Make the list if it does not exist.
|
||||||
if(!fingerprints)
|
if(!fingerprints)
|
||||||
fingerprints = list()
|
fingerprints = list()
|
||||||
var/new_prints = 0
|
//Hash this shit.
|
||||||
var/prints
|
var/full_print = md5(H.dna.uni_identity)
|
||||||
for(var/i = 1, i <= fingerprints.len, i++)
|
var/print = fingerprints[full_print] //Find if the print is already there.
|
||||||
var/list/L = params2list(fingerprints[i])
|
//It is not! We need to add it!
|
||||||
if(L[num2text(1)] == md5(H.dna.uni_identity))
|
if(!print)
|
||||||
new_prints = i
|
fingerprints[full_print] = stars(full_print, H.gloves ? rand(10,20) : rand(25,40))
|
||||||
prints = L[num2text(2)]
|
//It's there, lets merge this shit!
|
||||||
break
|
|
||||||
else
|
|
||||||
var/test_print = stars(L[num2text(2)], rand(80,90))
|
|
||||||
if(stringpercent(test_print) == 32)
|
|
||||||
if(fingerprints.len == 1)
|
|
||||||
fingerprints = list()
|
|
||||||
else
|
|
||||||
fingerprints.Cut(i,i+1)
|
|
||||||
else
|
|
||||||
fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
|
|
||||||
if(new_prints)
|
|
||||||
fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
|
|
||||||
else
|
else
|
||||||
if(!fingerprints || !fingerprints.len)
|
fingerprints[full_print] = stringmerge(print, stars(full_print, (H.gloves ? rand(10,20) : rand(25,40))))
|
||||||
fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
|
|
||||||
else
|
|
||||||
fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
|
||||||
for(var/i = 1, i <= fingerprints.len, i++)
|
|
||||||
if(length(fingerprints[i]) != 69)
|
|
||||||
fingerprints.Remove(fingerprints[i])
|
|
||||||
if(fingerprints && !fingerprints.len) del(fingerprints)
|
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
if(fingerprintslast != M.key)
|
if(fingerprintslast != M.key)
|
||||||
fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
|
fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
|
||||||
fingerprintslast = M.key
|
fingerprintslast = M.key
|
||||||
|
//Cleaning up shit.
|
||||||
|
if(fingerprints && !fingerprints.len)
|
||||||
|
del(fingerprints)
|
||||||
return
|
return
|
||||||
|
|
||||||
//returns 1 if made bloody, returns 0 otherwise
|
//returns 1 if made bloody, returns 0 otherwise
|
||||||
@@ -211,11 +200,9 @@
|
|||||||
O.overlays += O.blood_overlay
|
O.overlays += O.blood_overlay
|
||||||
|
|
||||||
//if this blood isn't already in the list, add it
|
//if this blood isn't already in the list, add it
|
||||||
for(var/i = 1, i <= O.blood_DNA.len, i++)
|
if(blood_DNA[M.dna.unique_enzymes])
|
||||||
if((O.blood_DNA[i][1] == M.dna.unique_enzymes) && (O.blood_DNA[i][2] == M.dna.b_type))
|
return 0 //already bloodied with this blood. Cannot add more.
|
||||||
return 0 //already bloodied with this blood. Cannot add more.
|
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||||
O.blood_DNA.len++
|
|
||||||
O.blood_DNA[O.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
|
||||||
return 1 //we applied blood to the item
|
return 1 //we applied blood to the item
|
||||||
|
|
||||||
//adding blood to turfs
|
//adding blood to turfs
|
||||||
@@ -224,8 +211,8 @@
|
|||||||
|
|
||||||
//get one blood decal and infect it with virus from M.viruses
|
//get one blood decal and infect it with virus from M.viruses
|
||||||
for(var/obj/effect/decal/cleanable/blood/B in T.contents)
|
for(var/obj/effect/decal/cleanable/blood/B in T.contents)
|
||||||
B.blood_DNA.len++
|
if(!B.blood_DNA[M.dna.unique_enzymes])
|
||||||
B.blood_DNA[B.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||||
B.virus2 += M.virus2
|
B.virus2 += M.virus2
|
||||||
for(var/datum/disease/D in M.viruses)
|
for(var/datum/disease/D in M.viruses)
|
||||||
var/datum/disease/newDisease = new D.type
|
var/datum/disease/newDisease = new D.type
|
||||||
@@ -235,7 +222,7 @@
|
|||||||
|
|
||||||
//if there isn't a blood decal already, make one.
|
//if there isn't a blood decal already, make one.
|
||||||
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T)
|
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T)
|
||||||
newblood.blood_DNA = list(list(M.dna.unique_enzymes, M.dna.b_type))
|
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||||
newblood.blood_owner = M
|
newblood.blood_owner = M
|
||||||
newblood.virus2 = M.virus2
|
newblood.virus2 = M.virus2
|
||||||
for(var/datum/disease/D in M.viruses)
|
for(var/datum/disease/D in M.viruses)
|
||||||
@@ -248,11 +235,9 @@
|
|||||||
else if (istype(src, /mob/living/carbon/human))
|
else if (istype(src, /mob/living/carbon/human))
|
||||||
var/mob/living/carbon/human/H = src
|
var/mob/living/carbon/human/H = src
|
||||||
//if this blood isn't already in the list, add it
|
//if this blood isn't already in the list, add it
|
||||||
for(var/i = 1, i <= H.blood_DNA.len, i++)
|
if(blood_DNA[H.dna.unique_enzymes])
|
||||||
if((H.blood_DNA[i][1] == M.dna.unique_enzymes) && (H.blood_DNA[i][2] == M.dna.b_type))
|
return 0 //already bloodied with this blood. Cannot add more.
|
||||||
return 0 //already bloodied with this blood. Cannot add more.
|
blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
|
||||||
H.blood_DNA.len++
|
|
||||||
H.blood_DNA[H.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
|
||||||
return 1 //we applied blood to the item
|
return 1 //we applied blood to the item
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -275,7 +260,7 @@
|
|||||||
if( istype(src, /turf/simulated) )
|
if( istype(src, /turf/simulated) )
|
||||||
var/turf/simulated/source1 = src
|
var/turf/simulated/source1 = src
|
||||||
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1)
|
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1)
|
||||||
this.blood_DNA = list(M.dna.unique_enzymes, M.dna.b_type)
|
this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||||
this.OriginalMob = M.dna.original_name
|
this.OriginalMob = M.dna.original_name
|
||||||
for(var/datum/disease/D in M.viruses)
|
for(var/datum/disease/D in M.viruses)
|
||||||
var/datum/disease/newDisease = new D.type
|
var/datum/disease/newDisease = new D.type
|
||||||
@@ -286,7 +271,7 @@
|
|||||||
if( istype(src, /turf/simulated) )
|
if( istype(src, /turf/simulated) )
|
||||||
var/turf/simulated/source2 = src
|
var/turf/simulated/source2 = src
|
||||||
var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2)
|
var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2)
|
||||||
this.blood_DNA = list(list("UNKNOWN BLOOD","X*"))
|
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
||||||
for(var/datum/disease/D in M.viruses)
|
for(var/datum/disease/D in M.viruses)
|
||||||
var/datum/disease/newDisease = new D.type
|
var/datum/disease/newDisease = new D.type
|
||||||
this.viruses += newDisease
|
this.viruses += newDisease
|
||||||
@@ -305,9 +290,9 @@
|
|||||||
|
|
||||||
/atom/proc/clean_blood()
|
/atom/proc/clean_blood()
|
||||||
|
|
||||||
if (!( src.flags ) & 256)
|
if (!flags & 256)
|
||||||
return
|
return
|
||||||
if ( src.blood_DNA )
|
if (blood_DNA )
|
||||||
|
|
||||||
//Cleaning blood off of mobs
|
//Cleaning blood off of mobs
|
||||||
if (istype (src, /mob/living/carbon))
|
if (istype (src, /mob/living/carbon))
|
||||||
@@ -340,25 +325,14 @@
|
|||||||
|
|
||||||
if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len)
|
if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len)
|
||||||
del(blood_DNA)
|
del(blood_DNA)
|
||||||
if(src.fingerprints && src.fingerprints.len)
|
if(fingerprints && fingerprints.len)
|
||||||
var/done = 0
|
//Smudge up dem prints some
|
||||||
while(!done)
|
for(var/P in fingerprints)
|
||||||
done = 1
|
var/test_print = stars(fingerprints[P], rand(10,20))
|
||||||
for(var/i = 1, i < (src.fingerprints.len + 1), i++)
|
if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
|
||||||
var/list/prints = params2list(src.fingerprints[i])
|
fingerprints.Remove(P)
|
||||||
var/test_print = prints["2"]
|
else
|
||||||
var/new_print = stars(test_print, rand(1,20))
|
fingerprints[P] = test_print
|
||||||
if(stringpercent(new_print) == 32)
|
|
||||||
if(src.fingerprints.len == 1)
|
|
||||||
src.fingerprints = list()
|
|
||||||
else
|
|
||||||
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
|
|
||||||
src.fingerprints[j-1] = src.fingerprints[j]
|
|
||||||
src.fingerprints.len--
|
|
||||||
done = 0
|
|
||||||
break
|
|
||||||
else
|
|
||||||
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
|
|
||||||
if(fingerprints && !fingerprints.len)
|
if(fingerprints && !fingerprints.len)
|
||||||
del(fingerprints)
|
del(fingerprints)
|
||||||
if(istype(src, /mob/living/carbon/human))
|
if(istype(src, /mob/living/carbon/human))
|
||||||
@@ -678,6 +652,25 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
|||||||
if ( !animal.restrained() )
|
if ( !animal.restrained() )
|
||||||
attack_animal(animal)
|
attack_animal(animal)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
|
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
|
||||||
// world << "checking if this shit gets called at all"
|
// world << "checking if this shit gets called at all"
|
||||||
|
|
||||||
@@ -908,7 +901,18 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
|||||||
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
|
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
|
||||||
if (istype(usr, /mob/living/carbon/human))
|
if (istype(usr, /mob/living/carbon/human))
|
||||||
// ------- YOU ARE HUMAN -------
|
// ------- YOU ARE HUMAN -------
|
||||||
|
/* if(usr.hand) // if he's using his left hand.
|
||||||
|
var/datum/organ/external/temp = usr:get_organ("l_hand")
|
||||||
|
if(temp.destroyed)
|
||||||
|
usr << "\blue You look at your stump."
|
||||||
|
return
|
||||||
|
else
|
||||||
|
var/datum/organ/external/temp = usr:get_organ("r_hand")
|
||||||
|
if(temp.destroyed)
|
||||||
|
usr << "\blue You look at your stump."
|
||||||
|
return*/
|
||||||
src.attack_hand(usr, usr.hand)
|
src.attack_hand(usr, usr.hand)
|
||||||
|
// usr:afterattack(src, usr, (t5 ? 1 : 0), params)
|
||||||
else
|
else
|
||||||
// ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED -------
|
// ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED -------
|
||||||
if (istype(usr, /mob/living/carbon/monkey))
|
if (istype(usr, /mob/living/carbon/monkey))
|
||||||
@@ -1058,9 +1062,11 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
|||||||
else
|
else
|
||||||
var/nhref = "src=\ref[src];aiDisable=5"
|
var/nhref = "src=\ref[src];aiDisable=5"
|
||||||
src.Topic(nhref, params2list(nhref), src, 1)
|
src.Topic(nhref, params2list(nhref), src, 1)
|
||||||
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/atom/proc/AICtrlClick() // Bolts doors.
|
/atom/proc/AICtrlClick() // Bolts doors, turns off APCs.
|
||||||
if(istype(src , /obj/machinery/door/airlock))
|
if(istype(src , /obj/machinery/door/airlock))
|
||||||
if(src:locked)
|
if(src:locked)
|
||||||
var/nhref = "src=\ref[src];aiEnable=4"
|
var/nhref = "src=\ref[src];aiEnable=4"
|
||||||
@@ -1068,6 +1074,13 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
|||||||
else
|
else
|
||||||
var/nhref = "src=\ref[src];aiDisable=4"
|
var/nhref = "src=\ref[src];aiDisable=4"
|
||||||
src.Topic(nhref, params2list(nhref), src, 1)
|
src.Topic(nhref, params2list(nhref), src, 1)
|
||||||
|
|
||||||
|
else if (istype(src , /obj/machinery/power/apc/))
|
||||||
|
var/nhref = "src=\ref[src];breaker=1"
|
||||||
|
src.Topic(nhref, params2list(nhref), 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
/world/proc/load_motd()
|
/world/proc/load_motd()
|
||||||
join_motd = file2text("config/motd.txt")
|
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()
|
/world/proc/load_rules()
|
||||||
rules = file2text("config/rules.html")
|
rules = file2text("config/rules.html")
|
||||||
@@ -108,8 +106,6 @@
|
|||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
sleep(50)
|
|
||||||
|
|
||||||
plmaster = new /obj/effect/overlay( )
|
plmaster = new /obj/effect/overlay( )
|
||||||
plmaster.icon = 'tile_effects.dmi'
|
plmaster.icon = 'tile_effects.dmi'
|
||||||
plmaster.icon_state = "plasma"
|
plmaster.icon_state = "plasma"
|
||||||
@@ -125,7 +121,8 @@
|
|||||||
src.update_status()
|
src.update_status()
|
||||||
|
|
||||||
master_controller = new /datum/controller/game_controller()
|
master_controller = new /datum/controller/game_controller()
|
||||||
spawn(-1) master_controller.setup()
|
spawn(-1)
|
||||||
|
master_controller.setup()
|
||||||
return
|
return
|
||||||
|
|
||||||
//Crispy fullban
|
//Crispy fullban
|
||||||
@@ -197,4 +194,4 @@
|
|||||||
/obj/effect/decal/point/point()
|
/obj/effect/decal/point/point()
|
||||||
set src in oview()
|
set src in oview()
|
||||||
set hidden = 1
|
set hidden = 1
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -221,9 +221,17 @@
|
|||||||
if (!output) output = "5"
|
if (!output) output = "5"
|
||||||
return output
|
return output
|
||||||
|
|
||||||
/proc/isblockon(hnumber, bnumber)
|
/proc/isblockon(hnumber, bnumber , var/UI = 0)
|
||||||
|
|
||||||
var/temp2
|
var/temp2
|
||||||
temp2 = hex2num(hnumber)
|
temp2 = hex2num(hnumber)
|
||||||
|
|
||||||
|
if(UI)
|
||||||
|
if(temp2 >= 2050)
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
if (bnumber == HULKBLOCK || bnumber == TELEBLOCK)
|
if (bnumber == HULKBLOCK || bnumber == TELEBLOCK)
|
||||||
if (temp2 >= 3500 + BLOCKADD)
|
if (temp2 >= 3500 + BLOCKADD)
|
||||||
return 1
|
return 1
|
||||||
@@ -313,7 +321,7 @@
|
|||||||
H.g_eyes = hex2num(getblock(structure,9,3))
|
H.g_eyes = hex2num(getblock(structure,9,3))
|
||||||
H.b_eyes = hex2num(getblock(structure,10,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
|
H.gender = FEMALE
|
||||||
else
|
else
|
||||||
H.gender = MALE
|
H.gender = MALE
|
||||||
@@ -750,7 +758,7 @@
|
|||||||
// if (!M.client)
|
// if (!M.client)
|
||||||
// for(var/mob/dead/observer/ghost in world)
|
// for(var/mob/dead/observer/ghost in world)
|
||||||
// if(ghost.corpse == M && ghost.client)
|
// if(ghost.corpse == M && ghost.client)
|
||||||
// ghost << "<b><font color = #330033><font size = 3>Your corpse has been placed into a cloning scanner. Return to your body if you want to be ressurected/cloned!</b> (Verbs -> Ghost -> Re-enter corpse)</font color>"
|
// ghost << "<b><font color = #330033><font size = 3>Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned!</b> (Verbs -> Ghost -> Re-enter corpse)</font color>"
|
||||||
// break
|
// break
|
||||||
del(G)
|
del(G)
|
||||||
return
|
return
|
||||||
@@ -845,7 +853,10 @@
|
|||||||
/obj/machinery/computer/scan_consolenew/New()
|
/obj/machinery/computer/scan_consolenew/New()
|
||||||
..()
|
..()
|
||||||
spawn(5)
|
spawn(5)
|
||||||
src.connected = locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
|
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||||
|
connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
|
||||||
|
if(!isnull(connected))
|
||||||
|
break
|
||||||
spawn(250)
|
spawn(250)
|
||||||
src.injectorready = 1
|
src.injectorready = 1
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -2,86 +2,87 @@
|
|||||||
name = "black hole"
|
name = "black hole"
|
||||||
icon = 'objects.dmi'
|
icon = 'objects.dmi'
|
||||||
desc = "FUCK FUCK FUCK AAAHHH"
|
desc = "FUCK FUCK FUCK AAAHHH"
|
||||||
icon_state = "bhole2"
|
icon_state = "bhole3"
|
||||||
opacity = 0
|
opacity = 1
|
||||||
unacidable = 1
|
unacidable = 1
|
||||||
density = 0
|
density = 0
|
||||||
anchored = 1
|
anchored = 1
|
||||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke
|
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/bhole/New()
|
/obj/effect/bhole/New()
|
||||||
src.smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
spawn(4)
|
||||||
src.smoke.set_up(5, 0, src)
|
controller()
|
||||||
src.smoke.attach(src)
|
|
||||||
src:life()
|
/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)
|
|
||||||
|
|
||||||
|
//MOVEMENT
|
||||||
/obj/effect/bhole/proc/life() //Oh man , this will LAG
|
if( prob(50) )
|
||||||
|
src.anchored = 0
|
||||||
if (prob(10))
|
|
||||||
src.anchored = 0
|
|
||||||
step(src,pick(alldirs))
|
|
||||||
if (prob(30))
|
|
||||||
step(src,pick(alldirs))
|
step(src,pick(alldirs))
|
||||||
src.anchored = 1
|
src.anchored = 1
|
||||||
|
|
||||||
for (var/atom/X in orange(9,src))
|
/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||||
if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7))
|
if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
|
||||||
if (!X:anchored)
|
del(src)
|
||||||
step_towards(X,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))
|
/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||||
if (istype(B,/obj))
|
//Get turf at coordinate
|
||||||
if (!B:anchored && prob(50))
|
var/turf/T = locate(x, y, z)
|
||||||
step_towards(B,src)
|
if(isnull(T)) return
|
||||||
if(prob(10)) B:ex_act(3.0)
|
|
||||||
|
//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
|
else
|
||||||
B:anchored = 0
|
step_towards(O,src)
|
||||||
//step_towards(B,src)
|
for(var/mob/living/M in T.contents)
|
||||||
//B:anchored = 1
|
step_towards(M,src)
|
||||||
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)
|
|
||||||
|
|
||||||
|
//Destroying the turf
|
||||||
for (var/atom/A in orange(4,src))
|
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
|
||||||
if (istype(A,/obj))
|
var/turf/simulated/ST = T
|
||||||
if (!A:anchored && prob(90))
|
ST.ReplaceWithSpace()
|
||||||
step_towards(A,src)
|
return
|
||||||
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()
|
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
if(/obj/item/weapon/circular_saw) del src
|
if(/obj/item/weapon/circular_saw) del src
|
||||||
if(/obj/item/weapon/kitchen/utensil/knife) del src
|
if(/obj/item/weapon/kitchen/utensil/knife) del src
|
||||||
if(/obj/item/weapon/scalpel) 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/hatchet) del src
|
||||||
if(/obj/item/weapon/melee/energy) del src
|
if(/obj/item/weapon/melee/energy) del src
|
||||||
|
|
||||||
|
|||||||
63
code/game/events/EventProcs/wormholes.dm
Normal file
63
code/game/events/EventProcs/wormholes.dm
Normal file
@@ -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)
|
||||||
@@ -8,7 +8,6 @@ var
|
|||||||
/datum/game_mode/blob
|
/datum/game_mode/blob
|
||||||
name = "blob"
|
name = "blob"
|
||||||
config_tag = "blob"
|
config_tag = "blob"
|
||||||
required_players = 0
|
|
||||||
|
|
||||||
uplink_welcome = "Syndicate Uplink Console:"
|
uplink_welcome = "Syndicate Uplink Console:"
|
||||||
uplink_uses = 10
|
uplink_uses = 10
|
||||||
|
|||||||
@@ -403,6 +403,117 @@
|
|||||||
del(usr)
|
del(usr)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
/client/proc/changeling_greater_form() // Oh shit, it's on now.
|
||||||
|
|
||||||
|
set category = "Changeling"
|
||||||
|
set name = "Greater Form"
|
||||||
|
set desc = "Become onto the Goddess"
|
||||||
|
|
||||||
|
if (usr.monkeyizing)
|
||||||
|
return
|
||||||
|
for(var/obj/item/W in src)
|
||||||
|
usr.drop_from_slot(W)
|
||||||
|
usr.update_clothing()
|
||||||
|
usr.monkeyizing = 1
|
||||||
|
usr.canmove = 0
|
||||||
|
usr.icon = null
|
||||||
|
usr.invisibility = 101
|
||||||
|
for(var/datum/organ/external/organ in usr:organs)
|
||||||
|
del(organ)
|
||||||
|
|
||||||
|
var/atom/movable/overlay/animation = new /atom/movable/overlay( usr.loc )
|
||||||
|
animation.icon_state = "blank"
|
||||||
|
animation.icon = 'mob.dmi'
|
||||||
|
animation.master = src
|
||||||
|
flick("h2monkey", animation)
|
||||||
|
sleep(48)
|
||||||
|
//animation = null
|
||||||
|
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
|
||||||
|
del(animation)
|
||||||
|
|
||||||
|
O.real_name = usr.real_name
|
||||||
|
O.name = usr.name
|
||||||
|
O.dna = usr.dna
|
||||||
|
usr.dna = null
|
||||||
|
O.changeling = usr.changeling
|
||||||
|
updateappearance(O,O.dna.uni_identity)
|
||||||
|
O.loc = usr.loc
|
||||||
|
O.viruses = usr.viruses
|
||||||
|
usr.viruses = list()
|
||||||
|
for(var/datum/disease/D in O.viruses)
|
||||||
|
D.affected_mob = O
|
||||||
|
O.universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans
|
||||||
|
|
||||||
|
if (usr.client)
|
||||||
|
usr.client.mob = O
|
||||||
|
if(usr.mind)
|
||||||
|
usr.mind.transfer_to(O)
|
||||||
|
|
||||||
|
spawn(300)
|
||||||
|
command_alert("Extreme danger. A level four biological entity has been detected on board the station. Emergancy evacuation procedures have begun. Civilian staff, do NOT engage the creature if spotted. Renforcements are on route.")
|
||||||
|
emergency_shuttle.online = 1
|
||||||
|
emergency_shuttle.settimeleft(10)
|
||||||
|
spawn(10)
|
||||||
|
var/list/candidates = list()
|
||||||
|
|
||||||
|
for(var/mob/dead/observer/G in world)
|
||||||
|
candidates += G
|
||||||
|
|
||||||
|
for(var/mob/dead/observer/G in candidates)
|
||||||
|
if(!G.client || !G.key)
|
||||||
|
candidates.Remove(G)
|
||||||
|
|
||||||
|
for(var/obj/structure/stool/bed/chair/C in locate(/area/shuttle/escape/transit))
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/new_commando = create_death_commando(C, 0)
|
||||||
|
|
||||||
|
if(candidates.len)
|
||||||
|
var/mob/dead/observer/G = pick(candidates)
|
||||||
|
new_commando.mind.key = G.key//For mind stuff.
|
||||||
|
new_commando.key = G.key
|
||||||
|
new_commando.internal = new_commando.s_store
|
||||||
|
new_commando.internals.icon_state = "internal1"
|
||||||
|
candidates -= G
|
||||||
|
del(G)
|
||||||
|
else
|
||||||
|
break
|
||||||
|
|
||||||
|
//So they don't forget their code or mission.
|
||||||
|
new_commando.mind.store_memory("<B>Mission:</B> \red Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.")
|
||||||
|
|
||||||
|
new_commando << "\blue You are a Special Ops Commando in the service of Central Command. \nYour current mission is: \red<B>Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.</B>"
|
||||||
|
spawn(100)
|
||||||
|
emergency_shuttle.online = 0
|
||||||
|
command_alert("The emergancy shuttle will hold until the hostile entity has been terminated. During evacuation, do NOT use escape pods. To avoid the chance of a hostile entity escaping, the Thunderchild will be firing on and destorying any escape pods leaving the station")
|
||||||
|
O << "Your way out has arrived. Obtain the ID of three heads to override the holding protocol and escape. Let none stand in your way, for you are a perfect creature."
|
||||||
|
for(var/datum/objective/objective in O.mind.objectives)
|
||||||
|
O.mind.objectives.Remove(objective)
|
||||||
|
del(objective)
|
||||||
|
var/datum/objective/new_objective = null
|
||||||
|
new_objective = new /datum/objective/escape
|
||||||
|
new_objective.owner = O.mind
|
||||||
|
O.mind.objectives += new_objective
|
||||||
|
|
||||||
|
spawn(0)
|
||||||
|
while(emergency_shuttle.online == 0)
|
||||||
|
sleep(10)
|
||||||
|
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
|
||||||
|
spawn(900)
|
||||||
|
for(var/mob/M in locate(/area/shuttle/escape_pod1/transit))
|
||||||
|
M.gib()
|
||||||
|
for(var/mob/M in locate(/area/shuttle/escape_pod2/transit))
|
||||||
|
M.gib()
|
||||||
|
for(var/mob/M in locate(/area/shuttle/escape_pod3/transit))
|
||||||
|
M.gib()
|
||||||
|
for(var/mob/M in locate(/area/shuttle/escape_pod5/transit))
|
||||||
|
M.gib()
|
||||||
|
while(emergency_shuttle.online == 1)
|
||||||
|
sleep(10)
|
||||||
|
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
|
||||||
|
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
|
||||||
|
|
||||||
|
*/
|
||||||
/client/proc/changeling_fakedeath()
|
/client/proc/changeling_fakedeath()
|
||||||
set category = "Changeling"
|
set category = "Changeling"
|
||||||
set name = "Regenerative Stasis (20)"
|
set name = "Regenerative Stasis (20)"
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
|||||||
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
|
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
|
||||||
genomecost = 250
|
genomecost = 250
|
||||||
|
|
||||||
// doesn't happen lol. Yet!
|
// verbpath = /client/proc/changeling_greater_form
|
||||||
|
|
||||||
/obj/effect/proc_holder/power/fakedeath
|
/obj/effect/proc_holder/power/fakedeath
|
||||||
name = "Fake Death"
|
name = "Fake Death"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
list/allwords = list("travel","self","see","hell","blood","join","tech","destroy", "other", "hide")
|
list/allwords = list("travel","self","see","hell","blood","join","tech","destroy", "other", "hide")
|
||||||
|
|
||||||
|
|
||||||
/proc/iscultist(mob/living/carbon/M as mob)
|
/proc/iscultist(mob/living/M as mob)
|
||||||
return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
|
return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
|
||||||
|
|
||||||
/proc/is_convertable_to_cult(datum/mind/mind)
|
/proc/is_convertable_to_cult(datum/mind/mind)
|
||||||
|
|||||||
52
code/game/gamemodes/cult/cult_structures.dm
Normal file
52
code/game/gamemodes/cult/cult_structures.dm
Normal file
@@ -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
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
var/virus_name = ""
|
var/virus_name = ""
|
||||||
|
|
||||||
var/stage = 0
|
var/stage = 0
|
||||||
|
var/doctors = 0
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
//Announces the game type//
|
//Announces the game type//
|
||||||
@@ -26,7 +27,7 @@
|
|||||||
//Gets the round setup, cancelling if there's not enough players at the start//
|
//Gets the round setup, cancelling if there's not enough players at the start//
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
/datum/game_mode/epidemic/pre_setup()
|
/datum/game_mode/epidemic/pre_setup()
|
||||||
var/doctors = 0
|
doctors = 0
|
||||||
for(var/mob/new_player/player in world)
|
for(var/mob/new_player/player in world)
|
||||||
if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor"))
|
if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor"))
|
||||||
doctors++
|
doctors++
|
||||||
@@ -65,8 +66,15 @@
|
|||||||
|
|
||||||
comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT")
|
comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT")
|
||||||
comm.messagetext.Add(intercepttext)
|
comm.messagetext.Add(intercepttext)
|
||||||
|
|
||||||
world << sound('commandreport.ogg')
|
world << sound('commandreport.ogg')
|
||||||
|
|
||||||
|
// add an extra law to the AI to make sure it cooperates with the heads
|
||||||
|
var/extra_law = "Crew authorized to know of pathogen [virus_name]'s existence are: Heads of command, any crew member with loyalty implant. Do not allow unauthorized personnel to gain knowledge of [virus_name]. Aid authorized personnel in quarantining and neutrlizing the outbreak. This law overrides all other laws."
|
||||||
|
for(var/mob/living/silicon/ai/M in world)
|
||||||
|
M.add_ion_law(extra_law)
|
||||||
|
M << "\red " + extra_law
|
||||||
|
|
||||||
/datum/game_mode/epidemic/proc/announce_to_kill_crew()
|
/datum/game_mode/epidemic/proc/announce_to_kill_crew()
|
||||||
var/intercepttext = "<FONT size = 3 color='red'><B>CONFIDENTIAL REPORT</FONT><HR>"
|
var/intercepttext = "<FONT size = 3 color='red'><B>CONFIDENTIAL REPORT</FONT><HR>"
|
||||||
intercepttext += "<FONT size = 2;color='red'><B>PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].</B></FONT><BR>"
|
intercepttext += "<FONT size = 2;color='red'><B>PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].</B></FONT><BR>"
|
||||||
@@ -84,33 +92,45 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/game_mode/epidemic/post_setup()
|
/datum/game_mode/epidemic/post_setup()
|
||||||
|
// make sure viral outbreak events don't happen on this mode
|
||||||
|
EventTypes.Remove(/datum/event/viralinfection)
|
||||||
|
|
||||||
|
// scan the crew for possible infectees
|
||||||
var/list/crew = list()
|
var/list/crew = list()
|
||||||
for(var/mob/living/carbon/human/H in world) if(H.client)
|
for(var/mob/living/carbon/human/H in world) if(H.client)
|
||||||
|
// heads should not be infected
|
||||||
|
if(H.mind.assigned_role in command_positions) continue
|
||||||
crew += H
|
crew += H
|
||||||
|
|
||||||
if(crew.len < 2)
|
if(crew.len < 2)
|
||||||
world << "\red There aren't enough players for this mode!"
|
world << "\red There aren't enough players for this mode!"
|
||||||
|
world << "\red Rebooting world in 5 seconds."
|
||||||
|
|
||||||
|
if(blackbox)
|
||||||
|
blackbox.save_all_data_to_sql()
|
||||||
|
sleep(50)
|
||||||
|
world.Reboot()
|
||||||
|
|
||||||
var/datum/disease2/disease/lethal = new
|
var/datum/disease2/disease/lethal = new
|
||||||
lethal.makerandom(1)
|
lethal.makerandom(1)
|
||||||
lethal.infectionchance = 5
|
lethal.infectionchance = 5
|
||||||
|
|
||||||
var/datum/disease2/disease/nonlethal = new
|
// the more doctors, the more will be infected
|
||||||
nonlethal.makerandom(0)
|
var/lethal_amount = doctors * 2
|
||||||
nonlethal.infectionchance = 0
|
|
||||||
|
|
||||||
for(var/i = 0, i < crew.len / 3, i++)
|
// keep track of initial infectees
|
||||||
|
var/list/infectees = list()
|
||||||
|
|
||||||
|
for(var/i = 0, i < lethal_amount, i++)
|
||||||
var/mob/living/carbon/human/H = pick(crew)
|
var/mob/living/carbon/human/H = pick(crew)
|
||||||
if(H.virus2)
|
if(H.virus2)
|
||||||
i--
|
i--
|
||||||
continue
|
continue
|
||||||
H.virus2 = lethal.getcopy()
|
H.virus2 = lethal.getcopy()
|
||||||
|
infectees += H
|
||||||
|
|
||||||
for(var/i = 0, i < crew.len / 3, i++)
|
var/mob/living/carbon/human/patient_zero = pick(infectees)
|
||||||
var/mob/living/carbon/human/H = pick(crew)
|
patient_zero.virus2.stage = 3
|
||||||
if(H.virus2)
|
|
||||||
continue
|
|
||||||
H.virus2 = nonlethal.getcopy()
|
|
||||||
|
|
||||||
cruiser_arrival = world.time + (10 * 90 * 60)
|
cruiser_arrival = world.time + (10 * 90 * 60)
|
||||||
stage = 1
|
stage = 1
|
||||||
@@ -126,9 +146,12 @@
|
|||||||
if(stage == 1 && cruiser_seconds() < 60 * 30)
|
if(stage == 1 && cruiser_seconds() < 60 * 30)
|
||||||
announce_to_kill_crew()
|
announce_to_kill_crew()
|
||||||
stage = 2
|
stage = 2
|
||||||
else if(stage == 2 && cruiser_seconds() <= 0)
|
else if(stage == 2 && cruiser_seconds() <= 60 * 5)
|
||||||
crew_lose()
|
command_alert("Inbound cruiser detected on collision course. Scans indicate the ship to be armed and ready to fire. Estimated time of arrival: 5 minutes.", "[station_name()] Early Warning System")
|
||||||
stage = 3
|
stage = 3
|
||||||
|
else if(stage == 3 && cruiser_seconds() <= 0)
|
||||||
|
crew_lose()
|
||||||
|
stage = 4
|
||||||
|
|
||||||
checkwin_counter++
|
checkwin_counter++
|
||||||
if(checkwin_counter >= 20)
|
if(checkwin_counter >= 20)
|
||||||
@@ -176,13 +199,11 @@
|
|||||||
world << "\blue<b>[i]..</b>"
|
world << "\blue<b>[i]..</b>"
|
||||||
sleep(10)
|
sleep(10)
|
||||||
enter_allowed = 0
|
enter_allowed = 0
|
||||||
for(var/mob/M in world)
|
if(ticker)
|
||||||
if(M.client)
|
ticker.station_explosion_cinematic(0,null)
|
||||||
spawn(0)
|
if(ticker.mode)
|
||||||
M.client.station_explosion_cinematic()
|
ticker.mode:station_was_nuked = 1
|
||||||
sleep(110)
|
ticker.mode:explosion_in_progress = 0
|
||||||
ticker.mode:station_was_nuked = 1
|
|
||||||
ticker.mode:explosion_in_progress = 0
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
/datum/game_mode/extended
|
/datum/game_mode/extended
|
||||||
name = "extended"
|
name = "extended"
|
||||||
config_tag = "extended"
|
config_tag = "extended"
|
||||||
required_players = 0
|
|
||||||
|
|
||||||
uplink_welcome = "Syndicate Uplink Console:"
|
uplink_welcome = "Syndicate Uplink Console:"
|
||||||
uplink_uses = 10
|
uplink_uses = 10
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
list/datum/mind/modePlayer = new
|
list/datum/mind/modePlayer = new
|
||||||
list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
|
list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
|
||||||
list/protected_jobs = list() // Jobs that can't be tratiors because
|
list/protected_jobs = list() // Jobs that can't be tratiors because
|
||||||
required_players = 0
|
required_players = 1
|
||||||
required_enemies = 0
|
required_enemies = 0
|
||||||
recommended_enemies = 0
|
recommended_enemies = 0
|
||||||
uplink_welcome
|
uplink_welcome
|
||||||
@@ -47,7 +47,7 @@ Stealth and Camouflage Items;
|
|||||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
/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;
|
Whitespace:Seperator;
|
||||||
Devices and Tools;
|
Devices and Tools;
|
||||||
/obj/item/weapon/card/emag:4:Cryptographic Sequencer (Limited uses, almost full access);
|
/obj/item/weapon/card/emag:4:Cryptographic Sequencer (Limited uses, almost full access);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ var/datum/roundinfo/roundinfo = new()
|
|||||||
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
|
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
|
||||||
var/Bible_item_state // item_state the chaplain has chosen for his bible
|
var/Bible_item_state // item_state the chaplain has chosen for his bible
|
||||||
var/Bible_name // name of the bible
|
var/Bible_name // name of the bible
|
||||||
|
var/Bible_deity_name
|
||||||
|
|
||||||
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
|
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
|
||||||
|
|
||||||
@@ -54,7 +55,7 @@ var/datum/roundinfo/roundinfo = new()
|
|||||||
runnable_modes = config.get_runnable_modes()
|
runnable_modes = config.get_runnable_modes()
|
||||||
if (runnable_modes.len==0)
|
if (runnable_modes.len==0)
|
||||||
current_state = GAME_STATE_PREGAME
|
current_state = GAME_STATE_PREGAME
|
||||||
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
|
world << "<B>Unable to choose playable game mode. Not enough players?</B> Reverting to pre-game lobby."
|
||||||
return 0
|
return 0
|
||||||
if(secret_force_mode != "secret")
|
if(secret_force_mode != "secret")
|
||||||
var/datum/game_mode/M = config.pick_mode(secret_force_mode)
|
var/datum/game_mode/M = config.pick_mode(secret_force_mode)
|
||||||
@@ -127,8 +128,8 @@ var/datum/roundinfo/roundinfo = new()
|
|||||||
if (potential_sleep_time > 10000)
|
if (potential_sleep_time > 10000)
|
||||||
potential_sleep_time -= 600
|
potential_sleep_time -= 600
|
||||||
|
|
||||||
sleep(potential_sleep_time)
|
sleep(potential_sleep_time)
|
||||||
SpawnEvent()
|
SpawnEvent()
|
||||||
|
|
||||||
//Start master_controller.process()
|
//Start master_controller.process()
|
||||||
spawn master_controller.process()
|
spawn master_controller.process()
|
||||||
@@ -138,6 +139,107 @@ var/datum/roundinfo/roundinfo = new()
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/controller/gameticker
|
/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()
|
proc/create_characters()
|
||||||
for(var/mob/new_player/player in world)
|
for(var/mob/new_player/player in world)
|
||||||
@@ -215,7 +317,7 @@ var/datum/roundinfo/roundinfo = new()
|
|||||||
if (aiPlayer.connected_robots.len)
|
if (aiPlayer.connected_robots.len)
|
||||||
var/robolist = "<b>The AI's loyal minions were:</b> "
|
var/robolist = "<b>The AI's loyal minions were:</b> "
|
||||||
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
|
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
|
||||||
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":", (Played by: [robo.key])"]"
|
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
|
||||||
world << "[robolist]"
|
world << "[robolist]"
|
||||||
|
|
||||||
for (var/mob/living/silicon/robot/robo in world)
|
for (var/mob/living/silicon/robot/robo in world)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
/datum/game_mode/malfunction
|
/datum/game_mode/malfunction
|
||||||
name = "AI malfunction"
|
name = "AI malfunction"
|
||||||
config_tag = "malfunction"
|
config_tag = "malfunction"
|
||||||
required_players = 1
|
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
recommended_enemies = 1
|
recommended_enemies = 1
|
||||||
|
|
||||||
@@ -188,14 +187,11 @@
|
|||||||
world << i
|
world << i
|
||||||
sleep(10)
|
sleep(10)
|
||||||
enter_allowed = 0
|
enter_allowed = 0
|
||||||
for(var/mob/M in world)
|
if(ticker)
|
||||||
if(M.client)
|
ticker.station_explosion_cinematic(0,null)
|
||||||
spawn(0)
|
if(ticker.mode)
|
||||||
M.client.station_explosion_cinematic()
|
ticker.mode:station_was_nuked = 1
|
||||||
sleep(110)
|
ticker.mode:explosion_in_progress = 0
|
||||||
ticker.mode:station_was_nuked = 1
|
|
||||||
ticker.mode:explosion_in_progress = 0
|
|
||||||
//world << "<B>Everyone was killed by the self-destruct!"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||||
var/const/meteordelay = 2000
|
var/const/meteordelay = 2000
|
||||||
var/nometeors = 1
|
var/nometeors = 1
|
||||||
required_players = 0
|
|
||||||
|
|
||||||
uplink_welcome = "EVIL METEOR Uplink Console:"
|
uplink_welcome = "EVIL METEOR Uplink Console:"
|
||||||
uplink_uses = 10
|
uplink_uses = 10
|
||||||
|
|||||||
@@ -234,6 +234,7 @@
|
|||||||
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack)
|
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack)
|
||||||
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
|
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
|
||||||
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt)
|
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt)
|
||||||
|
synd_mob.equip_if_possible(new /obj/item/weapon/storage/box/engineer(synd_mob.back), synd_mob.slot_in_backpack)
|
||||||
var/datum/organ/external/O = pick(synd_mob.organs)
|
var/datum/organ/external/O = pick(synd_mob.organs)
|
||||||
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(O)
|
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(O)
|
||||||
O.implant += E
|
O.implant += E
|
||||||
|
|||||||
@@ -151,7 +151,6 @@
|
|||||||
/obj/machinery/nuclearbomb/ex_act(severity)
|
/obj/machinery/nuclearbomb/ex_act(severity)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/nuclearbomb/blob_act()
|
/obj/machinery/nuclearbomb/blob_act()
|
||||||
if (src.timing == -1.0)
|
if (src.timing == -1.0)
|
||||||
return
|
return
|
||||||
@@ -160,6 +159,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
#define NUKERANGE 80
|
||||||
/obj/machinery/nuclearbomb/proc/explode()
|
/obj/machinery/nuclearbomb/proc/explode()
|
||||||
if (src.safety)
|
if (src.safety)
|
||||||
src.timing = 0
|
src.timing = 0
|
||||||
@@ -174,57 +174,43 @@
|
|||||||
ticker.mode.explosion_in_progress = 1
|
ticker.mode.explosion_in_progress = 1
|
||||||
sleep(100)
|
sleep(100)
|
||||||
|
|
||||||
/*
|
|
||||||
var/turf/ground_zero = get_turf(loc)
|
|
||||||
explosion(ground_zero, 50, 250, 500, 750)
|
|
||||||
|
|
||||||
*/
|
|
||||||
enter_allowed = 0
|
enter_allowed = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var/off_station = 0
|
var/off_station = 0
|
||||||
var/area/A = get_area(src.loc)
|
var/turf/bomb_location = get_turf(src)
|
||||||
if(A && (istype(A,/area/syndicate_station) || A.type == "/area"))
|
if( bomb_location && (bomb_location.z == 1) )
|
||||||
off_station = 1
|
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
|
||||||
if (ticker && ticker.mode && ticker.mode.name == "nuclear emergency")
|
off_station = 1
|
||||||
ticker.mode:herp = syndicate_station_at_station
|
else
|
||||||
ticker.mode:nuke_off_station = off_station
|
off_station = 2
|
||||||
|
|
||||||
for(var/mob/M in world)
|
if (ticker)
|
||||||
if(M.client)
|
if(ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||||
spawn(0)
|
ticker.mode:herp = syndicate_station_at_station
|
||||||
M.client.station_explosion_cinematic(off_station)
|
ticker.mode:nuke_off_station = off_station
|
||||||
sleep(110)
|
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.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
|
||||||
ticker.mode.explosion_in_progress = 0
|
//kinda shit but I couldn't get permission to do what I wanted to do.
|
||||||
if(ticker.mode.name == "nuclear emergency")
|
|
||||||
ticker.mode:nukes_left --
|
|
||||||
ticker.mode.station_was_nuked = (off_station==0)
|
|
||||||
|
|
||||||
else
|
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>The station was destoyed by the nuclear blast!</B>"
|
world << "<B>Resetting in 30 seconds!</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
|
feedback_set_details("end_error","nuke - unhandled ending")
|
||||||
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
|
|
||||||
|
|
||||||
|
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()
|
/obj/item/weapon/disk/nuclear/Del()
|
||||||
if(blobstart.len > 0)
|
if(blobstart.len > 0)
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
|
|
||||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||||
for(var/datum/mind/head_mind in heads)
|
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.owner = rev_mind
|
||||||
rev_obj.target = head_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]."
|
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()
|
/datum/game_mode/revolution/process()
|
||||||
checkwin_counter++
|
checkwin_counter++
|
||||||
if(checkwin_counter >= 20)
|
if(checkwin_counter >= 5)
|
||||||
if(!finished)
|
if(!finished)
|
||||||
ticker.mode.check_win()
|
ticker.mode.check_win()
|
||||||
checkwin_counter = 0
|
checkwin_counter = 0
|
||||||
@@ -370,7 +370,7 @@
|
|||||||
var/list/heads = get_all_heads()
|
var/list/heads = get_all_heads()
|
||||||
var/list/targets = new
|
var/list/targets = new
|
||||||
for (var/datum/mind/i in head_revolutionaries)
|
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
|
targets |= o.target
|
||||||
if (head_revolutionaries.len!=0 || \
|
if (head_revolutionaries.len!=0 || \
|
||||||
revolutionaries.len!=0 || \
|
revolutionaries.len!=0 || \
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
/datum/game_mode/sandbox
|
/datum/game_mode/sandbox
|
||||||
name = "sandbox"
|
name = "sandbox"
|
||||||
config_tag = "sandbox"
|
config_tag = "sandbox"
|
||||||
required_players = 0
|
|
||||||
votable = 0
|
votable = 0
|
||||||
|
|
||||||
uplink_welcome = "Syndicate Uplink Console:"
|
uplink_welcome = "Syndicate Uplink Console:"
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
config_tag = "traitor"
|
config_tag = "traitor"
|
||||||
restricted_jobs = list("Cyborg", "AI")//Approved by headmins for a week test, if you see this it would be nice if you didn't spread it everywhere
|
restricted_jobs = list("Cyborg", "AI")//Approved by headmins for a week test, if you see this it would be nice if you didn't spread it everywhere
|
||||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
|
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
|
||||||
required_players = 0
|
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
recommended_enemies = 4
|
recommended_enemies = 4
|
||||||
|
|
||||||
|
|||||||
@@ -19,20 +19,20 @@
|
|||||||
for(var/datum/objective/OBJ in H.mind.objectives)
|
for(var/datum/objective/OBJ in H.mind.objectives)
|
||||||
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||||
obj_count++
|
obj_count++
|
||||||
var/randomize = pick("taser","egun","laser","revolver","smg","decloner","deagle","gyrojet","pulse","silenced","cannon","shotgun","freeze","uzi","crossbow")
|
var/randomize = pick("taser","egun","laser","revolver","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","shotgun","mateba","uzi","crossbow")
|
||||||
switch (randomize)
|
switch (randomize)
|
||||||
if("taser")
|
if("taser")
|
||||||
new /obj/item/weapon/gun/energy/taser(get_turf(H))
|
new /obj/item/weapon/gun/energy/taser(get_turf(H))
|
||||||
if("egun")
|
if("egun")
|
||||||
new /obj/item/weapon/gun/energy(get_turf(H))
|
new /obj/item/weapon/gun/energy/gun(get_turf(H))
|
||||||
if("laser")
|
if("laser")
|
||||||
new /obj/item/weapon/gun/energy/laser(get_turf(H))
|
new /obj/item/weapon/gun/energy/laser(get_turf(H))
|
||||||
if("revolver")
|
if("revolver")
|
||||||
new /obj/item/weapon/gun/projectile(get_turf(H))
|
new /obj/item/weapon/gun/projectile(get_turf(H))
|
||||||
if("smg")
|
if("smg")
|
||||||
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
||||||
if("decloner")
|
if("nuclear")
|
||||||
new /obj/item/weapon/gun/energy/decloner(get_turf(H))
|
new /obj/item/weapon/gun/energy/gun/nuclear(get_turf(H))
|
||||||
if("deagle")
|
if("deagle")
|
||||||
new /obj/item/weapon/gun/projectile/deagle/camo(get_turf(H))
|
new /obj/item/weapon/gun/projectile/deagle/camo(get_turf(H))
|
||||||
if("gyrojet")
|
if("gyrojet")
|
||||||
@@ -44,9 +44,9 @@
|
|||||||
if("cannon")
|
if("cannon")
|
||||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||||
if("shotgun")
|
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")
|
if("mateba")
|
||||||
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
|
new /obj/item/weapon/gun/projectile/mateba(get_turf(H))
|
||||||
if("uzi")
|
if("uzi")
|
||||||
new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H))
|
new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H))
|
||||||
if("crossbow")
|
if("crossbow")
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
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.
|
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
|
||||||
return ..()
|
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>")
|
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>")
|
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
|
||||||
|
|
||||||
@@ -161,12 +163,21 @@
|
|||||||
var/mob/living/simple_animal/shade/A = locate() in C
|
var/mob/living/simple_animal/shade/A = locate() in C
|
||||||
if(A)
|
if(A)
|
||||||
var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
|
var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
|
||||||
var/mob/living/simple_animal/Z
|
|
||||||
switch(construct_class)
|
switch(construct_class)
|
||||||
if("Juggernaut")
|
if("Juggernaut")
|
||||||
Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc))
|
var/mob/living/simple_animal/constructarmoured/Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc))
|
||||||
if (A.client)
|
if (A.client)
|
||||||
A.client.mob = Z
|
A.client.mob = Z
|
||||||
|
Z.mind_initialize(Z)
|
||||||
|
if(iscultist(U))
|
||||||
|
if (ticker.mode.name == "cult")
|
||||||
|
ticker.mode:add_cultist(Z.mind)
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
|
else
|
||||||
|
ticker.mode.cult+=Z.mind
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
del(T)
|
del(T)
|
||||||
Z << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
|
Z << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
|
||||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||||
@@ -175,9 +186,19 @@
|
|||||||
del(C)
|
del(C)
|
||||||
|
|
||||||
if("Wraith")
|
if("Wraith")
|
||||||
Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc))
|
var/mob/living/simple_animal/constructwraith/Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc))
|
||||||
if (A.client)
|
if (A.client)
|
||||||
A.client.mob = Z
|
A.client.mob = Z
|
||||||
|
Z.mind_initialize(Z)
|
||||||
|
if(iscultist(U))
|
||||||
|
if (ticker.mode.name == "cult")
|
||||||
|
ticker.mode:add_cultist(Z.mind)
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
|
else
|
||||||
|
ticker.mode.cult+=Z.mind
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
del(T)
|
del(T)
|
||||||
Z << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
|
Z << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
|
||||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||||
@@ -186,9 +207,19 @@
|
|||||||
del(C)
|
del(C)
|
||||||
|
|
||||||
if("Artificer")
|
if("Artificer")
|
||||||
Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc))
|
var/mob/living/simple_animal/constructbuilder/Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc))
|
||||||
if (A.client)
|
if (A.client)
|
||||||
A.client.mob = Z
|
A.client.mob = Z
|
||||||
|
Z.mind_initialize(Z)
|
||||||
|
if(iscultist(U))
|
||||||
|
if (ticker.mode.name == "cult")
|
||||||
|
ticker.mode:add_cultist(Z.mind)
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
|
else
|
||||||
|
ticker.mode.cult+=Z.mind
|
||||||
|
Z.mind.special_role = "Cultist"
|
||||||
|
ticker.mode.update_cult_icons_added(Z.mind)
|
||||||
del(T)
|
del(T)
|
||||||
Z << "<B>You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs</B>"
|
Z << "<B>You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs</B>"
|
||||||
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
/datum/game_mode/wizard
|
/datum/game_mode/wizard
|
||||||
name = "wizard"
|
name = "wizard"
|
||||||
config_tag = "wizard"
|
config_tag = "wizard"
|
||||||
required_players = 0
|
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
recommended_enemies = 1
|
recommended_enemies = 1
|
||||||
|
|
||||||
|
|||||||
@@ -238,13 +238,12 @@
|
|||||||
access_heads, access_ai_upload, access_construction, access_robotics,
|
access_heads, access_ai_upload, access_construction, access_robotics,
|
||||||
access_mint, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
|
access_mint, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
|
||||||
if("Research Director")
|
if("Research Director")
|
||||||
return list(access_medlab, access_rd,
|
return list(access_rd, access_heads, access_tox,
|
||||||
access_heads, access_tox,
|
access_tox_storage, access_teleporter, access_medlab,
|
||||||
access_tox_storage, access_chemistry, access_teleporter,
|
access_research, access_robotics, access_xenobiology,
|
||||||
access_research, access_robotics, access_xenobiology, access_RC_announce,
|
access_RC_announce, access_keycard_auth, access_tcomsat)
|
||||||
access_keycard_auth, access_tcomsat)
|
// if("Virologist")
|
||||||
/*if("Virologist")
|
// return list(access_medical, access_morgue, access_virology)
|
||||||
return list(access_medical, access_morgue, access_virology)*/
|
|
||||||
if("Chief Medical Officer")
|
if("Chief Medical Officer")
|
||||||
return list(access_medical, access_morgue, access_medlab, access_heads,
|
return list(access_medical, access_morgue, access_medlab, access_heads,
|
||||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||||
@@ -299,17 +298,17 @@
|
|||||||
if(1) //security
|
if(1) //security
|
||||||
return list(access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
|
return list(access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
|
||||||
if(2) //medbay
|
if(2) //medbay
|
||||||
return list(access_medical, access_medlab, access_morgue, access_chemistry, access_virology, access_cmo, access_surgery)
|
return list(access_medical, access_medlab, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo)
|
||||||
if(3) //research
|
if(3) //research
|
||||||
return list(access_tox, access_tox_storage, access_rd, access_hydroponics, access_research, access_xenobiology)
|
return list(access_research, access_tox, access_tox_storage, access_xenobiology, access_rd)
|
||||||
if(4) //engineering and maintenance
|
if(4) //engineering and maintenance
|
||||||
return list(access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce)
|
return list(access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce)
|
||||||
if(5) //command
|
if(5) //command
|
||||||
return list(access_change_ids, access_ai_upload, access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers, access_mint_vault, access_heads_vault, access_hop, access_RC_announce, access_keycard_auth, access_tcomsat)
|
return list(access_heads, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_all_personal_lockers, access_heads_vault, access_RC_announce, access_keycard_auth, access_tcomsat, access_hop, access_captain)
|
||||||
if(6) //station general
|
if(6) //station general
|
||||||
return list(access_chapel_office, access_kitchen,access_bar, access_janitor, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
|
return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
|
||||||
if(7) //supply
|
if(7) //supply
|
||||||
return list(access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mailsorting, access_mint)
|
return list(access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_mining, access_mining_station)
|
||||||
|
|
||||||
/proc/get_region_accesses_name(var/code)
|
/proc/get_region_accesses_name(var/code)
|
||||||
switch(code)
|
switch(code)
|
||||||
@@ -340,29 +339,29 @@
|
|||||||
if(access_security)
|
if(access_security)
|
||||||
return "Security"
|
return "Security"
|
||||||
if(access_brig)
|
if(access_brig)
|
||||||
return "Brig"
|
return "Brig Cells"
|
||||||
if(access_court)
|
if(access_court)
|
||||||
return "Courtroom"
|
return "Courtroom"
|
||||||
if(access_forensics_lockers)
|
if(access_forensics_lockers)
|
||||||
return "Forensics"
|
return "Detective's Office"
|
||||||
if(access_medical)
|
if(access_medical)
|
||||||
return "Medical"
|
return "Medical"
|
||||||
if(access_medlab)
|
if(access_medlab)
|
||||||
return "Med-Sci"
|
return "Genetics Lab"
|
||||||
if(access_morgue)
|
if(access_morgue)
|
||||||
return "Morgue"
|
return "Morgue"
|
||||||
if(access_tox)
|
if(access_tox)
|
||||||
return "Toxins Research"
|
return "Research Lab"
|
||||||
if(access_tox_storage)
|
if(access_tox_storage)
|
||||||
return "Toxins Storage"
|
return "Toxins Storage"
|
||||||
if(access_chemistry)
|
if(access_chemistry)
|
||||||
return "Toxins Chemical Lab"
|
return "Chemistry Lab"
|
||||||
if(access_rd)
|
if(access_rd)
|
||||||
return "RD Private"
|
return "RD Private"
|
||||||
if(access_bar)
|
if(access_bar)
|
||||||
return "Bar"
|
return "Bar"
|
||||||
if(access_janitor)
|
if(access_janitor)
|
||||||
return "Janitorial Equipment"
|
return "Custodial Closet"
|
||||||
if(access_engine)
|
if(access_engine)
|
||||||
return "Engineering"
|
return "Engineering"
|
||||||
if(access_engine_equip)
|
if(access_engine_equip)
|
||||||
@@ -370,7 +369,7 @@
|
|||||||
if(access_maint_tunnels)
|
if(access_maint_tunnels)
|
||||||
return "Maintenance"
|
return "Maintenance"
|
||||||
if(access_external_airlocks)
|
if(access_external_airlocks)
|
||||||
return "External Airlock"
|
return "External Airlocks"
|
||||||
if(access_emergency_storage)
|
if(access_emergency_storage)
|
||||||
return "Emergency Storage"
|
return "Emergency Storage"
|
||||||
if(access_change_ids)
|
if(access_change_ids)
|
||||||
@@ -382,11 +381,11 @@
|
|||||||
if(access_eva)
|
if(access_eva)
|
||||||
return "EVA"
|
return "EVA"
|
||||||
if(access_heads)
|
if(access_heads)
|
||||||
return "Head's Quarters/Bridge"
|
return "Bridge"
|
||||||
if(access_captain)
|
if(access_captain)
|
||||||
return "Captain's Quarters"
|
return "Captain's Quarters"
|
||||||
if(access_all_personal_lockers)
|
if(access_all_personal_lockers)
|
||||||
return "Personal Locker"
|
return "Personal Lockers"
|
||||||
if(access_chapel_office)
|
if(access_chapel_office)
|
||||||
return "Chapel Office"
|
return "Chapel Office"
|
||||||
if(access_tech_storage)
|
if(access_tech_storage)
|
||||||
@@ -398,7 +397,7 @@
|
|||||||
if(access_armory)
|
if(access_armory)
|
||||||
return "Armory"
|
return "Armory"
|
||||||
if(access_construction)
|
if(access_construction)
|
||||||
return "Construction Site"
|
return "Construction Areas"
|
||||||
if(access_kitchen)
|
if(access_kitchen)
|
||||||
return "Kitchen"
|
return "Kitchen"
|
||||||
if(access_hydroponics)
|
if(access_hydroponics)
|
||||||
@@ -440,9 +439,9 @@
|
|||||||
if(access_heads_vault)
|
if(access_heads_vault)
|
||||||
return "Main Vault"
|
return "Main Vault"
|
||||||
if(access_mining_station)
|
if(access_mining_station)
|
||||||
return "Mining Station"
|
return "Mining Station EVA"
|
||||||
if(access_xenobiology)
|
if(access_xenobiology)
|
||||||
return "Xenobiology"
|
return "Xenobiology Lab"
|
||||||
if(access_hop)
|
if(access_hop)
|
||||||
return "HoP Private"
|
return "HoP Private"
|
||||||
if(access_hos)
|
if(access_hos)
|
||||||
@@ -450,11 +449,11 @@
|
|||||||
if(access_ce)
|
if(access_ce)
|
||||||
return "CE Private"
|
return "CE Private"
|
||||||
if(access_RC_announce)
|
if(access_RC_announce)
|
||||||
return "RC announcements"
|
return "RC Announcements"
|
||||||
if(access_keycard_auth)
|
if(access_keycard_auth)
|
||||||
return "Keycode auth. device"
|
return "Keycode Auth. Device"
|
||||||
if(access_tcomsat)
|
if(access_tcomsat)
|
||||||
return "Telecommunications Satellite"
|
return "Telecoms Satellite"
|
||||||
|
|
||||||
/proc/get_centcom_access_desc(A)
|
/proc/get_centcom_access_desc(A)
|
||||||
switch(A)
|
switch(A)
|
||||||
@@ -478,10 +477,10 @@
|
|||||||
return "Code Gold"
|
return "Code Gold"
|
||||||
|
|
||||||
/proc/get_all_jobs()
|
/proc/get_all_jobs()
|
||||||
return list("Assistant", "Station Engineer", "Shaft Miner", "Detective", "Medical Doctor", "Captain", "Security Officer", "Warden",
|
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician",
|
||||||
"Geneticist", "Scientist", "Head of Security", "Head of Personnel", "Atmospheric Technician",
|
"Shaft Miner", "Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
|
||||||
"Chaplain", "Bartender", "Chemist", "Janitor", "Chef", "Roboticist", "Quartermaster",
|
"Atmospheric Technician", "Roboticist", "Chief Medical Officer", "Medical Doctor", "Geneticist",
|
||||||
"Chief Engineer", "Research Director", "Botanist", "Librarian", "Lawyer", "Virologist", "Cargo Technician", "Chief Medical Officer")
|
"Research Director", "Scientist", "Chemist", "Head of Security", "Warden", "Detective", "Security Officer")
|
||||||
|
|
||||||
/proc/get_all_centcom_jobs()
|
/proc/get_all_centcom_jobs()
|
||||||
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
|
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "Nanotrasen officials and Space law"
|
supervisors = "Nanotrasen officials and Space law"
|
||||||
selection_color = "#ccccff"
|
selection_color = "#ccccff"
|
||||||
|
idtype = /obj/item/weapon/card/id/gold
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the captain"
|
supervisors = "the captain"
|
||||||
selection_color = "#ddddff"
|
selection_color = "#ddddff"
|
||||||
|
idtype = /obj/item/weapon/card/id/silver
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
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/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/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/analyzer/plant_analyzer(H), H.slot_s_store)
|
||||||
|
H.equip_if_possible(new /obj/item/device/pda/botanist(H), H.slot_belt)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
@@ -266,6 +267,7 @@
|
|||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
if(!H) return 0
|
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/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/clothing/shoes/black(H), H.slot_shoes)
|
||||||
H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store)
|
H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -145,6 +145,7 @@
|
|||||||
ticker.Bible_icon_state = B.icon_state
|
ticker.Bible_icon_state = B.icon_state
|
||||||
ticker.Bible_item_state = B.item_state
|
ticker.Bible_item_state = B.item_state
|
||||||
ticker.Bible_name = B.name
|
ticker.Bible_name = B.name
|
||||||
|
ticker.Bible_deity_name = B.deity_name
|
||||||
// feedback_set_details("religion_deity","[new_deity]")
|
// feedback_set_details("religion_deity","[new_deity]")
|
||||||
// feedback_set_details("religion_book","[new_book_style]")
|
// feedback_set_details("religion_book","[new_book_style]")
|
||||||
return 1
|
return 1
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the captain"
|
supervisors = "the captain"
|
||||||
selection_color = "#ffeeaa"
|
selection_color = "#ffeeaa"
|
||||||
|
idtype = /obj/item/weapon/card/id/silver
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
|
|||||||
@@ -25,6 +25,9 @@
|
|||||||
//Sellection screen color
|
//Sellection screen color
|
||||||
var/selection_color = "#ffffff"
|
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
|
//List of alternate titles, if any
|
||||||
var/list/alt_titles
|
var/list/alt_titles
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the captain"
|
supervisors = "the captain"
|
||||||
selection_color = "#ffddf0"
|
selection_color = "#ffddf0"
|
||||||
|
idtype = /obj/item/weapon/card/id/silver
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
@@ -59,6 +60,32 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete
|
||||||
|
/datum/job/chemist
|
||||||
|
title = "Chemist"
|
||||||
|
flag = CHEMIST
|
||||||
|
department_flag = MEDSCI
|
||||||
|
faction = "Station"
|
||||||
|
total_positions = 1
|
||||||
|
spawn_positions = 1
|
||||||
|
supervisors = "the chief medical officer"
|
||||||
|
selection_color = "#ffeef0"
|
||||||
|
|
||||||
|
|
||||||
|
equip(var/mob/living/carbon/human/H)
|
||||||
|
if(!H) return 0
|
||||||
|
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||||
|
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
|
||||||
|
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
|
||||||
|
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
|
||||||
|
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
|
||||||
|
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
||||||
|
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
|
||||||
|
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/datum/job/geneticist
|
/datum/job/geneticist
|
||||||
title = "Geneticist"
|
title = "Geneticist"
|
||||||
flag = GENETICIST
|
flag = GENETICIST
|
||||||
@@ -66,7 +93,7 @@
|
|||||||
faction = "Station"
|
faction = "Station"
|
||||||
total_positions = 1
|
total_positions = 1
|
||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the chief medical officer and research director"
|
supervisors = "the chief medical officer"
|
||||||
selection_color = "#ffeef0"
|
selection_color = "#ffeef0"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the captain"
|
supervisors = "the captain"
|
||||||
selection_color = "#ffddff"
|
selection_color = "#ffddff"
|
||||||
|
idtype = /obj/item/weapon/card/id/silver
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
@@ -45,29 +46,4 @@
|
|||||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/science(H), H.slot_wear_suit)
|
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/science(H), H.slot_wear_suit)
|
||||||
H.equip_if_possible(new /obj/item/clothing/mask/gas(H), H.slot_wear_mask)
|
H.equip_if_possible(new /obj/item/clothing/mask/gas(H), H.slot_wear_mask)
|
||||||
H.equip_if_possible(new /obj/item/weapon/tank/oxygen(H), H.slot_l_hand)
|
H.equip_if_possible(new /obj/item/weapon/tank/oxygen(H), H.slot_l_hand)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
//Chemist is a medical job damnit
|
|
||||||
/datum/job/chemist
|
|
||||||
title = "Chemist"
|
|
||||||
flag = CHEMIST
|
|
||||||
department_flag = MEDSCI
|
|
||||||
faction = "Station"
|
|
||||||
total_positions = 1
|
|
||||||
spawn_positions = 1
|
|
||||||
supervisors = "the chief medical officer and the research director"
|
|
||||||
selection_color = "#ffeeff"
|
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
|
||||||
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
|
|
||||||
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
|
|
||||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
|
|
||||||
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
|
|
||||||
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
|
||||||
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
|
|
||||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
|
|
||||||
return 1
|
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the captain"
|
supervisors = "the captain"
|
||||||
selection_color = "#ffdddd"
|
selection_color = "#ffdddd"
|
||||||
|
idtype = /obj/item/weapon/card/id/silver
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
|
|||||||
@@ -285,13 +285,20 @@ var/global/datum/controller/occupations/job_master
|
|||||||
if(!H) return 0
|
if(!H) return 0
|
||||||
if(!title) title = rank
|
if(!title) title = rank
|
||||||
var/obj/item/weapon/card/id/C = null
|
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
|
return
|
||||||
if("Captain")
|
|
||||||
C = new /obj/item/weapon/card/id/gold(H)
|
|
||||||
else
|
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)
|
if(C)
|
||||||
C.registered_name = H.real_name
|
C.registered_name = H.real_name
|
||||||
C.assignment = title
|
C.assignment = title
|
||||||
|
|||||||
@@ -88,8 +88,9 @@ obj/mapinfo
|
|||||||
var/decks = 4
|
var/decks = 4
|
||||||
proc/GetMapInfo()
|
proc/GetMapInfo()
|
||||||
var/obj/mapinfo/M = locate()
|
var/obj/mapinfo/M = locate()
|
||||||
world << M.name
|
// Just removing these to try and fix the occasional JSON -> WORLD issue.
|
||||||
world << M.mapname
|
// world << M.name
|
||||||
|
// world << M.mapname
|
||||||
client/proc/ChangeMap(var/X as text)
|
client/proc/ChangeMap(var/X as text)
|
||||||
set name = "Change Map"
|
set name = "Change Map"
|
||||||
set category = "Admin"
|
set category = "Admin"
|
||||||
|
|||||||
@@ -13,131 +13,135 @@
|
|||||||
var/updatesicon = 1
|
var/updatesicon = 1
|
||||||
|
|
||||||
var/obj/machinery/computer/operating/computer = null
|
var/obj/machinery/computer/operating/computer = null
|
||||||
var/id = 0.0
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/optable/New()
|
||||||
..()
|
..()
|
||||||
if(!isnull(id))
|
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||||
for(var/obj/machinery/computer/operating/O in world)
|
computer = locate(/obj/machinery/computer/operating, get_step(src, dir))
|
||||||
if(src.id == O.id)
|
if (!isnull(computer))
|
||||||
src.computer = O
|
break
|
||||||
|
spawn(100)
|
||||||
|
process()
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/optable/ex_act(severity)
|
||||||
switch(severity)
|
|
||||||
if(1.0)
|
switch(severity)
|
||||||
|
if(1.0)
|
||||||
|
//SN src = null
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if(2.0)
|
||||||
|
if (prob(50))
|
||||||
//SN src = null
|
//SN src = null
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(2.0)
|
if(3.0)
|
||||||
if (prob(50))
|
if (prob(25))
|
||||||
//SN src = null
|
src.density = 0
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
if(3.0)
|
|
||||||
if (prob(25))
|
|
||||||
src.density = 0
|
|
||||||
else
|
|
||||||
return
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
if(prob(75))
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
hand_p(mob/user as mob)
|
|
||||||
return src.attack_paw(user)
|
|
||||||
return
|
|
||||||
|
|
||||||
attack_paw(mob/user as mob)
|
|
||||||
if ((usr.mutations & HULK))
|
|
||||||
usr << text("\blue You destroy the operating table.")
|
|
||||||
for(var/mob/O in oviewers())
|
|
||||||
if ((O.client && !( O.blinded )))
|
|
||||||
O << text("\red [usr] destroys the operating table.")
|
|
||||||
src.density = 0
|
|
||||||
del(src)
|
|
||||||
if (!( locate(/obj/machinery/optable, user.loc) ))
|
|
||||||
step(user, get_dir(user, src))
|
|
||||||
if (user.loc == src.loc)
|
|
||||||
user.layer = TURF_LAYER
|
|
||||||
for(var/mob/M in viewers(user, null))
|
|
||||||
M.show_message("The monkey hides under the table!", 1)
|
|
||||||
//Foreach goto(69)
|
|
||||||
return
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
|
||||||
if ((usr.mutations & HULK))
|
|
||||||
usr << text("\blue You destroy the table.")
|
|
||||||
for(var/mob/O in oviewers())
|
|
||||||
if ((O.client && !( O.blinded )))
|
|
||||||
O << text("\red [usr] destroys the table.")
|
|
||||||
src.density = 0
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
||||||
if(air_group || (height==0)) return 1
|
|
||||||
|
|
||||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
|
||||||
return 1
|
|
||||||
else
|
else
|
||||||
return 0
|
return
|
||||||
|
|
||||||
MouseDrop_T(obj/O as obj, mob/user as mob)
|
/obj/machinery/optable/blob_act()
|
||||||
if(isrobot(user))
|
if(prob(75))
|
||||||
return
|
del(src)
|
||||||
if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O))
|
|
||||||
return
|
|
||||||
user.drop_item()
|
|
||||||
if (O.loc != src.loc)
|
|
||||||
step(O, get_dir(O, src))
|
|
||||||
return
|
|
||||||
|
|
||||||
proc/check_victim()
|
/obj/machinery/optable/hand_p(mob/user as mob)
|
||||||
if(locate(/mob/living/carbon, src.loc))
|
|
||||||
var/mob/M = locate(/mob/living/carbon, src.loc)
|
return src.attack_paw(user)
|
||||||
if(M.resting)
|
return
|
||||||
victim = M
|
|
||||||
if(updatesicon)
|
/obj/machinery/optable/attack_paw(mob/user as mob)
|
||||||
icon_state = "table2-active"
|
if ((usr.mutations & HULK))
|
||||||
return 1
|
usr << text("\blue You destroy the operating table.")
|
||||||
if(victim)
|
for(var/mob/O in oviewers())
|
||||||
victim.update_clothing()
|
if ((O.client && !( O.blinded )))
|
||||||
victim = null
|
O << text("\red [usr] destroys the operating table.")
|
||||||
if(updatesicon)
|
src.density = 0
|
||||||
icon_state = "table2-idle"
|
del(src)
|
||||||
processing_objects.Remove(src)
|
if (!( locate(/obj/machinery/optable, user.loc) ))
|
||||||
|
step(user, get_dir(user, src))
|
||||||
|
if (user.loc == src.loc)
|
||||||
|
user.layer = TURF_LAYER
|
||||||
|
for(var/mob/M in viewers(user, null))
|
||||||
|
M.show_message("The monkey hides under the table!", 1)
|
||||||
|
//Foreach goto(69)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/optable/attack_hand(mob/user as mob)
|
||||||
|
if ((usr.mutations & HULK))
|
||||||
|
usr << text("\blue You destroy the table.")
|
||||||
|
for(var/mob/O in oviewers())
|
||||||
|
if ((O.client && !( O.blinded )))
|
||||||
|
O << text("\red [usr] destroys the table.")
|
||||||
|
src.density = 0
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||||
|
if(air_group || (height==0)) return 1
|
||||||
|
|
||||||
|
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||||
|
return 1
|
||||||
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
process()
|
|
||||||
check_victim()
|
|
||||||
|
|
||||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/machinery/optable/MouseDrop_T(obj/O as obj, mob/user as mob)
|
||||||
if(isrobot(user))
|
if(isrobot(user))
|
||||||
return
|
|
||||||
if (istype(W, /obj/item/weapon/grab))
|
|
||||||
if(ismob(W:affecting))
|
|
||||||
var/mob/M = W:affecting
|
|
||||||
if (M.client)
|
|
||||||
M.client.perspective = EYE_PERSPECTIVE
|
|
||||||
M.client.eye = src
|
|
||||||
M.resting = 1
|
|
||||||
M.loc = src.loc
|
|
||||||
for (var/mob/C in viewers(src))
|
|
||||||
C.show_message("\red [M] has been laid on the operating table by [user].", 3)
|
|
||||||
for(var/obj/O in src)
|
|
||||||
O.loc = src.loc
|
|
||||||
src.add_fingerprint(user)
|
|
||||||
if(updatesicon)
|
|
||||||
icon_state = "table2-active"
|
|
||||||
src.victim = M
|
|
||||||
M.update_clothing()
|
|
||||||
processing_objects.Add(src)
|
|
||||||
del(W)
|
|
||||||
return
|
|
||||||
user.drop_item()
|
|
||||||
if(W && W.loc)
|
|
||||||
W.loc = src.loc
|
|
||||||
return
|
return
|
||||||
|
if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O))
|
||||||
|
return
|
||||||
|
user.drop_item()
|
||||||
|
if (O.loc != src.loc)
|
||||||
|
step(O, get_dir(O, src))
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/optable/proc/check_victim()
|
||||||
|
if(locate(/mob/living/carbon, src.loc))
|
||||||
|
var/mob/M = locate(/mob/living/carbon, src.loc)
|
||||||
|
if(M.resting)
|
||||||
|
victim = M
|
||||||
|
if(updatesicon)
|
||||||
|
icon_state = "table2-active"
|
||||||
|
return 1
|
||||||
|
if(victim)
|
||||||
|
victim.update_clothing()
|
||||||
|
victim = null
|
||||||
|
if(updatesicon)
|
||||||
|
icon_state = "table2-idle"
|
||||||
|
processing_objects.Remove(src)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/machinery/optable/process()
|
||||||
|
check_victim()
|
||||||
|
|
||||||
|
/obj/machinery/optable/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(isrobot(user))
|
||||||
|
return
|
||||||
|
if (istype(W, /obj/item/weapon/grab))
|
||||||
|
if(ismob(W:affecting))
|
||||||
|
var/mob/M = W:affecting
|
||||||
|
if (M.client)
|
||||||
|
M.client.perspective = EYE_PERSPECTIVE
|
||||||
|
M.client.eye = src
|
||||||
|
M.resting = 1
|
||||||
|
M.loc = src.loc
|
||||||
|
for (var/mob/C in viewers(src))
|
||||||
|
C.show_message("\red [M] has been laid on the operating table by [user].", 3)
|
||||||
|
for(var/obj/O in src)
|
||||||
|
O.loc = src.loc
|
||||||
|
src.add_fingerprint(user)
|
||||||
|
if(updatesicon)
|
||||||
|
icon_state = "table2-active"
|
||||||
|
src.victim = M
|
||||||
|
M.update_clothing()
|
||||||
|
processing_objects.Add(src)
|
||||||
|
del(W)
|
||||||
|
return
|
||||||
|
user.drop_item()
|
||||||
|
if(W && W.loc)
|
||||||
|
W.loc = src.loc
|
||||||
|
return
|
||||||
|
|
||||||
/obj/machinery/optable/portable
|
/obj/machinery/optable/portable
|
||||||
name = "mobile operating table"
|
name = "mobile operating table"
|
||||||
@@ -146,7 +150,6 @@
|
|||||||
icon_state = "up"
|
icon_state = "up"
|
||||||
density = 1
|
density = 1
|
||||||
anchored = 0
|
anchored = 0
|
||||||
id = null
|
|
||||||
updatesicon = 0
|
updatesicon = 0
|
||||||
|
|
||||||
New()
|
New()
|
||||||
|
|||||||
@@ -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-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("[]\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("<HR>Paralysis Summary %: [] ([] seconds left!)<BR>", occupant.paralysis, round(occupant.paralysis / 4))
|
||||||
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
if(occupant.reagents)
|
||||||
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
||||||
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("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
||||||
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("[]\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("[]\tDexalin: [] units<BR>", (occupant.reagents.get_reagent_amount("dexalin") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dexalin"))
|
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)
|
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
|
else
|
||||||
dat += "The sleeper is empty."
|
dat += "The sleeper is empty."
|
||||||
|
|||||||
@@ -1191,8 +1191,17 @@ table tr:first-child th:first-child { border: none;}
|
|||||||
A = A.loc
|
A = A.loc
|
||||||
if (!( istype(A, /area) ))
|
if (!( istype(A, /area) ))
|
||||||
return
|
return
|
||||||
for(var/area/RA in A.related)
|
if(network)
|
||||||
RA.firereset()
|
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
|
return
|
||||||
|
|
||||||
/obj/machinery/firealarm/proc/alarm()
|
/obj/machinery/firealarm/proc/alarm()
|
||||||
@@ -1202,8 +1211,17 @@ table tr:first-child th:first-child { border: none;}
|
|||||||
A = A.loc
|
A = A.loc
|
||||||
if (!( istype(A, /area) ))
|
if (!( istype(A, /area) ))
|
||||||
return
|
return
|
||||||
for(var/area/RA in A.related)
|
if(network)
|
||||||
RA.firealert()
|
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)
|
//playsound(src.loc, 'signal.ogg', 75, 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -39,31 +39,4 @@
|
|||||||
var/area/A2 = T2.loc
|
var/area/A2 = T2.loc
|
||||||
if ( istype(A2) && A2.master && A2.master == A )
|
if ( istype(A2) && A2.master && A2.master == A )
|
||||||
SCRUBBER.on = scrubber_state
|
SCRUBBER.on = scrubber_state
|
||||||
SCRUBBER.update_icon()
|
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."
|
|
||||||
|
|
||||||
@@ -171,6 +171,20 @@
|
|||||||
src.health -= W.force
|
src.health -= W.force
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
healthcheck()
|
healthcheck()
|
||||||
|
|
||||||
|
if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/weapon/tank/jetpack))
|
||||||
|
var/datum/gas_mixture/thejetpack = W:air_contents
|
||||||
|
var/env_pressure = thejetpack.return_pressure()
|
||||||
|
var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2)
|
||||||
|
//Can not have a pressure delta that would cause environment pressure > tank pressure
|
||||||
|
var/transfer_moles = 0
|
||||||
|
if((air_contents.temperature > 0) && (pressure_delta > 0))
|
||||||
|
transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas
|
||||||
|
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||||
|
thejetpack.merge(removed)
|
||||||
|
user << "You pulse-pressurize your jetpack from the tank."
|
||||||
|
return
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob)
|
/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob)
|
||||||
|
|||||||
@@ -262,19 +262,17 @@ var/global/list/autolathe_recipes_hidden = list( \
|
|||||||
restart:
|
restart:
|
||||||
if(outputAmount > 0)
|
if(outputAmount > 0)
|
||||||
if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier)
|
if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier)
|
||||||
busy = 1
|
|
||||||
use_power(power)
|
use_power(power)
|
||||||
icon_state = "autolathe"
|
icon_state = "autolathe"
|
||||||
flick("autolathe_n",src)
|
flick("autolathe_n",src)
|
||||||
spawn(16)
|
spawn(16)
|
||||||
|
|
||||||
if(!busy)
|
if(!busy)
|
||||||
busy = 1
|
busy = 1
|
||||||
use_power(power)
|
use_power(power)
|
||||||
spawn(16)
|
spawn(16)
|
||||||
use_power(power)
|
use_power(power)
|
||||||
spawn(16)
|
spawn(16)
|
||||||
flick("autolathe_n",src)
|
|
||||||
src.m_amount -= template.m_amt*multiplier
|
src.m_amount -= template.m_amt*multiplier
|
||||||
src.g_amount -= template.g_amt*multiplier
|
src.g_amount -= template.g_amt*multiplier
|
||||||
if(src.m_amount < 0)
|
if(src.m_amount < 0)
|
||||||
|
|||||||
@@ -792,15 +792,6 @@
|
|||||||
src.visible_message("\red [src] drives over [H]!")
|
src.visible_message("\red [src] drives over [H]!")
|
||||||
playsound(src.loc, 'splat.ogg', 50, 1)
|
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)
|
var/damage = rand(5,15)
|
||||||
H.apply_damage(2*damage, BRUTE, "head")
|
H.apply_damage(2*damage, BRUTE, "head")
|
||||||
H.apply_damage(2*damage, BRUTE, "chest")
|
H.apply_damage(2*damage, BRUTE, "chest")
|
||||||
@@ -810,7 +801,7 @@
|
|||||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||||
|
|
||||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||||
B.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
B.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
|
||||||
|
|
||||||
bloodiness += 4
|
bloodiness += 4
|
||||||
|
|
||||||
@@ -933,7 +924,7 @@
|
|||||||
var/list/kv = list(
|
var/list/kv = list(
|
||||||
"type" = "mulebot",
|
"type" = "mulebot",
|
||||||
"name" = suffix,
|
"name" = suffix,
|
||||||
"loca" = loc.loc, // area
|
"loca" = (loc ? loc.loc : "Unknown"), // somehow loc can be null and cause a runtime - Quarxink
|
||||||
"mode" = mode,
|
"mode" = mode,
|
||||||
"powr" = (cell ? cell.percent() : 0),
|
"powr" = (cell ? cell.percent() : 0),
|
||||||
"dest" = destination,
|
"dest" = destination,
|
||||||
|
|||||||
@@ -137,33 +137,38 @@
|
|||||||
var/obj/machinery/camera/C = usr:current
|
var/obj/machinery/camera/C = usr:current
|
||||||
if ((C && istype(C, /obj/machinery/camera)) || C==null)
|
if ((C && istype(C, /obj/machinery/camera)) || C==null)
|
||||||
|
|
||||||
var/closestDist = -1
|
if(isrobot(target))
|
||||||
if (C!=null)
|
C = target:camera
|
||||||
if (C.status)
|
usr:current = C
|
||||||
closestDist = get_dist(C, target)
|
usr.reset_view(C)
|
||||||
//usr << text("Dist = [] for camera []", closestDist, C.name)
|
else
|
||||||
var/zmatched = 0
|
var/closestDist = -1
|
||||||
if (closestDist > 7 || closestDist == -1)
|
if (C!=null)
|
||||||
//check other cameras
|
if (C.status)
|
||||||
var/obj/machinery/camera/closest = C
|
closestDist = get_dist(C, target)
|
||||||
for(var/obj/machinery/camera/C2 in world)
|
//usr << text("Dist = [] for camera []", closestDist, C.name)
|
||||||
if (C2.network in src.networks)
|
var/zmatched = 0
|
||||||
if (C2.z == target.z)
|
if (closestDist > 7 || closestDist == -1)
|
||||||
zmatched = 1
|
//check other cameras
|
||||||
if (C2.status)
|
var/obj/machinery/camera/closest = C
|
||||||
var/dist = get_dist(C2, target)
|
for(var/obj/machinery/camera/C2 in world)
|
||||||
if ((dist < closestDist) || (closestDist == -1))
|
if (C2.network == src.networks)
|
||||||
closestDist = dist
|
if (C2.z == target.z)
|
||||||
closest = C2
|
zmatched = 1
|
||||||
//usr << text("Closest camera dist = [], for camera []", closestDist, closest.area.name)
|
if (C2.status)
|
||||||
|
var/dist = get_dist(C2, target)
|
||||||
|
if ((dist < closestDist) || (closestDist == -1))
|
||||||
|
closestDist = dist
|
||||||
|
closest = C2
|
||||||
|
//usr << text("Closest camera dist = [], for camera []", closestDist, closest.area.name)
|
||||||
|
|
||||||
if (closest != C)
|
if (closest != C)
|
||||||
usr:current = closest
|
usr:current = closest
|
||||||
usr.reset_view(closest)
|
usr.reset_view(closest)
|
||||||
//use_power(50)
|
//use_power(50)
|
||||||
if (zmatched == 0)
|
if (zmatched == 0)
|
||||||
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
||||||
sleep(40) //because we're sleeping another second after this (a few lines down)
|
sleep(40) //because we're sleeping another second after this (a few lines down)
|
||||||
else
|
else
|
||||||
usr << "Follow camera mode ended."
|
usr << "Follow camera mode ended."
|
||||||
usr:cameraFollow = null
|
usr:cameraFollow = null
|
||||||
|
|||||||
@@ -149,9 +149,9 @@
|
|||||||
|
|
||||||
if(clonename)
|
if(clonename)
|
||||||
src.occupant.real_name = clonename
|
src.occupant.real_name = clonename
|
||||||
|
src.occupant.original_name = clonename //we don't want random ghost names should we die again.
|
||||||
else
|
else
|
||||||
src.occupant.real_name = "clone" //No null names!!
|
src.occupant.real_name = "clone" //No null names!!
|
||||||
src.occupant.original_name = original_name
|
|
||||||
|
|
||||||
|
|
||||||
var/datum/mind/clonemind = (locate(mindref) in ticker.minds)
|
var/datum/mind/clonemind = (locate(mindref) in ticker.minds)
|
||||||
|
|||||||
@@ -34,9 +34,6 @@
|
|||||||
|
|
||||||
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
|
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
|
||||||
|
|
||||||
if(issilicon(user) && !emagged)
|
|
||||||
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
|
|
||||||
|
|
||||||
if(emagged)
|
if(emagged)
|
||||||
dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
|
dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
|
||||||
dat += "Ensure the holodeck is empty before testing.<BR>"
|
dat += "Ensure the holodeck is empty before testing.<BR>"
|
||||||
@@ -46,6 +43,8 @@
|
|||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
|
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
|
||||||
else
|
else
|
||||||
|
if(issilicon(user))
|
||||||
|
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
|
||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
|
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
|
||||||
|
|
||||||
@@ -88,16 +87,19 @@
|
|||||||
loadProgram(target)
|
loadProgram(target)
|
||||||
|
|
||||||
else if(href_list["burntest"])
|
else if(href_list["burntest"])
|
||||||
|
if(!emagged) return
|
||||||
target = locate(/area/holodeck/source_burntest)
|
target = locate(/area/holodeck/source_burntest)
|
||||||
if(target)
|
if(target)
|
||||||
loadProgram(target)
|
loadProgram(target)
|
||||||
|
|
||||||
else if(href_list["wildlifecarp"])
|
else if(href_list["wildlifecarp"])
|
||||||
|
if(!emagged) return
|
||||||
target = locate(/area/holodeck/source_wildlife)
|
target = locate(/area/holodeck/source_wildlife)
|
||||||
if(target)
|
if(target)
|
||||||
loadProgram(target)
|
loadProgram(target)
|
||||||
|
|
||||||
else if(href_list["AIoverride"])
|
else if(href_list["AIoverride"])
|
||||||
|
if(!issilicon(usr)) return
|
||||||
emagged = 1
|
emagged = 1
|
||||||
|
|
||||||
src.add_fingerprint(usr)
|
src.add_fingerprint(usr)
|
||||||
|
|||||||
@@ -5,15 +5,16 @@
|
|||||||
desc = "Used to monitor status of people being operated on."
|
desc = "Used to monitor status of people being operated on."
|
||||||
icon_state = "operating"
|
icon_state = "operating"
|
||||||
circuit = "/obj/item/weapon/circuitboard/operating"
|
circuit = "/obj/item/weapon/circuitboard/operating"
|
||||||
var/mob/living/carbon/human/victim = null
|
var
|
||||||
var/obj/machinery/optable/table = null
|
mob/living/carbon/human/victim = null
|
||||||
var/id = 0.0
|
obj/machinery/optable/table = null
|
||||||
|
|
||||||
/obj/machinery/computer/operating/New()
|
/obj/machinery/computer/operating/New()
|
||||||
..()
|
..()
|
||||||
for(var/obj/machinery/optable/O in world)
|
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||||
if(src.id == O.id)
|
table = locate(/obj/machinery/optable, get_step(src, dir))
|
||||||
src.table = O
|
if (!isnull(table))
|
||||||
|
break
|
||||||
|
|
||||||
/obj/machinery/computer/operating/attack_ai(mob/user)
|
/obj/machinery/computer/operating/attack_ai(mob/user)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
@@ -21,12 +22,14 @@
|
|||||||
return
|
return
|
||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/operating/attack_hand(mob/user)
|
/obj/machinery/computer/operating/attack_hand(mob/user)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
if(stat & (BROKEN|NOPOWER))
|
if(stat & (BROKEN|NOPOWER))
|
||||||
return
|
return
|
||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/operating/proc/interact(mob/user)
|
/obj/machinery/computer/operating/proc/interact(mob/user)
|
||||||
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
||||||
if (!istype(user, /mob/living/silicon))
|
if (!istype(user, /mob/living/silicon))
|
||||||
@@ -43,7 +46,7 @@
|
|||||||
<B>Patient Information:</B><BR>
|
<B>Patient Information:</B><BR>
|
||||||
<BR>
|
<BR>
|
||||||
<B>Name:</B> [src.victim.real_name]<BR>
|
<B>Name:</B> [src.victim.real_name]<BR>
|
||||||
<B>Age:</B> [!isnull(src.victim.age) ? src.victim.age : "Undetermined"]<BR>
|
<B>Age:</B> [src.victim.age]<BR>
|
||||||
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
|
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
|
||||||
<BR>
|
<BR>
|
||||||
<B>Health:</B> [src.victim.health]<BR>
|
<B>Health:</B> [src.victim.health]<BR>
|
||||||
@@ -51,7 +54,7 @@
|
|||||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||||
<B>Patient Status:</B> [src.victim.stat ? "Non-responsive" : "Stable"]<BR>
|
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||||
"}
|
"}
|
||||||
else
|
else
|
||||||
src.victim = null
|
src.victim = null
|
||||||
@@ -63,15 +66,15 @@
|
|||||||
user << browse(dat, "window=op")
|
user << browse(dat, "window=op")
|
||||||
onclose(user, "op")
|
onclose(user, "op")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/operating/Topic(href, href_list)
|
/obj/machinery/computer/operating/Topic(href, href_list)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||||
usr.machine = src
|
usr.machine = src
|
||||||
// if (href_list["update"])
|
|
||||||
// src.interact(usr)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/operating/process()
|
/obj/machinery/computer/operating/process()
|
||||||
if(!(stat & (NOPOWER|BROKEN)) )
|
if(!(stat & (NOPOWER|BROKEN)) )
|
||||||
use_power(500)
|
use_power(500)
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
origin_tech = "programming=2;biotech=2"
|
origin_tech = "programming=2;biotech=2"
|
||||||
/obj/item/weapon/circuitboard/scan_consolenew
|
/obj/item/weapon/circuitboard/scan_consolenew
|
||||||
name = "Circuit board (DNA Machine)"
|
name = "Circuit board (DNA Machine)"
|
||||||
build_path = "/obj/machinery/scan_consolenew"
|
build_path = "/obj/machinery/computer/scan_consolenew"
|
||||||
origin_tech = "programming=2;biotech=2"
|
origin_tech = "programming=2;biotech=2"
|
||||||
/obj/item/weapon/circuitboard/communications
|
/obj/item/weapon/circuitboard/communications
|
||||||
name = "Circuit board (Communications)"
|
name = "Circuit board (Communications)"
|
||||||
@@ -147,6 +147,7 @@
|
|||||||
name = "Circuit board (Supply shuttle console)"
|
name = "Circuit board (Supply shuttle console)"
|
||||||
build_path = "/obj/machinery/computer/supplycomp"
|
build_path = "/obj/machinery/computer/supplycomp"
|
||||||
origin_tech = "programming=3"
|
origin_tech = "programming=3"
|
||||||
|
var/contraband_enabled = 0
|
||||||
/obj/item/weapon/circuitboard/operating
|
/obj/item/weapon/circuitboard/operating
|
||||||
name = "Circuit board (Operating Computer)"
|
name = "Circuit board (Operating Computer)"
|
||||||
build_path = "/obj/machinery/computer/operating"
|
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)
|
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
|
||||||
switch(state)
|
switch(state)
|
||||||
if(0)
|
if(0)
|
||||||
@@ -306,4 +329,8 @@
|
|||||||
if(circuit.id) B:id = circuit.id
|
if(circuit.id) B:id = circuit.id
|
||||||
if(circuit.records) B:records = circuit.records
|
if(circuit.records) B:records = circuit.records
|
||||||
if(circuit.frequency) B:frequency = circuit.frequency
|
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)
|
del(src)
|
||||||
|
|||||||
@@ -2,22 +2,17 @@
|
|||||||
name = "Identification Computer"
|
name = "Identification Computer"
|
||||||
desc = "A computer used to modify ID cards."
|
desc = "A computer used to modify ID cards."
|
||||||
icon_state = "id"
|
icon_state = "id"
|
||||||
circuit = "/obj/item/weapon/circuitboard/card"
|
|
||||||
var/obj/item/weapon/card/id/scan = null
|
|
||||||
var/obj/item/weapon/card/id/modify = null
|
|
||||||
var/authenticated = 0.0
|
|
||||||
var/mode = 0.0
|
|
||||||
var/printing = null
|
|
||||||
req_access = list(access_change_ids)
|
req_access = list(access_change_ids)
|
||||||
|
circuit = "/obj/item/weapon/circuitboard/card"
|
||||||
|
var
|
||||||
|
obj/item/weapon/card/id/scan = null
|
||||||
|
obj/item/weapon/card/id/modify = null
|
||||||
|
authenticated = 0.0
|
||||||
|
mode = 0.0
|
||||||
|
printing = null
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/centcom
|
/obj/machinery/computer/card/attackby(O as obj, user as mob)//TODO:SANITY
|
||||||
name = "CentCom Identification Computer"
|
|
||||||
circuit = "/obj/item/weapon/circuitboard/card/centcom"
|
|
||||||
req_access = list(access_cent_captain)
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/attackby(O as obj, user as mob)
|
|
||||||
if(istype(O, /obj/item/weapon/card/id))
|
if(istype(O, /obj/item/weapon/card/id))
|
||||||
var/obj/item/weapon/card/id/idcard = O
|
var/obj/item/weapon/card/id/idcard = O
|
||||||
if(access_change_ids in idcard.access)
|
if(access_change_ids in idcard.access)
|
||||||
@@ -37,12 +32,15 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
|
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
|
||||||
return attack_hand(user)
|
return attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
|
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
|
||||||
return attack_hand(user)
|
return attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
|
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
@@ -169,6 +167,7 @@
|
|||||||
onclose(user, "id_com")
|
onclose(user, "id_com")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/card/Topic(href, href_list)
|
/obj/machinery/computer/card/Topic(href, href_list)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
@@ -188,7 +187,10 @@
|
|||||||
if ("modify")
|
if ("modify")
|
||||||
if (modify)
|
if (modify)
|
||||||
data_core.manifest_modify(modify.registered_name, modify.assignment)
|
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))
|
if(ishuman(usr))
|
||||||
modify.loc = usr.loc
|
modify.loc = usr.loc
|
||||||
if(!usr.get_active_hand())
|
if(!usr.get_active_hand())
|
||||||
@@ -243,7 +245,9 @@
|
|||||||
if (authenticated)
|
if (authenticated)
|
||||||
var/t1 = href_list["assign_target"]
|
var/t1 = href_list["assign_target"]
|
||||||
if(t1 == "Custom")
|
if(t1 == "Custom")
|
||||||
t1 = input("Enter a custom job assignment.","Assignment")
|
var/temp_t = copytext(sanitize(input("Enter a custom job assignment.","Assignment")),1,MAX_MESSAGE_LEN)
|
||||||
|
if(temp_t)
|
||||||
|
t1 = temp_t
|
||||||
else
|
else
|
||||||
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
|
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
|
||||||
if (modify)
|
if (modify)
|
||||||
@@ -267,4 +271,12 @@
|
|||||||
if (modify)
|
if (modify)
|
||||||
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
|
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer/card/centcom
|
||||||
|
name = "CentCom Identification Computer"
|
||||||
|
circuit = "/obj/item/weapon/circuitboard/card/centcom"
|
||||||
|
req_access = list(access_cent_captain)
|
||||||
|
|
||||||
@@ -1,3 +1,17 @@
|
|||||||
|
/obj/machinery/computer/hologram_comp
|
||||||
|
name = "Hologram Computer"
|
||||||
|
desc = "Rumoured to control holograms."
|
||||||
|
icon = 'stationobjs.dmi'
|
||||||
|
icon_state = "holo_console0"
|
||||||
|
var
|
||||||
|
obj/machinery/hologram/projector/projector = null
|
||||||
|
temp = null
|
||||||
|
lumens = 0.0
|
||||||
|
h_r = 245.0
|
||||||
|
h_g = 245.0
|
||||||
|
h_b = 245.0
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/hologram_comp/New()
|
/obj/machinery/computer/hologram_comp/New()
|
||||||
..()
|
..()
|
||||||
spawn( 10 )
|
spawn( 10 )
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
//only load blast doors for map-defined departments for the moment
|
//only load blast doors for map-defined departments for the moment
|
||||||
switch(department)
|
switch(department)
|
||||||
if("Engineering")
|
if("SinguloEngineering-Antiqua")
|
||||||
connectedDoorIds.Add("Engineering Primary Access")
|
connectedDoorIds.Add("Engineering Primary Access")
|
||||||
connectedDoorIds.Add("Engineering Secondary Access")
|
connectedDoorIds.Add("Engineering Secondary Access")
|
||||||
connectedDoorIds.Add("Fore Maintenance Access")
|
connectedDoorIds.Add("Fore Maintenance Access")
|
||||||
@@ -28,7 +28,13 @@
|
|||||||
connectedDoorIds.Add("Atmospheric Storage Rad Shielding")
|
connectedDoorIds.Add("Atmospheric Storage Rad Shielding")
|
||||||
connectedDoorIds.Add("Construction Storage Rad Shielding")
|
connectedDoorIds.Add("Construction Storage Rad Shielding")
|
||||||
connectedDoorIds.Add("Engineering Secure Storage")
|
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 Outer Shutters")
|
||||||
connectedDoorIds.Add("Genetics Inner Shutters")
|
connectedDoorIds.Add("Genetics Inner Shutters")
|
||||||
connectedDoorIds.Add("Chemistry Outer Shutters")
|
connectedDoorIds.Add("Chemistry Outer Shutters")
|
||||||
|
|||||||
@@ -1,3 +1,25 @@
|
|||||||
|
/obj/machinery/computer/secure_data
|
||||||
|
name = "Security Records"
|
||||||
|
desc = "Used to view and edit personnel's security records"
|
||||||
|
icon_state = "security"
|
||||||
|
req_access = list(access_security)
|
||||||
|
circuit = "/obj/item/weapon/circuitboard/secure_data"
|
||||||
|
var
|
||||||
|
obj/item/weapon/card/id/scan = null
|
||||||
|
obj/item/weapon/disk/records/disk = null
|
||||||
|
authenticated = null
|
||||||
|
rank = null
|
||||||
|
screen = null
|
||||||
|
datum/data/record/active1 = null
|
||||||
|
datum/data/record/active2 = null
|
||||||
|
a_id = null
|
||||||
|
temp = null
|
||||||
|
printing = null
|
||||||
|
can_change_id = 0
|
||||||
|
list/Perp
|
||||||
|
tempname = null
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
|
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
|
||||||
if(istype(O, /obj/item/weapon/card/id) && !scan)
|
if(istype(O, /obj/item/weapon/card/id) && !scan)
|
||||||
usr.drop_item()
|
usr.drop_item()
|
||||||
@@ -523,6 +545,10 @@ What a mess.*/
|
|||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer/secure_data/detective_computer
|
||||||
|
icon = 'computer.dmi'
|
||||||
|
icon_state = "messyfiles"
|
||||||
|
|
||||||
/obj/item/weapon/disk/records
|
/obj/item/weapon/disk/records
|
||||||
name = "Crew Records Disk"
|
name = "Crew Records Disk"
|
||||||
desc = "Stores security and medical records."
|
desc = "Stores security and medical records."
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
message_admins("[key_name_admin(user)] has launched the shuttle")
|
message_admins("[key_name_admin(user)] has launched the shuttle")
|
||||||
log_game("[user.ckey] has launched the shuttle early")
|
log_game("[user.ckey] has launched the shuttle early")
|
||||||
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
|
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
|
||||||
|
emergency_shuttle.online = 1
|
||||||
emergency_shuttle.settimeleft(10)
|
emergency_shuttle.settimeleft(10)
|
||||||
//src.authorized = null
|
//src.authorized = null
|
||||||
del(src.authorized)
|
del(src.authorized)
|
||||||
|
|||||||
@@ -225,6 +225,11 @@ to destroy them and players will be able to make replacements.
|
|||||||
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
|
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
|
||||||
origin_tech = "programming=3;powerstorage=5;engineering=5"
|
origin_tech = "programming=3;powerstorage=5;engineering=5"
|
||||||
|
|
||||||
|
/obj/item/weapon/circuitboard/pacman/industrial
|
||||||
|
name = "Circuit Board (Industrial PACMAN-type Generator)"
|
||||||
|
build_path = "/obj/machinery/power/port_gen/pacman/industrial"
|
||||||
|
origin_tech = "programming=3;powerstorage=4;engineering=4"
|
||||||
|
|
||||||
/obj/item/weapon/circuitboard/pacman2
|
/obj/item/weapon/circuitboard/pacman2
|
||||||
name = "Circuit Board (PACMANII-type Generator)"
|
name = "Circuit Board (PACMANII-type Generator)"
|
||||||
build_path = "/obj/machinery/power/port_gen/pacman2"
|
build_path = "/obj/machinery/power/port_gen/pacman2"
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ for reference:
|
|||||||
var/health = 100.0
|
var/health = 100.0
|
||||||
var/maxhealth = 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 (istype(W, /obj/item/stack/sheet/wood))
|
||||||
if (src.health < src.maxhealth)
|
if (src.health < src.maxhealth)
|
||||||
for(var/mob/O in viewers(src, null))
|
for(var/mob/O in viewers(src, null))
|
||||||
@@ -88,7 +88,7 @@ for reference:
|
|||||||
else
|
else
|
||||||
if (src.health <= 0)
|
if (src.health <= 0)
|
||||||
for(var/mob/O in viewers(src, null))
|
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))
|
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)
|
switch(severity)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
for(var/mob/O in viewers(src, null))
|
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)
|
del(src)
|
||||||
return
|
return
|
||||||
if(2.0)
|
if(2.0)
|
||||||
src.health -= 25
|
src.health -= 25
|
||||||
if (src.health <= 0)
|
if (src.health <= 0)
|
||||||
for(var/mob/O in viewers(src, null))
|
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))
|
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()
|
meteorhit()
|
||||||
for(var/mob/O in viewers(src, null))
|
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))
|
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))
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user