mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 05:57:24 +01:00
Merge branch 'master' of github.com:Baystation12/Baystation12
This commit is contained in:
+10
-4
@@ -124,6 +124,7 @@
|
||||
#define FILE_DIR "code/modules/mob/new_player"
|
||||
#define FILE_DIR "code/modules/mob/organ"
|
||||
#define FILE_DIR "code/modules/mob/simple_animal"
|
||||
#define FILE_DIR "code/modules/paperwork"
|
||||
#define FILE_DIR "code/modules/power"
|
||||
#define FILE_DIR "code/modules/power/antimatter"
|
||||
#define FILE_DIR "code/modules/power/singularity"
|
||||
@@ -196,16 +197,16 @@
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/announcer"
|
||||
#define FILE_DIR "sound/bots"
|
||||
#define FILE_DIR "sound/effects"
|
||||
#define FILE_DIR "sound/hallucinations"
|
||||
#define FILE_DIR "sound/items"
|
||||
#define FILE_DIR "sound/machines"
|
||||
#define FILE_DIR "sound/mecha"
|
||||
#define FILE_DIR "sound/misc"
|
||||
#define FILE_DIR "sound/piano"
|
||||
#define FILE_DIR "sound/scary"
|
||||
#define FILE_DIR "sound/voice"
|
||||
#define FILE_DIR "sound/weapons"
|
||||
// END_FILE_DIR
|
||||
@@ -382,7 +383,6 @@
|
||||
#include "code\game\throwing.dm"
|
||||
#include "code\game\topic.dm"
|
||||
#include "code\game\turf.dm"
|
||||
#include "code\game\vials.dm"
|
||||
#include "code\game\vote.dm"
|
||||
#include "code\game\area\ai_monitored.dm"
|
||||
#include "code\game\area\areas.dm"
|
||||
@@ -396,6 +396,7 @@
|
||||
#include "code\game\events\EventProcs\ninja_abilities.dm"
|
||||
#include "code\game\events\EventProcs\ninja_equipment.dm"
|
||||
#include "code\game\events\EventProcs\space_ninja.dm"
|
||||
#include "code\game\events\EventProcs\spacevines.dm"
|
||||
#include "code\game\events\Events\AlienInfestation.dm"
|
||||
#include "code\game\events\Events\Appendicitis.dm"
|
||||
#include "code\game\events\Events\ElectricalStorm.dm"
|
||||
@@ -439,9 +440,11 @@
|
||||
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
|
||||
#include "code\game\gamemodes\sandbox\sandbox.dm"
|
||||
#include "code\game\gamemodes\traitor\traitor.dm"
|
||||
#include "code\game\gamemodes\wizard\rightandwrong.dm"
|
||||
#include "code\game\gamemodes\wizard\soulstone.dm"
|
||||
#include "code\game\gamemodes\wizard\spellbook.dm"
|
||||
#include "code\game\gamemodes\wizard\spells.dm"
|
||||
#include "code\game\gamemodes\wizard\veilrender.dm"
|
||||
#include "code\game\gamemodes\wizard\wizard.dm"
|
||||
#include "code\game\jobs\access.dm"
|
||||
#include "code\game\jobs\job_controller.dm"
|
||||
@@ -526,6 +529,7 @@
|
||||
#include "code\game\machinery\computer\atmos.dm"
|
||||
#include "code\game\machinery\computer\buildandrepair.dm"
|
||||
#include "code\game\machinery\computer\camera_monitor.dm"
|
||||
#include "code\game\machinery\computer\cloning.dm"
|
||||
#include "code\game\machinery\computer\communications.dm"
|
||||
#include "code\game\machinery\computer\computer.dm"
|
||||
#include "code\game\machinery\computer\crew.dm"
|
||||
@@ -768,6 +772,7 @@
|
||||
#include "code\modules\admin\player_panel.dm"
|
||||
#include "code\modules\admin\verbs\adminhelp.dm"
|
||||
#include "code\modules\admin\verbs\adminjump.dm"
|
||||
#include "code\modules\admin\verbs\adminpm.dm"
|
||||
#include "code\modules\admin\verbs\adminsay.dm"
|
||||
#include "code\modules\admin\verbs\atmosdebug.dm"
|
||||
#include "code\modules\admin\verbs\BrokenInhands.dm"
|
||||
@@ -783,6 +788,7 @@
|
||||
#include "code\modules\admin\verbs\modifyvariables.dm"
|
||||
#include "code\modules\admin\verbs\onlyone.dm"
|
||||
#include "code\modules\admin\verbs\playsound.dm"
|
||||
#include "code\modules\admin\verbs\possess.dm"
|
||||
#include "code\modules\admin\verbs\pray.dm"
|
||||
#include "code\modules\admin\verbs\randomverbs.dm"
|
||||
#include "code\modules\admin\verbs\striketeam.dm"
|
||||
@@ -849,7 +855,6 @@
|
||||
#include "code\modules\food\food.dm"
|
||||
#include "code\modules\food\meat.dm"
|
||||
#include "code\modules\food\recipes_microwave.dm"
|
||||
#include "code\modules\mining\datum_processing_recipe.dm"
|
||||
#include "code\modules\mining\machine_input_output_plates.dm"
|
||||
#include "code\modules\mining\machine_processing.dm"
|
||||
#include "code\modules\mining\machine_stacking.dm"
|
||||
@@ -1018,6 +1023,7 @@
|
||||
#include "code\modules\power\sd_DynamicAreaLighting.dm"
|
||||
#include "code\modules\power\smes.dm"
|
||||
#include "code\modules\power\solar.dm"
|
||||
#include "code\modules\power\switch.dm"
|
||||
#include "code\modules\power\terminal.dm"
|
||||
#include "code\modules\power\tracker.dm"
|
||||
#include "code\modules\power\turbine.dm"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/machinery/atmospherics/unary
|
||||
dir = SOUTH
|
||||
initialize_directions = SOUTH
|
||||
layer = TURF_LAYER+0.1
|
||||
|
||||
var/datum/gas_mixture/air_contents
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
desc = "Has a valve and pump attached to it"
|
||||
|
||||
level = 1
|
||||
layer = TURF_LAYER
|
||||
var/area_uid
|
||||
var/id_tag = null
|
||||
power_channel = ENVIRON
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
desc = "Has a valve and pump attached to it"
|
||||
|
||||
level = 1
|
||||
layer = TURF_LAYER
|
||||
|
||||
var/id_tag = null
|
||||
var/frequency = 1439
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
client/verb/discon_pipes()
|
||||
set name = "Show Disconnected Pipes"
|
||||
set category = "Debug"
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/simple/P in world)
|
||||
if(!P.node1 || !P.node2)
|
||||
usr << "[P], [P.x], [P.y], [P.z], [P.loc.loc]"
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/manifold/P in world)
|
||||
if(!P.node1 || !P.node2 || !P.node3)
|
||||
usr << "[P], [P.x], [P.y], [P.z], [P.loc.loc]"
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/manifold4w/P in world)
|
||||
if(!P.node1 || !P.node2 || !P.node3 || !P.node4)
|
||||
usr << "[P], [P.x], [P.y], [P.z], [P.loc.loc]"
|
||||
//With thanks to mini. Check before use, uncheck after. Do Not Use on a live server.
|
||||
@@ -6,7 +6,7 @@ obj/machinery/atmospherics/pipe
|
||||
var/volume = 0
|
||||
var/force = 20
|
||||
|
||||
layer = 2.4 //under wires with their 2.5
|
||||
layer = 2.4 //under wires with their 2.44
|
||||
|
||||
var/alert_pressure = 80*ONE_ATMOSPHERE
|
||||
//minimum pressure before check_pressure(...) should be called
|
||||
@@ -605,6 +605,7 @@ obj/machinery/atmospherics/pipe
|
||||
var/obj/machinery/atmospherics/node3
|
||||
|
||||
level = 1
|
||||
layer = 2.4 //under wires with their 2.44
|
||||
|
||||
New()
|
||||
switch(dir)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/structure/filingcabinet
|
||||
name = "Filing Cabinet"
|
||||
desc = "A large cabinet with drawers."
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "messyfiles"
|
||||
icon = 'bureaucracy.dmi'
|
||||
icon_state = "filingcabinet"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/device/radio/headset/headset_rob(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/roboticist(src)
|
||||
|
||||
@@ -420,7 +420,7 @@
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/fcardholder(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/weapon/notebook(src)
|
||||
new /obj/item/weapon/clipboard/notebook(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
|
||||
@@ -27,12 +27,13 @@
|
||||
var/vote_period = 60 // length of voting period (seconds, default 1 minute)
|
||||
var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi)
|
||||
var/vote_no_dead = 0 // dead people can't vote (tbi)
|
||||
var/enable_authentication = 0 // goon authentication
|
||||
// var/enable_authentication = 0 // goon authentication
|
||||
var/del_new_on_log = 1 // del's new players if they log before they spawn in
|
||||
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
|
||||
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
|
||||
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
|
||||
var/Tensioner_Active = 0 // If the tensioner is running.
|
||||
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||
|
||||
var/list/mode_names = list()
|
||||
var/list/modes = list() // allowed modes
|
||||
@@ -197,8 +198,8 @@
|
||||
if ("allow_ai")
|
||||
config.allow_ai = 1
|
||||
|
||||
if ("authentication")
|
||||
config.enable_authentication = 1
|
||||
// if ("authentication")
|
||||
// config.enable_authentication = 1
|
||||
|
||||
if ("norespawn")
|
||||
config.respawn = 0
|
||||
@@ -287,6 +288,8 @@
|
||||
if("forbid_singulo_possession")
|
||||
forbid_singulo_possession = 1
|
||||
|
||||
if("popup_admin_pm")
|
||||
config.popup_admin_pm = 1
|
||||
if("useircbot")
|
||||
useircbot = 1
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ to null does not delete the object itself. Thank you.
|
||||
if(spread_type != AIRBORNE && spread_type != SPECIAL)
|
||||
check_range = 0 // everything else, like infect-on-contact things, only infect things on top of it
|
||||
|
||||
for(var/mob/living/carbon/M in oviewers(check_range, source))
|
||||
for(var/mob/living/carbon/M in oview(check_range, source)) //I have no idea why oview works when oviewers doesn't. -Pete
|
||||
M.contract_disease(src)
|
||||
|
||||
return
|
||||
|
||||
@@ -10,13 +10,16 @@
|
||||
..()
|
||||
events = new
|
||||
|
||||
proc/addEventType(event_type)
|
||||
proc/addEventType(event_type as text)
|
||||
if(!(event_type in events) || !islist(events[event_type]))
|
||||
events[event_type] = list()
|
||||
return 1
|
||||
return
|
||||
|
||||
proc/addEvent(event_type,proc_holder,proc_name)
|
||||
|
||||
// Arguments: event_type as text, proc_holder as datum, proc_name as text
|
||||
// Returns: New event, null on error.
|
||||
proc/addEvent(event_type as text, proc_holder, proc_name as text)
|
||||
if(!event_type || !proc_holder || !proc_name)
|
||||
return
|
||||
addEventType(event_type)
|
||||
@@ -25,6 +28,8 @@
|
||||
event += E
|
||||
return E
|
||||
|
||||
// Arguments: event_type as text, any number of additional arguments to pass to event handler
|
||||
// Returns: null
|
||||
proc/fireEvent()
|
||||
//world << "Events in [args[1]] called"
|
||||
var/list/event = listgetindex(events,args[1])
|
||||
@@ -35,7 +40,9 @@
|
||||
clearEvent(args[1],E)
|
||||
return
|
||||
|
||||
proc/clearEvent(event_type,datum/event/E)
|
||||
// Arguments: event_type as text, E as /datum/event
|
||||
// Returns: 1 if event cleared, null on error
|
||||
proc/clearEvent(event_type as text, datum/event/E)
|
||||
if(!event_type || !E)
|
||||
return
|
||||
var/list/event = listgetindex(events,event_type)
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ datum/mind
|
||||
else
|
||||
text += "."
|
||||
|
||||
text += " <a href='?src=\ref[src];revolution=reequip'>Reequip</a>."
|
||||
text += " <a href='?src=\ref[src];revolution=reequip'>Reequip</a> (gives traitor uplink)."
|
||||
if (objectives.len==0)
|
||||
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)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/proj_lingering = 0 //if it lingers or disappears upon hitting an obstacle
|
||||
var/proj_homing = 1 //if it follows the target
|
||||
var/proj_insubstantial = 0 //if it can pass through dense objects or not
|
||||
var/proj_trigger_range = 1 //the range from target at which the projectile triggers cast(target)
|
||||
var/proj_trigger_range = 0 //the range from target at which the projectile triggers cast(target)
|
||||
|
||||
var/proj_lifespan = 15 //in deciseconds * proj_step_delay
|
||||
var/proj_step_delay = 1 //lower = faster
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
var/current_loc = usr.loc
|
||||
|
||||
projectile.loc = current_loc
|
||||
|
||||
for(var/i = 0,i < proj_lifespan,i++)
|
||||
if(!projectile)
|
||||
break
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "This spell fires several, slow moving, magic projectiles at nearby targets."
|
||||
|
||||
school = "evocation"
|
||||
charge_max = 100
|
||||
charge_max = 150
|
||||
clothes_req = 1
|
||||
invocation = "FORTI GY AMA"
|
||||
invocation_type = "shout"
|
||||
@@ -134,6 +134,7 @@
|
||||
summon_type = list("/obj/effect/forcefield")
|
||||
summon_lifespan = 300
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
|
||||
name = "Summon Bigger Carp"
|
||||
desc = "This spell conjures an elite carp."
|
||||
@@ -147,6 +148,21 @@
|
||||
|
||||
summon_type = list("/obj/effect/critter/spesscarp/elite")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct
|
||||
name = "Artificer"
|
||||
desc = "This spell conjures a construct which may be controlled by Shades"
|
||||
|
||||
school = "conjuration"
|
||||
charge_max = 600
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
|
||||
summon_type = list("/obj/structure/constructshell")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/creature
|
||||
name = "Summon Creature Swarm"
|
||||
desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth"
|
||||
@@ -211,4 +227,95 @@
|
||||
ex_severe = -1
|
||||
ex_heavy = -1
|
||||
ex_light = 2
|
||||
ex_flash = 5
|
||||
ex_flash = 5
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////Construct Spells/////////////////////////
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser
|
||||
charge_max = 1800
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor
|
||||
name = "Floor Construction"
|
||||
desc = "This spell constructs a cult floor"
|
||||
|
||||
school = "conjuration"
|
||||
charge_max = 20
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
summon_type = list("/turf/simulated/floor/engine/cult")
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall
|
||||
name = "Leser Construction"
|
||||
desc = "This spell constructs a cult wall"
|
||||
|
||||
school = "conjuration"
|
||||
charge_max = 100
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
summon_type = list("/turf/simulated/wall/cult")
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
|
||||
name = "Greater Construction"
|
||||
desc = "This spell constructs a reinforced metal wall"
|
||||
|
||||
school = "conjuration"
|
||||
charge_max = 300
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
|
||||
summon_type = list("/turf/simulated/wall/r_wall")
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone
|
||||
name = "Summon Soulstone"
|
||||
desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space"
|
||||
|
||||
school = "conjuration"
|
||||
charge_max = 3000
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
|
||||
summon_type = list("/obj/item/device/soulstone")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall
|
||||
name = "Shield"
|
||||
desc = "This spell creates a temporary forcefield to shield yourself and allies from incoming fire"
|
||||
|
||||
school = "transmutation"
|
||||
charge_max = 300
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
summon_type = list("/obj/effect/forcefield")
|
||||
summon_lifespan = 50
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift
|
||||
name = "Phase Shift"
|
||||
desc = "This spell allows you to pass through walls"
|
||||
|
||||
school = "transmutation"
|
||||
charge_max = 200
|
||||
clothes_req = 0
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = -1
|
||||
include_user = 1
|
||||
|
||||
jaunt_duration = 50 //in deciseconds
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
///Chemistry.
|
||||
var/datum/reagents/reagents = null
|
||||
|
||||
//Detective Work, used for the duplicate data points kept in the scanners
|
||||
var/list/original_atom
|
||||
|
||||
//var/chem_is_open_container = 0
|
||||
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
||||
///Chemistry.
|
||||
|
||||
//Detective Work, used for the duplicate data points kept in the scanners
|
||||
var/list/original_atom
|
||||
|
||||
proc/assume_air(datum/air_group/giver)
|
||||
del(giver)
|
||||
return null
|
||||
@@ -246,4 +246,4 @@ atom/movable/proc/forceMove(atom/destination)
|
||||
loc = destination
|
||||
loc.Entered(src)
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
@@ -1,4 +1,6 @@
|
||||
/mob/dead/observer
|
||||
name = "ghost"
|
||||
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "ghost"
|
||||
layer = 4
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
health = 250
|
||||
icon_state = "queen_s"
|
||||
|
||||
nopush = 1
|
||||
/mob/living/carbon/alien/humanoid/rpbody
|
||||
update_icon = 0
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/silicon/robot
|
||||
name = "Robot"
|
||||
name = "Cyborg"
|
||||
icon = 'robots.dmi'//
|
||||
icon_state = "robot"
|
||||
health = 300
|
||||
@@ -36,6 +36,7 @@
|
||||
var/wiresexposed = 0
|
||||
var/locked = 1
|
||||
var/list/req_access = list(access_robotics)
|
||||
var/ident = 0
|
||||
//var/list/laws = list()
|
||||
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list())
|
||||
var/viewalerts = 0
|
||||
|
||||
+6
-1
@@ -640,6 +640,10 @@
|
||||
color="blue"
|
||||
icon = 'power_cond_blue.dmi'
|
||||
|
||||
/obj/structure/cable/pink
|
||||
color="pink"
|
||||
icon = 'power_cond_pink.dmi'
|
||||
|
||||
/obj/effect/manifest
|
||||
name = "manifest"
|
||||
icon = 'screen1.dmi'
|
||||
@@ -759,7 +763,6 @@
|
||||
desc = "Apply butt."
|
||||
icon = 'objects.dmi'
|
||||
icon_state = "stool"
|
||||
anchored = 1.0
|
||||
flags = FPRINT
|
||||
pressure_resistance = 3*ONE_ATMOSPHERE
|
||||
|
||||
@@ -768,6 +771,7 @@
|
||||
desc = "This is used to lie in, sleep in or strap on."
|
||||
icon_state = "bed"
|
||||
var/mob/living/buckled_mob
|
||||
anchored = 1.0
|
||||
|
||||
/obj/structure/stool/bed/alien
|
||||
name = "Resting contraption"
|
||||
@@ -779,6 +783,7 @@
|
||||
name = "chair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "chair"
|
||||
anchored = 0
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy
|
||||
name = "comfy chair"
|
||||
|
||||
+107
-137
@@ -1,6 +1,6 @@
|
||||
/obj/structure/closet
|
||||
name = "Closet"
|
||||
desc = "It's a closet."
|
||||
name = "closet"
|
||||
desc = "It's a basic storage unit."
|
||||
icon = 'closet.dmi'
|
||||
icon_state = "closed"
|
||||
density = 1
|
||||
@@ -16,18 +16,18 @@
|
||||
layer = 2.98
|
||||
|
||||
/obj/structure/closet/detective
|
||||
name = "Detective's Closet"
|
||||
name = "detective's closet"
|
||||
desc = "Holds the detective's clothes while his coat rack is being repaired."
|
||||
|
||||
/obj/structure/closet/acloset
|
||||
name = "Strange closet"
|
||||
desc = "It looks weird."
|
||||
name = "strange closet"
|
||||
desc = "It looks alien!"
|
||||
icon_state = "acloset"
|
||||
icon_closed = "acloset"
|
||||
icon_opened = "aclosetopen"
|
||||
|
||||
/obj/structure/closet/cabinet
|
||||
name = "Cabinet"
|
||||
name = "cabinet"
|
||||
desc = "Old will forever be in fashion."
|
||||
icon_state = "cabinet_closed"
|
||||
icon_closed = "cabinet_closed"
|
||||
@@ -42,12 +42,12 @@
|
||||
anchored = 0
|
||||
|
||||
/obj/structure/closet/gmcloset
|
||||
name = "Formal closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes with formal clothes."
|
||||
name = "formal closet"
|
||||
desc = "It's a storage unit for formal clothing."
|
||||
|
||||
/obj/structure/closet/emcloset
|
||||
name = "Emergency Closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with a gasmask and o2 tank for emergencies."
|
||||
name = "emergency closet"
|
||||
desc = "It's a storage unit for emergency breathmasks and o2 tanks."
|
||||
icon_state = "emergency"
|
||||
icon_closed = "emergency"
|
||||
icon_opened = "emergencyopen"
|
||||
@@ -55,15 +55,15 @@
|
||||
/obj/structure/closet/emcloset/legacy
|
||||
|
||||
/obj/structure/closet/firecloset
|
||||
name = "Fire Closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes with supplies to fight fire."
|
||||
name = "fire-safety closet"
|
||||
desc = "It's a storage unit for fire-fighting supplies."
|
||||
icon_state = "firecloset"
|
||||
icon_closed = "firecloset"
|
||||
icon_opened = "fireclosetopen"
|
||||
|
||||
/obj/structure/closet/hydrant //wall mounted fire closet
|
||||
name = "Fire Closet"
|
||||
desc = "A wall mounted closet which comes with supplies to fight fire."
|
||||
name = "fire-safety closet"
|
||||
desc = "It's a storage unit for fire-fighting supplies."
|
||||
icon_state = "hydrant"
|
||||
icon_closed = "hydrant"
|
||||
icon_opened = "hydrant_open"
|
||||
@@ -72,8 +72,8 @@
|
||||
wall_mounted = 1
|
||||
|
||||
/obj/structure/closet/medical_wall //wall mounted medical closet
|
||||
name = "First Aid Closet"
|
||||
desc = "A wall mounted closet which should have some first aid."
|
||||
name = "first-aid closet"
|
||||
desc = "It's wall-mounted storage unit for first aid supplies."
|
||||
icon_state = "medical_wall"
|
||||
icon_closed = "medical_wall"
|
||||
icon_opened = "medical_wall_open"
|
||||
@@ -82,352 +82,314 @@
|
||||
wall_mounted = 1
|
||||
|
||||
/obj/structure/closet/toolcloset
|
||||
name = "Tool Closet"
|
||||
desc = "A bulky (yet mobile) closet. Contains tools."
|
||||
name = "tool closet"
|
||||
desc = "It's a storage unit for tools."
|
||||
icon_state = "toolcloset"
|
||||
icon_closed = "toolcloset"
|
||||
icon_opened = "toolclosetopen"
|
||||
|
||||
/obj/structure/closet/radiation
|
||||
name = "radiation suit closet"
|
||||
desc = "It's a storage unit for rad-protective suits."
|
||||
icon_state = "radsuitcloset"
|
||||
icon_opened = "toolclosetopen"
|
||||
icon_closed = "radsuitcloset"
|
||||
|
||||
/obj/structure/closet/jcloset
|
||||
name = "Custodial Closet"
|
||||
desc = "A bulky (yet mobile) closet. Contains the janitor's gear."
|
||||
name = "custodial closet"
|
||||
desc = "It's a storage unit for janitorial clothes and gear."
|
||||
|
||||
/obj/structure/closet/jcloset2
|
||||
name = "Cleaner's Closet"
|
||||
desc = "A bulky (yet mobile) closet. Contains various items for cleaning."
|
||||
name = "cleaner's closet"
|
||||
desc = "It's a storage unit for various cleaning items."
|
||||
|
||||
/obj/structure/closet/lawcloset
|
||||
name = "Legal Closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes with lawyer apparel and items."
|
||||
name = "legal closet"
|
||||
desc = "It's a storage unit for courtroom apparel and items."
|
||||
|
||||
/obj/structure/closet/coffin
|
||||
name = "coffin"
|
||||
desc = "A burial receptacle for the dearly departed."
|
||||
desc = "It's a burial receptacle for the dearly departed."
|
||||
icon_state = "coffin"
|
||||
icon_closed = "coffin"
|
||||
icon_opened = "coffin_open"
|
||||
|
||||
/obj/structure/closet/bombcloset
|
||||
name = "EOD closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with a level 4 bombsuit."
|
||||
name = "\improper EOD closet"
|
||||
desc = "It's a storage unit for explosion-protective suits."
|
||||
icon_state = "bombsuit"
|
||||
icon_closed = "bombsuit"
|
||||
icon_opened = "bombsuitopen"
|
||||
|
||||
/obj/structure/closet/bombclosetsecurity
|
||||
name = "EOD closet"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with a level 4 bombsuit."
|
||||
name = "\improper EOD closet"
|
||||
desc = "It's a storage unit for explosion-protective suits."
|
||||
icon_state = "bombsuitsec"
|
||||
icon_closed = "bombsuitsec"
|
||||
icon_opened = "bombsuitsecopen"
|
||||
|
||||
/obj/structure/closet/l3closet
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
name = "level-3 biohazard suit closet"
|
||||
desc = "It's a storage unit for level-3 biohazard gear."
|
||||
icon_state = "bio"
|
||||
icon_closed = "bio"
|
||||
icon_opened = "bioopen"
|
||||
|
||||
/obj/structure/closet/l3closet/general
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio_general"
|
||||
icon_closed = "bio_general"
|
||||
icon_opened = "bio_generalopen"
|
||||
|
||||
/obj/structure/closet/l3closet/virology
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio_virology"
|
||||
icon_closed = "bio_virology"
|
||||
icon_opened = "bio_virologyopen"
|
||||
|
||||
/obj/structure/closet/l3closet/security
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio_security"
|
||||
icon_closed = "bio_security"
|
||||
icon_opened = "bio_securityopen"
|
||||
|
||||
/obj/structure/closet/l3closet/janitor
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio_janitor"
|
||||
icon_closed = "bio_janitor"
|
||||
icon_opened = "bio_janitoropen"
|
||||
|
||||
/obj/structure/closet/l3closet/scientist
|
||||
name = "Level 3 Biohazard Suit"
|
||||
desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio_scientist"
|
||||
icon_closed = "bio_scientist"
|
||||
icon_opened = "bio_scientistopen"
|
||||
|
||||
/obj/structure/closet/syndicate
|
||||
name = "Weapons Closet"
|
||||
name = "armoury closet"
|
||||
desc = "Why is this here?"
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
|
||||
/obj/structure/closet/syndicate/personal
|
||||
name = "Gear Closet"
|
||||
desc = "Gear preperations closet."
|
||||
desc = "It's a storage unit for operative gear."
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear
|
||||
name = "Nuclear Closet"
|
||||
desc = "Nuclear preperations closet."
|
||||
desc = "It's a storage unit for nuclear-operative gear."
|
||||
|
||||
// Inserting the gimmick clothing stuff here for generic items, IE Tacticool stuff
|
||||
|
||||
|
||||
/obj/structure/closet/gimmick
|
||||
name = "Administrative Supply Closet"
|
||||
name = "administrative supply closet"
|
||||
desc = "It's a storage unit for things that have no right being here."
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
desc = "Closet of things that have no right being here."
|
||||
anchored = 0
|
||||
|
||||
/obj/structure/closet/gimmick/russian
|
||||
name = "Russian Surplus"
|
||||
name = "russian surplus closet"
|
||||
desc = "It's a storage unit for Russian standard-issue surplus."
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
desc = "Russian Surplus Closet"
|
||||
|
||||
/obj/structure/closet/gimmick/tacticool
|
||||
name = "Tacticool Gear"
|
||||
name = "tacticool gear closet"
|
||||
desc = "It's a storage unit for Tacticool gear."
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
desc = "Tacticool Gear Closet"
|
||||
|
||||
/obj/structure/closet/thunderdome
|
||||
name = "\improper Thunderdome closet"
|
||||
desc = "Everything you need!"
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
name = "Thunderdome closet"
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/closet/thunderdome/tdred
|
||||
desc = "Everything you need!"
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
name = "Thunderdome closet"
|
||||
name = "red-team Thunderdome closet"
|
||||
|
||||
/obj/structure/closet/thunderdome/tdgreen
|
||||
desc = "Everything you need!"
|
||||
name = "green-team Thunderdome closet"
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
name = "Thunderdome closet"
|
||||
|
||||
|
||||
/obj/structure/closet/malf/suits
|
||||
desc = "Gear preparations closet"
|
||||
desc = "It's a storage unit for operational gear."
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
|
||||
/obj/structure/closet/wardrobe
|
||||
desc = "A bulky (yet mobile) wardrobe closet. Comes prestocked with 6 changes of clothes."
|
||||
name = "Wardrobe"
|
||||
name = "wardrobe"
|
||||
desc = "It's a storage unit for standard-issue Nanotrasen attire."
|
||||
icon_state = "blue"
|
||||
icon_closed = "blue"
|
||||
|
||||
/obj/structure/closet/wardrobe/black
|
||||
name = "Black Wardrobe"
|
||||
desc = "Contains black jumpsuits."
|
||||
name = "black wardrobe"
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
|
||||
/obj/structure/closet/wardrobe/chaplain_black
|
||||
name = "Chaplain Wardrobe"
|
||||
desc = "Closet of basic chaplain clothes."
|
||||
name = "chapel wardrobe"
|
||||
desc = "It's a storage unit for Nanotrasen-approved religious attire."
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
|
||||
/obj/structure/closet/wardrobe/green
|
||||
name = "Green Wardrobe"
|
||||
desc = "Contains green jumpsuits."
|
||||
name = "green wardrobe"
|
||||
icon_state = "green"
|
||||
icon_closed = "green"
|
||||
|
||||
/obj/structure/closet/wardrobe/mixed
|
||||
name = "Mixed Wardrobe"
|
||||
desc = "This appears to contain several different sets of clothing."
|
||||
name = "mixed wardrobe"
|
||||
icon_state = "mixed"
|
||||
icon_closed = "mixed"
|
||||
|
||||
/obj/structure/closet/wardrobe/orange
|
||||
name = "Prisoner's Wardrobe"
|
||||
desc = "Contains orange jumpsuits."
|
||||
name = "prison wardrobe"
|
||||
desc = "It's a storage unit for Nanotrasen-regulation prisoner attire."
|
||||
icon_state = "orange"
|
||||
icon_closed = "orange"
|
||||
|
||||
/obj/structure/closet/wardrobe/pink
|
||||
name = "Pink Wardrobe"
|
||||
desc = "Contains pink jumpsuits."
|
||||
name = "pink wardrobe"
|
||||
icon_state = "pink"
|
||||
icon_closed = "pink"
|
||||
|
||||
/obj/structure/closet/wardrobe/red
|
||||
name = "Red Wardrobe"
|
||||
desc = "Contains red security jumpsuits."
|
||||
name = "security wardrobe"
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/wardrobe/warden
|
||||
name = "Warden's Wardrobe"
|
||||
desc = "Contains the warden's security uniform."
|
||||
name = "Warden's wardrobe"
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/wardrobe/hos
|
||||
name = "Head of Security's Wardrobe"
|
||||
desc = "Contains the Head of Security's uniform."
|
||||
name = "Head of Security's wardrobe"
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/wardrobe/hop
|
||||
name = "Head of Personnel's Wardrobe"
|
||||
desc = "Contains the Head of Personnel's uniform."
|
||||
name = "Head of Personnel's wardrobe"
|
||||
icon_state = "blue"
|
||||
icon_closed = "blue"
|
||||
|
||||
/obj/structure/closet/wardrobe/white
|
||||
name = "White Wardrobe"
|
||||
desc = "Contains white jumpsuits."
|
||||
name = "white wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/toxins_white
|
||||
name = "Toxins Wardrobe"
|
||||
desc = "Contains toxins jumpsuits."
|
||||
name = "toxins wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/genetics_white
|
||||
name = "Genetics Wardrobe"
|
||||
desc = "Contains genetics jumpsuits."
|
||||
name = "genetics wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/medic_white
|
||||
name = "Doctor's Wardrobe"
|
||||
desc = "Contains medical jumpsuits."
|
||||
name = "doctor's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/chemistry_white
|
||||
name = "Chemistry Wardrobe"
|
||||
desc = "Contains chemistry jumpsuits."
|
||||
name = "chemistry wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/nurse
|
||||
name = "Nurse's Wardrobe"
|
||||
desc = "Contains nurse uniforms."
|
||||
name = "nurse's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/cmo
|
||||
name = "Chief Medical Officer's Wardrobe"
|
||||
desc = "Contains the Chief Medical Officer's clothing."
|
||||
name = "Chief Medical Officer's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/rd
|
||||
name = "Research Director's Wardrobe"
|
||||
desc = "Contains the Research Director's clothing."
|
||||
name = "Research Director's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/scientist
|
||||
name = "Scientist's Wardrobe"
|
||||
desc = "Contains the scientist's clothing."
|
||||
name = "scientist's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/virology_white
|
||||
name = "Virology Wardrobe"
|
||||
desc = "Contains virologist jumpsuits."
|
||||
name = "virology wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/yellow
|
||||
name = "Yellow Wardrobe"
|
||||
desc = "Contains yellow jumpsuits."
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
name = "yellow wardrobe"
|
||||
icon_state = "wardrobe-y"
|
||||
icon_closed = "wardrobe-y"
|
||||
|
||||
/obj/structure/closet/wardrobe/engineering_yellow
|
||||
name = "Engineering Wardrobe"
|
||||
desc = "Contains engineering jumpsuits."
|
||||
name = "engineering wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/robotics_yellow
|
||||
name = "Robotics Wardrobe"
|
||||
desc = "Contains robotics jumpsuits."
|
||||
name = "robotics wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/atmospherics_yellow
|
||||
name = "Atmospherics Wardrobe"
|
||||
desc = "Contains atmospheric jumpsuits."
|
||||
name = "atmospherics wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/grey
|
||||
name = "Grey Wardrobe"
|
||||
desc = "Contains grey jumpsuits."
|
||||
name = "grey wardrobe"
|
||||
icon_state = "grey"
|
||||
icon_closed = "grey"
|
||||
|
||||
/obj/structure/closet/wardrobe/bartender_black
|
||||
name = "Bartender's Wardrobe"
|
||||
desc = "Closet of basic bartending clothes."
|
||||
name = "Bartender's wardrobe"
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
|
||||
/obj/structure/closet/wardrobe/chef_white
|
||||
name = "Chef's Wardrobe"
|
||||
desc = "Contains chef jumpsuits."
|
||||
name = "Chef's wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/hydro_green
|
||||
name = "Hydroponics Wardrobe"
|
||||
desc = "Contains botanist jumpsuits."
|
||||
name = "Hydroponics wardrobe"
|
||||
icon_state = "green"
|
||||
icon_closed = "green"
|
||||
|
||||
/obj/structure/closet/wardrobe/librarian_red
|
||||
name = "Librarian's Wardrobe"
|
||||
desc = "Contains librarian jumpsuits."
|
||||
name = "Librarian's wardrobe"
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/wardrobe/cargo_yellow
|
||||
name = "Cargo Tech's Wardrobe"
|
||||
desc = "Contains cargo tech jumpsuits."
|
||||
name = "Cargo Tech's wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/qm_yellow
|
||||
name = "Quartermaster's Wardrobe"
|
||||
desc = "Contains quartermaster jumpsuits."
|
||||
name = "Quartermaster's wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet
|
||||
desc = "An immobile card-locked storage closet."
|
||||
name = "Security Locker"
|
||||
name = "secure locker"
|
||||
desc = "It's an immobile card-locked storage unit."
|
||||
icon = 'closet.dmi'
|
||||
icon_state = "secure1"
|
||||
density = 1
|
||||
@@ -445,7 +407,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall
|
||||
name = "First Aid Closet"
|
||||
desc = "A wall mounted closet which --should-- contain medical supplies."
|
||||
desc = "It's a secure wall-mounted storage unit for first aid supplies."
|
||||
icon_state = "medical_wall_locked"
|
||||
icon_closed = "medical_wall_unlocked"
|
||||
icon_locked = "medical_wall_locked"
|
||||
@@ -458,21 +420,29 @@
|
||||
req_access = list(access_medical)
|
||||
|
||||
/obj/structure/closet/secure_closet/personal
|
||||
desc = "The first card swiped gains control."
|
||||
name = "Personal Closet"
|
||||
desc = "It's a secure locker for personnel. The first card swiped gains control."
|
||||
name = "personal closet"
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/patient
|
||||
name = "Patient's closet"
|
||||
name = "patient's closet"
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/cabinet
|
||||
icon_state = "cabinetdetective_locked"
|
||||
icon_closed = "cabinetdetective"
|
||||
icon_locked = "cabinetdetective_locked"
|
||||
icon_opened = "cabinetdetective_open"
|
||||
icon_broken = "cabinetdetective_broken"
|
||||
icon_off = "cabinetdetective_broken"
|
||||
|
||||
/obj/structure/closet/secure_closet/kitchen
|
||||
name = "Kitchen Cabinet"
|
||||
name = "kitchen cabinet"
|
||||
req_access = list(access_kitchen)
|
||||
|
||||
/obj/structure/closet/secure_closet/kitchen/mining
|
||||
req_access = list()
|
||||
|
||||
/obj/structure/closet/secure_closet/meat
|
||||
name = "Meat Fridge"
|
||||
name = "meat fridge"
|
||||
icon_state = "fridge1"
|
||||
icon_closed = "fridge"
|
||||
icon_locked = "fridge1"
|
||||
@@ -481,7 +451,7 @@
|
||||
icon_off = "fridge1"
|
||||
|
||||
/obj/structure/closet/secure_closet/fridge
|
||||
name = "Refrigerator"
|
||||
name = "refrigerator"
|
||||
icon_state = "fridge1"
|
||||
icon_closed = "fridge"
|
||||
icon_locked = "fridge1"
|
||||
@@ -490,7 +460,7 @@
|
||||
icon_off = "fridge1"
|
||||
|
||||
/obj/structure/closet/secure_closet/money_freezer
|
||||
name = "Freezer"
|
||||
name = "freezer"
|
||||
icon_state = "fridge1"
|
||||
icon_closed = "fridge"
|
||||
icon_locked = "fridge1"
|
||||
|
||||
+413
-293
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/machinery/camera
|
||||
name = "security camera"
|
||||
desc = "This is used to monitor rooms."
|
||||
desc = "It's used to monitor rooms."
|
||||
icon = 'monitors.dmi'
|
||||
icon_state = "camera"
|
||||
var/network = "SS13"
|
||||
@@ -224,45 +224,6 @@
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 400
|
||||
|
||||
/obj/machinery/scan_consolenew
|
||||
name = "DNA Modifier Access Console"
|
||||
desc = "Scans DNA."
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "scanner"
|
||||
density = 1
|
||||
var/uniblock = 1.0
|
||||
var/strucblock = 1.0
|
||||
var/subblock = 1.0
|
||||
var/status = null
|
||||
var/radduration = 2.0
|
||||
var/radstrength = 1.0
|
||||
var/radacc = 1.0
|
||||
var/buffer1 = null
|
||||
var/buffer2 = null
|
||||
var/buffer3 = null
|
||||
var/buffer1owner = null
|
||||
var/buffer2owner = null
|
||||
var/buffer3owner = null
|
||||
var/buffer1label = null
|
||||
var/buffer2label = null
|
||||
var/buffer3label = null
|
||||
var/buffer1type = null
|
||||
var/buffer2type = null
|
||||
var/buffer3type = null
|
||||
var/buffer1iue = 0
|
||||
var/buffer2iue = 0
|
||||
var/buffer3iue = 0
|
||||
var/delete = 0
|
||||
var/injectorready = 1
|
||||
var/temphtml = null
|
||||
var/obj/machinery/dna_scanner/connected = null
|
||||
var/obj/item/weapon/disk/data/diskette = null
|
||||
var/list/message = list()
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 400
|
||||
|
||||
/obj/machinery/door_control
|
||||
name = "remote door-control"
|
||||
desc = "It controls doors, remotely."
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
// why the heck is this blank? - 702
|
||||
@@ -313,13 +313,13 @@
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
|
||||
/obj/item/weapon/storage/firstaid/toxin
|
||||
name = "Toxin First Aid"
|
||||
name = "toxin first aid"
|
||||
desc = "Contains anti-toxin medication."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/weapon/storage/firstaid/o2
|
||||
name = "Oxygen Deprivation First Aid"
|
||||
name = "oxygen deprivation first aid"
|
||||
desc = "Contains oxygen deprivation medication."
|
||||
icon_state = "o2"
|
||||
item_state = "firstaid-o2"
|
||||
@@ -331,7 +331,7 @@
|
||||
item_state = "firstaid-advanced"
|
||||
|
||||
/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"
|
||||
icon_state = "flashbang"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
@@ -313,18 +313,11 @@
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Janitorial supplies"
|
||||
|
||||
/obj/item/weapon/storage/lightbox/tubes
|
||||
|
||||
/datum/supply_packs/lightbulbs
|
||||
name = "Replacement lights"
|
||||
contains = list("/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/tubes",
|
||||
"/obj/item/weapon/storage/lightbox/bulbs",
|
||||
"/obj/item/weapon/storage/lightbox/bulbs")
|
||||
contains = list("/obj/item/weapon/storage/lightbox/mixed",
|
||||
"/obj/item/weapon/storage/lightbox/mixed",
|
||||
"/obj/item/weapon/storage/lightbox/mixed")
|
||||
cost = 5
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Replacement lights"
|
||||
|
||||
+67
-3
@@ -241,12 +241,16 @@
|
||||
user.Weaken(5)
|
||||
return
|
||||
|
||||
/obj/item/toy/crayonbox
|
||||
/obj/item/weapon/storage/crayonbox
|
||||
name = "box of crayons"
|
||||
desc = "A box of crayons for all your drawing needs."
|
||||
desc = "A box of crayons for all your rune drawing needs."
|
||||
icon = 'crayons.dmi'
|
||||
icon_state = "crayonbox"
|
||||
w_class = 2.0
|
||||
storage_slots = 6
|
||||
can_hold = list(
|
||||
"/obj/item/toy/crayon"
|
||||
)
|
||||
|
||||
/obj/item/toy/crayon
|
||||
name = "crayon"
|
||||
@@ -387,4 +391,64 @@
|
||||
set src in usr
|
||||
usr << text("\icon[] [] units of water left!", src, src.reagents.total_volume)
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon
|
||||
name = "water balloon"
|
||||
desc = "A translucent balloon. There's nothing in it."
|
||||
icon = 'toy.dmi'
|
||||
icon_state = "waterballoon-e"
|
||||
item_state = "balloon-empty"
|
||||
|
||||
/obj/item/toy/balloon/New()
|
||||
var/datum/reagents/R = new/datum/reagents(10)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
/obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1)
|
||||
A.reagents.trans_to(src, 10)
|
||||
user << "\blue You fill the balloon with the contents of [A]."
|
||||
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||||
src.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/glass))
|
||||
if(O.reagents)
|
||||
if(O.reagents.total_volume < 1)
|
||||
user << "The [O] is empty."
|
||||
else if(O.reagents.total_volume >= 1)
|
||||
if(O.reagents.has_reagent("pacid", 1))
|
||||
user << "The acid chews through the balloon!"
|
||||
O.reagents.reaction(user)
|
||||
del(src)
|
||||
else
|
||||
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||||
user << "\blue You fill the balloon with the contents of [O]."
|
||||
O.reagents.trans_to(src, 10)
|
||||
src.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
|
||||
if(src.reagents.total_volume >= 1)
|
||||
src.visible_message("\red The [src] bursts!","You hear a pop and a splash.")
|
||||
src.reagents.reaction(get_turf(hit_atom))
|
||||
for(var/atom/A in get_turf(hit_atom))
|
||||
src.reagents.reaction(A)
|
||||
src.icon_state = "burst"
|
||||
spawn(5)
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/update_icon()
|
||||
if(src.reagents.total_volume >= 1)
|
||||
icon_state = "waterballoon"
|
||||
item_state = "balloon"
|
||||
else
|
||||
icon_state = "waterballoon-e"
|
||||
item_state = "balloon-empty"
|
||||
@@ -153,15 +153,15 @@
|
||||
name = "cigarette machine"
|
||||
desc = "If you want to get cancer, might as well do it in style"
|
||||
icon_state = "cigs"
|
||||
product_paths = "/obj/item/weapon/cigpacket;/obj/item/weapon/matchbox"
|
||||
// product_amounts = "10;10"
|
||||
product_prices = "1;1"
|
||||
product_paths = "/obj/item/weapon/cigpacket;/obj/item/weapon/matchbox;/obj/item/weapon/lighter/random"
|
||||
// product_amounts = "10;10;4"
|
||||
product_prices = "1;1;2"
|
||||
product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!"
|
||||
vend_delay = 34
|
||||
product_hidden = "/obj/item/weapon/zippo"
|
||||
product_hidden = "/obj/item/weapon/lighter/zippo"
|
||||
// product_hideamt = "4"
|
||||
hidden_prices = "2"
|
||||
product_coin = "/obj/item/clothing/mask/cigarette/cigar/havanian"
|
||||
product_coin = "/obj/item/clothing/mask/cigarette/cigar/havana"
|
||||
product_coin_amt = "2"
|
||||
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs."
|
||||
charge_type = "cigarette"
|
||||
|
||||
+106
-36
@@ -29,18 +29,59 @@
|
||||
IsShield()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod
|
||||
name = "null rod"
|
||||
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
|
||||
icon_state = "nullrod"
|
||||
item_state = "nullrod"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
force = 15
|
||||
force = 10
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
w_class = 1
|
||||
|
||||
/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
return
|
||||
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red The rod slips out of your hand and hits your head."
|
||||
user.take_organ_damage(10)
|
||||
user.Paralyse(20)
|
||||
return
|
||||
|
||||
if (M.stat !=2)
|
||||
if((M.mind in ticker.mode.cult) && prob(33))
|
||||
M << "\red The power of [src] clears your mind of the cult's influence!"
|
||||
user << "\red You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal."
|
||||
ticker.mode.remove_cultist(M.mind)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1)
|
||||
else if(prob(10))
|
||||
user << "\red The rod slips in your hand."
|
||||
..()
|
||||
else
|
||||
user << "\red The rod appears to do nothing."
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1)
|
||||
return
|
||||
|
||||
/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob)
|
||||
if (istype(A, /turf/simulated/floor))
|
||||
user << "\blue You hit the floor with the [src]."
|
||||
call(/obj/effect/rune/proc/revealrunes)(src)
|
||||
|
||||
/*/obj/item/weapon/sord
|
||||
name = "\improper SORD"
|
||||
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
|
||||
@@ -93,7 +134,7 @@
|
||||
w_class = 3.0
|
||||
|
||||
/obj/item/weapon/rsp
|
||||
name = "\improper Rapid-Seed-Producer"
|
||||
name = "\improper Rapid-Seed-Producer (RSP)"
|
||||
desc = "A device used to rapidly deploy seeds."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "rcd"
|
||||
@@ -289,6 +330,17 @@
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
/obj/item/weapon/corncob
|
||||
name = "corn cob"
|
||||
desc = "A reminder of meals gone by."
|
||||
icon = 'harvest.dmi'
|
||||
icon_state = "corncob"
|
||||
item_state = "corncob"
|
||||
w_class = 1.0
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
/obj/item/weapon/soap
|
||||
name = "soap"
|
||||
desc = "A cheap bar of soap. Doesn't smell."
|
||||
@@ -414,15 +466,15 @@
|
||||
var/heal_burn = 0
|
||||
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "\improper Roll of Gauze"
|
||||
singular_name = "\improper Roll of Gauze"
|
||||
name = "roll of gauze"
|
||||
singular_name = "roll of gauze"
|
||||
desc = "A roll of gauze for sealing up wounds."
|
||||
icon_state = "brutepack"
|
||||
heal_brute = 1
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/tajaran
|
||||
name = "S'rendarr's Hand leaf"
|
||||
name = "\improper S'rendarr's Hand leaf"
|
||||
singular_name = "S'rendarr's Hand leaf"
|
||||
desc = "A soft leaf that is rubbed on bruises."
|
||||
icon = 'harvest.dmi'
|
||||
@@ -439,7 +491,7 @@
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
/obj/item/stack/medical/ointment/tajaran
|
||||
name = "Messa's Tear leaf"
|
||||
name = "\improper Messa's Tear leaf"
|
||||
singular_name = "Messa's Tear leaf"
|
||||
desc = "A cold leaf that is rubbed on burns."
|
||||
icon = 'harvest.dmi'
|
||||
@@ -528,10 +580,15 @@
|
||||
var/access = list()
|
||||
var/registered_name = null
|
||||
var/assignment = null
|
||||
var/obj/item/weapon/photo/PHOTO = null
|
||||
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
|
||||
|
||||
/obj/item/weapon/card/id/silver
|
||||
name = "identification card"
|
||||
desc = "A silver card which shows honour and dedication."
|
||||
icon_state = "silver"
|
||||
item_state = "silver_id"
|
||||
|
||||
/obj/item/weapon/card/id/gold
|
||||
name = "identification card"
|
||||
desc = "A golden card which shows authority."
|
||||
@@ -586,18 +643,10 @@
|
||||
throw_range = 10
|
||||
flags = ONBELT
|
||||
|
||||
/obj/item/weapon/notebook
|
||||
/obj/item/weapon/clipboard/notebook
|
||||
name = "notebook"
|
||||
desc = "Holds paper and pens. Feels very noire."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "notebook00"
|
||||
var/obj/item/weapon/pen/pen = null
|
||||
item_state = "notebook"
|
||||
throwforce = 0
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
flags = ONBELT
|
||||
|
||||
#define MAXCOIL 30
|
||||
/obj/item/weapon/cable_coil
|
||||
@@ -613,7 +662,7 @@
|
||||
throw_range = 5
|
||||
m_amt = 50
|
||||
g_amt = 20
|
||||
flags = TABLEPASS|USEDELAY|FPRINT|CONDUCT
|
||||
flags = TABLEPASS|USEDELAY|FPRINT|CONDUCT | ONBELT
|
||||
item_state = "coil_red"
|
||||
|
||||
/obj/item/weapon/cable_coil/cut
|
||||
@@ -631,12 +680,22 @@
|
||||
color = "green"
|
||||
icon_state = "coil_green"
|
||||
|
||||
/obj/item/weapon/cable_coil/pink
|
||||
color = "pink"
|
||||
icon_state = "coil_pink"
|
||||
|
||||
/obj/item/weapon/cable_coil/random/New()
|
||||
color = pick("red","yellow","green","blue","pink")
|
||||
icon_state = "coil_[color]"
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/crowbar
|
||||
name = "crowbar"
|
||||
desc = "Used to remove floor tiles."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "crowbar"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
item_state = "wrench"
|
||||
@@ -821,9 +880,6 @@
|
||||
m_amt = 400
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/caution
|
||||
desc = "Caution! Wet Floor!"
|
||||
name = "wet floor sign"
|
||||
@@ -877,9 +933,14 @@
|
||||
name = "paper - 'Judgement'"
|
||||
info = "For crimes against the station, the offender is sentenced to:<BR>\n<BR>\n"
|
||||
|
||||
//Please resist giving this to people who have not survived game breaking bugs.
|
||||
/*Current recipients:
|
||||
Searif: Survived infinite cold bug, body temp was "-nan", still alive.
|
||||
eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discovery of that code and subsequent diking out.
|
||||
*/
|
||||
/obj/item/weapon/paper/certificate
|
||||
name = "paper - 'Certificate'"
|
||||
info = "Due to this person's unique actions in the past, we hereby certify that they are \"Totally Radical\"<br><br>----<b>Central Command</b><BR><i>This paper has been stamped with the central command rubber stamp.</i><BR>"
|
||||
info = "Due to this person's unique actions in the past, we hereby certify that they are \"Well Qualified\"<br><br>----<b>Central Command</b><BR><i>This paper has been stamped with the central command rubber stamp.</i><BR>"
|
||||
stamped = list(/obj/item/weapon/stamp/centcom)
|
||||
overlays = list("paper_stamped_cent")
|
||||
|
||||
@@ -1005,7 +1066,7 @@
|
||||
desc = "Used for screwing."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "screwdriver"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 5.0
|
||||
w_class = 1.0
|
||||
throwforce = 5.0
|
||||
@@ -1045,7 +1106,7 @@
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
/obj/item/weapon/spellbook
|
||||
name = "Spell Book"
|
||||
name = "spell book"
|
||||
desc = "The legendary book of spells of a wizard."
|
||||
icon = 'library.dmi'
|
||||
icon_state ="book"
|
||||
@@ -1169,6 +1230,12 @@
|
||||
maxcharge = 500
|
||||
g_amt = 40
|
||||
|
||||
/obj/item/weapon/cell/secborg
|
||||
name = "\improper Security borg rechargable D battery"
|
||||
origin_tech = "powerstorage=0"
|
||||
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
|
||||
g_amt = 40
|
||||
|
||||
/obj/item/weapon/cell/high
|
||||
name = "high-capacity power cell"
|
||||
origin_tech = "powerstorage=2"
|
||||
@@ -1195,14 +1262,17 @@
|
||||
use()
|
||||
return 1
|
||||
|
||||
/*/obj/item/weapon/cell/potato
|
||||
name = "Potato Battery"
|
||||
/obj/item/weapon/cell/potato
|
||||
name = "potato battery"
|
||||
desc = "A rechargable starch based power cell."
|
||||
icon = 'harvest.dmi'
|
||||
icon_state = "potato_battery"
|
||||
maxcharge = 100
|
||||
origin_tech = "powerstorage=1"
|
||||
icon = 'power.dmi' //'harvest.dmi'
|
||||
icon_state = "cell" //"potato_battery"
|
||||
charge = 100
|
||||
maxcharge = 300
|
||||
m_amt = 0
|
||||
g_amt = 0*/
|
||||
g_amt = 0
|
||||
minor_fault = 1
|
||||
|
||||
/obj/item/weapon/camera_bug/attack_self(mob/usr as mob)
|
||||
var/list/cameras = new/list()
|
||||
@@ -1330,7 +1400,7 @@
|
||||
name = "tray"
|
||||
icon = 'food.dmi'
|
||||
icon_state = "tray"
|
||||
desc = "A tray to lay food on."
|
||||
desc = "A metal tray to lay food on."
|
||||
throwforce = 12.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
@@ -1435,6 +1505,7 @@
|
||||
icon = 'surgery.dmi'
|
||||
icon_state = "drill"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 15.0
|
||||
w_class = 1.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
|
||||
@@ -1442,7 +1513,7 @@
|
||||
name = "circular saw"
|
||||
desc = "For heavy duty cutting."
|
||||
icon = 'surgery.dmi'
|
||||
icon_state = "saw"
|
||||
icon_state = "saw3"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 15.0
|
||||
w_class = 1.0
|
||||
@@ -1471,7 +1542,7 @@
|
||||
w_class = 1.0
|
||||
origin_tech = "biotech=2"
|
||||
|
||||
/*/obj/item/weapon/hatchet
|
||||
/obj/item/weapon/hatchet
|
||||
name = "hatchet"
|
||||
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
|
||||
icon = 'weapons.dmi'
|
||||
@@ -1483,7 +1554,7 @@
|
||||
throw_speed = 4
|
||||
throw_range = 4
|
||||
m_amt = 15000
|
||||
origin_tech = "materials=2;combat=1"*/
|
||||
origin_tech = "materials=2;combat=1"
|
||||
|
||||
/obj/item/weapon/stamp
|
||||
desc = "A rubber stamp for stamping important documents."
|
||||
@@ -1612,7 +1683,6 @@
|
||||
|
||||
/obj/item/weapon/pai_cable
|
||||
desc = "A flexible coated cable with a universal jack on one end."
|
||||
desc = "Some spacey cable."
|
||||
name = "data cable"
|
||||
icon = 'power.dmi'
|
||||
icon_state = "wire1"
|
||||
@@ -1740,7 +1810,7 @@
|
||||
/obj/item/weapon/stock_parts/capacitor/super
|
||||
name = "super capacitor"
|
||||
desc = "A super-high capacity capacitor used in the construction of a variety of devices."
|
||||
origin_tech = "powerstorage=3;materials=4"
|
||||
origin_tech = "powerstorage=5;materials=4"
|
||||
rating = 3
|
||||
m_amt = 50
|
||||
g_amt = 50
|
||||
|
||||
@@ -23,30 +23,6 @@
|
||||
/obj/structure/window/basic
|
||||
icon_state = "window"
|
||||
|
||||
/obj/structure/window/basic/north
|
||||
dir = NORTH
|
||||
|
||||
/obj/structure/window/basic/east
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/window/basic/west
|
||||
dir = WEST
|
||||
|
||||
/obj/structure/window/basic/south
|
||||
dir = SOUTH
|
||||
|
||||
/obj/structure/window/basic/northwest
|
||||
dir = NORTHWEST
|
||||
|
||||
/obj/structure/window/basic/northeast
|
||||
dir = NORTHEAST
|
||||
|
||||
/obj/structure/window/basic/southwest
|
||||
dir = SOUTHWEST
|
||||
|
||||
/obj/structure/window/basic/southeast
|
||||
dir = SOUTHEAST
|
||||
|
||||
// Reinforced
|
||||
|
||||
/obj/structure/window/reinforced
|
||||
|
||||
@@ -101,60 +101,6 @@
|
||||
//turfs += centerturf
|
||||
return turfs
|
||||
|
||||
|
||||
/proc/get_mobs_in_view(var/R, var/atom/source)
|
||||
// Returns a list of mobs in range of R from source. Used in radio and say code.
|
||||
|
||||
var/turf/T = get_turf(source)
|
||||
var/list/hear = hearers(R, T)
|
||||
var/list/V = view(R, T)
|
||||
|
||||
// Search for closets:
|
||||
for(var/obj/structure/closet/C in V)
|
||||
for(var/mob/M in C.contents)
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
// Cryos:
|
||||
for(var/obj/machinery/atmospherics/unary/cryo_cell/C in V)
|
||||
if(C.occupant)
|
||||
if(C.occupant.client)
|
||||
hear += C.occupant
|
||||
|
||||
// Intelicards
|
||||
for(var/obj/item/device/aicard/C in V)
|
||||
for(var/mob/living/silicon/ai/M in C)
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
// Brains/MMIs/pAIs
|
||||
for(var/mob/living/carbon/brain/C in world)
|
||||
if(get_turf(C) in V)
|
||||
hear += C
|
||||
for(var/mob/living/silicon/pai/C in world)
|
||||
if(get_turf(C) in V)
|
||||
hear += C
|
||||
|
||||
// Personal AIs
|
||||
for(var/obj/item/device/paicard/C in V)
|
||||
if(C.pai)
|
||||
if(C.pai.client)
|
||||
hear += C.pai
|
||||
|
||||
// Exosuits
|
||||
for(var/obj/mecha/C in V)
|
||||
if(C.occupant)
|
||||
if(C.occupant.client)
|
||||
hear += C.occupant
|
||||
|
||||
// Disposal Machines
|
||||
for(var/obj/machinery/disposal/C in V)
|
||||
for(var/mob/M in C.contents)
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
return hear
|
||||
|
||||
/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj)
|
||||
var/dx = Loc1.x - Loc2.x
|
||||
var/dy = Loc1.y - Loc2.y
|
||||
@@ -189,6 +135,154 @@
|
||||
turfs += T
|
||||
return turfs
|
||||
|
||||
|
||||
/proc/get_mobs_in_view(var/R, var/atom/source)
|
||||
// Returns a list of mobs in range of R from source. Used in radio and say code.
|
||||
|
||||
var/turf/T = get_turf(source)
|
||||
var/list/hear = hearers(R, T)
|
||||
var/list/V = range(R, T)
|
||||
|
||||
// Search for closets:
|
||||
for(var/obj/structure/closet/C in V)
|
||||
for(var/mob/M in C.contents)
|
||||
if(isInSight(source,C))
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
// Cryos:
|
||||
for(var/obj/machinery/atmospherics/unary/cryo_cell/C in V)
|
||||
if(C.occupant)
|
||||
if(isInSight(source,C))
|
||||
if(C.occupant.client)
|
||||
hear += C.occupant
|
||||
|
||||
// Intelicards
|
||||
for(var/obj/item/device/aicard/C in V)
|
||||
for(var/mob/living/silicon/ai/M in C)
|
||||
if(isInSight(source,C))
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
// Kind of a hacky fix, but should fix most cases without undo issues.
|
||||
for(var/mob/M as mob in V)
|
||||
for(var/obj/item/device/aicard/C in M.contents)
|
||||
for(var/mob/living/silicon/ai/A in C)
|
||||
if(isInSight(source,A))
|
||||
if(A.client)
|
||||
hear += A
|
||||
|
||||
// Soulstones
|
||||
for(var/obj/item/device/soulstone/C in V)
|
||||
for(var/mob/living/simple_animal/shade/M in C)
|
||||
if(isInSight(source,C))
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
// Kind of a hacky fix, but should fix most cases without undo issues.
|
||||
for(var/mob/M as mob in V)
|
||||
for(var/obj/item/device/soulstone/C in M.contents)
|
||||
for(var/mob/living/simple_animal/shade/A in C)
|
||||
if(isInSight(source,A))
|
||||
if(A.client)
|
||||
hear += A
|
||||
|
||||
|
||||
|
||||
// Brains/MMIs/pAIs
|
||||
for(var/mob/living/carbon/brain/C in world)
|
||||
if(get_turf(C) in V)
|
||||
if(isInSight(source,C))
|
||||
hear += C
|
||||
for(var/mob/living/silicon/pai/C in world)
|
||||
if(get_turf(C) in V)
|
||||
if(isInSight(source,C))
|
||||
hear += C
|
||||
|
||||
/* -- Handled above. WHY IS THIS HERE? WHYYYYYYY
|
||||
// Personal AIs
|
||||
for(var/obj/item/device/paicard/C in V)
|
||||
if(C.pai)
|
||||
if(isInSight(source,C))
|
||||
if(C.pai.client)
|
||||
hear += C.pai
|
||||
*/
|
||||
// Exosuits
|
||||
for(var/obj/mecha/C in V)
|
||||
if(C.occupant)
|
||||
if(isInSight(source,C))
|
||||
if(C.occupant.client)
|
||||
hear += C.occupant
|
||||
|
||||
// Disposal Machines
|
||||
for(var/obj/machinery/disposal/C in V)
|
||||
for(var/mob/M in C.contents)
|
||||
if(isInSight(source,C))
|
||||
if(M.client)
|
||||
hear += M
|
||||
|
||||
//Borg rechargers
|
||||
for(var/obj/machinery/recharge_station/C in V)
|
||||
if(C.occupant)
|
||||
if(isInSight(source,C))
|
||||
if(C.occupant.client)
|
||||
hear += C.occupant
|
||||
|
||||
for(var/obj/item/device/radio/theradio in V)
|
||||
if(isInSight(source,theradio))
|
||||
hear += theradio
|
||||
|
||||
|
||||
|
||||
return hear
|
||||
|
||||
#define SIGN(X) ((X<0)?-1:1)
|
||||
|
||||
proc
|
||||
inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5)
|
||||
var/turf/T
|
||||
if(X1==X2)
|
||||
if(Y1==Y2)
|
||||
return 1 //Light cannot be blocked on same tile
|
||||
else
|
||||
var/s = SIGN(Y2-Y1)
|
||||
Y1+=s
|
||||
while(Y1!=Y2)
|
||||
T=locate(X1,Y1,Z)
|
||||
if(T.opacity)
|
||||
return 0
|
||||
Y1+=s
|
||||
else
|
||||
var
|
||||
m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1))
|
||||
b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles
|
||||
signX = SIGN(X2-X1)
|
||||
signY = SIGN(Y2-Y1)
|
||||
if(X1<X2)
|
||||
b+=m
|
||||
while(X1!=X2 || Y1!=Y2)
|
||||
if(round(m*X1+b-Y1))
|
||||
Y1+=signY //Line exits tile vertically
|
||||
else
|
||||
X1+=signX //Line exits tile horizontally
|
||||
T=locate(X1,Y1,Z)
|
||||
if(T.opacity)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
proc/isInSight(var/atom/A, var/atom/B)
|
||||
var/turf/Aturf = get_turf(A)
|
||||
var/turf/Bturf = get_turf(B)
|
||||
|
||||
if(!Aturf || !Bturf)
|
||||
return 0
|
||||
|
||||
if(inLineOfSight(Aturf.x,Aturf.y, Bturf.x,Bturf.y,Aturf.z))
|
||||
return 1
|
||||
|
||||
else
|
||||
return 0
|
||||
|
||||
proc/check_can_reach(atom/user, atom/target)
|
||||
if(!in_range(user,target))
|
||||
return 0
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
return t
|
||||
|
||||
/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)
|
||||
for(var/char in strip_chars)
|
||||
var/index = findtext(t, char)
|
||||
@@ -910,11 +910,21 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
if (!the_key)
|
||||
text += "*no client*"
|
||||
else
|
||||
var/linked = 1
|
||||
if (include_link && !isnull(the_mob))
|
||||
if (istext(include_link))
|
||||
text += "<a href=\"byond://?src=[include_link];priv_msg=\ref[the_mob]\">"
|
||||
text += "<a href=\"byond://?src=[include_link];priv_msg=\ref[the_client]\">"
|
||||
else
|
||||
text += "<a href=\"byond://?src=\ref[include_link];priv_msg=\ref[the_mob]\">"
|
||||
if(ismob(include_link))
|
||||
var/mob/MM = include_link
|
||||
if(MM.client)
|
||||
text += "<a href=\"byond://?src=\ref[MM.client];priv_msg=\ref[the_client]\">"
|
||||
else
|
||||
linked = 0
|
||||
else if (istype(include_link, /client))
|
||||
text += "<a href=\"byond://?src=\ref[include_link];priv_msg=\ref[the_client]\">"
|
||||
else
|
||||
linked = 0
|
||||
|
||||
if (the_client && the_client.holder && the_client.stealth && !include_name)
|
||||
text += "Administrator"
|
||||
@@ -922,7 +932,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
text += "[the_key]"
|
||||
|
||||
if (!isnull(include_link) && !isnull(the_mob))
|
||||
text += "</a>"
|
||||
if(linked)
|
||||
text += "</a>"
|
||||
else
|
||||
text += " (DC)"
|
||||
|
||||
if (include_name && !isnull(the_mob))
|
||||
if (the_mob.real_name)
|
||||
@@ -1587,7 +1600,7 @@ proc/get_opposite(var/checkdir)
|
||||
var/a = copytext(text,i,i+1)
|
||||
if(a == character)
|
||||
count++
|
||||
return count
|
||||
return count
|
||||
|
||||
/proc/reverse_direction(var/dir)
|
||||
switch(dir)
|
||||
|
||||
@@ -191,3 +191,11 @@ proc/countJob(rank)
|
||||
for(var/mob/living/silicon/ai/M in world)
|
||||
if ((M.client && M.machine == subject))
|
||||
subject.attack_ai(M)
|
||||
|
||||
/proc/AutoUpdateTK(obj/subject)
|
||||
if (subject!=null)
|
||||
for(var/obj/item/tk_grab/T in world)
|
||||
if (T.host)
|
||||
var/mob/M = T.host
|
||||
if(M.client && M.machine == subject)
|
||||
subject.attack_hand(M)
|
||||
|
||||
+113
-9
@@ -127,7 +127,7 @@
|
||||
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
|
||||
if(!istype(H.dna, /datum/dna))
|
||||
H.dna = new /datum/dna(null)
|
||||
H.check_dna()
|
||||
H.check_dna()
|
||||
if (H.gloves && H.gloves != src)
|
||||
if(fingerprintslast != H.key)
|
||||
fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||
@@ -136,7 +136,7 @@
|
||||
if(H.gloves != src)
|
||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||
return 0
|
||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex) && !istype(H.gloves, /obj/item/clothing/gloves/fingerless))
|
||||
return 0
|
||||
if(fingerprintslast != H.key)
|
||||
fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
||||
@@ -336,6 +336,7 @@
|
||||
T.icon = I
|
||||
else
|
||||
T.icon = initial(icon)
|
||||
|
||||
if(blood_DNA && !blood_DNA.len)
|
||||
del(blood_DNA)
|
||||
if(src.fingerprints && src.fingerprints.len)
|
||||
@@ -376,16 +377,10 @@
|
||||
//world << "atom.Click() on [src] by [usr] : src.type is [src.type]"
|
||||
if(!istype(src,/obj/item/weapon/gun))
|
||||
usr.last_target_click = world.time
|
||||
var/list/pram = params2list(params)
|
||||
if((pram["alt"] != null && pram["ctrl"] != null && pram["left"] != null) && istype(src,/atom/movable))
|
||||
src:pull()
|
||||
return
|
||||
if(pram["ctrl"] != null && pram["left"] != null)
|
||||
src.examine()
|
||||
return
|
||||
if(usr.client.buildmode)
|
||||
build_click(usr, usr.client.buildmode, location, control, params, src)
|
||||
return
|
||||
|
||||
if(using_new_click_proc) //TODO ERRORAGE (see message below)
|
||||
return DblClickNew()
|
||||
return DblClick(location, control, params)
|
||||
@@ -694,6 +689,33 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
// world << "atom.DblClick() on [src] by [usr] : src.type is [src.type]"
|
||||
usr:lastDblClick = world.time
|
||||
|
||||
// ------- DIR CHANGING WHEN CLICKING (changes facting direction) ------
|
||||
|
||||
if( usr && iscarbon(usr) && !usr.buckled )
|
||||
if( src.x && src.y && usr.x && usr.y )
|
||||
var/dx = src.x - usr.x
|
||||
var/dy = src.y - usr.y
|
||||
|
||||
if( dy > 0 && abs(dx) < dy ) //North
|
||||
usr.dir = 1
|
||||
if( dy < 0 && abs(dx) < abs(dy) ) //South
|
||||
usr.dir = 2
|
||||
if( dx > 0 && abs(dy) <= dx ) //East
|
||||
usr.dir = 4
|
||||
if( dx < 0 && abs(dy) <= abs(dx) ) //West
|
||||
usr.dir = 8
|
||||
if( dx == 0 && dy == 0 )
|
||||
if(src.pixel_y > 16)
|
||||
usr.dir = 1
|
||||
if(src.pixel_y < -16)
|
||||
usr.dir = 2
|
||||
if(src.pixel_x > 16)
|
||||
usr.dir = 4
|
||||
if(src.pixel_x < -16)
|
||||
usr.dir = 8
|
||||
|
||||
|
||||
|
||||
|
||||
// ------- AI -------
|
||||
if (istype(usr, /mob/living/silicon/ai))
|
||||
@@ -707,6 +729,43 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
if (bot.lockcharge) return
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ------- SHIFT-CLICK -------
|
||||
|
||||
var/parameters = params2list(params)
|
||||
|
||||
if(parameters["shift"]){
|
||||
if(!isAI(usr))
|
||||
ShiftClick(usr)
|
||||
else
|
||||
AIShiftClick(usr)
|
||||
return
|
||||
}
|
||||
|
||||
// ------- ALT-CLICK -------
|
||||
|
||||
if(parameters["alt"]){
|
||||
if(!isAI(usr))
|
||||
AltClick(usr)
|
||||
else
|
||||
AIAltClick(usr)
|
||||
return
|
||||
}
|
||||
|
||||
// ------- CTRL-CLICK -------
|
||||
|
||||
if(parameters["ctrl"]){
|
||||
if(!isAI(usr))
|
||||
CtrlClick(usr)
|
||||
else
|
||||
AICtrlClick(usr)
|
||||
return
|
||||
}
|
||||
|
||||
// ------- THROW -------
|
||||
if(usr.in_throw_mode)
|
||||
return usr:throw_item(src)
|
||||
@@ -965,6 +1024,51 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
del D
|
||||
return 1
|
||||
|
||||
/atom/proc/CtrlClick(var/mob/M as mob)
|
||||
examine()
|
||||
return
|
||||
|
||||
/atom/proc/AltClick()
|
||||
if(hascall(src,"pull"))
|
||||
src:pull()
|
||||
return
|
||||
|
||||
/atom/proc/ShiftClick()
|
||||
if(hascall(src,"pull"))
|
||||
src:pull()
|
||||
return
|
||||
|
||||
/atom/proc/AIShiftClick() // Opens and closes doors!
|
||||
if(istype(src , /obj/machinery/door/airlock))
|
||||
if(src:density)
|
||||
var/nhref = "src=\ref[src];aiEnable=7"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
else
|
||||
var/nhref = "src=\ref[src];aiDisable=7"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
|
||||
return
|
||||
|
||||
/atom/proc/AIAltClick() // Eletrifies doors.
|
||||
if(istype(src , /obj/machinery/door/airlock))
|
||||
if(!src:secondsElectrified)
|
||||
var/nhref = "src=\ref[src];aiEnable=6"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
else
|
||||
var/nhref = "src=\ref[src];aiDisable=5"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
return
|
||||
|
||||
/atom/proc/AICtrlClick() // Bolts doors.
|
||||
if(istype(src , /obj/machinery/door/airlock))
|
||||
if(src:locked)
|
||||
var/nhref = "src=\ref[src];aiEnable=4"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
else
|
||||
var/nhref = "src=\ref[src];aiDisable=4"
|
||||
src.Topic(nhref, params2list(nhref), src, 1)
|
||||
return
|
||||
|
||||
|
||||
/*/atom/proc/get_global_map_pos()
|
||||
if(!islist(global_map) || isemptylist(global_map)) return
|
||||
|
||||
+10
-8
@@ -841,14 +841,16 @@
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/scan_consolenew/New()
|
||||
/obj/machinery/computer/scan_consolenew/New()
|
||||
..()
|
||||
spawn( 5 )
|
||||
spawn(5)
|
||||
src.connected = locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
|
||||
spawn(250)
|
||||
src.injectorready = 1
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if ((istype(W, /obj/item/weapon/disk/data)) && (!src.diskette))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
@@ -856,7 +858,7 @@
|
||||
user << "You insert [W]."
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/scan_consolenew/process() //not really used right now
|
||||
/obj/machinery/computer/scan_consolenew/process() //not really used right now
|
||||
processing_objects.Remove(src) //Lets not have it waste CPU
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
@@ -864,13 +866,13 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/scan_consolenew/attack_paw(user as mob)
|
||||
/obj/machinery/computer/scan_consolenew/attack_paw(user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/scan_consolenew/attack_ai(user as mob)
|
||||
/obj/machinery/computer/scan_consolenew/attack_ai(user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/scan_consolenew/attack_hand(user as mob)
|
||||
/obj/machinery/computer/scan_consolenew/attack_hand(user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!(user in message))
|
||||
@@ -931,7 +933,7 @@
|
||||
onclose(user, "scannernew")
|
||||
return
|
||||
|
||||
/obj/machinery/scan_consolenew/Topic(href, href_list)
|
||||
/obj/machinery/computer/scan_consolenew/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(!istype(usr.loc, /turf))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
for(var/atom/A in T)
|
||||
if(A.density)
|
||||
del(A)
|
||||
var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 )
|
||||
var/obj/effect/blob/bl = new /obj/effect/blob( T, 30 )
|
||||
spawn(0)
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
// SPACE VINE OR KUDZU
|
||||
|
||||
// SPACE VINES
|
||||
/obj/effect/spacevine
|
||||
name = "Space Kudzu"
|
||||
name = "space vines"
|
||||
desc = "An extremely expansionistic species of vine."
|
||||
icon = 'kudzu.dmi'
|
||||
icon = 'spacevines.dmi'
|
||||
icon_state = "Light1"
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/energy = 0 //Energy sounds like an arbitrary-enough variable name.
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
var/energy = 0
|
||||
var/obj/effect/spacevine_controller/master = null
|
||||
|
||||
New()
|
||||
if(istype(src.loc, /turf/space))
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
Del()
|
||||
if(master)
|
||||
@@ -22,37 +20,65 @@
|
||||
..()
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (!W) return
|
||||
if (!user) return
|
||||
if (istype(W, /obj/item/weapon/circular_saw)) del src
|
||||
if (istype(W, /obj/item/weapon/kitchen/utensil/knife)) del src
|
||||
if (istype(W, /obj/item/weapon/scalpel)) del src
|
||||
if (istype(W, /obj/item/weapon/screwdriver)) del src
|
||||
if (istype(W, /obj/item/weapon/shard)) del src
|
||||
if (istype(W, /obj/item/weapon/weldingtool)) del src
|
||||
if (istype(W, /obj/item/weapon/wirecutters)) del src
|
||||
if (!W || !user || !W.type) return
|
||||
switch(W.type)
|
||||
if(/obj/item/weapon/circular_saw) del src
|
||||
if(/obj/item/weapon/kitchen/utensil/knife) del src
|
||||
if(/obj/item/weapon/scalpel) del src
|
||||
if(/obj/item/weapon/fireaxe) del src
|
||||
// if(/obj/item/weapon/hatchet) del src
|
||||
if(/obj/item/weapon/melee/energy) del src
|
||||
|
||||
//less effective weapons
|
||||
if(/obj/item/weapon/wirecutters)
|
||||
if(prob(25)) del src
|
||||
if(/obj/item/weapon/shard)
|
||||
if(prob(25)) del src
|
||||
|
||||
else //weapons with subtypes
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword)) del src
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
if(W:welding) del src
|
||||
//TODO: add plant-b-gone
|
||||
..()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
for(var/mob/M in src.loc)
|
||||
if(M.buckled == src)
|
||||
if(prob(50))
|
||||
if(M == user)
|
||||
user << "\red You break free from the vines!"
|
||||
else
|
||||
user << "\red You rip away at the vines and free [M]!"
|
||||
M << "\red [user] frees you from the vines!"
|
||||
M.buckled = null
|
||||
else
|
||||
user << "\red You rip away at the vines..."
|
||||
break //only process one captured mob.
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/effect/spacevine_controller
|
||||
var/list/obj/effect/spacevine/vines = list()
|
||||
var/list/growth_queue = list()
|
||||
var/reached_collapse_size
|
||||
var/reached_slowdown_size
|
||||
//What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0,
|
||||
//meaning if you get the kudzu's size to something less than 20 plots, it won't grow anymore.
|
||||
//meaning if you get the spacevines' size to something less than 20 plots, it won't grow anymore.
|
||||
|
||||
New()
|
||||
if(!istype(src.loc,/turf/simulated/floor))
|
||||
del(src)
|
||||
|
||||
spawn_kudzu_piece(src.loc)
|
||||
spawn_spacevine_piece(src.loc)
|
||||
processing_objects.Add(src)
|
||||
|
||||
Del()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
proc/spawn_kudzu_piece(var/turf/location)
|
||||
proc/spawn_spacevine_piece(var/turf/location)
|
||||
var/obj/effect/spacevine/SV = new(location)
|
||||
growth_queue += SV
|
||||
vines += SV
|
||||
@@ -60,7 +86,7 @@
|
||||
|
||||
process()
|
||||
if(!vines)
|
||||
del(src) //Kudzu exterminated
|
||||
del(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
if(!growth_queue)
|
||||
del(src) //Sanity check
|
||||
@@ -88,39 +114,47 @@
|
||||
i++
|
||||
queue_end += SV
|
||||
growth_queue -= SV
|
||||
if(SV.energy < 2)
|
||||
if(prob(10))
|
||||
if(SV.energy < 2) //If tile isn't fully grown
|
||||
if(prob(20))
|
||||
SV.grow()
|
||||
else //If tile is fully grown
|
||||
SV.grab()
|
||||
|
||||
//if(prob(25))
|
||||
SV.spread()
|
||||
if(i >= length)
|
||||
break
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
|
||||
//sleep(5)
|
||||
//src.process()
|
||||
|
||||
/obj/effect/spacevine/proc/grow()
|
||||
switch(energy)
|
||||
if (0)
|
||||
src.icon_state = pick("Med1", "Med2", "Med3")
|
||||
energy = 1
|
||||
src.opacity = 1
|
||||
if (1)
|
||||
src.icon_state = pick("Hvy1", "Hvy2", "Hvy3")
|
||||
energy = 2
|
||||
src.density = 1
|
||||
if(!energy)
|
||||
src.icon_state = pick("Med1", "Med2", "Med3")
|
||||
energy = 1
|
||||
src.opacity = 1
|
||||
layer = 5
|
||||
else
|
||||
src.icon_state = pick("Hvy1", "Hvy2", "Hvy3")
|
||||
energy = 2
|
||||
|
||||
/obj/effect/spacevine/proc/grab()
|
||||
for(var/mob/living/carbon/V in src.loc)
|
||||
if((V.stat != DEAD) && (V.buckled != src)) //if mob not dead or captured
|
||||
V.buckled = src
|
||||
V << "\red The vines [pick("wind", "tangle")] around you!"
|
||||
break //only capture one mob at a time.
|
||||
|
||||
/obj/effect/spacevine/proc/spread()
|
||||
var/direction = pick(cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = get_step(src,direction)
|
||||
var/step = get_step(src,direction)
|
||||
if(istype(step,/turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = step
|
||||
if(!locate(/obj/effect/spacevine,F))
|
||||
if(F.Enter(src))
|
||||
if(master)
|
||||
master.spawn_kudzu_piece( F )
|
||||
|
||||
master.spawn_spacevine_piece( F )
|
||||
|
||||
/*
|
||||
/obj/effect/spacevine/proc/Life()
|
||||
@@ -169,8 +203,23 @@
|
||||
if (prob(50))
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/effect/spacevine/temperature_expose(null, temp, volume)
|
||||
del src
|
||||
/obj/effect/spacevine/temperature_expose(null, temp, volume) //hotspots kill vines
|
||||
del src
|
||||
|
||||
//Carn: Spacevines random event.
|
||||
/proc/spacevine_infestation()
|
||||
|
||||
spawn() //to stop the secrets panel hanging
|
||||
var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas
|
||||
for(var/areapath in typesof(/area/hallway))
|
||||
var/area/hallway/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A)
|
||||
if(!F.contents.len)
|
||||
turfs += F
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/simulated/floor/T = pick(turfs)
|
||||
new/obj/effect/spacevine_controller(T) //spawn a controller at turf
|
||||
message_admins("\blue Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])")
|
||||
@@ -2,11 +2,10 @@
|
||||
name = "traitor+changeling"
|
||||
config_tag = "traitorchan"
|
||||
traitors_possible = 3 //hard limit on traitors if scaling is turned off
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
required_players = 20
|
||||
required_enemies = 2
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
/datum/game_mode/traitor/changeling/announce()
|
||||
world << "<B>The current game mode is - Traitor+Changeling!</B>"
|
||||
@@ -14,6 +13,9 @@
|
||||
|
||||
|
||||
/datum/game_mode/traitor/changeling/pre_setup()
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
|
||||
|
||||
for(var/datum/mind/player in possible_changelings)
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
|
||||
/proc/is_convertable_to_cult(datum/mind/mind)
|
||||
if(!istype(mind)) return 0
|
||||
//This makes security unconvertable. *comments out*
|
||||
/* for(var/obj/item/weapon/implant/loyalty/L in mind.current)
|
||||
/* if(istype(mind.current, /mob/living/carbon/human) && (mind.assigned_role in list("Captain", "Head of Security", "Security Officer", "Detective", "Chaplain", "Warden"))) return 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in mind.current)
|
||||
if(L && L.implanted)
|
||||
return 0 */
|
||||
return 0*/
|
||||
return 1
|
||||
|
||||
|
||||
@@ -20,10 +20,14 @@
|
||||
name = "cult"
|
||||
config_tag = "cult"
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Captain", "Head of Security")
|
||||
required_players = 3
|
||||
required_enemies = 3
|
||||
recommended_enemies = 4
|
||||
|
||||
uplink_welcome = "Nar-Sie Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
var/datum/mind/sacrifice_target = null
|
||||
var/finished = 0
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
@@ -40,9 +44,6 @@
|
||||
var/const/max_cultists_to_start = 4
|
||||
var/acolytes_survived = 0
|
||||
|
||||
uplink_welcome = "Nar-Sie Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/cult/announce()
|
||||
world << "<B>The current game mode is - Cult!</B>"
|
||||
@@ -50,6 +51,15 @@
|
||||
|
||||
|
||||
/datum/game_mode/cult/pre_setup()
|
||||
if(prob(50) || num_players() < 10) // don't give summon nar-sie if less than 10 people, it's literally impossible in that case!
|
||||
objectives += "survive"
|
||||
objectives += "sacrifice"
|
||||
else
|
||||
objectives += "eldergod"
|
||||
objectives += "sacrifice"
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
var/list/cultists_possible = get_players_for_role(BE_CULTIST)
|
||||
for(var/datum/mind/player in cultists_possible)
|
||||
@@ -64,26 +74,18 @@
|
||||
cultists_possible -= cultist
|
||||
cult += cultist
|
||||
|
||||
// don't give summon nar-sie if less than 10 people,
|
||||
// it's literally impossible in that case!
|
||||
if(prob(50) || num_players() < 10)
|
||||
objectives += "survive"
|
||||
objectives += "sacrifice"
|
||||
else
|
||||
objectives += "eldergod"
|
||||
objectives += "sacrifice"
|
||||
|
||||
return (cult.len>0)
|
||||
|
||||
|
||||
/datum/game_mode/cult/post_setup()
|
||||
modePlayer += cult
|
||||
if("sacrifice" in objectives)
|
||||
var/list/possible_targets = list()
|
||||
var/list/possible_targets = get_unconvertables()
|
||||
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.mind && !(player.mind in cult))
|
||||
possible_targets += player.mind
|
||||
if(!possible_targets.len)
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.mind && !(player.mind in cult))
|
||||
possible_targets += player.mind
|
||||
|
||||
if(possible_targets.len > 0)
|
||||
sacrifice_target = pick(possible_targets)
|
||||
@@ -254,6 +256,14 @@
|
||||
del(I)
|
||||
|
||||
|
||||
/datum/game_mode/cult/proc/get_unconvertables()
|
||||
var/list/ucs = list()
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(!is_convertable_to_cult(player.mind))
|
||||
ucs += player.mind
|
||||
return ucs
|
||||
|
||||
|
||||
/datum/game_mode/cult/proc/check_cult_victory()
|
||||
var/cult_fail = 0
|
||||
if(objectives.Find("survive"))
|
||||
@@ -301,23 +311,30 @@
|
||||
if("survive")
|
||||
if(!check_survive())
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \green <b>Success!</b>"
|
||||
//feedback_add_details("cult_objective","cult_survive|SUCCESS|[acolytes_needed]")
|
||||
else
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \red Failed."
|
||||
//feedback_add_details("cult_objective","cult_survive|FAIL|[acolytes_needed]")
|
||||
if("sacrifice")
|
||||
if(!sacrifice_target)
|
||||
explanation = "Free objective"
|
||||
else
|
||||
if(sacrificed.Find(sacrifice_target))
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \green <b>Success!</b>"
|
||||
//feedback_add_details("cult_objective","cult_sacrifice|SUCCESS")
|
||||
else if(sacrifice_target && sacrifice_target.current)
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \red Failed."
|
||||
//feedback_add_details("cult_objective","cult_sacrifice|FAIL")
|
||||
else
|
||||
explanation = "Sacrifice Unknown, the Unknown whos body was likely gibbed. \red Failed."
|
||||
//feedback_add_details("cult_objective","cult_sacrifice|FAIL|GIBBED")
|
||||
if("eldergod")
|
||||
if(!eldergod)
|
||||
explanation = "Summon Nar-Sie. \green <b>Success!</b>"
|
||||
//feedback_add_details("cult_objective","cult_narsie|SUCCESS")
|
||||
else
|
||||
explanation = "Summon Nar-Sie. \red Failed."
|
||||
//feedback_add_details("cult_objective","cult_narsie|FAIL")
|
||||
world << "<B>Objective #[obj_count]</B>: [explanation]"
|
||||
|
||||
..()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
/obj/item/weapon/storage/emp_kit:3:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
|
||||
@@ -177,14 +177,13 @@ var/datum/roundinfo/roundinfo = new()
|
||||
|
||||
spawn(50)
|
||||
if (mode.station_was_nuked)
|
||||
feedback_set_details("end_proper","nuke")
|
||||
//feedback_set_details("end_proper","nuke")
|
||||
world << "\blue <B>Rebooting due to destruction of station in [restart_timeout/10] seconds</B>"
|
||||
else
|
||||
feedback_set_details("end_proper","proper completion")
|
||||
//feedback_set_details("end_proper","proper completion")
|
||||
world << "\blue <B>Restarting in [restart_timeout/10] seconds</B>"
|
||||
// send2irc(world.url,"Server Rebooting!")
|
||||
|
||||
feedback_set_details("round_end","[time2text(world.realtime)]")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
|
||||
@@ -199,23 +198,23 @@ var/datum/roundinfo/roundinfo = new()
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in world)
|
||||
if (aiPlayer.stat != 2)
|
||||
world << "<b>[aiPlayer.name]'s laws at the end of the game were:</b>"
|
||||
world << "<b>[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the game were:</b>"
|
||||
else
|
||||
world << "<b>[aiPlayer.name]'s laws when it was deactivated were:</b>"
|
||||
world << "<b>[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:</b>"
|
||||
aiPlayer.show_laws(1)
|
||||
|
||||
if (aiPlayer.connected_robots.len)
|
||||
var/robolist = "<b>The AI's loyal minions were:</b> "
|
||||
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
|
||||
robolist += "[robo.name][robo.stat?" (Deactivated), ":", "]"
|
||||
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":", (Played by: [robo.key])"]"
|
||||
world << "[robolist]"
|
||||
|
||||
for (var/mob/living/silicon/robot/robo in world)
|
||||
if (!robo.connected_ai)
|
||||
if (robo.stat != 2)
|
||||
world << "<b>[robo.name] survived as an AI-less borg! Its laws were:</b>"
|
||||
world << "<b>[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:</b>"
|
||||
else
|
||||
world << "<b>[robo.name] was unable to survive the rigors of being a cyborg without an AI. Its laws were:</b>"
|
||||
world << "<b>[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:</b>"
|
||||
robo.laws.show_laws(world)
|
||||
|
||||
mode.declare_completion()//To declare normal completion.
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
world << "Uh oh, its malfunction and there is no AI! Please report this."
|
||||
world << "Rebooting world in 5 seconds."
|
||||
|
||||
feedback_set_details("end_error","malf - no AI")
|
||||
feedback_set_details("round_end","[time2text(world.realtime)]")
|
||||
//feedback_set_details("end_error","malf - no AI")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(50)
|
||||
@@ -166,6 +166,7 @@
|
||||
ticker.mode:malf_mode_declared = 1
|
||||
for(var/datum/mind/AI_mind in ticker.mode:malf_ai)
|
||||
AI_mind.current.verbs -= /datum/game_mode/malfunction/proc/takeover
|
||||
world << sound('aimalf.ogg')
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/proc/ai_win()
|
||||
@@ -203,37 +204,37 @@
|
||||
var/crew_evacuated = (emergency_shuttle.location==2)
|
||||
|
||||
if ( station_captured && station_was_nuked)
|
||||
feedback_set_details("round_end_result","win - AI win - nuke")
|
||||
//feedback_set_details("round_end_result","win - AI win - nuke")
|
||||
world << "<FONT size = 3><B>AI Victory</B></FONT>"
|
||||
world << "<B>Everyone was killed by the self-destruct!</B>"
|
||||
|
||||
else if ( station_captured && malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - AI killed, staff lost control")
|
||||
//feedback_set_details("round_end_result","halfwin - AI killed, staff lost control")
|
||||
world << "<FONT size = 3><B>Neutral Victory</B></FONT>"
|
||||
world << "<B>The AI has been killed!</B> The staff has lose control over the station."
|
||||
|
||||
else if ( station_captured && !malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","win - AI win - no explosion")
|
||||
//feedback_set_details("round_end_result","win - AI win - no explosion")
|
||||
world << "<FONT size = 3><B>AI Victory</B></FONT>"
|
||||
world << "<B>The AI has chosen not to explode you all!</B>"
|
||||
|
||||
else if (!station_captured && station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - everyone killed by nuke")
|
||||
//feedback_set_details("round_end_result","halfwin - everyone killed by nuke")
|
||||
world << "<FONT size = 3><B>Neutral Victory</B></FONT>"
|
||||
world << "<B>Everyone was killed by the nuclear blast!</B>"
|
||||
|
||||
else if (!station_captured && malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","loss - staff win")
|
||||
//feedback_set_details("round_end_result","loss - staff win")
|
||||
world << "<FONT size = 3><B>Human Victory</B></FONT>"
|
||||
world << "<B>The AI has been killed!</B> The staff is victorious."
|
||||
|
||||
else if (!station_captured && !malf_dead && !station_was_nuked && crew_evacuated)
|
||||
feedback_set_details("round_end_result","halfwin - evacuated")
|
||||
//feedback_set_details("round_end_result","halfwin - evacuated")
|
||||
world << "<FONT size = 3><B>Neutral Victory</B></FONT>"
|
||||
world << "<B>The Corporation has lose [station_name()]! All survived personnel will be fired!</B>"
|
||||
|
||||
else if (!station_captured && !malf_dead && !station_was_nuked && !crew_evacuated)
|
||||
feedback_set_details("round_end_result","nalfwin - interrupted")
|
||||
//feedback_set_details("round_end_result","nalfwin - interrupted")
|
||||
world << "<FONT size = 3><B>Neutral Victory</B></FONT>"
|
||||
world << "<B>Round was mysteriously interrupted!</B>"
|
||||
..()
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
else
|
||||
survivors[player.real_name] = "alive"
|
||||
|
||||
feedback_set_details("round_end_result","end - evacuation")
|
||||
feedback_set("round_end_result",survivors.len)
|
||||
//feedback_set_details("round_end_result","end - evacuation")
|
||||
//feedback_set("round_end_result",survivors.len)
|
||||
|
||||
if (survivors.len)
|
||||
world << "\blue <B>The following survived the meteor attack!</B>"
|
||||
|
||||
@@ -132,9 +132,9 @@
|
||||
if(!leader_selected)
|
||||
prepare_syndicate_leader(synd_mind, nuke_code)
|
||||
leader_selected = 1
|
||||
//else
|
||||
//synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
|
||||
//agent_number++
|
||||
/* else
|
||||
synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
|
||||
agent_number++*/
|
||||
|
||||
equip_syndicate(synd_mind.current,freq)
|
||||
update_synd_icons_added(synd_mind)
|
||||
@@ -166,10 +166,10 @@
|
||||
|
||||
|
||||
/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code)
|
||||
// var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
|
||||
// spawn(1) // don't change names anymore!
|
||||
// NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen
|
||||
//synd_mind.current.real_name = "[syndicate_name()] [leader_title]"
|
||||
/* var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
|
||||
spawn(1)
|
||||
NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen
|
||||
synd_mind.current.real_name = "[syndicate_name()] [leader_title]"*/
|
||||
if (nuke_code)
|
||||
synd_mind.store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
|
||||
synd_mind.current << "The nuclear authorization code is: <B>[nuke_code]</B>"
|
||||
|
||||
@@ -217,8 +217,7 @@
|
||||
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
|
||||
feedback_set_details("end_error","nuke - unhandled ending")
|
||||
feedback_set_details("round_end","[time2text(world.realtime)]")
|
||||
//feedback_set_details("end_error","nuke - unhandled ending")
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
|
||||
@@ -11,22 +11,22 @@
|
||||
var/obj/item/weapon/disk/nuclear/the_disk = null
|
||||
var/active = 0
|
||||
|
||||
|
||||
attack_self()
|
||||
if(!active)
|
||||
active = 1
|
||||
work()
|
||||
workdisk()
|
||||
usr << "\blue You activate the pinpointer"
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
usr << "\blue You deactivate the pinpointer"
|
||||
|
||||
proc/work()
|
||||
proc/workdisk()
|
||||
if(!active) return
|
||||
if(!the_disk)
|
||||
the_disk = locate()
|
||||
if(!the_disk)
|
||||
active = 0
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
src.dir = get_dir(src,the_disk)
|
||||
@@ -41,6 +41,141 @@
|
||||
icon_state = "pinonfar"
|
||||
spawn(5) .()
|
||||
|
||||
examine()
|
||||
..()
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb.timing)
|
||||
usr << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/advpinpointer
|
||||
name = "Advanced Pinpointer"
|
||||
icon = 'device.dmi'
|
||||
desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal."
|
||||
var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates.
|
||||
var/turf/location = null
|
||||
var/obj/target = null
|
||||
|
||||
attack_self()
|
||||
if(!active)
|
||||
active = 1
|
||||
if(mode == 0)
|
||||
workdisk()
|
||||
if(mode == 1)
|
||||
worklocation()
|
||||
if(mode == 2)
|
||||
workobj()
|
||||
usr << "\blue You activate the pinpointer"
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
usr << "\blue You deactivate the pinpointer"
|
||||
|
||||
|
||||
proc/worklocation()
|
||||
if(!active)
|
||||
return
|
||||
if(!location)
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
src.dir = get_dir(src,location)
|
||||
switch(get_dist(src,location))
|
||||
if(0)
|
||||
icon_state = "pinondirect"
|
||||
if(1 to 8)
|
||||
icon_state = "pinonclose"
|
||||
if(9 to 16)
|
||||
icon_state = "pinonmedium"
|
||||
if(16 to INFINITY)
|
||||
icon_state = "pinonfar"
|
||||
spawn(5) .()
|
||||
|
||||
|
||||
proc/workobj()
|
||||
if(!active)
|
||||
return
|
||||
if(!target)
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
src.dir = get_dir(src,target)
|
||||
switch(get_dist(src,target))
|
||||
if(0)
|
||||
icon_state = "pinondirect"
|
||||
if(1 to 8)
|
||||
icon_state = "pinonclose"
|
||||
if(9 to 16)
|
||||
icon_state = "pinonmedium"
|
||||
if(16 to INFINITY)
|
||||
icon_state = "pinonfar"
|
||||
spawn(5) .()
|
||||
|
||||
/obj/item/weapon/pinpointer/advpinpointer/verb/toggle_mode()
|
||||
set category = "Object"
|
||||
set name = "Toggle Pinpointer Mode"
|
||||
set src in view(1)
|
||||
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
target=null
|
||||
location = null
|
||||
|
||||
switch(alert("Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", "Location", "Disk Recovery", "Other Signature"))
|
||||
if("Location")
|
||||
mode = 1
|
||||
|
||||
var/locationx = input(usr, "Please input the x coordinate to search for.", "Location?" , "") as num
|
||||
if(!locationx || !(usr in view(1,src)))
|
||||
return
|
||||
var/locationy = input(usr, "Please input the y coordinate to search for.", "Location?" , "") as num
|
||||
if(!locationy || !(usr in view(1,src)))
|
||||
return
|
||||
|
||||
var/turf/Z = get_turf(src)
|
||||
|
||||
location = locate(locationx,locationy,Z.z)
|
||||
|
||||
usr << "You set the pinpointer to locate [locationx],[locationy]"
|
||||
|
||||
|
||||
return attack_self()
|
||||
|
||||
if("Disk Recovery")
|
||||
mode = 0
|
||||
return attack_self()
|
||||
|
||||
if("Other Signature")
|
||||
mode = 2
|
||||
switch(alert("Search for item signature or DNA fragment?" , "Signature Mode Select" , "" , "Item" , "DNA"))
|
||||
if("Item")
|
||||
/* var/datum/objective/steal/itemlist
|
||||
itemlist = itemlist // To supress a 'variable defined but not used' error.
|
||||
var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in itemlist.possible_items
|
||||
if(!targetitem)
|
||||
return
|
||||
target=locate(itemlist.possible_items[targetitem])
|
||||
if(!target)
|
||||
usr << "Failed to locate [targetitem]!"
|
||||
return
|
||||
usr << "You set the pinpointer to locate [targetitem]"*/
|
||||
usr << "This doesn't work yet."
|
||||
if("DNA")
|
||||
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
|
||||
if(!DNAstring)
|
||||
return
|
||||
for(var/mob/living/carbon/M in world)
|
||||
if(!M.dna)
|
||||
continue
|
||||
if(M.dna.unique_enzymes == DNAstring)
|
||||
target = M
|
||||
break
|
||||
|
||||
return attack_self()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*/obj/item/weapon/pinpointer/New()
|
||||
. = ..()
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
//Gets the round setup, cancelling if there's not enough players at the start//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/datum/game_mode/revolution/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
var/list/datum/mind/possible_headrevs = get_players_for_role(BE_REV)
|
||||
|
||||
var/head_check = 0
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
M.CanBuild()
|
||||
|
||||
// setup_sectors()
|
||||
// spawn_exporation_packs()
|
||||
return 1
|
||||
|
||||
/datum/game_mode/sandbox/check_finished()
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
name = "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
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
recommended_enemies = 4
|
||||
@@ -29,6 +30,10 @@
|
||||
|
||||
|
||||
/datum/game_mode/traitor/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
var/list/possible_traitors = get_players_for_role(BE_TRAITOR)
|
||||
|
||||
// stop setup if no possible traitors
|
||||
@@ -118,6 +123,7 @@
|
||||
|
||||
|
||||
/datum/game_mode/traitor/declare_completion()
|
||||
..()
|
||||
return//Traitors will be checked as part of check_extra_completion. Leaving this here as a reminder.
|
||||
|
||||
|
||||
@@ -166,15 +172,19 @@
|
||||
for(var/datum/objective/objective in traitor.objectives)
|
||||
if(objective.check_completion())
|
||||
world << "<B>Objective #[count]</B>: [objective.explanation_text] \green <B>Success</B>"
|
||||
//feedback_add_details("traitor_objective","[objective.type]|SUCCESS")
|
||||
else
|
||||
world << "<B>Objective #[count]</B>: [objective.explanation_text] \red Failed"
|
||||
//feedback_add_details("traitor_objective","[objective.type]|FAIL")
|
||||
traitorwin = 0
|
||||
count++
|
||||
|
||||
if(traitorwin)
|
||||
world << "<B>The [special_role_text] was successful!<B>"
|
||||
//feedback_add_details("traitor_success","SUCCESS")
|
||||
else
|
||||
world << "<B>The [special_role_text] has failed!<B>"
|
||||
//feedback_add_details("traitor_success","FAIL")
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
|
||||
|
||||
/client/proc/rightandwrong()
|
||||
set category = "Spells"
|
||||
set desc = "Summon Guns"
|
||||
set name = "Wizards: No sense of right and wrong!"
|
||||
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
if(H.stat == 2 || !(H.client)) continue
|
||||
if(is_special_character(H)) continue
|
||||
if(prob(25))
|
||||
ticker.mode.traitors += H.mind
|
||||
H.mind.special_role = "traitor"
|
||||
var/datum/objective/survive/survive = new
|
||||
survive.owner = H.mind
|
||||
H.mind.objectives += survive
|
||||
H << "<B>You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...</B>"
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
var/randomize = pick("taser","egun","laser","revolver","smg","decloner","deagle","gyrojet","pulse","silenced","cannon","shotgun","freeze","uzi","crossbow")
|
||||
switch (randomize)
|
||||
if("taser")
|
||||
new /obj/item/weapon/gun/energy/taser(get_turf(H))
|
||||
if("egun")
|
||||
new /obj/item/weapon/gun/energy(get_turf(H))
|
||||
if("laser")
|
||||
new /obj/item/weapon/gun/energy/laser(get_turf(H))
|
||||
if("revolver")
|
||||
new /obj/item/weapon/gun/projectile(get_turf(H))
|
||||
if("smg")
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
||||
if("decloner")
|
||||
new /obj/item/weapon/gun/energy/decloner(get_turf(H))
|
||||
if("deagle")
|
||||
new /obj/item/weapon/gun/projectile/deagle/camo(get_turf(H))
|
||||
if("gyrojet")
|
||||
new /obj/item/weapon/gun/projectile/gyropistol(get_turf(H))
|
||||
if("pulse")
|
||||
new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H))
|
||||
if("silenced")
|
||||
new /obj/item/weapon/gun/projectile/silenced(get_turf(H))
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
if("shotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
|
||||
if("freeze")
|
||||
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
|
||||
if("uzi")
|
||||
new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H))
|
||||
if("crossbow")
|
||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(H))
|
||||
usr.verbs -= /client/proc/rightandwrong
|
||||
@@ -78,7 +78,17 @@
|
||||
src.icon_state = "soulstone"
|
||||
attack_self(U)
|
||||
|
||||
///////////////////////////Transferring to constructs/////////////////////////////////////////////////////
|
||||
/obj/structure/constructshell
|
||||
name = "empty shell"
|
||||
icon = 'wizard.dmi'
|
||||
icon_state = "construct"
|
||||
desc = "A wicked machine used by those skilled in magical arts. It is inactive"
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if(istype(O, /obj/item/device/soulstone))
|
||||
O.transfer_soul("CONSTRUCT",src,user)
|
||||
|
||||
|
||||
////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
|
||||
@@ -123,7 +133,7 @@
|
||||
C.name = "Soul Stone: [S.name]"
|
||||
S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs."
|
||||
U << "\blue <b>Capture successful!</b>: \black [T.name]'s soul has been ripped from their body and stored within the soul stone."
|
||||
S << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls."
|
||||
U << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls."
|
||||
C.imprinted = "[S.name]"
|
||||
del T
|
||||
if("SHADE")
|
||||
@@ -145,4 +155,50 @@
|
||||
C.icon_state = "soulstone2"
|
||||
T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form"
|
||||
U << "\blue <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone."
|
||||
return
|
||||
if("CONSTRUCT")
|
||||
var/obj/structure/constructshell/T = target
|
||||
var/obj/item/device/soulstone/C = src
|
||||
var/mob/living/simple_animal/shade/A = locate() in C
|
||||
if(A)
|
||||
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)
|
||||
if("Juggernaut")
|
||||
Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc))
|
||||
if (A.client)
|
||||
A.client.mob = Z
|
||||
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 still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall(Z)
|
||||
Z.cancel_camera()
|
||||
del(C)
|
||||
|
||||
if("Wraith")
|
||||
Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc))
|
||||
if (A.client)
|
||||
A.client.mob = Z
|
||||
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 still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift(Z)
|
||||
Z.cancel_camera()
|
||||
del(C)
|
||||
|
||||
if("Artificer")
|
||||
Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc))
|
||||
if (A.client)
|
||||
A.client.mob = Z
|
||||
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 still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser(Z)
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall(Z)
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/floor(Z)
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced(Z)
|
||||
Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone(Z)
|
||||
Z.cancel_camera()
|
||||
del(C)
|
||||
else
|
||||
U << "\red <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!"
|
||||
return
|
||||
|
||||
@@ -25,16 +25,21 @@
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=11'>Mutate</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=12'>Ethereal Jaunt</A> (60)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=13'>Knock</A> (10)<BR>"
|
||||
// if(op)
|
||||
// dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Summon Guns</A> (One time use, global spell)<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<B>Artefacts:</B><BR>"
|
||||
dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.<BR>"
|
||||
dat += "It is recommended that only experienced wizards attempt to wield such artefacts.<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Staff of Change</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Six Soul Stone Shards</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Six Soul Stone Shards and the spell Artificer</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Re-memorize Spells</A><BR>"
|
||||
// if(op)
|
||||
// dat += "<A href='byond://?src=\ref[src];spell_choice=17'>Veil Render</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=18'>Re-memorize Spells</A><BR>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
@@ -50,7 +55,7 @@
|
||||
if ((usr.contents.Find(src) || (in_range(src,usr) && istype(src.loc, /turf))))
|
||||
usr.machine = src
|
||||
if(href_list["spell_choice"])
|
||||
if(src.uses >= 1 && href_list["spell_choice"] != 16)
|
||||
if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 18)
|
||||
src.uses--
|
||||
if(spell_type == "verb")
|
||||
switch(href_list["spell_choice"])
|
||||
@@ -105,16 +110,24 @@
|
||||
usr.verbs += /client/proc/knock
|
||||
usr.mind.special_verbs += /client/proc/knock
|
||||
src.temp = "This spell opens nearby doors and does not require wizard garb."
|
||||
if ("14")
|
||||
// if ("14")
|
||||
// usr.verbs += /client/proc/rightandwrong
|
||||
// src.max_uses--
|
||||
// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!"
|
||||
if ("15")
|
||||
new /obj/item/weapon/gun/energy/staff(get_turf(usr))
|
||||
src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
|
||||
src.max_uses--
|
||||
if ("15")
|
||||
if ("16")
|
||||
new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr))
|
||||
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying"
|
||||
src.max_uses--
|
||||
// if ("17")
|
||||
// new /obj/item/weapon/veilrender(get_turf(usr))
|
||||
// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery."
|
||||
// src.max_uses--
|
||||
else if(spell_type == "object")
|
||||
var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock")
|
||||
var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Veil Render")
|
||||
var/already_knows = 0
|
||||
for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list)
|
||||
if(available_spells[text2num(href_list["spell_choice"])] == aspell.name)
|
||||
@@ -125,67 +138,79 @@
|
||||
if(!already_knows)
|
||||
switch(href_list["spell_choice"])
|
||||
if ("1")
|
||||
feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(usr)
|
||||
src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage."
|
||||
if ("2")
|
||||
feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr)
|
||||
src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
|
||||
// if ("3")
|
||||
// feedback_add_details("wizard_spell_learned","DG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
// usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr)
|
||||
// src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
|
||||
if ("4")
|
||||
feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr)
|
||||
src.temp = "This spell disables all weapons, cameras and most other technology in range."
|
||||
if ("5")
|
||||
feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/smoke(usr)
|
||||
src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
|
||||
if ("6")
|
||||
feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/trigger/blind(usr)
|
||||
src.temp = "This spell temporarly blinds a single person and does not require wizard garb."
|
||||
if ("7")
|
||||
feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(usr)
|
||||
src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process."
|
||||
if ("8")
|
||||
feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(usr)
|
||||
src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb."
|
||||
if ("9")
|
||||
feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(usr)
|
||||
src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience."
|
||||
if ("10")
|
||||
feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(usr)
|
||||
src.temp = "This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable."
|
||||
if ("11")
|
||||
feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/genetic/mutate(usr)
|
||||
src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while."
|
||||
if ("12")
|
||||
feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr)
|
||||
src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls."
|
||||
if ("13")
|
||||
feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
//feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr)
|
||||
src.temp = "This spell opens nearby doors and does not require wizard garb."
|
||||
if ("14")
|
||||
feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
// if ("14")
|
||||
// //feedback_add_details("wizard_spell_learned","SG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
// usr.verbs += /client/proc/rightandwrong
|
||||
// src.max_uses--
|
||||
// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!"
|
||||
if ("15")
|
||||
//feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
new /obj/item/weapon/gun/energy/staff(get_turf(usr))
|
||||
src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
|
||||
src.max_uses--
|
||||
if ("15")
|
||||
feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
if ("16")
|
||||
//feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr))
|
||||
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying"
|
||||
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(usr)
|
||||
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot."
|
||||
src.max_uses--
|
||||
if (href_list["spell_choice"] == "16")
|
||||
// if ("17")
|
||||
// //feedback_add_details("wizard_spell_learned","VR") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
// new /obj/item/weapon/veilrender(get_turf(usr))
|
||||
// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery.(Activate inhand to trigger its special ability)"
|
||||
// src.max_uses--
|
||||
if (href_list["spell_choice"] == "18")
|
||||
var/area/wizard_station/A = locate()
|
||||
if(usr in A.contents)
|
||||
src.uses = src.max_uses
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/obj/item/weapon/veilrender
|
||||
name = "veil render"
|
||||
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city."
|
||||
icon = 'wizard.dmi'
|
||||
icon_state = "render"
|
||||
item_state = "render"
|
||||
flags = FPRINT | TABLEPASS
|
||||
force = 15
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
var/charged = 1
|
||||
|
||||
|
||||
/obj/effect/rend
|
||||
name = "Tear in the fabric of reality"
|
||||
desc = "You should run now"
|
||||
icon = 'biomass.dmi'
|
||||
icon_state = "rift"
|
||||
density = 1
|
||||
unacidable = 1
|
||||
anchored = 1.0
|
||||
|
||||
|
||||
/obj/effect/rend/New()
|
||||
spawn(50)
|
||||
new /obj/machinery/singularity/narsie/wizard(get_turf(src))
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/veilrender/attack_self(mob/user as mob)
|
||||
if(charged == 1)
|
||||
new /obj/effect/rend(get_turf(usr))
|
||||
charged = 0
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red <B>[src] hums with power as [usr] deals a blow to reality itself!</B>")
|
||||
else
|
||||
user << "\red The unearthly energies that powered the blade are now dormant"
|
||||
|
||||
@@ -183,15 +183,19 @@
|
||||
for(var/datum/objective/objective in wizard.objectives)
|
||||
if(objective.check_completion())
|
||||
world << "<B>Objective #[count]</B>: [objective.explanation_text] \green <B>Success</B>"
|
||||
//feedback_add_details("wizard_objective","[objective.type]|SUCCESS")
|
||||
else
|
||||
world << "<B>Objective #[count]</B>: [objective.explanation_text] \red Failed"
|
||||
//feedback_add_details("wizard_objective","[objective.type]|FAIL")
|
||||
wizardwin = 0
|
||||
count++
|
||||
|
||||
if(wizard.current && wizard.current.stat!=2 && wizardwin)
|
||||
world << "<B>The wizard was successful!<B>"
|
||||
//feedback_add_details("wizard_success","SUCCESS")
|
||||
else
|
||||
world << "<B>The wizard has failed!<B>"
|
||||
//feedback_add_details("wizard_success","FAIL")
|
||||
return 1
|
||||
|
||||
//OTHER PROCS
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
if("Geneticist")
|
||||
return list(access_medical, access_morgue, access_medlab)
|
||||
if("Station Engineer")
|
||||
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks)
|
||||
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
||||
if("Assistant")
|
||||
return list()
|
||||
if("Chaplain")
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
total_positions = -1
|
||||
spawn_positions = -1
|
||||
supervisors = "absolutely everyone"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
|
||||
@@ -6,18 +6,24 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#ccccff"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/captain(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/pda/captain(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_r_hand)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H.back), H.slot_in_backpack)
|
||||
var/datum/organ/external/O = H.organs[pick(H.organs)]
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
@@ -36,17 +42,23 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ddddff"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/heads/hop(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/blue(H), H.slot_gloves)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_r_hand)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H.back), H.slot_in_backpack)
|
||||
return 1
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Food
|
||||
/datum/job/bartender
|
||||
title = "Bartender"
|
||||
@@ -12,18 +7,32 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/bartender(H), H.slot_w_uniform)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/bartender(H), H.slot_w_uniform)
|
||||
|
||||
if(H.backbag == 1)
|
||||
var/obj/item/weapon/storage/box/Barpack = new /obj/item/weapon/storage/box(H)
|
||||
H.equip_if_possible(Barpack, H.slot_r_hand)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(Barpack)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(Barpack)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(Barpack)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(Barpack)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(H), H.slot_in_backpack)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -36,6 +45,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -56,6 +66,7 @@
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -78,6 +89,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -100,6 +112,7 @@
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -120,16 +133,25 @@
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_mine (H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (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_eng(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/miner(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/weapon/crowbar(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/satchel(H), H.slot_in_backpack)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box(H), H.slot_r_hand)
|
||||
H.equip_if_possible(new /obj/item/weapon/crowbar(H), H.slot_l_hand)
|
||||
H.equip_if_possible(new /obj/item/weapon/satchel(H), H.slot_l_store)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/crowbar(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/satchel(H), H.slot_in_backpack)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -144,6 +166,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -172,12 +195,13 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H.back), H.slot_in_backpack)
|
||||
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)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/mime(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/mime(H), H.slot_belt)
|
||||
@@ -185,8 +209,14 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/mask/gas/mime(H), H.slot_wear_mask)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/beret(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/suspenders(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/toy/crayon/mime(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), H.slot_in_backpack)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H), H.slot_r_hand)
|
||||
H.equip_if_possible(new /obj/item/toy/crayon/mime(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), H.slot_l_hand)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H.back), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/toy/crayon/mime(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), H.slot_in_backpack)
|
||||
H.verbs += /client/proc/mimespeak
|
||||
H.verbs += /client/proc/mimewall
|
||||
H.mind.special_verbs += /client/proc/mimespeak
|
||||
@@ -205,6 +235,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -226,6 +257,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -246,11 +278,11 @@ var/global/lawyer = 0//Checks for another lawyer
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
if(!lawyer)
|
||||
lawyer = 1
|
||||
H.equip_if_possible(new /obj/item/clothing/under/lawyer/bluesuit(H), H.slot_w_uniform)
|
||||
@@ -260,7 +292,6 @@ var/global/lawyer = 0//Checks for another lawyer
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/lawyer/purpjacket(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/lawyer(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack)//Why do they even get this?
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/briefcase(H), H.slot_l_hand)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
alt_titles = list("Counselor")
|
||||
|
||||
|
||||
@@ -48,6 +49,7 @@
|
||||
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
|
||||
else
|
||||
B.name = "The Holy Book of [new_religion]"
|
||||
// feedback_set_details("religion_name","[new_religion]")
|
||||
|
||||
spawn(1)
|
||||
var/deity_name = "Space Jesus"
|
||||
@@ -66,10 +68,12 @@
|
||||
var/outoftime = 0
|
||||
spawn(200) // 20 seconds to choose
|
||||
outoftime = 1
|
||||
var/new_book_style = "Bible"
|
||||
|
||||
while(!accepted)
|
||||
if(!B) break // prevents possible runtime errors
|
||||
|
||||
switch(input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon"))
|
||||
new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon")
|
||||
switch(new_book_style)
|
||||
if("Koran")
|
||||
B.icon_state = "koran"
|
||||
B.item_state = "koran"
|
||||
@@ -141,4 +145,6 @@
|
||||
ticker.Bible_icon_state = B.icon_state
|
||||
ticker.Bible_item_state = B.item_state
|
||||
ticker.Bible_name = B.name
|
||||
// feedback_set_details("religion_deity","[new_deity]")
|
||||
// feedback_set_details("religion_book","[new_book_style]")
|
||||
return 1
|
||||
@@ -6,12 +6,15 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffeeaa"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/ce(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (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_eng(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/chief_engineer(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/pda/heads/ce(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
@@ -48,18 +51,21 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 5
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_eng(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial(H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial(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_eng(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/engineer(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/orange(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/helmet/hardhat(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/helmet/hardhat(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/device/t_scanner(H), H.slot_r_store)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -72,17 +78,24 @@
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_eng(H), H.slot_ears)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H.back), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(H), H.slot_l_hand)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/atmostech/(H), H.slot_belt)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H), H.slot_r_hand)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H.back), H.slot_in_backpack)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -95,11 +108,14 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the chief engineer and research director"
|
||||
selection_color = "#fff5cc"
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_eng(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_rob(H), H.slot_ears)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt)
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
//Supervisors, who this person answers to directly
|
||||
var/supervisors = ""
|
||||
|
||||
//Sellection screen color
|
||||
var/selection_color = "#ffffff"
|
||||
|
||||
//List of alternate titles, if any
|
||||
var/list/alt_titles
|
||||
|
||||
|
||||
@@ -6,12 +6,15 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffddf0"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/cmo(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (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_med(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/chief_medical_officer(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/heads/cmo(H), H.slot_belt)
|
||||
@@ -31,13 +34,20 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
alt_titles = list("Virologist", "Surgeon", "Emergency Medical Technician")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_med(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (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)
|
||||
if(alt_titles == "Virologist")
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_vir(H), H.slot_back)
|
||||
else
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_med(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/medical(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/medical(H), H.slot_belt)
|
||||
@@ -57,12 +67,15 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the chief medical officer and research director"
|
||||
selection_color = "#ffeef0"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (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_gen(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(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/medical(H), H.slot_belt)
|
||||
@@ -80,17 +93,19 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the chief medical officer and research director"
|
||||
selection_color = "#ffeef0"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_med(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (H), H.slot_back)
|
||||
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/virologist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/mask/surgical(H), H.slot_wear_mask)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/virologist(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/virologist(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
|
||||
return 1
|
||||
*/
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffddff"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -28,11 +29,15 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
supervisors = "the research director"
|
||||
selection_color = "#ffeeff"
|
||||
alt_titles = list("Plasma Researcher", "Xenobiologist")
|
||||
|
||||
|
||||
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_tox(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sci(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/scientist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
||||
@@ -43,7 +48,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
//Chemist is a medical job damnit
|
||||
/datum/job/chemist
|
||||
title = "Chemist"
|
||||
flag = CHEMIST
|
||||
@@ -52,10 +57,14 @@
|
||||
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)
|
||||
|
||||
@@ -6,11 +6,14 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ffdddd"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/security (H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/security (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_sec(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/hos(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_security(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/armourrigvest(H), H.slot_wear_suit)
|
||||
@@ -40,12 +43,15 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sec(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/security(H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/security(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_sec(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/warden(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/jackboots(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/security(H), H.slot_belt)
|
||||
@@ -72,13 +78,16 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
alt_titles = list("Forensic Technician")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sec(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
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_norm(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/det(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
|
||||
@@ -93,7 +102,7 @@
|
||||
H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/dflask(H.back), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/weapon/lighter/zippo(H), H.slot_l_store)
|
||||
// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
|
||||
// No... just no. --SkyMarshal
|
||||
var/datum/organ/external/O = H.organs[pick(H.organs)]
|
||||
@@ -113,12 +122,15 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 5
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sec(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/security(H), H.slot_back)
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/security(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_sec(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/security(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/jackboots(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/security(H), H.slot_belt)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 0
|
||||
spawn_positions = 1
|
||||
selection_color = "#ccffcc"
|
||||
supervisors = "your laws"
|
||||
|
||||
|
||||
@@ -22,6 +23,7 @@
|
||||
total_positions = 0
|
||||
spawn_positions = 1
|
||||
supervisors = "your laws and the AI" //Nodrak
|
||||
selection_color = "#ddffdd"
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
|
||||
@@ -4,7 +4,7 @@ var/global/datum/controller/occupations/job_master
|
||||
var
|
||||
//List of all jobs
|
||||
list/occupations = list()
|
||||
list/occupations2 = list()
|
||||
list/occupations2 = list() // Prevents problems with latejoiners.
|
||||
//Players who need jobs
|
||||
list/unassigned = list()
|
||||
//Debug info
|
||||
@@ -28,6 +28,8 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job) continue
|
||||
if(job.faction != faction) continue
|
||||
occupations += job
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -162,6 +164,8 @@ var/global/datum/controller/occupations/job_master
|
||||
unassigned = shuffle(unassigned)
|
||||
occupations2 = shuffle(occupations)
|
||||
|
||||
//HandleFeedbackGathering()
|
||||
|
||||
//Assistants are checked first
|
||||
Debug("DO, Running Assistant Check 1")
|
||||
var/datum/job/assist = new /datum/job/assistant()
|
||||
@@ -188,9 +192,12 @@ var/global/datum/controller/occupations/job_master
|
||||
for(var/level = 1 to 3)
|
||||
for(var/datum/job/job in occupations2)
|
||||
Debug("Checking job: [job]")
|
||||
if(!job) continue
|
||||
if(!unassigned.len) break
|
||||
if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) continue
|
||||
if(!job)
|
||||
continue
|
||||
if(!unassigned.len)
|
||||
break
|
||||
if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1)
|
||||
continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
while(candidates.len && ((job.current_positions < job.spawn_positions) || job.spawn_positions == -1))
|
||||
var/mob/new_player/candidate = pick(candidates)
|
||||
@@ -244,9 +251,26 @@ var/global/datum/controller/occupations/job_master
|
||||
// make sure we don't already have one on 1 ear :p
|
||||
if(!istype(H.r_ear,/obj/item/device/radio/headset) && !istype(H.l_ear,/obj/item/device/radio/headset))
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset(H), H.slot_ears)
|
||||
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H)
|
||||
H.equip_if_possible(BPK, H.slot_back,1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack)
|
||||
|
||||
if(H.mind && H.mind.assigned_role != "Cyborg" && H.mind.assigned_role != "AI" && H.mind.assigned_role != "Clown")
|
||||
if(H.backbag == 1) //Clown always gets his backbuddy.
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box(H), H.slot_r_hand)
|
||||
|
||||
if(H.backbag == 2)
|
||||
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
H.equip_if_possible(BPK, H.slot_back,1)
|
||||
|
||||
if(H.backbag == 3)
|
||||
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/satchel(H)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
H.equip_if_possible(BPK, H.slot_back,1)
|
||||
|
||||
if(H.backbag == 4)
|
||||
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/satchel_norm(H)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
H.equip_if_possible(BPK, H.slot_back,1)
|
||||
|
||||
//Give'em glasses if they are nearsighted
|
||||
if(H.disabilities & 1)
|
||||
var/equipped = H.equip_if_possible(new /obj/item/clothing/glasses/regular(H), H.slot_glasses)
|
||||
@@ -277,7 +301,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
|
||||
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/device/pda(H), H.slot_belt)
|
||||
if(locate(/obj/item/device/pda,H))//I bet this could just use locate
|
||||
if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal
|
||||
var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
|
||||
pda.owner = H.real_name
|
||||
pda.ownjob = H.wear_id.assignment
|
||||
@@ -327,4 +351,32 @@ var/global/datum/controller/occupations/job_master
|
||||
if(name == "AI" || name == "Cyborg")//I dont like this here but it will do for now
|
||||
J.total_positions = 0
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/*
|
||||
proc/HandleFeedbackGathering()
|
||||
for(var/datum/job/job in occupations)
|
||||
var/tmp_str = "|[job.title]|"
|
||||
|
||||
var/level1 = 0 //high
|
||||
var/level2 = 0 //medium
|
||||
var/level3 = 0 //low
|
||||
var/level4 = 0 //never
|
||||
var/level5 = 0 //banned
|
||||
for(var/mob/new_player/player in world)
|
||||
if(!((player) && (player.client) && (player.ready) && (player.mind) && (!player.mind.assigned_role)))
|
||||
continue //This player is not ready
|
||||
if(jobban_isbanned(player, job.title))
|
||||
level5++
|
||||
continue
|
||||
if(player.preferences.GetJobDepartment(job, 1) & job.flag)
|
||||
level1++
|
||||
else if(player.preferences.GetJobDepartment(job, 2) & job.flag)
|
||||
level2++
|
||||
else if(player.preferences.GetJobDepartment(job, 3) & job.flag)
|
||||
level3++
|
||||
else level4++ //not selected
|
||||
|
||||
tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|-"
|
||||
feedback_add_details("job_preferences",tmp_str)
|
||||
*/
|
||||
@@ -69,12 +69,11 @@ obj/machinery/door/airlock
|
||||
. = ..()
|
||||
if(!surpress_send) send_status()
|
||||
|
||||
proc
|
||||
set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
if(new_frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
if(new_frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
|
||||
initialize()
|
||||
if(frequency)
|
||||
@@ -140,11 +139,10 @@ obj/machinery/airlock_sensor
|
||||
|
||||
update_icon()
|
||||
|
||||
proc
|
||||
set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
|
||||
initialize()
|
||||
set_frequency(frequency)
|
||||
|
||||
@@ -58,10 +58,10 @@
|
||||
else
|
||||
icon_state = "[color]"
|
||||
if(holding)
|
||||
overlays += image('atmos.dmi', "can-open")
|
||||
overlays += "can-open"
|
||||
|
||||
if(connected_port)
|
||||
overlays += image('atmos.dmi', "can-connector")
|
||||
overlays += "can-connector"
|
||||
|
||||
var/tank_pressure = air_contents.return_pressure()
|
||||
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
else
|
||||
icon_state = "psiphon:0"
|
||||
|
||||
if(holding)
|
||||
overlays += "siphon-open"
|
||||
|
||||
if(connected_port)
|
||||
overlays += "siphon-connector"
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/pump/process()
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
else
|
||||
icon_state = "pscrubber:0"
|
||||
|
||||
if(holding)
|
||||
overlays += "scrubber-open"
|
||||
|
||||
if(connected_port)
|
||||
overlays += "scrubber-connector"
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/process()
|
||||
|
||||
@@ -57,6 +57,16 @@
|
||||
healthcheck()
|
||||
|
||||
|
||||
/obj/machinery/bot/attack_animal(var/mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0) return
|
||||
src.health -= M.melee_damage_upper
|
||||
src.visible_message("\red <B>[M] has [M.attacktext] [src]!</B>")
|
||||
if(prob(10))
|
||||
new /obj/effect/decal/cleanable/oil(src.loc)
|
||||
healthcheck()
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/bot/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
|
||||
@@ -319,6 +319,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
target_types += /obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
target_types += /obj/effect/decal/cleanable/blood/
|
||||
target_types += /obj/effect/decal/cleanable/blood/gibs/
|
||||
target_types += /obj/effect/decal/cleanable/dirt
|
||||
|
||||
/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target)
|
||||
src.anchored = 1
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
if(!charging || (stat & (BROKEN|NOPOWER)) )
|
||||
return
|
||||
|
||||
var/added = charging.give(500)
|
||||
var/added = charging.give(75)
|
||||
use_power(added / CELLRATE)
|
||||
|
||||
updateicon()
|
||||
@@ -20,23 +20,6 @@
|
||||
var/attempting = 0 //One clone attempt at a time thanks
|
||||
var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
|
||||
|
||||
/obj/machinery/computer/cloning
|
||||
name = "Cloning console"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "dna"
|
||||
circuit = "/obj/item/weapon/circuitboard/cloning"
|
||||
req_access = list(access_heads) //Only used for record deletion right now.
|
||||
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
|
||||
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
|
||||
var/temp = "Initializing System..."
|
||||
var/menu = 1 //Which menu screen to display
|
||||
var/list/records = list()
|
||||
var/datum/data/record/active_record = null
|
||||
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
|
||||
var/wantsscan = 1
|
||||
var/wantspod = 1
|
||||
var/list/message = list()
|
||||
|
||||
//The return of data disks?? Just for transferring between genetics machine/cloning machine.
|
||||
//TO-DO: Make the genetics machine accept them.
|
||||
/obj/item/weapon/disk/data
|
||||
@@ -64,375 +47,6 @@
|
||||
data = "0983E840344C39F4B059D5145FC5785DC6406A4FFF"
|
||||
read_only = 1
|
||||
|
||||
/obj/machinery/computer/cloning/New()
|
||||
..()
|
||||
spawn(5)
|
||||
updatemodules()
|
||||
/*src.scanner = locate(/obj/machinery/dna_scannernew, get_step(src, scandir))
|
||||
src.pod1 = locate(/obj/machinery/clonepod, get_step(src, poddir))
|
||||
|
||||
src.temp = ""
|
||||
if (isnull(src.scanner) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (isnull(src.pod1) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
else if (wantspod)
|
||||
src.pod1.connected = src
|
||||
|
||||
if (src.temp == "")
|
||||
src.temp = "System ready."*/
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/proc/updatemodules()
|
||||
//world << "UPDATING MODULES"
|
||||
src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
|
||||
src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST))
|
||||
//world << "SEARCHING FOR MACHEIN"
|
||||
//src.temp = ""
|
||||
//if (isnull(src.scanner))
|
||||
// src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (!isnull(src.pod1) && !wantspod)
|
||||
src.pod1.connected = src
|
||||
// src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
//else
|
||||
|
||||
//if (src.temp == "")
|
||||
// src.temp = "System ready."
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findscanner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR SCANNER"
|
||||
var/obj/machinery/dna_scannernew/scannerf = null
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
|
||||
if (!isnull(scannerf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(scannerf) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
return scannerf
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findcloner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR POD"
|
||||
var/obj/machinery/clonepod/podf = null
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
podf = locate(/obj/machinery/clonepod, get_step(src, dir))
|
||||
if (!isnull(podf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(podf) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
return podf
|
||||
|
||||
/obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
|
||||
if (!src.diskette)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.diskette = W
|
||||
user << "You insert [W]."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/cloning/attack_ai(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/cloning/attack_hand(mob/user as mob)
|
||||
if(!(user in message))
|
||||
user << "\blue This machine looks extremely complex. You'd probably need a decent knowledge of Genetics to understand it."
|
||||
message += user
|
||||
user.machine = src
|
||||
add_fingerprint(user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
updatemodules()
|
||||
var/dat = "<h3>Cloning System Control</h3>"
|
||||
dat += "<font size=-1><a href='byond://?src=\ref[src];refresh=1'>Refresh</a></font>"
|
||||
|
||||
dat += "<br><tt>[temp]</tt><br>"
|
||||
|
||||
switch(src.menu)
|
||||
if(1)
|
||||
if(wantsscan)
|
||||
dat += "<h4>Scanner Functions</h4>"
|
||||
|
||||
if (isnull(src.scanner))
|
||||
dat += "No scanner connected!"
|
||||
else
|
||||
if (src.scanner.occupant)
|
||||
dat += "<a href='byond://?src=\ref[src];scan=1'>Scan - [src.scanner.occupant]</a>"
|
||||
else
|
||||
dat += "Scanner unoccupied"
|
||||
|
||||
dat += "<br>Lock status: <a href='byond://?src=\ref[src];lock=1'>[src.scanner.locked ? "Locked" : "Unlocked"]</a>"
|
||||
|
||||
dat += "<h4>Database Functions</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>View Records</a><br>"
|
||||
if (src.diskette)
|
||||
dat += "<a href='byond://?src=\ref[src];disk=eject'>Eject Disk</a>"
|
||||
|
||||
|
||||
if(2)
|
||||
dat += "<h4>Current records</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=1'>Back</a><br><br>"
|
||||
for(var/datum/data/record/R in geneticsrecords)
|
||||
dat += "<a href='byond://?src=\ref[src];view_rec=\ref[R]'>[R.fields["id"]]-[R.fields["name"]]</a><br>"
|
||||
|
||||
if(3)
|
||||
dat += "<h4>Selected Record</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>Back</a><br>"
|
||||
|
||||
if (!src.active_record)
|
||||
dat += "<font color=red>ERROR: Record not found.</font>"
|
||||
else
|
||||
dat += "<br><font size=1><a href='byond://?src=\ref[src];del_rec=1'>Delete Record</a></font><br>"
|
||||
dat += "<b>Name:</b> [src.active_record.fields["name"]]<br>"
|
||||
|
||||
var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"])
|
||||
|
||||
if ((H) && (istype(H)))
|
||||
dat += "<b>Health:</b> [H.sensehealth()] | OXY-BURN-TOX-BRUTE<br>"
|
||||
else
|
||||
dat += "<font color=red>Unable to locate implant.</font><br>"
|
||||
|
||||
if (!isnull(src.diskette))
|
||||
dat += "<a href='byond://?src=\ref[src];disk=load'>Load from disk.</a>"
|
||||
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=ue'>UI + UE</a>"
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=ui'>UI</a>"
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=se'>SE</a>"
|
||||
dat += "<br>"
|
||||
else
|
||||
dat += "<br>" //Keeping a line empty for appearances I guess.
|
||||
|
||||
dat += {"<b>UI:</b> [src.active_record.fields["UI"]]<br>
|
||||
<b>SE:</b> [src.active_record.fields["SE"]]<br><br>"}
|
||||
if(wantspod)
|
||||
dat += "<a href='byond://?src=\ref[src];clone=\ref[src.active_record]'>Clone</a><br>"
|
||||
|
||||
if(4)
|
||||
if (!src.active_record)
|
||||
src.menu = 2
|
||||
dat = "[src.temp]<br>"
|
||||
dat += "<h4>Confirm Record Deletion</h4>"
|
||||
|
||||
dat += "<b><a href='byond://?src=\ref[src];del_rec=1'>Scan card to confirm.</a></b><br>"
|
||||
dat += "<b><a href='byond://?src=\ref[src];menu=3'>No</a></b>"
|
||||
|
||||
|
||||
user << browse(dat, "window=cloning")
|
||||
onclose(user, "cloning")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if ((href_list["scan"]) && (!isnull(src.scanner)))
|
||||
src.scan_mob(src.scanner.occupant)
|
||||
|
||||
//No locking an open scanner.
|
||||
else if ((href_list["lock"]) && (!isnull(src.scanner)))
|
||||
if ((!src.scanner.locked) && (src.scanner.occupant))
|
||||
src.scanner.locked = 1
|
||||
else
|
||||
src.scanner.locked = 0
|
||||
|
||||
else if (href_list["view_rec"])
|
||||
src.active_record = locate(href_list["view_rec"])
|
||||
if ((isnull(src.active_record.fields["ckey"])) || (src.active_record.fields["ckey"] == ""))
|
||||
del(src.active_record)
|
||||
src.temp = "ERROR: Record Corrupt"
|
||||
else
|
||||
src.menu = 3
|
||||
|
||||
else if (href_list["del_rec"])
|
||||
if ((!src.active_record) || (src.menu < 3))
|
||||
return
|
||||
if (src.menu == 3) //If we are viewing a record, confirm deletion
|
||||
src.temp = "Delete record?"
|
||||
src.menu = 4
|
||||
|
||||
else if (src.menu == 4)
|
||||
var/obj/item/weapon/card/id/C = usr.equipped()
|
||||
if (istype(C)||istype(C, /obj/item/device/pda))
|
||||
if(src.check_access(C))
|
||||
geneticsrecords.Remove(src.active_record)
|
||||
del(src.active_record)
|
||||
src.temp = "Record deleted."
|
||||
src.menu = 2
|
||||
else
|
||||
src.temp = "Access Denied."
|
||||
|
||||
else if (href_list["disk"]) //Load or eject.
|
||||
switch(href_list["disk"])
|
||||
if("load")
|
||||
if ((isnull(src.diskette)) || (src.diskette.data == ""))
|
||||
src.temp = "Load error."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
if (isnull(src.active_record))
|
||||
src.temp = "Record error."
|
||||
src.menu = 1
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
if (src.diskette.data_type == "ui")
|
||||
src.active_record.fields["UI"] = src.diskette.data
|
||||
if (src.diskette.ue)
|
||||
src.active_record.fields["name"] = src.diskette.owner
|
||||
else if (src.diskette.data_type == "se")
|
||||
src.active_record.fields["SE"] = src.diskette.data
|
||||
|
||||
src.temp = "Load successful."
|
||||
if("eject")
|
||||
if (!isnull(src.diskette))
|
||||
src.diskette.loc = src.loc
|
||||
src.diskette = null
|
||||
|
||||
else if (href_list["save_disk"]) //Save to disk!
|
||||
if ((isnull(src.diskette)) || (src.diskette.read_only) || (isnull(src.active_record)))
|
||||
src.temp = "Save error."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
switch(href_list["save_disk"]) //Save as Ui/Ui+Ue/Se
|
||||
if("ui")
|
||||
src.diskette.data = src.active_record.fields["UI"]
|
||||
src.diskette.ue = 0
|
||||
src.diskette.data_type = "ui"
|
||||
if("ue")
|
||||
src.diskette.data = src.active_record.fields["UI"]
|
||||
src.diskette.ue = 1
|
||||
src.diskette.data_type = "ui"
|
||||
if("se")
|
||||
src.diskette.data = src.active_record.fields["SE"]
|
||||
src.diskette.ue = 0
|
||||
src.diskette.data_type = "se"
|
||||
src.diskette.owner = src.active_record.fields["name"]
|
||||
src.diskette.name = "data disk - '[src.diskette.owner]'"
|
||||
src.temp = "Save \[[href_list["save_disk"]]\] successful."
|
||||
|
||||
else if (href_list["refresh"])
|
||||
src.updateUsrDialog()
|
||||
|
||||
else if (href_list["clone"])
|
||||
var/datum/data/record/C = locate(href_list["clone"])
|
||||
//Look for that player! They better be dead!
|
||||
if(C)
|
||||
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
|
||||
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
|
||||
if(answer == "No")
|
||||
selected = null
|
||||
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
|
||||
if ((!selected) || (!src.pod1) || (src.pod1.occupant) || (src.pod1.mess) || !config.revival_cloning)
|
||||
src.temp = "Unable to initiate cloning cycle." // most helpful error message in THE HISTORY OF THE WORLD
|
||||
else if (src.pod1.growclone(selected, C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"],C.fields["changeling"],C.fields["original"]))
|
||||
src.temp = "Cloning cycle activated."
|
||||
geneticsrecords.Remove(C)
|
||||
del(C)
|
||||
src.menu = 1
|
||||
|
||||
else if (href_list["menu"])
|
||||
src.menu = text2num(href_list["menu"])
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob)
|
||||
if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna))
|
||||
src.temp = "Error: Unable to locate valid genetic data."
|
||||
return
|
||||
if (subject.brain_op_stage == 4.0)
|
||||
src.temp = "Error: No signs of intelligence detected."
|
||||
return
|
||||
// if (subject.suiciding == 1)
|
||||
// src.temp = "Error: Subject's brain is not responding to scanning stimuli."
|
||||
// return
|
||||
// if ((!subject.ckey) || (!subject.client))
|
||||
// src.temp = "Error: Mental interface failure."
|
||||
// return
|
||||
if (subject.mutations & HUSK)
|
||||
src.temp = "Error: Mental interface failure."
|
||||
return
|
||||
if (!isnull(find_record(subject.ckey)))
|
||||
src.temp = "Subject already in database."
|
||||
return
|
||||
|
||||
subject.dna.check_integrity()
|
||||
|
||||
var/ckey = subject.ckey
|
||||
if(!ckey && subject && subject.mind)
|
||||
ckey = subject.mind.key
|
||||
|
||||
var/datum/data/record/R = new /datum/data/record( )
|
||||
R.fields["mrace"] = subject.mutantrace
|
||||
R.fields["ckey"] = ckey
|
||||
R.fields["name"] = subject.real_name
|
||||
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||
R.fields["UI"] = subject.dna.uni_identity
|
||||
R.fields["SE"] = subject.dna.struc_enzymes
|
||||
R.fields["changeling"] = subject.changeling
|
||||
R.fields["original"] = subject.original_name
|
||||
|
||||
// Preferences stuff
|
||||
R.fields["interface"] = subject.UI
|
||||
|
||||
|
||||
|
||||
//Add an implant if needed
|
||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||
if (isnull(imp))
|
||||
var/datum/organ/external/O = subject.organs[pick(subject.organs)]
|
||||
imp = new /obj/item/weapon/implant/health(O)
|
||||
O.implant += imp
|
||||
imp.implanted = subject
|
||||
R.fields["imp"] = "\ref[imp]"
|
||||
//Update it if needed
|
||||
else
|
||||
R.fields["imp"] = "\ref[imp]"
|
||||
|
||||
if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||
R.fields["mind"] = "\ref[subject.mind]"
|
||||
|
||||
geneticsrecords += R //Save it to the global scan list.
|
||||
src.temp = "Subject successfully scanned."
|
||||
|
||||
//Find a specific record by key.
|
||||
/obj/machinery/computer/cloning/proc/find_record(var/find_key)
|
||||
var/selected_record = null
|
||||
for(var/datum/data/record/R in geneticsrecords)
|
||||
if (R.fields["ckey"] == find_key)
|
||||
selected_record = R
|
||||
break
|
||||
return selected_record
|
||||
|
||||
/obj/machinery/computer/cloning/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "commb"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
|
||||
|
||||
//Find a dead mob with a brain and client.
|
||||
/proc/find_dead_player(var/find_key)
|
||||
if (isnull(find_key))
|
||||
|
||||
@@ -143,9 +143,11 @@
|
||||
new /obj/item/clothing/suit/syndicatefake(src.loc)
|
||||
new /obj/item/clothing/head/syndicatefake(src.loc)
|
||||
if(8)
|
||||
new /obj/item/toy/crayonbox(src.loc)
|
||||
new /obj/item/weapon/storage/crayonbox(src.loc)
|
||||
if(9)
|
||||
new /obj/item/toy/spinningtoy(src.loc)
|
||||
// if(10) //Commented out on Urist-chan's orders~
|
||||
// new /obj/item/toy/balloon(src.loc) //Until it gets a better sprite~
|
||||
else
|
||||
var/atom/movable/Prize = pick(contents)
|
||||
Prize.loc = src.loc
|
||||
|
||||
@@ -0,0 +1,464 @@
|
||||
/obj/machinery/computer/scan_consolenew
|
||||
name = "DNA Modifier Access Console"
|
||||
desc = "Scans DNA."
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "scanner"
|
||||
density = 1
|
||||
var/uniblock = 1.0
|
||||
var/strucblock = 1.0
|
||||
var/subblock = 1.0
|
||||
var/status = null
|
||||
var/radduration = 2.0
|
||||
var/radstrength = 1.0
|
||||
var/radacc = 1.0
|
||||
var/buffer1 = null
|
||||
var/buffer2 = null
|
||||
var/buffer3 = null
|
||||
var/buffer1owner = null
|
||||
var/buffer2owner = null
|
||||
var/buffer3owner = null
|
||||
var/buffer1label = null
|
||||
var/buffer2label = null
|
||||
var/buffer3label = null
|
||||
var/buffer1type = null
|
||||
var/buffer2type = null
|
||||
var/buffer3type = null
|
||||
var/buffer1iue = 0
|
||||
var/buffer2iue = 0
|
||||
var/buffer3iue = 0
|
||||
var/delete = 0
|
||||
var/injectorready = 0 //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete
|
||||
var/temphtml = null
|
||||
var/obj/machinery/dna_scanner/connected = null
|
||||
var/obj/item/weapon/disk/data/diskette = null
|
||||
var/list/message = list()
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 400
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.state = 4
|
||||
A.icon_state = "4"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
|
||||
if (!src.diskette)
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
src.diskette = I
|
||||
user << "You insert [I]."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning
|
||||
name = "Cloning console"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "dna"
|
||||
circuit = "/obj/item/weapon/circuitboard/cloning"
|
||||
req_access = list(access_heads) //Only used for record deletion right now.
|
||||
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
|
||||
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
|
||||
var/temp = "Initializing System..."
|
||||
var/menu = 1 //Which menu screen to display
|
||||
var/list/records = list()
|
||||
var/datum/data/record/active_record = null
|
||||
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
|
||||
var/wantsscan = 1
|
||||
var/wantspod = 1
|
||||
var/list/message = list()
|
||||
|
||||
/obj/machinery/computer/cloning/New()
|
||||
..()
|
||||
spawn(5)
|
||||
updatemodules()
|
||||
/*src.scanner = locate(/obj/machinery/dna_scannernew, get_step(src, scandir))
|
||||
src.pod1 = locate(/obj/machinery/clonepod, get_step(src, poddir))
|
||||
|
||||
src.temp = ""
|
||||
if (isnull(src.scanner) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (isnull(src.pod1) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
else if (wantspod)
|
||||
src.pod1.connected = src
|
||||
|
||||
if (src.temp == "")
|
||||
src.temp = "System ready."*/
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/proc/updatemodules()
|
||||
//world << "UPDATING MODULES"
|
||||
src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
|
||||
src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST))
|
||||
//world << "SEARCHING FOR MACHEIN"
|
||||
//src.temp = ""
|
||||
//if (isnull(src.scanner))
|
||||
// src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (!isnull(src.pod1) && !wantspod)
|
||||
src.pod1.connected = src
|
||||
// src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
//else
|
||||
|
||||
//if (src.temp == "")
|
||||
// src.temp = "System ready."
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findscanner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR SCANNER"
|
||||
var/obj/machinery/dna_scannernew/scannerf = null
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
|
||||
if (!isnull(scannerf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(scannerf) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
return scannerf
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findcloner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR POD"
|
||||
var/obj/machinery/clonepod/podf = null
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
podf = locate(/obj/machinery/clonepod, get_step(src, dir))
|
||||
if (!isnull(podf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(podf) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
return podf
|
||||
|
||||
/obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
|
||||
if (!src.diskette)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.diskette = W
|
||||
user << "You insert [W]."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/cloning/attack_ai(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/cloning/attack_hand(mob/user as mob)
|
||||
if(!(user in message))
|
||||
user << "\blue This machine looks extremely complex. You'd probably need a decent knowledge of Genetics to understand it."
|
||||
message += user
|
||||
user.machine = src
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
updatemodules()
|
||||
|
||||
var/dat = "<h3>Cloning System Control</h3>"
|
||||
dat += "<font size=-1><a href='byond://?src=\ref[src];refresh=1'>Refresh</a></font>"
|
||||
|
||||
dat += "<br><tt>[temp]</tt><br>"
|
||||
|
||||
switch(src.menu)
|
||||
if(1)
|
||||
if(wantsscan)
|
||||
dat += "<h4>Scanner Functions</h4>"
|
||||
|
||||
if (isnull(src.scanner))
|
||||
dat += "No scanner connected!"
|
||||
else
|
||||
if (src.scanner.occupant)
|
||||
dat += "<a href='byond://?src=\ref[src];scan=1'>Scan - [src.scanner.occupant]</a>"
|
||||
else
|
||||
dat += "Scanner unoccupied"
|
||||
|
||||
dat += "<br>Lock status: <a href='byond://?src=\ref[src];lock=1'>[src.scanner.locked ? "Locked" : "Unlocked"]</a>"
|
||||
|
||||
dat += "<h4>Database Functions</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>View Records</a><br>"
|
||||
if (src.diskette)
|
||||
dat += "<a href='byond://?src=\ref[src];disk=eject'>Eject Disk</a>"
|
||||
|
||||
|
||||
if(2)
|
||||
dat += "<h4>Current records</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=1'>Back</a><br><br>"
|
||||
for(var/datum/data/record/R in geneticsrecords)
|
||||
dat += "<a href='byond://?src=\ref[src];view_rec=\ref[R]'>[R.fields["id"]]-[R.fields["name"]]</a><br>"
|
||||
|
||||
if(3)
|
||||
dat += "<h4>Selected Record</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>Back</a><br>"
|
||||
|
||||
if (!src.active_record)
|
||||
dat += "<font color=red>ERROR: Record not found.</font>"
|
||||
else
|
||||
dat += "<br><font size=1><a href='byond://?src=\ref[src];del_rec=1'>Delete Record</a></font><br>"
|
||||
dat += "<b>Name:</b> [src.active_record.fields["name"]]<br>"
|
||||
|
||||
var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"])
|
||||
|
||||
if ((H) && (istype(H)))
|
||||
dat += "<b>Health:</b> [H.sensehealth()] | OXY-BURN-TOX-BRUTE<br>"
|
||||
else
|
||||
dat += "<font color=red>Unable to locate implant.</font><br>"
|
||||
|
||||
if (!isnull(src.diskette))
|
||||
dat += "<a href='byond://?src=\ref[src];disk=load'>Load from disk.</a>"
|
||||
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=ue'>UI + UE</a>"
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=ui'>UI</a>"
|
||||
dat += " | Save: <a href='byond://?src=\ref[src];save_disk=se'>SE</a>"
|
||||
dat += "<br>"
|
||||
else
|
||||
dat += "<br>" //Keeping a line empty for appearances I guess.
|
||||
|
||||
dat += {"<b>UI:</b> [src.active_record.fields["UI"]]<br>
|
||||
<b>SE:</b> [src.active_record.fields["SE"]]<br><br>"}
|
||||
if(wantspod)
|
||||
dat += "<a href='byond://?src=\ref[src];clone=\ref[src.active_record]'>Clone</a><br>"
|
||||
|
||||
if(4)
|
||||
if (!src.active_record)
|
||||
src.menu = 2
|
||||
dat = "[src.temp]<br>"
|
||||
dat += "<h4>Confirm Record Deletion</h4>"
|
||||
|
||||
dat += "<b><a href='byond://?src=\ref[src];del_rec=1'>Scan card to confirm.</a></b><br>"
|
||||
dat += "<b><a href='byond://?src=\ref[src];menu=3'>No</a></b>"
|
||||
|
||||
|
||||
user << browse(dat, "window=cloning")
|
||||
onclose(user, "cloning")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if ((href_list["scan"]) && (!isnull(src.scanner)))
|
||||
src.scan_mob(src.scanner.occupant)
|
||||
|
||||
//No locking an open scanner.
|
||||
else if ((href_list["lock"]) && (!isnull(src.scanner)))
|
||||
if ((!src.scanner.locked) && (src.scanner.occupant))
|
||||
src.scanner.locked = 1
|
||||
else
|
||||
src.scanner.locked = 0
|
||||
|
||||
else if (href_list["view_rec"])
|
||||
src.active_record = locate(href_list["view_rec"])
|
||||
if ((isnull(src.active_record.fields["ckey"])) || (src.active_record.fields["ckey"] == ""))
|
||||
del(src.active_record)
|
||||
src.temp = "ERROR: Record Corrupt"
|
||||
else
|
||||
src.menu = 3
|
||||
|
||||
else if (href_list["del_rec"])
|
||||
if ((!src.active_record) || (src.menu < 3))
|
||||
return
|
||||
if (src.menu == 3) //If we are viewing a record, confirm deletion
|
||||
src.temp = "Delete record?"
|
||||
src.menu = 4
|
||||
|
||||
else if (src.menu == 4)
|
||||
var/obj/item/weapon/card/id/C = usr.equipped()
|
||||
if (istype(C)||istype(C, /obj/item/device/pda))
|
||||
if(src.check_access(C))
|
||||
geneticsrecords.Remove(src.active_record)
|
||||
del(src.active_record)
|
||||
src.temp = "Record deleted."
|
||||
src.menu = 2
|
||||
else
|
||||
src.temp = "Access Denied."
|
||||
|
||||
else if (href_list["disk"]) //Load or eject.
|
||||
switch(href_list["disk"])
|
||||
if("load")
|
||||
if ((isnull(src.diskette)) || (src.diskette.data == ""))
|
||||
src.temp = "Load error."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
if (isnull(src.active_record))
|
||||
src.temp = "Record error."
|
||||
src.menu = 1
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
if (src.diskette.data_type == "ui")
|
||||
src.active_record.fields["UI"] = src.diskette.data
|
||||
if (src.diskette.ue)
|
||||
src.active_record.fields["name"] = src.diskette.owner
|
||||
else if (src.diskette.data_type == "se")
|
||||
src.active_record.fields["SE"] = src.diskette.data
|
||||
|
||||
src.temp = "Load successful."
|
||||
if("eject")
|
||||
if (!isnull(src.diskette))
|
||||
src.diskette.loc = src.loc
|
||||
src.diskette = null
|
||||
|
||||
else if (href_list["save_disk"]) //Save to disk!
|
||||
if ((isnull(src.diskette)) || (src.diskette.read_only) || (isnull(src.active_record)))
|
||||
src.temp = "Save error."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
switch(href_list["save_disk"]) //Save as Ui/Ui+Ue/Se
|
||||
if("ui")
|
||||
src.diskette.data = src.active_record.fields["UI"]
|
||||
src.diskette.ue = 0
|
||||
src.diskette.data_type = "ui"
|
||||
if("ue")
|
||||
src.diskette.data = src.active_record.fields["UI"]
|
||||
src.diskette.ue = 1
|
||||
src.diskette.data_type = "ui"
|
||||
if("se")
|
||||
src.diskette.data = src.active_record.fields["SE"]
|
||||
src.diskette.ue = 0
|
||||
src.diskette.data_type = "se"
|
||||
src.diskette.owner = src.active_record.fields["name"]
|
||||
src.diskette.name = "data disk - '[src.diskette.owner]'"
|
||||
src.temp = "Save \[[href_list["save_disk"]]\] successful."
|
||||
|
||||
else if (href_list["refresh"])
|
||||
src.updateUsrDialog()
|
||||
|
||||
else if (href_list["clone"])
|
||||
var/datum/data/record/C = locate(href_list["clone"])
|
||||
//Look for that player! They better be dead!
|
||||
if(C)
|
||||
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
|
||||
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
|
||||
if(answer == "No")
|
||||
selected = null
|
||||
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
|
||||
if ((!selected) || (!src.pod1) || (src.pod1.occupant) || (src.pod1.mess) || !config.revival_cloning)
|
||||
src.temp = "Unable to initiate cloning cycle." // most helpful error message in THE HISTORY OF THE WORLD
|
||||
else if (src.pod1.growclone(selected, C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"],C.fields["changeling"],C.fields["original"]))
|
||||
src.temp = "Cloning cycle activated."
|
||||
geneticsrecords.Remove(C)
|
||||
del(C)
|
||||
src.menu = 1
|
||||
|
||||
else if (href_list["menu"])
|
||||
src.menu = text2num(href_list["menu"])
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob)
|
||||
if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna))
|
||||
src.temp = "Error: Unable to locate valid genetic data."
|
||||
return
|
||||
if (subject.brain_op_stage == 4.0)
|
||||
src.temp = "Error: No signs of intelligence detected."
|
||||
return
|
||||
// if (subject.suiciding == 1)
|
||||
// src.temp = "Error: Subject's brain is not responding to scanning stimuli."
|
||||
// return
|
||||
// if ((!subject.ckey) || (!subject.client))
|
||||
// src.temp = "Error: Mental interface failure."
|
||||
// return
|
||||
if (subject.mutations & HUSK)
|
||||
src.temp = "Error: Mental interface failure."
|
||||
return
|
||||
if (!isnull(find_record(subject.ckey)))
|
||||
src.temp = "Subject already in database."
|
||||
return
|
||||
|
||||
subject.dna.check_integrity()
|
||||
|
||||
var/ckey = subject.ckey
|
||||
if(!ckey && subject && subject.mind)
|
||||
ckey = subject.mind.key
|
||||
|
||||
var/datum/data/record/R = new /datum/data/record( )
|
||||
R.fields["mrace"] = subject.mutantrace
|
||||
R.fields["ckey"] = ckey
|
||||
R.fields["name"] = subject.real_name
|
||||
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||
R.fields["UI"] = subject.dna.uni_identity
|
||||
R.fields["SE"] = subject.dna.struc_enzymes
|
||||
R.fields["changeling"] = subject.changeling
|
||||
R.fields["original"] = subject.original_name
|
||||
|
||||
// Preferences stuff
|
||||
R.fields["interface"] = subject.UI
|
||||
|
||||
|
||||
|
||||
//Add an implant if needed
|
||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||
if (isnull(imp))
|
||||
var/datum/organ/external/O = subject.organs[pick(subject.organs)]
|
||||
imp = new /obj/item/weapon/implant/health(O)
|
||||
O.implant += imp
|
||||
imp.implanted = subject
|
||||
R.fields["imp"] = "\ref[imp]"
|
||||
//Update it if needed
|
||||
else
|
||||
R.fields["imp"] = "\ref[imp]"
|
||||
|
||||
if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||
R.fields["mind"] = "\ref[subject.mind]"
|
||||
|
||||
geneticsrecords += R //Save it to the global scan list.
|
||||
src.temp = "Subject successfully scanned."
|
||||
|
||||
//Find a specific record by key.
|
||||
/obj/machinery/computer/cloning/proc/find_record(var/find_key)
|
||||
var/selected_record = null
|
||||
for(var/datum/data/record/R in geneticsrecords)
|
||||
if (R.fields["ckey"] == find_key)
|
||||
selected_record = R
|
||||
break
|
||||
return selected_record
|
||||
|
||||
/obj/machinery/computer/cloning/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "commb"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
@@ -98,7 +98,7 @@
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||
if((I)&&(I.imp_in))
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "\green You hear a voice in your head saying: '[warning]'"
|
||||
R << "\green You think: '[warning]'"
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -21,9 +21,11 @@
|
||||
if(screen == 1)
|
||||
for(var/mob/living/silicon/robot/R in world)
|
||||
if(istype(user, /mob/living/silicon/ai))
|
||||
if (R.connected_ai != user) continue
|
||||
if (R.connected_ai != user)
|
||||
continue
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
if (R != user) continue
|
||||
if (R != user)
|
||||
continue
|
||||
dat += "[R.name] |"
|
||||
if(R.stat)
|
||||
dat += " Not Responding |"
|
||||
@@ -148,10 +150,10 @@
|
||||
else if (href_list["stopbot"])
|
||||
if(src.allowed(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["stopbot"])
|
||||
if(R)
|
||||
if(R && istype(R)) // Extra sancheck because of input var references
|
||||
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm")
|
||||
if(R)
|
||||
if(R && istype(R))
|
||||
message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||
R.canmove = !R.canmove
|
||||
@@ -173,7 +175,7 @@
|
||||
if(R)
|
||||
var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm")
|
||||
if(R)
|
||||
if(R && istype(R))
|
||||
message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!")
|
||||
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
|
||||
R.emagged = 1
|
||||
|
||||
@@ -458,7 +458,7 @@ What a mess.*/
|
||||
temp = "<h5>Rank:</h5>"
|
||||
temp += "<ul>"
|
||||
for(var/rank in get_all_jobs())
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Rank;rank=[rank]'>[rank]</a></li>"
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Rank;rank=[rank];real_rank=[rank]'>[rank]</a></li>"
|
||||
temp += "</ul>"
|
||||
else
|
||||
alert(usr, "You do not have the required rank to do this!")
|
||||
|
||||
@@ -1,10 +1,27 @@
|
||||
/obj/machinery/door_control/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
if(wires & 2)
|
||||
return src.attack_hand(user)
|
||||
else
|
||||
user << "Error, no route to host."
|
||||
|
||||
/obj/machinery/door_control/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door_control/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
/* For later implementation
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
{
|
||||
if(wiresexposed)
|
||||
icon_state = "doorctrl0"
|
||||
wiresexposed = 0
|
||||
|
||||
else
|
||||
icon_state = "doorctrl-open"
|
||||
wiresexposed = 1
|
||||
|
||||
return
|
||||
}
|
||||
*/
|
||||
if(istype(W, /obj/item/device/detective_scanner))
|
||||
return
|
||||
return src.attack_hand(user)
|
||||
@@ -12,6 +29,11 @@
|
||||
/obj/machinery/door_control/attack_hand(mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
if(!allowed(user) && (wires & 1))
|
||||
flick("doorctrl-denied",src)
|
||||
return
|
||||
|
||||
use_power(5)
|
||||
icon_state = "doorctrl1"
|
||||
|
||||
|
||||
@@ -274,7 +274,10 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
if (src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR))
|
||||
return 0
|
||||
use_power(50)
|
||||
playsound(src.loc, 'airlock.ogg', 30, 1)
|
||||
if(istype(src, /obj/machinery/door/airlock/glass))
|
||||
playsound(src.loc, 'windowdoor.ogg', 30, 1)
|
||||
else
|
||||
playsound(src.loc, 'airlock.ogg', 30, 1)
|
||||
if (src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
|
||||
src.closeOther.close()
|
||||
return ..()
|
||||
@@ -285,7 +288,10 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
return
|
||||
..()
|
||||
use_power(50)
|
||||
playsound(src.loc, 'airlock.ogg', 30, 1)
|
||||
if(istype(src, /obj/machinery/door/airlock/glass))
|
||||
playsound(src.loc, 'windowdoor.ogg', 30, 1)
|
||||
else
|
||||
playsound(src.loc, 'airlock.ogg', 30, 1)
|
||||
var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
|
||||
if(killthis)
|
||||
killthis.ex_act(2)//Smashin windows
|
||||
@@ -1068,8 +1074,9 @@ About the new airlock wires panel:
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/Topic(href, href_list)
|
||||
..()
|
||||
/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0)
|
||||
if(!nowindow)
|
||||
..()
|
||||
if (usr.stat || usr.restrained() )
|
||||
return
|
||||
if (href_list["close"])
|
||||
@@ -1277,7 +1284,8 @@ About the new airlock wires panel:
|
||||
src.holdopen = 1
|
||||
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
if(!nowindow)
|
||||
src.updateUsrDialog()
|
||||
if((istype(usr.equipped(), /obj/item/device/hacktool)))
|
||||
return attack_ai(usr, usr.equipped())
|
||||
else if(issilicon(usr))
|
||||
|
||||
@@ -300,6 +300,7 @@
|
||||
src.operating = 1
|
||||
|
||||
animate("opening")
|
||||
src.sd_SetOpacity(0)
|
||||
sleep(10)
|
||||
src.layer = 2.7
|
||||
src.density = 0
|
||||
|
||||
@@ -623,11 +623,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
src.updateicon()
|
||||
|
||||
else
|
||||
user << "\red The tray already has a seed in it!"
|
||||
user << "\red The tray already has seeds in it!"
|
||||
|
||||
else if (istype(O, /obj/item/device/analyzer/plant_analyzer))
|
||||
if(src.planted && src.myseed)
|
||||
user << "*** <B>[src.myseed.name]</B> ***"
|
||||
user << "*** <B>[src.myseed.plantname]</B> ***" //Carn: now reports the plants growing, not the seeds.
|
||||
user << "-Plant Age: \blue [src.age]"
|
||||
user << "-Plant Endurance: \blue [src.myseed.endurance]"
|
||||
user << "-Plant Lifespan: \blue [src.myseed.lifespan]"
|
||||
|
||||
@@ -158,8 +158,19 @@ Class Procs:
|
||||
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
if ((!in_range(src, usr) || !istype(src.loc, /turf)) && !istype(usr, /mob/living/silicon))
|
||||
return 1
|
||||
|
||||
var/norange = 0
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(istype(H.l_hand, /obj/item/tk_grab))
|
||||
norange = 1
|
||||
else if(istype(H.r_hand, /obj/item/tk_grab))
|
||||
norange = 1
|
||||
|
||||
if(!norange)
|
||||
if ((!in_range(src, usr) || !istype(src.loc, /turf)) && !istype(usr, /mob/living/silicon))
|
||||
return 1
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
return 0
|
||||
|
||||
@@ -174,9 +185,9 @@ Class Procs:
|
||||
return 1
|
||||
if(user.lying || user.stat)
|
||||
return 1
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
istype(user, /mob/living/silicon) || \
|
||||
istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
if ( ! (istype(usr, /mob/living/carbon/human) || \
|
||||
istype(usr, /mob/living/silicon) || \
|
||||
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
/*
|
||||
|
||||
@@ -19,7 +19,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
// 1 = assistance
|
||||
// 2 = supplies
|
||||
// 3 = info
|
||||
// 4 = ass + sup
|
||||
// 4 = ass + sup //Erro goddamn you just HAD to shorten "assistance" down to "ass"
|
||||
// 5 = ass + info
|
||||
// 6 = sup + info
|
||||
// 7 = ass + sup + info
|
||||
@@ -217,7 +217,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
announceAuth = 0;
|
||||
screen = 0
|
||||
if(href_list["sendAnnouncement"])
|
||||
world << "<b><font size = 3> <font color = red>[department] announcement:</font color> [html_encode(message)]</font size></b>"
|
||||
world << "<b><font size = 3><font color = red>[department] announcement:</font color> [html_encode(message)]</font size></b>"
|
||||
announceAuth = 0
|
||||
message = ""
|
||||
screen = 0
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
return
|
||||
|
||||
update_icon()
|
||||
overlays = null
|
||||
icon_state = "sheater[on]"
|
||||
if(open)
|
||||
icon_state = "sheater-open"
|
||||
else
|
||||
icon_state = "sheater[on]"
|
||||
overlays += "sheater-open"
|
||||
return
|
||||
|
||||
examine()
|
||||
|
||||
@@ -288,6 +288,9 @@ var
|
||||
if (R.client && R.client.STFU_radio) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
|
||||
continue
|
||||
|
||||
if(istype(M, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
|
||||
continue
|
||||
|
||||
|
||||
// --- Check for compression ---
|
||||
if(compression > 0)
|
||||
|
||||
@@ -58,10 +58,12 @@
|
||||
for(var/datum/comm_log_entry/C in SelectedServer.log_entries)
|
||||
i++
|
||||
|
||||
dat += "<li><font color = #008F00>[C.name]</font color> <font color = #FF0000><a href='?src=\ref[src];delete=[i]'>\[X\]</a></font color><br>"
|
||||
|
||||
// If the log is a speech file
|
||||
if(C.input_type == "Speech File")
|
||||
|
||||
dat += "<li><font color = #008F00>[C.name]</font color> <font color = #FF0000><a href='?src=\ref[src];delete=[i]'>\[X\]</a></font color><br>"
|
||||
|
||||
// -- Determine race of orator --
|
||||
|
||||
var/race // The actual race of the mob
|
||||
@@ -113,9 +115,10 @@
|
||||
dat += "</li><br>"
|
||||
|
||||
else if(C.input_type == "Execution Error")
|
||||
dat += "<u><font color = #18743E>Data type</font color></u>: [C.input_type]<br>"
|
||||
dat += "<u><font color = #18743E>Source</font color></u>: Internal server code<br>"
|
||||
dat += "<u><font color = #18743E>Contents</font color></u>: \"[C.parameters["message"]]\"<br>"
|
||||
|
||||
dat += "<li><font color = #990000>[C.name]</font color> <font color = #FF0000><a href='?src=\ref[src];delete=[i]'>\[X\]</a></font color><br>"
|
||||
dat += "<u><font color = #787700>Output</font color></u>: \"[C.parameters["message"]]\"<br>"
|
||||
dat += "</li><br>"
|
||||
|
||||
|
||||
dat += "</ol>"
|
||||
@@ -192,7 +195,7 @@
|
||||
|
||||
var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
|
||||
|
||||
if(newnet && usr in range(1, src))
|
||||
if(newnet && ((usr in range(1, src) || issilicon(usr))))
|
||||
if(length(newnet) > 15)
|
||||
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
screen = 0 // the screen number:
|
||||
list/servers = list() // the servers located by the computer
|
||||
mob/editingcode
|
||||
mob/lasteditor
|
||||
list/viewingcode = list()
|
||||
obj/machinery/telecomms/server/SelectedServer
|
||||
|
||||
@@ -49,13 +50,13 @@
|
||||
showcode = dd_replacetext(storedcode, "\"", "\\\"")
|
||||
|
||||
for(var/mob/M in viewingcode)
|
||||
if(M.machine == src && M in view(1, src))
|
||||
|
||||
if( (M.machine == src && M in view(1, src) ) || issilicon(M))
|
||||
winset(M, "tcscode", "is-disabled=true")
|
||||
winset(M, "tcscode", "text=\"[showcode]\"")
|
||||
else
|
||||
if(!issilicon(M))
|
||||
viewingcode.Remove(M)
|
||||
winshow(M, "Telecomms IDE", 0) // hide the window!
|
||||
viewingcode.Remove(M)
|
||||
winshow(M, "Telecomms IDE", 0) // hide the window!
|
||||
|
||||
sleep(5)
|
||||
|
||||
@@ -164,6 +165,7 @@
|
||||
if(usr in viewingcode) return
|
||||
|
||||
if(!editingcode)
|
||||
lasteditor = usr
|
||||
editingcode = usr
|
||||
winshow(editingcode, "Telecomms IDE", 1) // show the IDE
|
||||
winset(editingcode, "tcscode", "is-disabled=false")
|
||||
|
||||
@@ -385,6 +385,20 @@
|
||||
user << browse(t, "window=turretid")
|
||||
onclose(user, "turretid")
|
||||
|
||||
|
||||
/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if(!(stat & BROKEN))
|
||||
playsound(src.loc, 'slash.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.die()
|
||||
else
|
||||
M << "\green That object is useless to you."
|
||||
return
|
||||
|
||||
/obj/machinery/turretid/Topic(href, href_list)
|
||||
..()
|
||||
if (src.locked)
|
||||
@@ -400,6 +414,12 @@
|
||||
src.attack_hand(usr)
|
||||
|
||||
/obj/machinery/turretid/proc/updateTurrets()
|
||||
if(control_area)
|
||||
for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
|
||||
aTurret.setState(enabled, lethal)
|
||||
src.update_icons()
|
||||
|
||||
/obj/machinery/turretid/proc/update_icons()
|
||||
if (src.enabled)
|
||||
if (src.lethal)
|
||||
src.icon_state = "motion1"
|
||||
@@ -417,20 +437,6 @@
|
||||
for (var/obj/machinery/turret/aTurret in turrets)
|
||||
aTurret.setState(enabled, lethal)
|
||||
|
||||
/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if(!(stat & BROKEN))
|
||||
playsound(src.loc, 'slash.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.die()
|
||||
else
|
||||
M << "\green That object is useless to you."
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/turret/gun_turret
|
||||
name = "Gun Turret"
|
||||
density = 1
|
||||
|
||||
@@ -50,7 +50,6 @@ To combat this, I changed the window name. -- Doohl
|
||||
//Add hidden inventory
|
||||
src.build_inventory(temp_hidden,temp_hiddenprices,1)
|
||||
src.build_inventory(temp_coin,temp_coin_amt, 0, 1)
|
||||
|
||||
power_change()
|
||||
return
|
||||
|
||||
@@ -302,18 +301,21 @@ To combat this, I changed the window name. -- Doohl
|
||||
FOLKS IN IRC RULED THAT THIS WAS SHITTY -- Doohl
|
||||
No more delays! Go nuts~~~~~~~~~~~
|
||||
|
||||
if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply)
|
||||
A 20 second delay is stupid, a 2 second delay however, is not. -- Nodrak
|
||||
No more greyshirts intentionally crashing clients through vended item spam!
|
||||
*/
|
||||
|
||||
if(((src.last_reply + (src.vend_delay + 50)) <= world.time) && src.vend_reply)
|
||||
spawn(0)
|
||||
src.speak(src.vend_reply)
|
||||
src.last_reply = world.time
|
||||
*/
|
||||
|
||||
use_power(5)
|
||||
if (src.icon_vend) //Show the vending animation if needed
|
||||
flick(src.icon_vend,src)
|
||||
|
||||
// spawn(src.vend_delay) NOPE.jpg
|
||||
//src.vend_ready = 1
|
||||
spawn(src.vend_delay)
|
||||
src.vend_ready = 1
|
||||
|
||||
if(R.price <= points)
|
||||
new product_path(get_turf(src))
|
||||
|
||||
@@ -126,9 +126,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
user << "You retrace your steps, carefully undoing the lines of the rune."
|
||||
del(src)
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/storage/bible) && usr.mind && (usr.mind.assigned_role == "Chaplain"))
|
||||
var/obj/item/weapon/storage/bible/bible = I
|
||||
user << "\blue You banish the vile magic with the blessing of [bible.deity_name]!"
|
||||
else if(istype(I, /obj/item/weapon/nullrod))
|
||||
user << "\blue You disrupt the vile magic with the deadening field of the null rod!"
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
@@ -502,7 +501,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
if(prob(C*5-105-(runedec-ticker.mode.cult.len)*5)) //including the useless rune at the secret room, shouldn't count against the limit - Urist
|
||||
usr.emote("scream")
|
||||
user << "\red A tear momentarily appears in reality. Before it closes, you catch a glimpse of that which lies beyond. That proves to be too much for your mind."
|
||||
usr.gib(1)
|
||||
usr.gib()
|
||||
return
|
||||
if("No")
|
||||
return
|
||||
|
||||
@@ -306,7 +306,7 @@ var/list/sacrificed = list()
|
||||
body_to_sacrifice.visible_message("\red [body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \
|
||||
"\red You feel as your blood boils, tearing you apart.", \
|
||||
"\red You hear a thousand voices, all crying in pain.")
|
||||
body_to_sacrifice.gib(1)
|
||||
body_to_sacrifice.gib()
|
||||
if (ticker.mode.name == "cult")
|
||||
ticker.mode:add_cultist(body_to_sacrifice.mind)
|
||||
else
|
||||
@@ -571,7 +571,7 @@ var/list/sacrificed = list()
|
||||
if(H.mind == ticker.mode:sacrifice_target)
|
||||
if(cultsinrange.len >= 3)
|
||||
sacrificed += H.mind
|
||||
H.gib(1)
|
||||
H.gib()
|
||||
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
|
||||
else
|
||||
usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
|
||||
@@ -584,7 +584,7 @@ var/list/sacrificed = list()
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, this soul was not enough to gain His favor."
|
||||
H.gib(1)
|
||||
H.gib()
|
||||
else
|
||||
if(prob(40))
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
@@ -592,7 +592,7 @@ var/list/sacrificed = list()
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, a mere dead body is not enough to satisfy Him."
|
||||
H.gib(1)
|
||||
H.gib()
|
||||
else
|
||||
if(H.stat !=2)
|
||||
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
|
||||
@@ -603,17 +603,36 @@ var/list/sacrificed = list()
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, a mere dead body is not enough to satisfy Him."
|
||||
H.gib(1)
|
||||
H.gib()
|
||||
else
|
||||
if(cultsinrange.len >= 3)
|
||||
H.gib(1)
|
||||
usr << "\red The Geometer of Blood accepts this sacrifice."
|
||||
if(H.stat !=2)
|
||||
if(prob(80))
|
||||
usr << "\red The Geometer of Blood accepts this sacrifice."
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, this soul was not enough to gain His favor."
|
||||
H.gib()
|
||||
else
|
||||
if(prob(40))
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, a mere dead body is not enough to satisfy Him."
|
||||
H.gib()
|
||||
else
|
||||
if(H.stat !=2)
|
||||
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
|
||||
else
|
||||
H.gib(1)
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
if(prob(40))
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, a mere dead body is not enough to satisfy Him."
|
||||
H.gib()
|
||||
for(var/mob/living/carbon/monkey/M in src.loc)
|
||||
if (ticker.mode.name == "cult")
|
||||
if(M.mind == ticker.mode:sacrifice_target)
|
||||
@@ -632,11 +651,13 @@ var/list/sacrificed = list()
|
||||
usr << "\red However, a mere monkey is not enough to satisfy Him."
|
||||
else
|
||||
usr << "\red The Geometer of Blood accepts your meager sacrifice."
|
||||
M.gib(1)
|
||||
if(prob(20))
|
||||
ticker.mode.grant_runeword(usr)
|
||||
M.gib()
|
||||
/* for(var/mob/living/carbon/alien/A)
|
||||
for(var/mob/K in cultsinrange)
|
||||
K.say("Barhah hra zar'garis!")
|
||||
A.dust() /// A.gib(1) doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need.
|
||||
A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need.
|
||||
if (ticker.mode.name == "cult")
|
||||
if(prob(75))
|
||||
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
|
||||
@@ -661,7 +682,7 @@ var/list/sacrificed = list()
|
||||
if (istype(W,/obj/item/weapon/paper/talisman))
|
||||
rad = 4
|
||||
go = 1
|
||||
if (istype(W,/obj/item/weapon/storage/bible))
|
||||
if (istype(W,/obj/item/weapon/nullrod))
|
||||
rad = 1
|
||||
go = 1
|
||||
if(go)
|
||||
@@ -670,7 +691,7 @@ var/list/sacrificed = list()
|
||||
R:visibility=15
|
||||
S=1
|
||||
if(S)
|
||||
if(istype(W,/obj/item/weapon/storage/bible))
|
||||
if(istype(W,/obj/item/weapon/nullrod))
|
||||
usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!"
|
||||
return
|
||||
if(istype(W,/obj/effect/rune))
|
||||
@@ -770,7 +791,7 @@ var/list/sacrificed = list()
|
||||
if (cultist == user) //just to be sure.
|
||||
return
|
||||
if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet)))
|
||||
user << "\red You cannot summon the [cultist], for him shackles of blood are strong"
|
||||
user << "\red You cannot summon the [cultist], for his shackles of blood are strong"
|
||||
return fizzle()
|
||||
cultist.loc = src.loc
|
||||
cultist.lying = 1
|
||||
@@ -793,6 +814,9 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/C in range(7,src))
|
||||
if (iscultist(C))
|
||||
continue
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.ear_deaf += 50
|
||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||
affected++
|
||||
@@ -809,6 +833,9 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/C in range(7,usr))
|
||||
if (iscultist(C))
|
||||
continue
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.ear_deaf += 30
|
||||
//talismans is weaker.
|
||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||
@@ -827,6 +854,9 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/C in viewers(src))
|
||||
if (iscultist(C))
|
||||
continue
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.eye_blurry += 50
|
||||
C.eye_blind += 20
|
||||
if(prob(5))
|
||||
@@ -846,6 +876,9 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/C in viewers(usr))
|
||||
if (iscultist(C))
|
||||
continue
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.eye_blurry += 30
|
||||
C.eye_blind += 10
|
||||
//talismans is weaker.
|
||||
@@ -873,11 +906,14 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/M in viewers(usr))
|
||||
if(iscultist(M))
|
||||
continue
|
||||
var/obj/item/weapon/nullrod/N = locate() in M
|
||||
if(N)
|
||||
continue
|
||||
M.take_overall_damage(51,51)
|
||||
M << "\red Your blood boils!"
|
||||
if(prob(5))
|
||||
spawn(5)
|
||||
M.gib(1)
|
||||
M.gib()
|
||||
for(var/obj/effect/rune/R in view(src))
|
||||
if(prob(10))
|
||||
explosion(R.loc, -1, 0, 1, 5)
|
||||
@@ -933,14 +969,19 @@ var/list/sacrificed = list()
|
||||
del(src)
|
||||
else ///When invoked as talisman, stun and mute the target mob.
|
||||
usr.say("Dream sign ''Evil sealing talisman''!")
|
||||
for(var/mob/O in viewers(T, null))
|
||||
O.show_message(text("\red <B>[] invokes a talisman at []</B>", usr, T), 1)
|
||||
flick("e_flash", T.flash)
|
||||
if (!(T.mutations & HULK))
|
||||
T.silent += 15
|
||||
T.Weaken(25)
|
||||
T.Stun(25)
|
||||
return
|
||||
var/obj/item/weapon/nullrod/N = locate() in T
|
||||
if(N)
|
||||
for(var/mob/O in viewers(T, null))
|
||||
O.show_message(text("\red <B>[] invokes a talisman at [], but they are unaffected!</B>", usr, T), 1)
|
||||
else
|
||||
for(var/mob/O in viewers(T, null))
|
||||
O.show_message(text("\red <B>[] invokes a talisman at []</B>", usr, T), 1)
|
||||
flick("e_flash", T.flash)
|
||||
if (!(T.mutations & HULK))
|
||||
T.silent += 15
|
||||
T.Weaken(25)
|
||||
T.Stun(25)
|
||||
return
|
||||
|
||||
/////////////////////////////////////////TWENTY-FIFTH RUNE
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armoured robes and an unholy blade<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=soulstone'>Kal om neth</A> - Summons a soul stone<BR>"
|
||||
dat += "<A href='?src=\ref[src];rune=construct'>Da A'ig Osk</A> - Summons a construct shell for use with captured souls. It is too large to carry on your person.<BR>"
|
||||
usr << browse(dat, "window=id_com;size=350x200")
|
||||
return
|
||||
|
||||
@@ -107,6 +108,8 @@
|
||||
T.imbue = "armor"
|
||||
if("soulstone")
|
||||
new /obj/item/device/soulstone(get_turf(usr))
|
||||
if("construct")
|
||||
new /obj/structure/constructshell(get_turf(usr))
|
||||
src.uses--
|
||||
supply()
|
||||
return
|
||||
|
||||
@@ -272,7 +272,7 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_ripley_created",1)
|
||||
//feedback_inc("mecha_ripley_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -515,7 +515,7 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_gygax_created",1)
|
||||
//feedback_inc("mecha_gygax_created",1)
|
||||
return
|
||||
|
||||
/datum/construction/mecha/firefighter_chassis
|
||||
@@ -708,7 +708,7 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_firefighter_created",1)
|
||||
//feedback_inc("mecha_firefighter_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -787,7 +787,7 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_honker_created",1)
|
||||
//feedback_inc("mecha_honker_created",1)
|
||||
return
|
||||
|
||||
/datum/construction/mecha/durand_chassis
|
||||
@@ -900,7 +900,7 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_durand_created",1)
|
||||
//feedback_inc("mecha_durand_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -1104,5 +1104,5 @@
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_odysseus_created",1)
|
||||
//feedback_inc("mecha_odysseus_created",1)
|
||||
return
|
||||
@@ -220,402 +220,3 @@ var/const
|
||||
|
||||
return
|
||||
|
||||
/* NOPE.png -- Urist
|
||||
|
||||
// Returns the surrounding cardinal turfs with open links
|
||||
// Including through doors openable with the ID
|
||||
// Includes spacetiles
|
||||
/turf/proc/CardinalTurfsWithAccessSpace(var/obj/item/weapon/card/id/ID)
|
||||
var/L[] = new()
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/T = get_step(src, d)
|
||||
if((istype(T) || istype(T,/turf/space))&& !T.density)
|
||||
if(!LinkBlockedWithAccess(src, T, ID))
|
||||
L.Add(T)
|
||||
return L
|
||||
|
||||
/obj/effect/alien/facehugger
|
||||
name = "alien"
|
||||
desc = "An alien, looks pretty scary!"
|
||||
icon_state = "facehugger"
|
||||
layer = 5.0
|
||||
density = 1
|
||||
anchored = 0
|
||||
|
||||
var/state = 0
|
||||
|
||||
var/list/path = new/list()
|
||||
|
||||
var/frustration = 0
|
||||
var/mob/living/carbon/target
|
||||
var/list/path_target = new/list()
|
||||
|
||||
var/turf/trg_idle
|
||||
var/list/path_idle = new/list()
|
||||
|
||||
var/alive = 1 //1 alive, 0 dead
|
||||
var/health = 10
|
||||
var/maxhealth = 10
|
||||
var/lamarr = 0
|
||||
flags = 258.0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
if(aliens_allowed)
|
||||
health = maxhealth
|
||||
process()
|
||||
else
|
||||
del(src)
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if(!alive)
|
||||
usr << text("\red <B>The alien is not moving.</B>")
|
||||
else if (health > 5)
|
||||
usr << text("\red <B>The alien looks fresh, just out of the egg.</B>")
|
||||
else
|
||||
usr << text("\red <B>The alien looks injured.</B>")
|
||||
if (lamarr)
|
||||
usr << text("\red <B>It looks like the proboscis has been removed.</B>")
|
||||
return
|
||||
|
||||
|
||||
attack_hand(user as mob)
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
health -= W.force * 0.75
|
||||
if("brute")
|
||||
health -= W.force * 0.5
|
||||
else
|
||||
if (health <= 0)
|
||||
death()
|
||||
else if (W.force)
|
||||
if(ishuman(user) || ismonkey(user))
|
||||
target = user
|
||||
state = 1
|
||||
..()
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
health -= round(Proj.damage / 2)
|
||||
..()
|
||||
healthcheck()
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
death()
|
||||
if(2.0)
|
||||
health -= 15
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
meteorhit()
|
||||
death()
|
||||
return
|
||||
|
||||
blob_act()
|
||||
if(prob(50))
|
||||
death()
|
||||
return
|
||||
|
||||
Bumped(AM as mob|obj)
|
||||
if(ismob(AM) && (ishuman(AM) || ismonkey(AM)) )
|
||||
target = AM
|
||||
set_attack()
|
||||
else if(ismob(AM))
|
||||
spawn(0)
|
||||
var/turf/T = get_turf(src)
|
||||
AM:loc = T
|
||||
|
||||
Bump(atom/A)
|
||||
if(ismob(A) && (ishuman(A) || ismonkey(A)))
|
||||
target = A
|
||||
set_attack()
|
||||
else if(ismob(A))
|
||||
loc = A:loc
|
||||
|
||||
temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
|
||||
|
||||
|
||||
verb/follow()
|
||||
set src in view() //set src in get_aliens(view()) - does not work, damn shitty byond :( -- rastaf0
|
||||
set name = "Follow Me"
|
||||
set category = "Object" //"Alien" does not work perfect - humans get "Alien" tab too, that's annoying
|
||||
if(!alive) return
|
||||
if(!isalien(usr))
|
||||
usr << text("\red <B>The alien ignores you.</B>")
|
||||
return
|
||||
if(state != 2 || health < maxhealth)
|
||||
usr << text("\red <B>The alien is too busy to follow you.</B>")
|
||||
return
|
||||
usr << text("\green <B>The alien will now try to follow you.</B>")
|
||||
trg_idle = usr
|
||||
path_idle = new/list()
|
||||
return
|
||||
|
||||
verb/stop()
|
||||
set src in view()
|
||||
set name = "Stop Following"
|
||||
set category = "Object"
|
||||
if(!alive) return
|
||||
if(!isalien(usr))
|
||||
usr << text("\red <B>The alien ignores you.</B>")
|
||||
return
|
||||
if(state != 2)
|
||||
usr << text("\red <B>The alien is too busy to follow you.</B>")
|
||||
return
|
||||
usr << text("\green <B>The alien stops following you.</B>")
|
||||
set_null()
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
proc/call_to(var/mob/user)
|
||||
if(!alive || !isalien(user) || state != 2) return
|
||||
trg_idle = user
|
||||
path_idle = new/list()
|
||||
return
|
||||
|
||||
proc/set_attack()
|
||||
state = 1
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
trg_idle = null
|
||||
|
||||
proc/set_idle()
|
||||
state = 2
|
||||
if (path_target.len) path_target = new/list()
|
||||
target = null
|
||||
frustration = 0
|
||||
|
||||
proc/set_null()
|
||||
state = 0
|
||||
if (path_target.len) path_target = new/list()
|
||||
if (path_idle.len) path_idle = new/list()
|
||||
target = null
|
||||
trg_idle = null
|
||||
frustration = 0
|
||||
|
||||
process()
|
||||
set background = 1
|
||||
var/quick_move = 0
|
||||
|
||||
if (!alive)
|
||||
return
|
||||
|
||||
if (!target)
|
||||
if (path_target.len) path_target = new/list()
|
||||
|
||||
var/last_health = INFINITY
|
||||
var/view
|
||||
if (lamarr)
|
||||
view = 1
|
||||
else
|
||||
view = viewrange-2
|
||||
for (var/mob/living/carbon/C in range(view,loc))
|
||||
if (C.stat == 2 || isalien(C) || C.alien_egg_flag || !can_see(src,C,viewrange) || istype(C, /mob/living/carbon/metroid))
|
||||
continue
|
||||
if(C:stunned || C:paralysis || C:weakened)
|
||||
target = C
|
||||
|
||||
break
|
||||
if(C:health < last_health)
|
||||
last_health = C:health
|
||||
target = C
|
||||
|
||||
if(target)
|
||||
if (!lamarr || prob(10))
|
||||
set_attack()
|
||||
else if(state != 2)
|
||||
set_idle()
|
||||
idle()
|
||||
|
||||
else if(target)
|
||||
var/turf/distance = get_dist(src, target)
|
||||
if (!lamarr || prob(10))
|
||||
set_attack()
|
||||
|
||||
if(can_see(src,target,viewrange))
|
||||
if(distance <= 1 && (!lamarr || prob(20)))
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[target] has been leapt on by [lamarr ? name : "the alien"]!</B>", 1, "\red You hear someone fall", 2)
|
||||
if (!lamarr)
|
||||
target:take_overall_damage(5)
|
||||
if(prob(70))
|
||||
target:paralysis = max(target:paralysis, 5)
|
||||
loc = target.loc
|
||||
|
||||
if(!target.alien_egg_flag && ( ishuman(target) || ismonkey(target) ) )
|
||||
if (!lamarr && target)
|
||||
var/mob/trg = target
|
||||
death()
|
||||
//if(trg.virus)//Viruses are stored in a global database.
|
||||
//trg.virus.cure(0)//You need to either cure() or del() them to stop their processing.
|
||||
trg.contract_disease(new /datum/disease/alien_embryo(0))//So after that you need to infect the target anew.
|
||||
for(var/datum/disease/alien_embryo/A in trg.viruses)
|
||||
trg.alien_egg_flag = 1//We finally set their flag to 1.
|
||||
return
|
||||
else
|
||||
sleep(50)
|
||||
else
|
||||
set_null()
|
||||
spawn(cycle_pause) process()
|
||||
return
|
||||
|
||||
step_towards(src,get_step_towards2(src , target))
|
||||
else
|
||||
if( !path_target.len )
|
||||
|
||||
path_attack(target)
|
||||
if(!path_target.len)
|
||||
set_null()
|
||||
spawn(cycle_pause) process()
|
||||
return
|
||||
else
|
||||
var/turf/next = path_target[1]
|
||||
|
||||
if(next in range(1,src))
|
||||
path_attack(target)
|
||||
|
||||
if(!path_target.len)
|
||||
frustration += 5
|
||||
else
|
||||
next = path_target[1]
|
||||
path_target -= next
|
||||
step_towards(src,next)
|
||||
quick_move = 1
|
||||
|
||||
if (get_dist(src, target) >= distance) frustration++
|
||||
else frustration--
|
||||
if(frustration >= 35 || lamarr) set_null()
|
||||
|
||||
if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
process()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
process()
|
||||
|
||||
proc/idle()
|
||||
set background = 1
|
||||
var/quick_move = 0
|
||||
|
||||
if(state != 2 || !alive || target) return
|
||||
|
||||
if(locate(/obj/effect/alien/weeds) in loc && health < maxhealth)
|
||||
health++
|
||||
spawn(cycle_pause) idle()
|
||||
return
|
||||
|
||||
if(!path_idle.len)
|
||||
|
||||
if(isalien(trg_idle))
|
||||
if(can_see(src,trg_idle,viewrange))
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
else
|
||||
path_idle(trg_idle)
|
||||
if(!path_idle.len)
|
||||
trg_idle = null
|
||||
set_idle()
|
||||
spawn(cycle_pause) idle()
|
||||
return
|
||||
else
|
||||
var/obj/effect/alien/weeds/W = null
|
||||
if(health < maxhealth)
|
||||
var/list/the_weeds = new/list()
|
||||
|
||||
find_weeds:
|
||||
for(var/obj/effect/alien/weeds/weed in range(viewrange,loc))
|
||||
if(!can_see(src,weed,viewrange)) continue
|
||||
for(var/atom/A in get_turf(weed))
|
||||
if(A.density) continue find_weeds
|
||||
the_weeds += weed
|
||||
if(the_weeds.len)
|
||||
W = pick(the_weeds)
|
||||
|
||||
if(W)
|
||||
path_idle(W)
|
||||
if(!path_idle.len)
|
||||
trg_idle = null
|
||||
spawn(cycle_pause) idle()
|
||||
return
|
||||
else
|
||||
for(var/mob/living/carbon/alien/humanoid/H in range(1,src))
|
||||
spawn(cycle_pause) idle()
|
||||
return
|
||||
step(src,pick(cardinal))
|
||||
|
||||
else
|
||||
|
||||
if(can_see(src,trg_idle,viewrange))
|
||||
switch(get_dist(src, trg_idle))
|
||||
if(1)
|
||||
if(istype(trg_idle,/obj/effect/alien/weeds))
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(2 to INFINITY)
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
/*
|
||||
if(viewrange+1 to INFINITY)
|
||||
step_towards(src,get_step_towards2(src , trg_idle))
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
quick_move = 1
|
||||
*/
|
||||
else
|
||||
var/turf/next = path_idle[1]
|
||||
if(!next in range(1,src))
|
||||
path_idle(trg_idle)
|
||||
|
||||
if(!path_idle.len)
|
||||
spawn(cycle_pause) idle()
|
||||
return
|
||||
else
|
||||
next = path_idle[1]
|
||||
path_idle -= next
|
||||
step_towards(src,next)
|
||||
quick_move = 1
|
||||
|
||||
if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
idle()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
idle()
|
||||
|
||||
proc/path_idle(var/atom/trg)
|
||||
path_idle = AStar(loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_idle = reverselist(path_idle)
|
||||
|
||||
proc/path_attack(var/atom/trg)
|
||||
target = trg
|
||||
path_target = AStar(loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_target = reverselist(path_target)
|
||||
|
||||
|
||||
proc/death()
|
||||
if(!alive) return
|
||||
alive = 0
|
||||
density = 0
|
||||
icon_state = "facehugger_l"
|
||||
set_null()
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\red <B>[src] curls up into a ball!</B>", 1)
|
||||
|
||||
proc/healthcheck()
|
||||
if (health <= 0)
|
||||
death()
|
||||
|
||||
*/
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/structure/closet/jcloset/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/weapon/cartridge/janitor(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/clothing/shoes/galoshes(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
|
||||
@@ -12,25 +12,26 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/wardrobe/chief_engineer(src)
|
||||
new /obj/item/blueprints(src)
|
||||
var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/wardrobe/chief_engineer(src)
|
||||
new /obj/item/blueprints(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/pda/heads/ce(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat/white(src)
|
||||
new /obj/item/clothing/head/helmet/welding(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/cartridge/ce(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -54,6 +55,9 @@
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
new /obj/item/weapon/storage/toolbox/electrical(src)
|
||||
new /obj/item/weapon/module/power_control(src)
|
||||
new /obj/item/weapon/module/power_control(src)
|
||||
new /obj/item/weapon/module/power_control(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
@@ -83,6 +87,8 @@
|
||||
new /obj/item/weapon/weldingtool/largetank(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_personal
|
||||
name = "Engineer's Locker"
|
||||
req_access = list(access_engine)
|
||||
@@ -93,6 +99,7 @@
|
||||
icon_broken = "secureengbroken"
|
||||
icon_off = "secureengoff"
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
@@ -100,18 +107,19 @@
|
||||
//
|
||||
var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/pda/engineering(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/weapon/cartridge/engineering(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/atmos_personal
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/clothing/mask/medical(src)
|
||||
new /obj/item/clothing/mask/medical(src)
|
||||
new /obj/item/clothing/mask/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -82,7 +82,9 @@
|
||||
new /obj/item/device/pda/medical(src)
|
||||
new /obj/item/weapon/storage/firstaid/regular(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/genetics_personal
|
||||
name = "Geneticist's Locker"
|
||||
@@ -132,9 +134,12 @@
|
||||
new /obj/item/device/pda/heads/cmo(src)
|
||||
new /obj/item/weapon/storage/firstaid/regular(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/animal
|
||||
name = "Animal Control"
|
||||
req_access = list(access_medical)
|
||||
@@ -168,4 +173,4 @@
|
||||
sleep(2)
|
||||
new /obj/item/weapon/storage/pillbottlebox(src)
|
||||
new /obj/item/weapon/storage/pillbottlebox(src)
|
||||
return
|
||||
return
|
||||
@@ -21,6 +21,15 @@
|
||||
new /obj/item/clothing/shoes/white( src )
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/cabinet/New()
|
||||
..()
|
||||
spawn(4)
|
||||
contents = list()
|
||||
new /obj/item/weapon/storage/backpack/satchel( src )
|
||||
new /obj/item/device/radio/headset( src )
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (src.opened)
|
||||
if (istype(W, /obj/item/weapon/grab))
|
||||
@@ -66,4 +75,4 @@
|
||||
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
return
|
||||
|
||||
@@ -15,14 +15,15 @@
|
||||
//
|
||||
new /obj/item/device/pda/captain(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/clothing/suit/armor/captain(src)
|
||||
new /obj/item/clothing/head/helmet/cap(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/weapon/cartridge/captain(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -45,12 +46,13 @@
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/flash(B)
|
||||
new /obj/item/device/pda/heads/hop(src)
|
||||
new /obj/item/weapon/cartridge/hop(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -74,12 +76,13 @@
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/flash(B)
|
||||
new /obj/item/device/pda/heads/hos(src)
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/pda/heads/hos(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/warden
|
||||
@@ -102,15 +105,18 @@
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/flash(B)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/security
|
||||
name = "Security Locker"
|
||||
req_access = list(access_security)
|
||||
@@ -130,18 +136,19 @@
|
||||
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/device/flash(B)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -156,7 +163,6 @@
|
||||
icon_broken = "cabinetdetective_broken"
|
||||
icon_off = "cabinetdetective_broken"
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
@@ -166,15 +172,16 @@
|
||||
var/obj/item/weapon/storage/box/B = new(BPK)
|
||||
var/obj/item/weapon/clipboard/C = new(B)
|
||||
new /obj/item/weapon/pen(C)
|
||||
new /obj/item/weapon/notebook(src)
|
||||
new /obj/item/weapon/clipboard/notebook(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/pda/detective(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/cartridge/detective(src)
|
||||
//
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/dflask(src)
|
||||
new /obj/item/weapon/zippo(B)
|
||||
new /obj/item/weapon/lighter/zippo(B)
|
||||
new /obj/item/weapon/pepperspray/small(src)
|
||||
return
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user