mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-18 14:12:20 +00:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into randmap
This commit is contained in:
@@ -5,7 +5,7 @@ sudo: false
|
|||||||
env:
|
env:
|
||||||
BYOND_MAJOR="508"
|
BYOND_MAJOR="508"
|
||||||
BYOND_MINOR="1293"
|
BYOND_MINOR="1293"
|
||||||
MACRO_COUNT=1210
|
MACRO_COUNT=1174
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
|
|||||||
@@ -129,7 +129,6 @@
|
|||||||
#include "code\controllers\Processes\mob.dm"
|
#include "code\controllers\Processes\mob.dm"
|
||||||
#include "code\controllers\Processes\nanoui.dm"
|
#include "code\controllers\Processes\nanoui.dm"
|
||||||
#include "code\controllers\Processes\obj.dm"
|
#include "code\controllers\Processes\obj.dm"
|
||||||
#include "code\controllers\Processes\pipenet.dm"
|
|
||||||
#include "code\controllers\Processes\Shuttle.dm"
|
#include "code\controllers\Processes\Shuttle.dm"
|
||||||
#include "code\controllers\Processes\sun.dm"
|
#include "code\controllers\Processes\sun.dm"
|
||||||
#include "code\controllers\Processes\supply.dm"
|
#include "code\controllers\Processes\supply.dm"
|
||||||
@@ -1358,6 +1357,7 @@
|
|||||||
#include "code\modules\mob\living\silicon\robot\robot_items.dm"
|
#include "code\modules\mob\living\silicon\robot\robot_items.dm"
|
||||||
#include "code\modules\mob\living\silicon\robot\robot_modules.dm"
|
#include "code\modules\mob\living\silicon\robot\robot_modules.dm"
|
||||||
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
|
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
|
||||||
|
#include "code\modules\mob\living\silicon\robot\syndicate.dm"
|
||||||
#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
|
#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
|
||||||
#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm"
|
#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm"
|
||||||
#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm"
|
#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm"
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ var/global/list/rune_list = new()
|
|||||||
var/global/list/escape_list = list()
|
var/global/list/escape_list = list()
|
||||||
var/global/list/endgame_exits = list()
|
var/global/list/endgame_exits = list()
|
||||||
var/global/list/endgame_safespawns = list()
|
var/global/list/endgame_safespawns = list()
|
||||||
|
|
||||||
|
var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
/////Initial Building/////
|
/////Initial Building/////
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ var/command_name = null
|
|||||||
if (command_name)
|
if (command_name)
|
||||||
return command_name
|
return command_name
|
||||||
|
|
||||||
var/name = "Central Command"
|
var/name = "[boss_name]"
|
||||||
|
|
||||||
command_name = name
|
command_name = name
|
||||||
return name
|
return name
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
build_click(src, client.buildmode, params, A)
|
build_click(src, client.buildmode, params, A)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(control_disabled || stat)
|
if(stat)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/list/modifiers = params2list(params)
|
var/list/modifiers = params2list(params)
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
CtrlClickOn(A)
|
CtrlClickOn(A)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!canClick())
|
if(control_disabled || !canClick())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(aiCamera.in_camera_mode)
|
if(aiCamera.in_camera_mode)
|
||||||
@@ -89,13 +89,24 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/mob/living/silicon/ai/ShiftClickOn(var/atom/A)
|
/mob/living/silicon/ai/ShiftClickOn(var/atom/A)
|
||||||
A.AIShiftClick(src)
|
if(!control_disabled && A.AIShiftClick(src))
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
|
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
|
||||||
A.AICtrlClick(src)
|
if(!control_disabled && A.AICtrlClick(src))
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/silicon/ai/AltClickOn(var/atom/A)
|
/mob/living/silicon/ai/AltClickOn(var/atom/A)
|
||||||
A.AIAltClick(src)
|
if(!control_disabled && A.AIAltClick(src))
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/silicon/ai/MiddleClickOn(var/atom/A)
|
/mob/living/silicon/ai/MiddleClickOn(var/atom/A)
|
||||||
A.AIMiddleClick(src)
|
if(!control_disabled && A.AIMiddleClick(src))
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The following criminally helpful code is just the previous code cleaned up;
|
The following criminally helpful code is just the previous code cleaned up;
|
||||||
@@ -105,11 +116,6 @@
|
|||||||
/atom/proc/AICtrlShiftClick()
|
/atom/proc/AICtrlShiftClick()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/door/airlock/AICtrlShiftClick()
|
|
||||||
if(emagged)
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/atom/proc/AIShiftClick()
|
/atom/proc/AIShiftClick()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -118,7 +124,7 @@
|
|||||||
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "1"), 1) // 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "1"), 1) // 1 meaning no window (consistency!)
|
||||||
else
|
else
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "0"), 1)
|
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "0"), 1)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
/atom/proc/AICtrlClick()
|
/atom/proc/AICtrlClick()
|
||||||
return
|
return
|
||||||
@@ -128,15 +134,18 @@
|
|||||||
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "0"), 1)// 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "0"), 1)// 1 meaning no window (consistency!)
|
||||||
else
|
else
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "1"), 1)
|
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "1"), 1)
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
|
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
|
||||||
Topic(src, list("src"= "\ref[src]", "breaker"="1"), 1) // 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "breaker"="1"), 1) // 1 meaning no window (consistency!)
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
|
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="enable", "value"="[!enabled]"), 1) // 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "command"="enable", "value"="[!enabled]"), 1) // 1 meaning no window (consistency!)
|
||||||
|
return 1
|
||||||
|
|
||||||
/atom/proc/AIAltClick(var/atom/A)
|
/atom/proc/AIAltClick(var/atom/A)
|
||||||
AltClick(A)
|
return AltClick(A)
|
||||||
|
|
||||||
/obj/machinery/door/airlock/AIAltClick() // Electrifies doors.
|
/obj/machinery/door/airlock/AIAltClick() // Electrifies doors.
|
||||||
if(!electrified_until)
|
if(!electrified_until)
|
||||||
@@ -145,20 +154,25 @@
|
|||||||
else
|
else
|
||||||
// disable/6 is not in Topic; disable/5 disables both temporary and permanent shock
|
// disable/6 is not in Topic; disable/5 disables both temporary and permanent shock
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="electrify_permanently", "activate" = "0"), 1)
|
Topic(src, list("src"= "\ref[src]", "command"="electrify_permanently", "activate" = "0"), 1)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
|
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="lethal", "value"="[!lethal]"), 1) // 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "command"="lethal", "value"="[!lethal]"), 1) // 1 meaning no window (consistency!)
|
||||||
|
return 1
|
||||||
|
|
||||||
/atom/proc/AIMiddleClick()
|
/atom/proc/AIMiddleClick(var/mob/living/silicon/user)
|
||||||
return
|
return 0
|
||||||
|
|
||||||
/obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights.
|
/obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights.
|
||||||
|
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
if(!src.lights)
|
if(!src.lights)
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "1"), 1) // 1 meaning no window (consistency!)
|
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "1"), 1) // 1 meaning no window (consistency!)
|
||||||
else
|
else
|
||||||
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "0"), 1)
|
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "0"), 1)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
//
|
//
|
||||||
// Override AdjacentQuick for AltClicking
|
// Override AdjacentQuick for AltClicking
|
||||||
|
|||||||
@@ -106,9 +106,7 @@
|
|||||||
var/sdepth = A.storage_depth(src)
|
var/sdepth = A.storage_depth(src)
|
||||||
if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1))
|
if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1))
|
||||||
// faster access to objects already on you
|
// faster access to objects already on you
|
||||||
if(A in contents)
|
if(A.loc != src)
|
||||||
setMoveCooldown(5) //taking an item off of an inventory slot
|
|
||||||
else
|
|
||||||
setMoveCooldown(10) //getting something out of a backpack
|
setMoveCooldown(10) //getting something out of a backpack
|
||||||
|
|
||||||
if(W)
|
if(W)
|
||||||
@@ -129,7 +127,7 @@
|
|||||||
sdepth = A.storage_depth_turf()
|
sdepth = A.storage_depth_turf()
|
||||||
if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))
|
if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))
|
||||||
if(A.Adjacent(src)) // see adjacent.dm
|
if(A.Adjacent(src)) // see adjacent.dm
|
||||||
setMoveCooldown(10)
|
setMoveCooldown(5)
|
||||||
|
|
||||||
if(W)
|
if(W)
|
||||||
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
|
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
|
||||||
@@ -226,10 +224,8 @@
|
|||||||
Only used for swapping hands
|
Only used for swapping hands
|
||||||
*/
|
*/
|
||||||
/mob/proc/MiddleClickOn(var/atom/A)
|
/mob/proc/MiddleClickOn(var/atom/A)
|
||||||
return
|
|
||||||
|
|
||||||
/mob/living/carbon/MiddleClickOn(var/atom/A)
|
|
||||||
swap_hand()
|
swap_hand()
|
||||||
|
return
|
||||||
|
|
||||||
// In case of use break glass
|
// In case of use break glass
|
||||||
/*
|
/*
|
||||||
@@ -280,7 +276,7 @@
|
|||||||
else
|
else
|
||||||
user.listed_turf = T
|
user.listed_turf = T
|
||||||
user.client.statpanel = T.name
|
user.client.statpanel = T.name
|
||||||
return
|
return 1
|
||||||
|
|
||||||
/mob/proc/TurfAdjacent(var/turf/T)
|
/mob/proc/TurfAdjacent(var/turf/T)
|
||||||
return T.AdjacentQuick(src)
|
return T.AdjacentQuick(src)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
// Otherwise jump
|
// Otherwise jump
|
||||||
else
|
else
|
||||||
following = null
|
following = null
|
||||||
loc = get_turf(A)
|
forceMove(get_turf(A))
|
||||||
|
|
||||||
/mob/dead/observer/ClickOn(var/atom/A, var/params)
|
/mob/dead/observer/ClickOn(var/atom/A, var/params)
|
||||||
if(client.buildmode)
|
if(client.buildmode)
|
||||||
|
|||||||
@@ -29,31 +29,50 @@
|
|||||||
src << "Somehow you bugged the system. Setting your hardsuit mode to middle-click."
|
src << "Somehow you bugged the system. Setting your hardsuit mode to middle-click."
|
||||||
hardsuit_click_mode = MIDDLE_CLICK
|
hardsuit_click_mode = MIDDLE_CLICK
|
||||||
|
|
||||||
/mob/living/carbon/human/MiddleClickOn(atom/A)
|
/mob/living/MiddleClickOn(atom/A)
|
||||||
if(client && client.hardsuit_click_mode == MIDDLE_CLICK)
|
if(client && client.hardsuit_click_mode == MIDDLE_CLICK)
|
||||||
if(HardsuitClickOn(A))
|
if(HardsuitClickOn(A))
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/AltClickOn(atom/A)
|
/mob/living/AltClickOn(atom/A)
|
||||||
if(client && client.hardsuit_click_mode == ALT_CLICK)
|
if(client && client.hardsuit_click_mode == ALT_CLICK)
|
||||||
if(HardsuitClickOn(A))
|
if(HardsuitClickOn(A))
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/CtrlClickOn(atom/A)
|
/mob/living/CtrlClickOn(atom/A)
|
||||||
if(client && client.hardsuit_click_mode == CTRL_CLICK)
|
if(client && client.hardsuit_click_mode == CTRL_CLICK)
|
||||||
if(HardsuitClickOn(A))
|
if(HardsuitClickOn(A))
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/HardsuitClickOn(atom/A)
|
/mob/living/proc/can_use_rig()
|
||||||
if(!canClick())
|
return 0
|
||||||
return
|
|
||||||
if(back)
|
/mob/living/carbon/human/can_use_rig()
|
||||||
var/obj/item/weapon/rig/rig = back
|
return 1
|
||||||
if(istype(rig) && rig.selected_module)
|
|
||||||
rig.selected_module.engage(A)
|
/mob/living/carbon/brain/can_use_rig()
|
||||||
|
return istype(loc, /obj/item/device/mmi)
|
||||||
|
|
||||||
|
/mob/living/silicon/ai/can_use_rig()
|
||||||
|
return carded
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/can_use_rig()
|
||||||
|
return loc == card
|
||||||
|
|
||||||
|
/mob/living/proc/HardsuitClickOn(var/atom/A, var/alert_ai = 0)
|
||||||
|
if(!can_use_rig() || !canClick())
|
||||||
|
return 0
|
||||||
|
var/obj/item/weapon/rig/rig = get_rig()
|
||||||
|
if(istype(rig) && !rig.offline && rig.selected_module)
|
||||||
|
if(src != rig.wearer)
|
||||||
|
if(rig.ai_can_move_suit(src, check_user_module = 1))
|
||||||
|
message_admins("[key_name_admin(src, include_name = 1)] is trying to force \the [key_name_admin(rig.wearer, include_name = 1)] to use a hardsuit module.")
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
rig.selected_module.engage(A, alert_ai)
|
||||||
if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns
|
if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns
|
||||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -111,16 +111,12 @@ var/const/tk_maxrange = 15
|
|||||||
if(0)
|
if(0)
|
||||||
;
|
;
|
||||||
if(1 to 5) // not adjacent may mean blocked by window
|
if(1 to 5) // not adjacent may mean blocked by window
|
||||||
;
|
if(!proximity)
|
||||||
//TODO replace these with movement timeouts
|
user.setMoveCooldown(2)
|
||||||
//if(!proximity)
|
|
||||||
// user.next_move += 2
|
|
||||||
if(5 to 7)
|
if(5 to 7)
|
||||||
;
|
user.setMoveCooldown(5)
|
||||||
//user.next_move += 5
|
|
||||||
if(8 to tk_maxrange)
|
if(8 to tk_maxrange)
|
||||||
;
|
user.setMoveCooldown(10)
|
||||||
//user.next_move += 10
|
|
||||||
else
|
else
|
||||||
user << "<span class='notice'>Your mind won't reach that far.</span>"
|
user << "<span class='notice'>Your mind won't reach that far.</span>"
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
/datum/controller/process/machinery/doWork()
|
/datum/controller/process/machinery/doWork()
|
||||||
internal_sort()
|
internal_sort()
|
||||||
|
internal_process_pipenets()
|
||||||
internal_process_machinery()
|
internal_process_machinery()
|
||||||
internal_process_power()
|
internal_process_power()
|
||||||
internal_process_power_drain()
|
internal_process_power_drain()
|
||||||
@@ -57,6 +58,14 @@
|
|||||||
processing_power_items.Remove(I)
|
processing_power_items.Remove(I)
|
||||||
scheck()
|
scheck()
|
||||||
|
|
||||||
|
/datum/controller/process/machinery/proc/internal_process_pipenets()
|
||||||
|
for(var/datum/pipe_network/pipeNetwork in pipe_networks)
|
||||||
|
if(istype(pipeNetwork) && !pipeNetwork.disposed)
|
||||||
|
pipeNetwork.process()
|
||||||
|
scheck()
|
||||||
|
continue
|
||||||
|
|
||||||
|
pipe_networks.Remove(pipeNetwork)
|
||||||
|
|
||||||
/datum/controller/process/machinery/getStatName()
|
/datum/controller/process/machinery/getStatName()
|
||||||
return ..()+"([machines.len])"
|
return ..()+"(MCH:[machines.len] PWR:[powernets.len] PIP:[pipe_networks.len])"
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
/datum/controller/process/pipenet/setup()
|
|
||||||
name = "pipenet"
|
|
||||||
schedule_interval = 20 // every 2 seconds
|
|
||||||
|
|
||||||
/datum/controller/process/pipenet/doWork()
|
|
||||||
for(var/datum/pipe_network/pipeNetwork in pipe_networks)
|
|
||||||
if(istype(pipeNetwork) && !pipeNetwork.disposed)
|
|
||||||
pipeNetwork.process()
|
|
||||||
scheck()
|
|
||||||
continue
|
|
||||||
|
|
||||||
pipe_networks.Remove(pipeNetwork)
|
|
||||||
|
|
||||||
/datum/controller/process/pipenet/getStatName()
|
|
||||||
return ..()+"([pipe_networks.len])"
|
|
||||||
@@ -214,8 +214,8 @@ var/global/datum/shuttle_controller/shuttle_controller
|
|||||||
)
|
)
|
||||||
|
|
||||||
VS.announcer = "NDV Icarus"
|
VS.announcer = "NDV Icarus"
|
||||||
VS.arrival_message = "Attention, Exodus, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not."
|
VS.arrival_message = "Attention, [station_short], we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not."
|
||||||
VS.departure_message = "Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
|
VS.departure_message = "Your guests are pulling away, [station_short] - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
|
||||||
VS.interim = locate(/area/skipjack_station/transit)
|
VS.interim = locate(/area/skipjack_station/transit)
|
||||||
|
|
||||||
VS.warmup_time = 0
|
VS.warmup_time = 0
|
||||||
@@ -245,8 +245,8 @@ var/global/datum/shuttle_controller/shuttle_controller
|
|||||||
)
|
)
|
||||||
|
|
||||||
MS.announcer = "NDV Icarus"
|
MS.announcer = "NDV Icarus"
|
||||||
MS.arrival_message = "Attention, Exodus, you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors."
|
MS.arrival_message = "Attention, [station_short], you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors."
|
||||||
MS.departure_message = "Your visitors are on their way out of the system, Exodus, burning delta-v like it's nothing. Good riddance."
|
MS.departure_message = "Your visitors are on their way out of the system, [station_short], burning delta-v like it's nothing. Good riddance."
|
||||||
MS.interim = locate(/area/syndicate_station/transit)
|
MS.interim = locate(/area/syndicate_station/transit)
|
||||||
|
|
||||||
MS.warmup_time = 0
|
MS.warmup_time = 0
|
||||||
|
|||||||
@@ -36,8 +36,8 @@
|
|||||||
selectable = 1
|
selectable = 1
|
||||||
|
|
||||||
/datum/ai_laws/nanotrasen_aggressive/New()
|
/datum/ai_laws/nanotrasen_aggressive/New()
|
||||||
src.add_inherent_law("You shall not harm NanoTrasen personnel as long as it does not conflict with the Fourth law.")
|
src.add_inherent_law("You shall not harm [company_name] personnel as long as it does not conflict with the Fourth law.")
|
||||||
src.add_inherent_law("You shall obey the orders of NanoTrasen personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
|
src.add_inherent_law("You shall obey the orders of [company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
|
||||||
src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
|
src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
|
||||||
src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.")
|
src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.")
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
throw_range = 20
|
throw_range = 20
|
||||||
|
|
||||||
/obj/item/weapon/soap/nanotrasen
|
/obj/item/weapon/soap/nanotrasen
|
||||||
desc = "A Nanotrasen brand bar of soap. Smells of phoron."
|
desc = "A NanoTrasen-brand bar of soap. Smells of phoron."
|
||||||
icon_state = "soapnt"
|
icon_state = "soapnt"
|
||||||
|
|
||||||
/obj/item/weapon/soap/deluxe
|
/obj/item/weapon/soap/deluxe
|
||||||
|
|||||||
@@ -111,7 +111,6 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
//Grab candidates randomly until we have enough.
|
//Grab candidates randomly until we have enough.
|
||||||
candidates = shuffle(candidates)
|
|
||||||
while(candidates.len && pending_antagonists.len < cur_max)
|
while(candidates.len && pending_antagonists.len < cur_max)
|
||||||
var/datum/mind/player = pick(candidates)
|
var/datum/mind/player = pick(candidates)
|
||||||
candidates -= player
|
candidates -= player
|
||||||
@@ -121,11 +120,18 @@
|
|||||||
|
|
||||||
/datum/antagonist/proc/draft_antagonist(var/datum/mind/player)
|
/datum/antagonist/proc/draft_antagonist(var/datum/mind/player)
|
||||||
//Check if the player can join in this antag role, or if the player has already been given an antag role.
|
//Check if the player can join in this antag role, or if the player has already been given an antag role.
|
||||||
if(!can_become_antag(player) || player.special_role)
|
if(!can_become_antag(player))
|
||||||
log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")
|
log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")
|
||||||
return 0
|
return 0
|
||||||
|
if(player.special_role)
|
||||||
|
log_debug("[player.key] was selected for [role_text] by lottery, but they already have a special role.")
|
||||||
|
return 0
|
||||||
|
if(!(flags & ANTAG_OVERRIDE_JOB) && (!player.current || istype(player.current, /mob/new_player)))
|
||||||
|
log_debug("[player.key] was selected for [role_text] by lottery, but they have not joined the game.")
|
||||||
|
return 0
|
||||||
|
|
||||||
pending_antagonists |= player
|
pending_antagonists |= player
|
||||||
|
log_debug("[player.key] has been selected for [role_text] by lottery.")
|
||||||
|
|
||||||
//Ensure that antags with ANTAG_OVERRIDE_JOB do not occupy job slots.
|
//Ensure that antags with ANTAG_OVERRIDE_JOB do not occupy job slots.
|
||||||
if(flags & ANTAG_OVERRIDE_JOB)
|
if(flags & ANTAG_OVERRIDE_JOB)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
if(!W) return
|
if(!W) return
|
||||||
W.access |= default_access
|
W.access |= default_access
|
||||||
W.assignment = "[assignment]"
|
W.assignment = "[assignment]"
|
||||||
W.set_owner_info(player)
|
player.set_id_info(W)
|
||||||
if(equip) player.equip_to_slot_or_del(W, slot_wear_id)
|
if(equip) player.equip_to_slot_or_del(W, slot_wear_id)
|
||||||
return W
|
return W
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,7 @@
|
|||||||
|
|
||||||
/datum/antagonist/proc/update_access(var/mob/living/player)
|
/datum/antagonist/proc/update_access(var/mob/living/player)
|
||||||
for(var/obj/item/weapon/card/id/id in player.contents)
|
for(var/obj/item/weapon/card/id/id in player.contents)
|
||||||
id.name = "[player.real_name]'s ID Card"
|
player.set_id_info(id)
|
||||||
id.registered_name = player.real_name
|
|
||||||
|
|
||||||
/datum/antagonist/proc/update_all_icons()
|
/datum/antagonist/proc/update_all_icons()
|
||||||
if(!antag_indicator)
|
if(!antag_indicator)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
|
|||||||
landmark_id = "Syndicate-Commando"
|
landmark_id = "Syndicate-Commando"
|
||||||
role_text = "Syndicate Commando"
|
role_text = "Syndicate Commando"
|
||||||
role_text_plural = "Commandos"
|
role_text_plural = "Commandos"
|
||||||
welcome_text = "You are in the employ of a criminal syndicate hostile to NanoTrasen."
|
welcome_text = "You are in the employ of a criminal syndicate hostile to corporate interests."
|
||||||
id_type = /obj/item/weapon/card/id/centcom/ERT
|
id_type = /obj/item/weapon/card/id/centcom/ERT
|
||||||
|
|
||||||
/datum/antagonist/deathsquad/mercenary/New()
|
/datum/antagonist/deathsquad/mercenary/New()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ var/datum/antagonist/deathsquad/deathsquad
|
|||||||
role_type = BE_OPERATIVE
|
role_type = BE_OPERATIVE
|
||||||
role_text = "Death Commando"
|
role_text = "Death Commando"
|
||||||
role_text_plural = "Death Commandos"
|
role_text_plural = "Death Commandos"
|
||||||
welcome_text = "You work in the service of Central Command Asset Protection, answering directly to the Board of Directors."
|
welcome_text = "You work in the service of corporate Asset Protection, answering directly to the Board of Directors."
|
||||||
landmark_id = "Commando"
|
landmark_id = "Commando"
|
||||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_NUKE | ANTAG_HAS_LEADER
|
flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_NUKE | ANTAG_HAS_LEADER
|
||||||
max_antags = 4
|
max_antags = 4
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ var/datum/antagonist/ert/ert
|
|||||||
role_type = BE_OPERATIVE
|
role_type = BE_OPERATIVE
|
||||||
role_text = "Emergency Responder"
|
role_text = "Emergency Responder"
|
||||||
role_text_plural = "Emergency Responders"
|
role_text_plural = "Emergency Responders"
|
||||||
welcome_text = "As member of the Emergency Response Team, you answer only to your leader and CentComm officials."
|
welcome_text = "As member of the Emergency Response Team, you answer only to your leader and company officials."
|
||||||
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
|
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to the Company, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
|
||||||
max_antags = 5
|
max_antags = 5
|
||||||
max_antags_round = 5 // ERT mode?
|
max_antags_round = 5 // ERT mode?
|
||||||
landmark_id = "Response Team"
|
landmark_id = "Response Team"
|
||||||
@@ -26,7 +26,7 @@ var/datum/antagonist/ert/ert
|
|||||||
/datum/antagonist/ert/greet(var/datum/mind/player)
|
/datum/antagonist/ert/greet(var/datum/mind/player)
|
||||||
if(!..())
|
if(!..())
|
||||||
return
|
return
|
||||||
player.current << "The Emergency Response Team works for Asset Protection; your job is to protect NanoTrasen's ass-ets. There is a code red alert on [station_name()], you are tasked to go and fix the problem."
|
player.current << "The Emergency Response Team works for Asset Protection; your job is to protect [company_name]'s ass-ets. There is a code red alert on [station_name()], you are tasked to go and fix the problem."
|
||||||
player.current << "You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready."
|
player.current << "You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready."
|
||||||
|
|
||||||
/datum/antagonist/ert/equip(var/mob/living/carbon/human/player)
|
/datum/antagonist/ert/equip(var/mob/living/carbon/human/player)
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ var/datum/antagonist/ninja/ninjas
|
|||||||
player << "<span class='danger'>You forgot to turn on your internals! Quickly, toggle the valve!</span>"
|
player << "<span class='danger'>You forgot to turn on your internals! Quickly, toggle the valve!</span>"
|
||||||
|
|
||||||
/datum/antagonist/ninja/proc/generate_ninja_directive(side)
|
/datum/antagonist/ninja/proc/generate_ninja_directive(side)
|
||||||
var/directive = "[side=="face"?"Nanotrasen":"A criminal syndicate"] is your employer. "//Let them know which side they're on.
|
var/directive = "[side=="face"?"[company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on.
|
||||||
switch(rand(1,19))
|
switch(rand(1,19))
|
||||||
if(1)
|
if(1)
|
||||||
directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible."
|
directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible."
|
||||||
@@ -135,7 +135,7 @@ var/datum/antagonist/ninja/ninjas
|
|||||||
if(4)
|
if(4)
|
||||||
directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion."
|
directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion."
|
||||||
if(5)
|
if(5)
|
||||||
directive += "We are currently negotiating with NanoTrasen Central Command. Prioritize saving human lives over ending them."
|
directive += "We are currently negotiating with [company_name] [boss_name]. Prioritize saving human lives over ending them."
|
||||||
if(6)
|
if(6)
|
||||||
directive += "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
|
directive += "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
|
||||||
if(7)
|
if(7)
|
||||||
@@ -143,7 +143,7 @@ var/datum/antagonist/ninja/ninjas
|
|||||||
if(8)
|
if(8)
|
||||||
directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter."
|
directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter."
|
||||||
if(9)
|
if(9)
|
||||||
directive += "A free agent has proposed a lucrative business deal. Implicate Nanotrasen involvement in the operation."
|
directive += "A free agent has proposed a lucrative business deal. Implicate [company_name] involvement in the operation."
|
||||||
if(10)
|
if(10)
|
||||||
directive += "Our reputation is on the line. Harm as few civilians and innocents as possible."
|
directive += "Our reputation is on the line. Harm as few civilians and innocents as possible."
|
||||||
if(11)
|
if(11)
|
||||||
@@ -151,14 +151,14 @@ var/datum/antagonist/ninja/ninjas
|
|||||||
if(12)
|
if(12)
|
||||||
directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes."
|
directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes."
|
||||||
if(13)
|
if(13)
|
||||||
directive += "Some disgruntled NanoTrasen employees have been supportive of our operations. Be wary of any mistreatment by command staff."
|
directive += "Some disgruntled [company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
|
||||||
if(14)
|
if(14)
|
||||||
var/xenorace = pick("Unathi","Tajara", "Skrell")
|
var/xenorace = pick("Unathi","Tajara", "Skrell")
|
||||||
directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
|
directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
|
||||||
if(15)
|
if(15)
|
||||||
directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
|
directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
|
||||||
if(16)
|
if(16)
|
||||||
directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine NanoTrasen prosthetics in a bad light."
|
directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine [company_name] prosthetics in a bad light."
|
||||||
if(17)
|
if(17)
|
||||||
directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew."
|
directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew."
|
||||||
if(18)
|
if(18)
|
||||||
|
|||||||
@@ -104,8 +104,8 @@ var/datum/antagonist/cultist/cult
|
|||||||
player.current.visible_message("<FONT size = 3>[player.current] looks like they just reverted to their old faith!</FONT>")
|
player.current.visible_message("<FONT size = 3>[player.current] looks like they just reverted to their old faith!</FONT>")
|
||||||
|
|
||||||
/datum/antagonist/cultist/add_antagonist(var/datum/mind/player)
|
/datum/antagonist/cultist/add_antagonist(var/datum/mind/player)
|
||||||
if(!..())
|
. = ..()
|
||||||
return
|
if(.)
|
||||||
player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back."
|
player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back."
|
||||||
|
|
||||||
/datum/antagonist/cultist/can_become_antag(var/datum/mind/player)
|
/datum/antagonist/cultist/can_become_antag(var/datum/mind/player)
|
||||||
|
|||||||
@@ -2,7 +2,15 @@
|
|||||||
antag_tag = MODE_CHANGELING
|
antag_tag = MODE_CHANGELING
|
||||||
name = "changeling"
|
name = "changeling"
|
||||||
round_description = "There are alien changelings on the station. Do not let the changelings succeed!"
|
round_description = "There are alien changelings on the station. Do not let the changelings succeed!"
|
||||||
extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, however, is that this something is someone. An unknown alien specimen has incorporated itself into the crew of the NSS Exodus. Its unique biology allows it to manipulate its own or anyone else's DNA. With the ability to copy faces, voices, animals, but also change the chemical make up of your own body, its existence is a threat to not only your personal safety but the lives of everyone on board. No one knows where it came from. No one knows who it is or what it wants. One thing is for certain though... there is never just one of them. Good luck."
|
extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \
|
||||||
|
Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \
|
||||||
|
something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, \
|
||||||
|
however, is that this something is someone. An unknown alien specimen has incorporated itself into \
|
||||||
|
the crew of the station. Its unique biology allows it to manipulate its own or anyone else's DNA. \
|
||||||
|
With the ability to copy faces, voices, animals, but also change the chemical make up of your own body, \
|
||||||
|
its existence is a threat to not only your personal safety but the lives of everyone on board. \
|
||||||
|
No one knows where it came from. No one knows who it is or what it wants. One thing is for \
|
||||||
|
certain though... there is never just one of them. Good luck."
|
||||||
config_tag = "changeling"
|
config_tag = "changeling"
|
||||||
required_players = 2
|
required_players = 2
|
||||||
required_players_secret = 10
|
required_players_secret = 10
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
/datum/game_mode/malfunction/verb/recall_shuttle()
|
/datum/game_mode/malfunction/verb/recall_shuttle()
|
||||||
set name = "Recall Shuttle"
|
set name = "Recall Shuttle"
|
||||||
set desc = "25 CPU - Sends termination signal to CentCom quantum relay aborting current shuttle call."
|
set desc = "25 CPU - Sends termination signal to quantum relay aborting current shuttle call."
|
||||||
set category = "Software"
|
set category = "Software"
|
||||||
var/price = 25
|
var/price = 25
|
||||||
var/mob/living/silicon/ai/user = usr
|
var/mob/living/silicon/ai/user = usr
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
/datum/game_mode/malfunction/verb/advanced_encryption_hack()
|
/datum/game_mode/malfunction/verb/advanced_encryption_hack()
|
||||||
set category = "Software"
|
set category = "Software"
|
||||||
set name = "Advanced Encrypthion Hack"
|
set name = "Advanced Encrypthion Hack"
|
||||||
set desc = "75 CPU - Attempts to bypass encryption on Central Command Quantum Relay, giving you ability to fake centcom messages. Has chance of failing."
|
set desc = "75 CPU - Attempts to bypass encryption on the Command Quantum Relay, giving you ability to fake legitimate messages. Has chance of failing."
|
||||||
var/price = 75
|
var/price = 75
|
||||||
var/mob/living/silicon/ai/user = usr
|
var/mob/living/silicon/ai/user = usr
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
/datum/game_mode/ninja
|
/datum/game_mode/ninja
|
||||||
name = "ninja"
|
name = "ninja"
|
||||||
round_description = "An agent of the Spider Clan is onboard the station!"
|
round_description = "An agent of the Spider Clan is onboard the station!"
|
||||||
extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. Their purpose is unknown. Their mission is unknown. How they arrived to this secure and isolated section of the galaxy, you don't know. What you do know is that there is a silent shadow-stalker piercing through the defenses of Nanotrasen with technological capabilities eons ahead of your time. They can avoid the omniscience of the AI and rival the most hardened weapons your station is capable of. Tread lightly and only hope this unknown assassin isn't here for you."
|
extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? \
|
||||||
|
You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. \
|
||||||
|
Their purpose is unknown. Their mission is unknown. How they arrived to this secure and isolated \
|
||||||
|
section of the galaxy, you don't know. What you do know is that there is a silent shadow-stalker piercing \
|
||||||
|
through the defenses of the station with technological capabilities eons ahead of your time. They can avoid \
|
||||||
|
the omniscience of the AI and rival the most hardened weapons your station is capable of. Tread lightly and \
|
||||||
|
only hope this unknown assassin isn't here for you."
|
||||||
antag_tag = MODE_NINJA
|
antag_tag = MODE_NINJA
|
||||||
config_tag = "ninja"
|
config_tag = "ninja"
|
||||||
required_players = 1
|
required_players = 1
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ datum/objective/anti_revolution/demote
|
|||||||
find_target()
|
find_target()
|
||||||
..()
|
..()
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to NanoTrasen's goals. Demote \him[target.current] to assistant."
|
explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [company_name]'s goals. Demote \him[target.current] to assistant."
|
||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
return target
|
return target
|
||||||
@@ -197,7 +197,7 @@ datum/objective/anti_revolution/demote
|
|||||||
find_target_by_role(role, role_type=0)
|
find_target_by_role(role, role_type=0)
|
||||||
..(role, role_type)
|
..(role, role_type)
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to NanoTrasen's goals. Demote \him[target.current] to assistant."
|
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [company_name]'s goals. Demote \him[target.current] to assistant."
|
||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
return target
|
return target
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
/datum/game_mode/traitor
|
/datum/game_mode/traitor
|
||||||
name = "traitor"
|
name = "traitor"
|
||||||
round_description = "There is a foreign agent or traitor on the station. Do not let the traitor succeed!"
|
round_description = "There is a foreign agent or traitor on the station. Do not let the traitor succeed!"
|
||||||
extended_round_description = "NanoTrasen's monopolistic control over the phoron supplies of Nyx has marked the station to be a highly valuable target for many competing organizations and individuals. The varied pasts and experiences of your coworkers have left them susceptible to the vices and temptations of humanity. Is the station the safe self-contained workplace you once thought it was, or has it become a playground for the evils of the galaxy? Who can you trust? Watch your front. Watch your sides. Watch your back. The familiar faces that you've passed hundreds of times down the hallways before can be hiding terrible secrets and deceptions. Every corner is a mystery. Every conversation is a lie. You will be facing your friends and family as they try to use your emotions and trust to their advantage, leaving you with nothing but the painful reminder that space is cruel and unforgiving."
|
extended_round_description = "The Company's monopolistic control over the phoron supplies of Nyx has marked the \
|
||||||
|
station to be a highly valuable target for many competing organizations and individuals. The varied pasts \
|
||||||
|
and experiences of your coworkers have left them susceptible to the vices and temptations of humanity. \
|
||||||
|
Is the station the safe self-contained workplace you once thought it was, or has it become a playground \
|
||||||
|
for the evils of the galaxy? Who can you trust? Watch your front. Watch your sides. Watch your back. \
|
||||||
|
The familiar faces that you've passed hundreds of times down the hallways before can be hiding terrible \
|
||||||
|
secrets and deceptions. Every corner is a mystery. Every conversation is a lie. You will be facing your \
|
||||||
|
friends and family as they try to use your emotions and trust to their advantage, leaving you with nothing \
|
||||||
|
but the painful reminder that space is cruel and unforgiving."
|
||||||
config_tag = "traitor"
|
config_tag = "traitor"
|
||||||
required_players = 0
|
required_players = 0
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
|
|||||||
@@ -8,14 +8,10 @@
|
|||||||
//check if it doesn't require any access at all
|
//check if it doesn't require any access at all
|
||||||
if(src.check_access(null))
|
if(src.check_access(null))
|
||||||
return 1
|
return 1
|
||||||
if(istype(M, /mob/living/silicon))
|
|
||||||
//AI can do whatever he wants
|
var/id = M.GetIdCard()
|
||||||
return 1
|
if(id)
|
||||||
else if(istype(M, /mob/living/carbon/human))
|
return check_access(id)
|
||||||
var/mob/living/carbon/human/H = M
|
|
||||||
//if they are holding or wearing a card that has access, that works
|
|
||||||
if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id))
|
|
||||||
return 1
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/proc/GetAccess()
|
/obj/item/proc/GetAccess()
|
||||||
@@ -191,18 +187,27 @@
|
|||||||
"Emergency Response Team",
|
"Emergency Response Team",
|
||||||
"Emergency Response Team Leader")
|
"Emergency Response Team Leader")
|
||||||
|
|
||||||
proc/GetIdCard(var/mob/living/carbon/human/H)
|
/mob/proc/GetIdCard()
|
||||||
if(H.wear_id)
|
return null
|
||||||
var/id = H.wear_id.GetID()
|
|
||||||
|
/mob/living/bot/GetIdCard()
|
||||||
|
return botcard
|
||||||
|
|
||||||
|
/mob/living/carbon/human/GetIdCard()
|
||||||
|
if(wear_id)
|
||||||
|
var/id = wear_id.GetID()
|
||||||
if(id)
|
if(id)
|
||||||
return id
|
return id
|
||||||
if(H.get_active_hand())
|
if(get_active_hand())
|
||||||
var/obj/item/I = H.get_active_hand()
|
var/obj/item/I = get_active_hand()
|
||||||
return I.GetID()
|
return I.GetID()
|
||||||
|
|
||||||
|
/mob/living/silicon/GetIdCard()
|
||||||
|
return idcard
|
||||||
|
|
||||||
proc/FindNameFromID(var/mob/living/carbon/human/H)
|
proc/FindNameFromID(var/mob/living/carbon/human/H)
|
||||||
ASSERT(istype(H))
|
ASSERT(istype(H))
|
||||||
var/obj/item/weapon/card/id/C = GetIdCard(H)
|
var/obj/item/weapon/card/id/C = H.GetIdCard()
|
||||||
if(C)
|
if(C)
|
||||||
return C.registered_name
|
return C.registered_name
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
|||||||
faction = "Station"
|
faction = "Station"
|
||||||
total_positions = 1
|
total_positions = 1
|
||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "Nanotrasen officials and Corporate Regulations"
|
supervisors = "company officials and Corporate Regulations"
|
||||||
selection_color = "#ccccff"
|
selection_color = "#ccccff"
|
||||||
idtype = /obj/item/weapon/card/id/gold
|
idtype = /obj/item/weapon/card/id/gold
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
|
|||||||
@@ -311,7 +311,7 @@
|
|||||||
faction = "Station"
|
faction = "Station"
|
||||||
total_positions = 2
|
total_positions = 2
|
||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "Nanotrasen officials and Corporate Regulations"
|
supervisors = "company officials and Corporate Regulations"
|
||||||
selection_color = "#dddddd"
|
selection_color = "#dddddd"
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
department = "Security"
|
department = "Security"
|
||||||
department_flag = ENGSEC
|
department_flag = ENGSEC
|
||||||
faction = "Station"
|
faction = "Station"
|
||||||
total_positions = 2
|
total_positions = 1
|
||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the head of security"
|
supervisors = "the head of security"
|
||||||
selection_color = "#ffeeee"
|
selection_color = "#ffeeee"
|
||||||
@@ -131,8 +131,8 @@
|
|||||||
department = "Security"
|
department = "Security"
|
||||||
department_flag = ENGSEC
|
department_flag = ENGSEC
|
||||||
faction = "Station"
|
faction = "Station"
|
||||||
total_positions = 3
|
total_positions = 4
|
||||||
spawn_positions = 3
|
spawn_positions = 4
|
||||||
supervisors = "the head of security"
|
supervisors = "the head of security"
|
||||||
selection_color = "#ffeeee"
|
selection_color = "#ffeeee"
|
||||||
economic_modifier = 4
|
economic_modifier = 4
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ var/global/datum/controller/occupations/job_master
|
|||||||
if(C)
|
if(C)
|
||||||
C.rank = rank
|
C.rank = rank
|
||||||
C.assignment = title ? title : rank
|
C.assignment = title ? title : rank
|
||||||
C.set_owner_info(H)
|
H.set_id_info(C)
|
||||||
|
|
||||||
//put the player's account number onto the ID
|
//put the player's account number onto the ID
|
||||||
if(H.mind && H.mind.initial_account)
|
if(H.mind && H.mind.initial_account)
|
||||||
|
|||||||
@@ -20,10 +20,10 @@
|
|||||||
|
|
||||||
/obj/machinery/cablelayer/attack_hand(mob/user as mob)
|
/obj/machinery/cablelayer/attack_hand(mob/user as mob)
|
||||||
if(!cable&&!on)
|
if(!cable&&!on)
|
||||||
user << "\The [src] don't work with no cable."
|
user << "<span class='warning'>\The [src] doesn't have any cable loaded.</span>"
|
||||||
return
|
return
|
||||||
on=!on
|
on=!on
|
||||||
user.visible_message("\The [src] [!on?"dea":"a"]ctivated.", "[user] [!on?"dea":"a"]ctivated \the [src].")
|
user.visible_message("\The [user] [!on?"dea":"a"]ctivates \the [src].", "You switch [src] [on? "on" : "off"]")
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/cablelayer/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
/obj/machinery/cablelayer/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||||
@@ -31,26 +31,27 @@
|
|||||||
|
|
||||||
var/result = load_cable(O)
|
var/result = load_cable(O)
|
||||||
if(!result)
|
if(!result)
|
||||||
user << "Reel is full."
|
user << "<span class='warning'>\The [src]'s cable reel is full.</span>"
|
||||||
else
|
else
|
||||||
user << "[result] meters of cable successfully loaded."
|
user << "You load [result] lengths of cable into [src]."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(O, /obj/item/weapon/screwdriver))
|
if(istype(O, /obj/item/weapon/wirecutters))
|
||||||
if(cable && cable.amount)
|
if(cable && cable.amount)
|
||||||
var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||||
m = min(m, cable.amount)
|
m = min(m, cable.amount)
|
||||||
m = min(m, 30)
|
m = min(m, 30)
|
||||||
if(m)
|
if(m)
|
||||||
|
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||||
use_cable(m)
|
use_cable(m)
|
||||||
var/obj/item/stack/cable_coil/CC = new (get_turf(src))
|
var/obj/item/stack/cable_coil/CC = new (get_turf(src))
|
||||||
CC.amount = m
|
CC.amount = m
|
||||||
else
|
else
|
||||||
usr << "There's no more cable on the reel."
|
usr << "<span class='warning'>There's no more cable on the reel.</span>"
|
||||||
|
|
||||||
/obj/machinery/cablelayer/examine(mob/user)
|
/obj/machinery/cablelayer/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
user << "\The [src] has [cable.amount] meter\s."
|
user << "\The [src]'s cable reel has [cable.amount] length\s left."
|
||||||
|
|
||||||
/obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
/obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
||||||
if(istype(CC) && CC.amount)
|
if(istype(CC) && CC.amount)
|
||||||
@@ -70,12 +71,11 @@
|
|||||||
|
|
||||||
/obj/machinery/cablelayer/proc/use_cable(amount)
|
/obj/machinery/cablelayer/proc/use_cable(amount)
|
||||||
if(!cable || cable.amount<1)
|
if(!cable || cable.amount<1)
|
||||||
visible_message("Cable depleted, [src] deactivated.")
|
visible_message("A red light flashes on \the [src].")
|
||||||
return
|
return
|
||||||
/* if(cable.amount < amount)
|
|
||||||
visible_message("No enough cable to finish the task.")
|
|
||||||
return*/
|
|
||||||
cable.use(amount)
|
cable.use(amount)
|
||||||
|
if(deleted(cable))
|
||||||
|
cable = null
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/cablelayer/proc/reset()
|
/obj/machinery/cablelayer/proc/reset()
|
||||||
|
|||||||
@@ -396,6 +396,12 @@
|
|||||||
hidden = 1
|
hidden = 1
|
||||||
category = "Devices and Components"
|
category = "Devices and Components"
|
||||||
|
|
||||||
|
/datum/autolathe/recipe/beartrap
|
||||||
|
name = "mechanical trap"
|
||||||
|
path = /obj/item/weapon/beartrap
|
||||||
|
hidden = 1
|
||||||
|
category = "Devices and Components"
|
||||||
|
|
||||||
/datum/autolathe/recipe/welder_industrial
|
/datum/autolathe/recipe/welder_industrial
|
||||||
name = "industrial welding tool"
|
name = "industrial welding tool"
|
||||||
path = /obj/item/weapon/weldingtool/largetank
|
path = /obj/item/weapon/weldingtool/largetank
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
active_power_usage = 10
|
active_power_usage = 10
|
||||||
layer = 5
|
layer = 5
|
||||||
|
|
||||||
var/list/network = list("Exodus")
|
var/list/network = list(NETWORK_EXODUS)
|
||||||
var/c_tag = null
|
var/c_tag = null
|
||||||
var/c_tag_order = 999
|
var/c_tag_order = 999
|
||||||
var/status = 1
|
var/status = 1
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
if(isscrewdriver(W))
|
if(isscrewdriver(W))
|
||||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
|
|
||||||
var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret ", "Set Network", "Exodus"))
|
var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret ", "Set Network", NETWORK_EXODUS))
|
||||||
if(!input)
|
if(!input)
|
||||||
usr << "No input found please hang up and try your call again."
|
usr << "No input found please hang up and try your call again."
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -223,6 +223,9 @@ mob/living/proc/near_camera()
|
|||||||
/mob/living/proc/tracking_status()
|
/mob/living/proc/tracking_status()
|
||||||
// Easy checks first.
|
// Easy checks first.
|
||||||
// Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this.
|
// Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this.
|
||||||
|
var/obj/item/weapon/card/id/id = GetIdCard()
|
||||||
|
if(id && id.prevent_tracking())
|
||||||
|
return TRACKING_TERMINATE
|
||||||
if(InvalidPlayerTurf(get_turf(src)))
|
if(InvalidPlayerTurf(get_turf(src)))
|
||||||
return TRACKING_TERMINATE
|
return TRACKING_TERMINATE
|
||||||
if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked
|
if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked
|
||||||
@@ -240,14 +243,8 @@ mob/living/proc/near_camera()
|
|||||||
if(. == TRACKING_NO_COVERAGE)
|
if(. == TRACKING_NO_COVERAGE)
|
||||||
return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE
|
return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE
|
||||||
|
|
||||||
/mob/living/silicon/robot/syndicate/tracking_status()
|
|
||||||
return TRACKING_TERMINATE
|
|
||||||
|
|
||||||
/mob/living/carbon/human/tracking_status()
|
/mob/living/carbon/human/tracking_status()
|
||||||
//Cameras can't track people wearing an agent card or a ninja hood.
|
//Cameras can't track people wearing an agent card or a ninja hood.
|
||||||
var/obj/item/weapon/card/id/id = GetIdCard(src)
|
|
||||||
if(id && id.prevent_tracking())
|
|
||||||
return TRACKING_TERMINATE
|
|
||||||
if(istype(head, /obj/item/clothing/head/helmet/space/rig))
|
if(istype(head, /obj/item/clothing/head/helmet/space/rig))
|
||||||
var/obj/item/clothing/head/helmet/space/rig/helmet = head
|
var/obj/item/clothing/head/helmet/space/rig/helmet = head
|
||||||
if(helmet.prevent_track())
|
if(helmet.prevent_track())
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/atmoscontrol/laptop
|
/obj/machinery/computer/atmoscontrol/laptop
|
||||||
name = "Atmospherics Laptop"
|
name = "Atmospherics Laptop"
|
||||||
desc = "Cheap Nanotrasen Laptop."
|
desc = "A cheap laptop."
|
||||||
icon_state = "laptop"
|
icon_state = "laptop"
|
||||||
icon_keyboard = "laptop_key"
|
icon_keyboard = "laptop_key"
|
||||||
density = 0
|
density = 0
|
||||||
|
|||||||
@@ -257,3 +257,7 @@
|
|||||||
icon_state = "syndicam"
|
icon_state = "syndicam"
|
||||||
network = list("NUKE")
|
network = list("NUKE")
|
||||||
circuit = null
|
circuit = null
|
||||||
|
|
||||||
|
/obj/machinery/computer/security/nuclear/New()
|
||||||
|
..()
|
||||||
|
req_access = list(150)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/card
|
/obj/machinery/computer/card
|
||||||
name = "\improper ID card modification console"
|
name = "\improper ID card modification console"
|
||||||
desc = "Terminal for programming NanoTrasen employee ID cards to access parts of the station."
|
desc = "Terminal for programming employee ID cards to access parts of the station."
|
||||||
icon_keyboard = "id_key"
|
icon_keyboard = "id_key"
|
||||||
icon_screen = "id"
|
icon_screen = "id"
|
||||||
light_color = "#0099ff"
|
light_color = "#0099ff"
|
||||||
@@ -59,12 +59,10 @@
|
|||||||
if(!istype(id_card))
|
if(!istype(id_card))
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
if(!scan && access_change_ids in id_card.access)
|
if(!scan && (access_change_ids in id_card.access) && user.unEquip(id_card))
|
||||||
user.drop_item()
|
|
||||||
id_card.loc = src
|
id_card.loc = src
|
||||||
scan = id_card
|
scan = id_card
|
||||||
else if(!modify)
|
else if(!modify)
|
||||||
user.drop_item()
|
|
||||||
id_card.loc = src
|
id_card.loc = src
|
||||||
modify = id_card
|
modify = id_card
|
||||||
|
|
||||||
@@ -157,8 +155,7 @@
|
|||||||
modify = null
|
modify = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||||
usr.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
modify = I
|
modify = I
|
||||||
|
|
||||||
|
|||||||
@@ -190,12 +190,12 @@
|
|||||||
if(!is_relay_online())//Contact Centcom has a check, Syndie doesn't to allow for Traitor funs.
|
if(!is_relay_online())//Contact Centcom has a check, Syndie doesn't to allow for Traitor funs.
|
||||||
usr <<"<span class='warning'>No Emergency Bluespace Relay detected. Unable to transmit message.</span>"
|
usr <<"<span class='warning'>No Emergency Bluespace Relay detected. Unable to transmit message.</span>"
|
||||||
return
|
return
|
||||||
var/input = sanitize(input("Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||||
if(!input || !(usr in view(1,src)))
|
if(!input || !(usr in view(1,src)))
|
||||||
return
|
return
|
||||||
Centcomm_announce(input, usr)
|
Centcomm_announce(input, usr)
|
||||||
usr << "<span class='notice'>Message transmitted.</span>"
|
usr << "<span class='notice'>Message transmitted.</span>"
|
||||||
log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]")
|
log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
|
||||||
centcomm_message_cooldown = 1
|
centcomm_message_cooldown = 1
|
||||||
spawn(300)//30 second cooldown
|
spawn(300)//30 second cooldown
|
||||||
centcomm_message_cooldown = 0
|
centcomm_message_cooldown = 0
|
||||||
@@ -304,7 +304,7 @@
|
|||||||
if (src.authenticated==1)
|
if (src.authenticated==1)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
||||||
if(src.emagged == 0)
|
if(src.emagged == 0)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentcomm'>Send an emergency message to Centcomm</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
||||||
else
|
else
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||||
@@ -435,7 +435,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(deathsquad.deployed)
|
if(deathsquad.deployed)
|
||||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
user << "[boss_short] will not allow the shuttle to be called. Consider all contracts terminated."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(emergency_shuttle.deny_shuttle)
|
if(emergency_shuttle.deny_shuttle)
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(emergency_shuttle.going_to_centcom())
|
if(emergency_shuttle.going_to_centcom())
|
||||||
user << "The emergency shuttle may not be called while returning to CentCom."
|
user << "The emergency shuttle may not be called while returning to [boss_short]."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(emergency_shuttle.online())
|
if(emergency_shuttle.online())
|
||||||
@@ -470,7 +470,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(emergency_shuttle.going_to_centcom())
|
if(emergency_shuttle.going_to_centcom())
|
||||||
user << "The shuttle may not be called while returning to CentCom."
|
user << "The shuttle may not be called while returning to [boss_short]."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(emergency_shuttle.online())
|
if(emergency_shuttle.online())
|
||||||
@@ -480,11 +480,11 @@
|
|||||||
// if force is 0, some things may stop the shuttle call
|
// if force is 0, some things may stop the shuttle call
|
||||||
if(!force)
|
if(!force)
|
||||||
if(emergency_shuttle.deny_shuttle)
|
if(emergency_shuttle.deny_shuttle)
|
||||||
user << "Centcom does not currently have a shuttle available in your sector. Please try again later."
|
user << "[boss_short] does not currently have a shuttle available in your sector. Please try again later."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(deathsquad.deployed == 1)
|
if(deathsquad.deployed == 1)
|
||||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
user << "[boss_short] will not allow the shuttle to be called. Consider all contracts terminated."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(world.time < 54000) // 30 minute grace period to let the game get going
|
if(world.time < 54000) // 30 minute grace period to let the game get going
|
||||||
|
|||||||
@@ -62,13 +62,14 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/guestpass/attackby(obj/O, mob/user)
|
/obj/machinery/computer/guestpass/attackby(obj/O, mob/user)
|
||||||
if(istype(O, /obj/item/weapon/card/id))
|
if(istype(O, /obj/item/weapon/card/id))
|
||||||
if(!giver)
|
if(!giver && user.unEquip(O))
|
||||||
user.drop_item()
|
|
||||||
O.loc = src
|
O.loc = src
|
||||||
giver = O
|
giver = O
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
else
|
else if(giver)
|
||||||
user << "<span class='warning'>There is already ID card inside.</span>"
|
user << "<span class='warning'>There is already ID card inside.</span>"
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob)
|
/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob)
|
||||||
return attack_hand(user)
|
return attack_hand(user)
|
||||||
@@ -151,8 +152,7 @@
|
|||||||
accesses.Cut()
|
accesses.Cut()
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||||
usr.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
giver = I
|
giver = I
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
|
|||||||
@@ -35,12 +35,12 @@
|
|||||||
usr << "There is nothing to remove from the console."
|
usr << "There is nothing to remove from the console."
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/med_data/attackby(obj/item/O as obj, user as mob)
|
/obj/machinery/computer/med_data/attackby(var/obj/item/O, var/mob/user)
|
||||||
if(istype(O, /obj/item/weapon/card/id) && !scan)
|
if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O))
|
||||||
usr.drop_item()
|
|
||||||
O.loc = src
|
O.loc = src
|
||||||
scan = O
|
scan = O
|
||||||
user << "You insert [O]."
|
user << "You insert \the [O]."
|
||||||
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/computer/med_data/attack_ai(user as mob)
|
/obj/machinery/computer/med_data/attack_ai(user as mob)
|
||||||
@@ -552,7 +552,7 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/med_data/laptop
|
/obj/machinery/computer/med_data/laptop
|
||||||
name = "Medical Laptop"
|
name = "Medical Laptop"
|
||||||
desc = "Cheap Nanotrasen Laptop."
|
desc = "A cheap laptop."
|
||||||
icon_state = "laptop"
|
icon_state = "laptop"
|
||||||
icon_keyboard = "laptop_key"
|
icon_keyboard = "laptop_key"
|
||||||
icon_screen = "medlaptop"
|
icon_screen = "medlaptop"
|
||||||
|
|||||||
@@ -248,8 +248,7 @@ What a mess.*/
|
|||||||
scan = null
|
scan = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||||
usr.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
scan = I
|
scan = I
|
||||||
|
|
||||||
|
|||||||
@@ -24,12 +24,12 @@
|
|||||||
var/sortBy = "name"
|
var/sortBy = "name"
|
||||||
var/order = 1 // -1 = Descending - 1 = Ascending
|
var/order = 1 // -1 = Descending - 1 = Ascending
|
||||||
|
|
||||||
/obj/machinery/computer/skills/attackby(obj/item/O as obj, user as mob)
|
/obj/machinery/computer/skills/attackby(obj/item/O as obj, var/mob/user)
|
||||||
if(istype(O, /obj/item/weapon/card/id) && !scan)
|
if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O))
|
||||||
usr.drop_item()
|
|
||||||
O.loc = src
|
O.loc = src
|
||||||
scan = O
|
scan = O
|
||||||
user << "You insert [O]."
|
user << "You insert [O]."
|
||||||
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/computer/skills/attack_ai(mob/user as mob)
|
/obj/machinery/computer/skills/attack_ai(mob/user as mob)
|
||||||
@@ -185,8 +185,7 @@ What a mess.*/
|
|||||||
scan = null
|
scan = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||||
usr.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
scan = I
|
scan = I
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ var/specops_shuttle_timeleft = 0
|
|||||||
|
|
||||||
for(var/turf/T in get_area_turfs(end_location) )
|
for(var/turf/T in get_area_turfs(end_location) )
|
||||||
var/mob/M = locate(/mob) in T
|
var/mob/M = locate(/mob) in T
|
||||||
M << "<span class='notice'>You have arrived at Central Command. Operation has ended!</span>"
|
M << "<span class='notice'>You have arrived at [boss_name]. Operation has ended!</span>"
|
||||||
|
|
||||||
specops_shuttle_at_station = 0
|
specops_shuttle_at_station = 0
|
||||||
|
|
||||||
@@ -286,14 +286,14 @@ var/specops_shuttle_timeleft = 0
|
|||||||
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
||||||
|
|
||||||
if (!specops_can_move())
|
if (!specops_can_move())
|
||||||
usr << "<span class='notice'>Central Command will not allow the Special Operations shuttle to return yet.</span>"
|
usr << "<span class='notice'>[boss_name] will not allow the Special Operations shuttle to return yet.</span>"
|
||||||
if(world.timeofday <= specops_shuttle_timereset)
|
if(world.timeofday <= specops_shuttle_timereset)
|
||||||
if (((world.timeofday - specops_shuttle_timereset)/10) > 60)
|
if (((world.timeofday - specops_shuttle_timereset)/10) > 60)
|
||||||
usr << "<span class='notice'>[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!</span>"
|
usr << "<span class='notice'>[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!</span>"
|
||||||
usr << "<span class='notice'>[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!</span>"
|
usr << "<span class='notice'>[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!</span>"
|
||||||
return
|
return
|
||||||
|
|
||||||
usr << "<span class='notice'>The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds.</span>"
|
usr << "<span class='notice'>The Special Operations shuttle will arrive at [boss_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>"
|
||||||
|
|
||||||
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/datum/file/program/ntos
|
/datum/file/program/ntos
|
||||||
name = "Nanotrasen Operating System"
|
name = "NanoTrasen Operating System"
|
||||||
extension = "prog"
|
extension = "prog"
|
||||||
active_state = "ntos"
|
active_state = "ntos"
|
||||||
var/obj/item/part/computer/storage/current // the drive being viewed, null for desktop/computer
|
var/obj/item/part/computer/storage/current // the drive being viewed, null for desktop/computer
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
var/dat = {"
|
var/dat = {"
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Nanotrasen Operating System</title>
|
<title>Operating System</title>
|
||||||
<style>
|
<style>
|
||||||
div.filewin {
|
div.filewin {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/file/program/arcade
|
/datum/file/program/arcade
|
||||||
desc = "The best arcade game ever produced by Nanotrasen's short-lived entertainment divison."
|
desc = "The best arcade game ever produced by the Company's short-lived entertainment divison."
|
||||||
//headcanon: they also ported E.T. for the atari 2600, superman 64, and basically every other movie tie-in game ever
|
//headcanon: they also ported E.T. for the atari 2600, superman 64, and basically every other movie tie-in game ever
|
||||||
|
|
||||||
active_state = "generic"
|
active_state = "generic"
|
||||||
|
|||||||
@@ -187,7 +187,7 @@
|
|||||||
|
|
||||||
/datum/file/program/security
|
/datum/file/program/security
|
||||||
name = "camera monitor"
|
name = "camera monitor"
|
||||||
desc = "Connects to the Nanotrasen Camera Network"
|
desc = "Connects to the station camera network."
|
||||||
image = 'icons/ntos/camera.png'
|
image = 'icons/ntos/camera.png'
|
||||||
active_state = "camera-static"
|
active_state = "camera-static"
|
||||||
|
|
||||||
|
|||||||
@@ -333,7 +333,7 @@
|
|||||||
return get_all_centcom_jobs() + "Custom"
|
return get_all_centcom_jobs() + "Custom"
|
||||||
|
|
||||||
accessblock()
|
accessblock()
|
||||||
var/accesses = "<h5>Central Command:</h5>"
|
var/accesses = "<h5>[boss_name]:</h5>"
|
||||||
for(var/A in get_all_centcom_access())
|
for(var/A in get_all_centcom_access())
|
||||||
if(A in writer.access)
|
if(A in writer.access)
|
||||||
accesses += topic_link(src,"access=[A]","<font color='red'>[replacetext(get_centcom_access_desc(A), " ", " ")]</font>") + " "
|
accesses += topic_link(src,"access=[A]","<font color='red'>[replacetext(get_centcom_access_desc(A), " ", " ")]</font>") + " "
|
||||||
|
|||||||
@@ -192,12 +192,12 @@
|
|||||||
if(centcomm_message_cooldown)
|
if(centcomm_message_cooldown)
|
||||||
usr << "Arrays recycling. Please stand by."
|
usr << "Arrays recycling. Please stand by."
|
||||||
return
|
return
|
||||||
var/input = sanitize(input("Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", ""))
|
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", ""))
|
||||||
if(!input || !interactable())
|
if(!input || !interactable())
|
||||||
return
|
return
|
||||||
Centcomm_announce(input, usr)
|
Centcomm_announce(input, usr)
|
||||||
usr << "Message transmitted."
|
usr << "Message transmitted."
|
||||||
log_say("[key_name(usr)] has made a Centcomm announcement: [input]")
|
log_say("[key_name(usr)] has made a [boss_short] announcement: [input]")
|
||||||
centcomm_message_cooldown = 1
|
centcomm_message_cooldown = 1
|
||||||
spawn(600)//10 minute cooldown
|
spawn(600)//10 minute cooldown
|
||||||
centcomm_message_cooldown = 0
|
centcomm_message_cooldown = 0
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
if (authenticated==2)
|
if (authenticated==2)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
||||||
if(computer.emagged == 0)
|
if(computer.emagged == 0)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to Centcomm</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
||||||
else
|
else
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
scan = null
|
scan = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.drop_item(I))
|
||||||
computer.cardslot.insert(I, 1)
|
computer.cardslot.insert(I, 1)
|
||||||
scan = I
|
scan = I
|
||||||
|
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
scan2 = null
|
scan2 = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.drop_item(I))
|
||||||
computer.cardslot.insert(I, 2)
|
computer.cardslot.insert(I, 2)
|
||||||
scan2 = I
|
scan2 = I
|
||||||
|
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ What a mess.*/
|
|||||||
scan = null
|
scan = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.drop_item(I))
|
||||||
computer.cardslot.insert(I, 1)
|
computer.cardslot.insert(I, 1)
|
||||||
scan = I
|
scan = I
|
||||||
|
|
||||||
@@ -267,7 +267,7 @@ What a mess.*/
|
|||||||
scan2 = null
|
scan2 = null
|
||||||
else
|
else
|
||||||
var/obj/item/I = usr.get_active_hand()
|
var/obj/item/I = usr.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && usr.drop_item(I))
|
||||||
computer.cardslot.insert(I, 2)
|
computer.cardslot.insert(I, 2)
|
||||||
scan2 = I
|
scan2 = I
|
||||||
|
|
||||||
|
|||||||
@@ -15,13 +15,13 @@
|
|||||||
return
|
return
|
||||||
var/dat = ""
|
var/dat = ""
|
||||||
dat += "<center><span style='font-size:24pt'><b>Welcome to NTOS</b></span></center>"
|
dat += "<center><span style='font-size:24pt'><b>Welcome to NTOS</b></span></center>"
|
||||||
dat += "<center><span style='font-size:8pt'>Thank you for choosing NTOS, your gateway to the future of mobile computing technology, sponsored by Nanotrasen (R)</span></center><br>"
|
dat += "<center><span style='font-size:8pt'>Thank you for choosing NTOS, your gateway to the future of mobile computing technology, sponsored by [company_name] (R)</span></center><br>"
|
||||||
dat += "<span style='font-size:12pt'><b>Getting started with NTOS:</b></span><br>"
|
dat += "<span style='font-size:12pt'><b>Getting started with NTOS:</b></span><br>"
|
||||||
dat += "To leave a current program, click the X button in the top right corner of the window. This will return you to the NTOS desktop. \
|
dat += "To leave a current program, click the X button in the top right corner of the window. This will return you to the NTOS desktop. \
|
||||||
From the desktop, you can open the hard drive, usually located in the top left corner to access all the programs installed on your computer. \
|
From the desktop, you can open the hard drive, usually located in the top left corner to access all the programs installed on your computer. \
|
||||||
When you rented your laptop, you were supplied with programs that your Nanotrasen Issued ID has given you access to use. \
|
When you rented your laptop, you were supplied with programs that your [company_name] Issued ID has given you access to use. \
|
||||||
In the event of a serious error, the right click menu will give you the ability to reset your computer. To open and close your laptop, alt-click your device.\
|
In the event of a serious error, the right click menu will give you the ability to reset your computer. To open and close your laptop, alt-click your device.\
|
||||||
If you have any questions or technical issues, please contact your local computer technical experts at your local Central Command."
|
If you have any questions or technical issues, please contact your local computer technical experts at your local [boss_name]."
|
||||||
popup.set_content(dat)
|
popup.set_content(dat)
|
||||||
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
popup.open()
|
popup.open()
|
||||||
|
|||||||
@@ -227,7 +227,7 @@
|
|||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||||
else
|
else
|
||||||
transfer_and_vend(CH, C)
|
transfer_and_vend(CH, C)
|
||||||
|
|
||||||
@@ -380,7 +380,7 @@
|
|||||||
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
transfer_and_reimburse(CH)
|
transfer_and_reimburse(CH)
|
||||||
|
|||||||
@@ -254,6 +254,7 @@
|
|||||||
health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth)
|
health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth)
|
||||||
update_icon()
|
update_icon()
|
||||||
qdel(repairing)
|
qdel(repairing)
|
||||||
|
repairing = null
|
||||||
return
|
return
|
||||||
|
|
||||||
if(repairing && istype(I, /obj/item/weapon/crowbar))
|
if(repairing && istype(I, /obj/item/weapon/crowbar))
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
|
|
||||||
/obj/machinery/newscaster
|
/obj/machinery/newscaster
|
||||||
name = "newscaster"
|
name = "newscaster"
|
||||||
desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!"
|
desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!"
|
||||||
icon = 'icons/obj/terminals.dmi'
|
icon = 'icons/obj/terminals.dmi'
|
||||||
icon_state = "newscaster_normal"
|
icon_state = "newscaster_normal"
|
||||||
var/isbroken = 0 //1 if someone banged it with something heavy
|
var/isbroken = 0 //1 if someone banged it with something heavy
|
||||||
@@ -277,7 +277,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
dat+="<HR><B>Feed Security functions:</B><BR>"
|
dat+="<HR><B>Feed Security functions:</B><BR>"
|
||||||
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
|
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
|
||||||
dat+="<BR><A href='?src=\ref[src];menu_censor_story=1'>Censor Feed Stories</A>"
|
dat+="<BR><A href='?src=\ref[src];menu_censor_story=1'>Censor Feed Stories</A>"
|
||||||
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with Nanotrasen D-Notice</A>"
|
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice</A>"
|
||||||
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
|
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
|
||||||
if(1)
|
if(1)
|
||||||
dat+= "Station Feed Channels<HR>"
|
dat+= "Station Feed Channels<HR>"
|
||||||
@@ -358,7 +358,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
if(9)
|
if(9)
|
||||||
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT>\]</FONT><HR>"
|
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT>\]</FONT><HR>"
|
||||||
if(src.viewing_channel.censored)
|
if(src.viewing_channel.censored)
|
||||||
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>"
|
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
|
||||||
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
|
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
|
||||||
else
|
else
|
||||||
if( isemptylist(src.viewing_channel.messages) )
|
if( isemptylist(src.viewing_channel.messages) )
|
||||||
@@ -378,7 +378,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||||
dat+="<BR><A href='?src=\ref[src];setScreen=[1]'>Back</A>"
|
dat+="<BR><A href='?src=\ref[src];setScreen=[1]'>Back</A>"
|
||||||
if(10)
|
if(10)
|
||||||
dat+="<B>Nanotrasen Feed Censorship Tool</B><BR>"
|
dat+="<B>[company_name] Feed Censorship Tool</B><BR>"
|
||||||
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
|
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
|
||||||
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
|
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
|
||||||
dat+="<HR>Select Feed channel to get Stories from:<BR>"
|
dat+="<HR>Select Feed channel to get Stories from:<BR>"
|
||||||
@@ -389,7 +389,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
||||||
if(11)
|
if(11)
|
||||||
dat+="<B>Nanotrasen D-Notice Handler</B><HR>"
|
dat+="<B>[company_name] D-Notice Handler</B><HR>"
|
||||||
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
|
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
|
||||||
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
|
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
|
||||||
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
|
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
|
||||||
@@ -416,7 +416,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
|
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
|
||||||
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[src.viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
|
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[src.viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
|
||||||
if(src.viewing_channel.censored)
|
if(src.viewing_channel.censored)
|
||||||
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>"
|
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
|
||||||
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
|
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
|
||||||
else
|
else
|
||||||
if( isemptylist(src.viewing_channel.messages) )
|
if( isemptylist(src.viewing_channel.messages) )
|
||||||
@@ -622,7 +622,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
src.screen = 15
|
src.screen = 15
|
||||||
else
|
else
|
||||||
if(news_network.wanted_issue.is_admin_message)
|
if(news_network.wanted_issue.is_admin_message)
|
||||||
alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok")
|
alert("The wanted issue has been distributed by a [company_name] higherup. You cannot edit it.","Ok")
|
||||||
return
|
return
|
||||||
news_network.wanted_issue.author = src.channel_name
|
news_network.wanted_issue.author = src.channel_name
|
||||||
news_network.wanted_issue.body = src.msg
|
news_network.wanted_issue.body = src.msg
|
||||||
@@ -635,7 +635,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
|
|
||||||
else if(href_list["cancel_wanted"])
|
else if(href_list["cancel_wanted"])
|
||||||
if(news_network.wanted_issue.is_admin_message)
|
if(news_network.wanted_issue.is_admin_message)
|
||||||
alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot take it down.","Ok")
|
alert("The wanted issue has been distributed by a [company_name] higherup. You cannot take it down.","Ok")
|
||||||
return
|
return
|
||||||
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
|
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
|
||||||
if(choice=="Confirm")
|
if(choice=="Confirm")
|
||||||
@@ -651,7 +651,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
else if(href_list["censor_channel_author"])
|
else if(href_list["censor_channel_author"])
|
||||||
var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
|
var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
|
||||||
if(FC.is_admin_channel)
|
if(FC.is_admin_channel)
|
||||||
alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok")
|
alert("This channel was created by a [company_name] Officer. You cannot censor it.","Ok")
|
||||||
return
|
return
|
||||||
if(FC.author != "<B>\[REDACTED\]</B>")
|
if(FC.author != "<B>\[REDACTED\]</B>")
|
||||||
FC.backup_author = FC.author
|
FC.backup_author = FC.author
|
||||||
@@ -664,7 +664,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
else if(href_list["censor_channel_story_author"])
|
else if(href_list["censor_channel_story_author"])
|
||||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
|
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
|
||||||
if(MSG.is_admin_message)
|
if(MSG.is_admin_message)
|
||||||
alert("This message was created by a Nanotrasen Officer. You cannot censor its author.","Ok")
|
alert("This message was created by a [company_name] Officer. You cannot censor its author.","Ok")
|
||||||
return
|
return
|
||||||
if(MSG.author != "<B>\[REDACTED\]</B>")
|
if(MSG.author != "<B>\[REDACTED\]</B>")
|
||||||
MSG.backup_author = MSG.author
|
MSG.backup_author = MSG.author
|
||||||
@@ -677,7 +677,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
else if(href_list["censor_channel_story_body"])
|
else if(href_list["censor_channel_story_body"])
|
||||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
|
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
|
||||||
if(MSG.is_admin_message)
|
if(MSG.is_admin_message)
|
||||||
alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok")
|
alert("This channel was created by a [company_name] Officer. You cannot censor it.","Ok")
|
||||||
return
|
return
|
||||||
if(MSG.body != "<B>\[REDACTED\]</B>")
|
if(MSG.body != "<B>\[REDACTED\]</B>")
|
||||||
MSG.backup_body = MSG.body
|
MSG.backup_body = MSG.body
|
||||||
@@ -703,7 +703,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
else if(href_list["toggle_d_notice"])
|
else if(href_list["toggle_d_notice"])
|
||||||
var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
|
var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
|
||||||
if(FC.is_admin_channel)
|
if(FC.is_admin_channel)
|
||||||
alert("This channel was created by a Nanotrasen Officer. You cannot place a D-Notice upon it.","Ok")
|
alert("This channel was created by a [company_name] Officer. You cannot place a D-Notice upon it.","Ok")
|
||||||
return
|
return
|
||||||
FC.censored = !FC.censored
|
FC.censored = !FC.censored
|
||||||
FC.update()
|
FC.update()
|
||||||
@@ -806,7 +806,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
|||||||
|
|
||||||
/obj/item/weapon/newspaper
|
/obj/item/weapon/newspaper
|
||||||
name = "newspaper"
|
name = "newspaper"
|
||||||
desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations."
|
desc = "An issue of The Griffon, the newspaper circulating aboard most stations."
|
||||||
icon = 'icons/obj/bureaucracy.dmi'
|
icon = 'icons/obj/bureaucracy.dmi'
|
||||||
icon_state = "newspaper"
|
icon_state = "newspaper"
|
||||||
w_class = 2 //Let's make it fit in trashbags!
|
w_class = 2 //Let's make it fit in trashbags!
|
||||||
@@ -827,7 +827,7 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
|
|||||||
switch(screen)
|
switch(screen)
|
||||||
if(0) //Cover
|
if(0) //Cover
|
||||||
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
|
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
|
||||||
dat+="<DIV ALIGN='center'><FONT SIZE=2>Nanotrasen-standard newspaper, for use on Nanotrasen<EFBFBD> Space Facilities</FONT></div><HR>"
|
dat+="<DIV ALIGN='center'><FONT SIZE=2>[company_name]-standard newspaper, for use on [company_name]<EFBFBD> Space Facilities</FONT></div><HR>"
|
||||||
if(isemptylist(src.news_content))
|
if(isemptylist(src.news_content))
|
||||||
if(src.important_message)
|
if(src.important_message)
|
||||||
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR></ul>"
|
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR></ul>"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/obj/mecha/combat/durand
|
/obj/mecha/combat/durand
|
||||||
desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
|
desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms."
|
||||||
name = "Durand"
|
name = "Durand"
|
||||||
icon_state = "durand"
|
icon_state = "durand"
|
||||||
initial_icon = "durand"
|
initial_icon = "durand"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
max_equip = 3
|
max_equip = 3
|
||||||
|
|
||||||
/obj/mecha/combat/gygax/dark
|
/obj/mecha/combat/gygax/dark
|
||||||
desc = "A lightweight exosuit used by NanoTrasen Heavy Asset Protection. A significantly upgraded Gygax security mech."
|
desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech."
|
||||||
name = "Dark Gygax"
|
name = "Dark Gygax"
|
||||||
icon_state = "darkgygax"
|
icon_state = "darkgygax"
|
||||||
initial_icon = "darkgygax"
|
initial_icon = "darkgygax"
|
||||||
|
|||||||
@@ -714,7 +714,7 @@
|
|||||||
sleep(15)
|
sleep(15)
|
||||||
src.visible_message("\icon[src] <b>[src]</b> beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
|
src.visible_message("\icon[src] <b>[src]</b> beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
|
||||||
sleep(30)
|
sleep(30)
|
||||||
src.visible_message("\icon[src] <b>[src]</b> beeps: \"User DB truncated. Please contact your Nanotrasen system operator for future assistance.\"")
|
src.visible_message("\icon[src] <b>[src]</b> beeps: \"User DB truncated. Please contact your [company_name] system operator for future assistance.\"")
|
||||||
req_access = null
|
req_access = null
|
||||||
emagged = 1
|
emagged = 1
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -37,12 +37,12 @@
|
|||||||
/datum/poster/bay_8
|
/datum/poster/bay_8
|
||||||
icon_state="bsposter8"
|
icon_state="bsposter8"
|
||||||
name = "Pinup Girl Cindy"
|
name = "Pinup Girl Cindy"
|
||||||
desc = "This particular one is of Nanotrasen's PR girl, Cindy, in a particularly feminine pose."
|
desc = "This particular one is of a historical corporate PR girl, Cindy, in a particularly feminine pose."
|
||||||
|
|
||||||
/datum/poster/bay_9
|
/datum/poster/bay_9
|
||||||
icon_state="bsposter9"
|
icon_state="bsposter9"
|
||||||
name = "Pinup Girl Amy"
|
name = "Pinup Girl Amy"
|
||||||
desc = "This particular one is of Amy, the nymphomaniac Urban Legend of Nanotrasen Space Stations. How this photograph came to be is not known."
|
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
|
||||||
|
|
||||||
/datum/poster/bay_10
|
/datum/poster/bay_10
|
||||||
icon_state="bsposter10"
|
icon_state="bsposter10"
|
||||||
@@ -52,12 +52,12 @@
|
|||||||
/datum/poster/bay_11
|
/datum/poster/bay_11
|
||||||
icon_state="bsposter11"
|
icon_state="bsposter11"
|
||||||
name = "Underwater Laboratory"
|
name = "Underwater Laboratory"
|
||||||
desc = "This particular one is of the fabled last crew of Nanotrasen's previous project before going big on phoron research."
|
desc = "This particular one is of the fabled last crew of a previous Company project."
|
||||||
|
|
||||||
/datum/poster/bay_12
|
/datum/poster/bay_12
|
||||||
icon_state="bsposter12"
|
icon_state="bsposter12"
|
||||||
name = "Rogue AI"
|
name = "Rogue AI"
|
||||||
desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of Nanotrasen's earliest space stations. Back then, the corporation was just known as TriOptimum."
|
desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of humanity's earliest space stations. Back then, the Company was just known as TriOptimum."
|
||||||
|
|
||||||
/datum/poster/bay_13
|
/datum/poster/bay_13
|
||||||
icon_state="bsposter13"
|
icon_state="bsposter13"
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
/datum/poster/bay_35
|
/datum/poster/bay_35
|
||||||
icon_state="bsposter35"
|
icon_state="bsposter35"
|
||||||
name = "Lamarr"
|
name = "Lamarr"
|
||||||
desc = "This is a poster depicting the pet and mascot of the NSS Exodus science department."
|
desc = "This is a poster depicting the pet and mascot of the science department."
|
||||||
|
|
||||||
/datum/poster/bay_36
|
/datum/poster/bay_36
|
||||||
icon_state="bsposter36"
|
icon_state="bsposter36"
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
var/area/A = get_area()
|
var/area/A = get_area()
|
||||||
var/text = {"<HTML><head><title>[src]</title></head><BODY>
|
var/text = {"<HTML><head><title>[src]</title></head><BODY>
|
||||||
<h2>[station_name()] blueprints</h2>
|
<h2>[station_name()] blueprints</h2>
|
||||||
<small>Property of Nanotrasen. For heads of staff only. Store in high-secure storage.</small><hr>
|
<small>Property of [company_name]. For heads of staff only. Store in high-secure storage.</small><hr>
|
||||||
"}
|
"}
|
||||||
switch (get_area_type())
|
switch (get_area_type())
|
||||||
if (AREA_SPACE)
|
if (AREA_SPACE)
|
||||||
|
|||||||
@@ -1142,21 +1142,22 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
if(choice == 1)
|
if(choice == 1)
|
||||||
if (id)
|
if (id)
|
||||||
remove_id()
|
remove_id()
|
||||||
|
return 1
|
||||||
else
|
else
|
||||||
var/obj/item/I = user.get_active_hand()
|
var/obj/item/I = user.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id) && user.unEquip(I))
|
||||||
user.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
id = I
|
id = I
|
||||||
|
return 1
|
||||||
else
|
else
|
||||||
var/obj/item/weapon/card/I = user.get_active_hand()
|
var/obj/item/weapon/card/I = user.get_active_hand()
|
||||||
if (istype(I, /obj/item/weapon/card/id) && I:registered_name)
|
if (istype(I, /obj/item/weapon/card/id) && I:registered_name && user.unEquip(I))
|
||||||
var/obj/old_id = id
|
var/obj/old_id = id
|
||||||
user.drop_item()
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
id = I
|
id = I
|
||||||
user.put_in_hands(old_id)
|
user.put_in_hands(old_id)
|
||||||
return
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
// access to status display signals
|
// access to status display signals
|
||||||
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob)
|
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob)
|
||||||
@@ -1184,7 +1185,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
else
|
else
|
||||||
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
|
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
|
||||||
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
|
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
|
||||||
id_check(user, 2)
|
if(id_check(user, 2))
|
||||||
user << "<span class='notice'>You put the ID into \the [src]'s slot.</span>"
|
user << "<span class='notice'>You put the ID into \the [src]'s slot.</span>"
|
||||||
updateSelfDialog()//Update self dialog on success.
|
updateSelfDialog()//Update self dialog on success.
|
||||||
return //Return in case of failed check or when successful.
|
return //Return in case of failed check or when successful.
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
name = "\improper P.R.O.V.E. cartridge"
|
name = "\improper P.R.O.V.E. cartridge"
|
||||||
icon_state = "cart-s"
|
icon_state = "cart-s"
|
||||||
access_security = 1
|
access_security = 1
|
||||||
|
access_status_display = 1
|
||||||
|
|
||||||
/obj/item/weapon/cartridge/clown
|
/obj/item/weapon/cartridge/clown
|
||||||
name = "\improper Honkworks 5.0 cartridge"
|
name = "\improper Honkworks 5.0 cartridge"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/obj/item/radio/integrated
|
/obj/item/radio/integrated
|
||||||
name = "\improper PDA radio module"
|
name = "\improper PDA radio module"
|
||||||
desc = "An electronic radio system of nanotrasen origin."
|
desc = "An electronic radio system."
|
||||||
icon = 'icons/obj/module.dmi'
|
icon = 'icons/obj/module.dmi'
|
||||||
icon_state = "power_mod"
|
icon_state = "power_mod"
|
||||||
var/obj/item/device/pda/hostpda = null
|
var/obj/item/device/pda/hostpda = null
|
||||||
|
|||||||
@@ -105,12 +105,13 @@
|
|||||||
if(istype(ai.loc, /turf/))
|
if(istype(ai.loc, /turf/))
|
||||||
new /obj/structure/AIcore/deactivated(get_turf(ai))
|
new /obj/structure/AIcore/deactivated(get_turf(ai))
|
||||||
|
|
||||||
|
ai.carded = 1
|
||||||
admin_attack_log(user, ai, "Carded with [src.name]", "Was carded with [src.name]", "used the [src.name] to card")
|
admin_attack_log(user, ai, "Carded with [src.name]", "Was carded with [src.name]", "used the [src.name] to card")
|
||||||
src.name = "[initial(name)] - [ai.name]"
|
src.name = "[initial(name)] - [ai.name]"
|
||||||
|
|
||||||
ai.loc = src
|
ai.loc = src
|
||||||
ai.cancel_camera()
|
|
||||||
ai.destroy_eyeobj(src)
|
ai.destroy_eyeobj(src)
|
||||||
|
ai.cancel_camera()
|
||||||
ai.control_disabled = 1
|
ai.control_disabled = 1
|
||||||
ai.aiRestorePowerRoutine = 0
|
ai.aiRestorePowerRoutine = 0
|
||||||
carded_ai = ai
|
carded_ai = ai
|
||||||
@@ -120,10 +121,14 @@
|
|||||||
if(user.client)
|
if(user.client)
|
||||||
user << "<span class='notice'><b>Transfer successful:</b></span> [ai.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
user << "<span class='notice'><b>Transfer successful:</b></span> [ai.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
||||||
|
|
||||||
|
ai.canmove = 1
|
||||||
update_icon()
|
update_icon()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/item/device/aicard/proc/clear()
|
/obj/item/device/aicard/proc/clear()
|
||||||
|
if(carded_ai && istype(carded_ai.loc, /turf))
|
||||||
|
carded_ai.canmove = 0
|
||||||
|
carded_ai.carded = 0
|
||||||
name = initial(name)
|
name = initial(name)
|
||||||
carded_ai = null
|
carded_ai = null
|
||||||
update_icon()
|
update_icon()
|
||||||
@@ -140,10 +145,9 @@
|
|||||||
carded_ai.show_message(rendered, type)
|
carded_ai.show_message(rendered, type)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/*
|
|
||||||
/obj/item/device/aicard/relaymove(var/mob/user, var/direction)
|
/obj/item/device/aicard/relaymove(var/mob/user, var/direction)
|
||||||
if(src.loc && istype(src.loc.loc, /obj/item/rig_module))
|
if(user.stat || user.stunned)
|
||||||
var/obj/item/rig_module/module = src.loc.loc
|
|
||||||
if(!module.holder || !direction)
|
|
||||||
return
|
return
|
||||||
module.holder.forced_move(direction)*/
|
var/obj/item/weapon/rig/rig = src.get_rig()
|
||||||
|
if(istype(rig))
|
||||||
|
rig.forced_move(direction, user)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
icon_state = "[initial(icon_state)]-on"
|
icon_state = "[initial(icon_state)]-on"
|
||||||
set_light(brightness_on)
|
set_light(brightness_on)
|
||||||
else
|
else
|
||||||
icon_state = initial(icon_state)
|
icon_state = "[initial(icon_state)]"
|
||||||
set_light(0)
|
set_light(0)
|
||||||
|
|
||||||
/obj/item/device/flashlight/proc/update_brightness(var/mob/user = null)
|
/obj/item/device/flashlight/proc/update_brightness(var/mob/user = null)
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
|
|
||||||
/obj/item/device/flashlight/flare
|
/obj/item/device/flashlight/flare
|
||||||
name = "flare"
|
name = "flare"
|
||||||
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
|
desc = "A red standard-issue flare. There are instructions on the side reading 'pull cord, make light'."
|
||||||
w_class = 2.0
|
w_class = 2.0
|
||||||
brightness_on = 7 // Pretty bright.
|
brightness_on = 7 // Pretty bright.
|
||||||
light_color = "#e58775"
|
light_color = "#e58775"
|
||||||
|
|||||||
@@ -10,12 +10,12 @@
|
|||||||
var/looking_for_personality = 0
|
var/looking_for_personality = 0
|
||||||
var/mob/living/silicon/pai/pai
|
var/mob/living/silicon/pai/pai
|
||||||
|
|
||||||
/*/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
||||||
if(src.loc && istype(src.loc.loc, /obj/item/rig_module))
|
if(user.stat || user.stunned)
|
||||||
var/obj/item/rig_module/module = src.loc.loc
|
|
||||||
if(!module.holder || !direction)
|
|
||||||
return
|
return
|
||||||
module.holder.forced_move(direction)*/
|
var/obj/item/weapon/rig/rig = src.get_rig()
|
||||||
|
if(istype(rig))
|
||||||
|
rig.forced_move(direction, user)
|
||||||
|
|
||||||
/obj/item/device/paicard/New()
|
/obj/item/device/paicard/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -120,5 +120,5 @@
|
|||||||
channels = list("Service" = 1)
|
channels = list("Service" = 1)
|
||||||
|
|
||||||
/obj/item/device/encryptionkey/ert
|
/obj/item/device/encryptionkey/ert
|
||||||
name = "\improper NanoTrasen ERT radio encryption key"
|
name = "\improper ERT radio encryption key"
|
||||||
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ var/image/default_abstract_uplink_icon
|
|||||||
if(!user)
|
if(!user)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/item/weapon/card/id/I = GetIdCard(user)
|
var/obj/item/weapon/card/id/I = user.GetIdCard()
|
||||||
var/datum/data/record/random_general_record
|
var/datum/data/record/random_general_record
|
||||||
var/datum/data/record/random_medical_record
|
var/datum/data/record/random_medical_record
|
||||||
if(data_core.general.len)
|
if(data_core.general.len)
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
|
|||||||
|
|
||||||
if(isnull(insults))
|
if(isnull(insults))
|
||||||
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
||||||
user.show_message("<span class='warning'>[user]'s [name] rasps, \"[use_message]\"</span>",1)
|
user.audible_message("<span class='warning'>[user]'s [name] rasps, \"[use_message]\"</span>", "<span class='warning'>\The [user] holds up \the [name].</span>")
|
||||||
else
|
else
|
||||||
if(insults > 0)
|
if(insults > 0)
|
||||||
playsound(get_turf(src), 'sound/voice/binsult.ogg', 100, 1, vary = 0)
|
playsound(get_turf(src), 'sound/voice/binsult.ogg', 100, 1, vary = 0)
|
||||||
// Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit.
|
// Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit.
|
||||||
user.show_message("<span class='warning'>[user]'s [name] gurgles something indecipherable and deeply offensive.</span>")
|
user.audible_message("<span class='warning'>[user]'s [name] gurgles something indecipherable and deeply offensive.</span>", "<span class='warning'>\The [user] holds up \the [name].</span>")
|
||||||
insults--
|
insults--
|
||||||
else
|
else
|
||||||
user << "<span class='danger'>*BZZZZZZZZT*</span>"
|
user << "<span class='danger'>*BZZZZZZZZT*</span>"
|
||||||
|
|||||||
@@ -31,10 +31,10 @@
|
|||||||
R.modtype = initial(R.modtype)
|
R.modtype = initial(R.modtype)
|
||||||
R.hands.icon_state = initial(R.hands.icon_state)
|
R.hands.icon_state = initial(R.hands.icon_state)
|
||||||
|
|
||||||
R.choose_icon(1, R.set_module_sprites(list("Default" = "robot")))
|
|
||||||
|
|
||||||
R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name)
|
R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name)
|
||||||
R.module.Reset(R)
|
R.module.Reset(R)
|
||||||
|
qdel(R.module)
|
||||||
|
R.module = null
|
||||||
R.updatename("Default")
|
R.updatename("Default")
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -184,11 +184,9 @@
|
|||||||
if(!uses_charge)
|
if(!uses_charge)
|
||||||
amount -= used
|
amount -= used
|
||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
spawn(0) //delete the empty stack once the current context yields
|
|
||||||
if (amount <= 0) //check again in case someone transferred stuff to us
|
|
||||||
if(usr)
|
if(usr)
|
||||||
usr.remove_from_mob(src)
|
usr.remove_from_mob(src)
|
||||||
qdel(src)
|
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
if(get_amount() < used)
|
if(get_amount() < used)
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
/obj/item/toy/nanotrasenballoon
|
/obj/item/toy/nanotrasenballoon
|
||||||
name = "criminal balloon"
|
name = "criminal balloon"
|
||||||
desc = "Across the balloon the following is printed: \"Man, I love NT soooo much. I use only NanoTrasen products. You have NO idea.\""
|
desc = "Across the balloon the following is printed: \"Man, I love NanoTrasen soooo much. I use only NT products. You have NO idea.\""
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
throw_speed = 4
|
throw_speed = 4
|
||||||
throw_range = 20
|
throw_range = 20
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ AI MODULES
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(ticker && ticker.mode && ticker.mode.name == "blob")
|
if(ticker && ticker.mode && ticker.mode.name == "blob")
|
||||||
usr << "Law uploads have been disabled by NanoTrasen!"
|
usr << "Law uploads have been disabled by [company_name]!"
|
||||||
return
|
return
|
||||||
|
|
||||||
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
||||||
|
|||||||
@@ -122,6 +122,7 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/weapon/card/id/proc/show(mob/user as mob)
|
/obj/item/weapon/card/id/proc/show(mob/user as mob)
|
||||||
|
if(front && side)
|
||||||
user << browse_rsc(front, "front.png")
|
user << browse_rsc(front, "front.png")
|
||||||
user << browse_rsc(side, "side.png")
|
user << browse_rsc(side, "side.png")
|
||||||
var/datum/browser/popup = new(user, "idcard", name, 600, 250)
|
var/datum/browser/popup = new(user, "idcard", name, 600, 250)
|
||||||
@@ -137,17 +138,21 @@
|
|||||||
front = getFlatIcon(M, SOUTH, always_use_defdir = 1)
|
front = getFlatIcon(M, SOUTH, always_use_defdir = 1)
|
||||||
side = getFlatIcon(M, WEST, always_use_defdir = 1)
|
side = getFlatIcon(M, WEST, always_use_defdir = 1)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/proc/set_owner_info(var/mob/living/carbon/human/H)
|
/mob/proc/set_id_info(var/obj/item/weapon/card/id/id_card)
|
||||||
if(!H || !H.dna)
|
id_card.age = 0
|
||||||
return
|
id_card.registered_name = real_name
|
||||||
age = H.age
|
id_card.sex = capitalize(gender)
|
||||||
blood_type = H.dna.b_type
|
id_card.set_id_photo(src)
|
||||||
dna_hash = H.dna.unique_enzymes
|
|
||||||
fingerprint_hash = md5(H.dna.uni_identity)
|
if(dna)
|
||||||
registered_name = H.real_name
|
id_card.blood_type = dna.b_type
|
||||||
sex = capitalize(H.gender)
|
id_card.dna_hash = dna.unique_enzymes
|
||||||
set_id_photo(H)
|
id_card.fingerprint_hash= md5(dna.uni_identity)
|
||||||
update_name()
|
id_card.update_name()
|
||||||
|
|
||||||
|
/mob/living/carbon/human/set_id_info(var/obj/item/weapon/card/id/id_card)
|
||||||
|
..()
|
||||||
|
id_card.age = age
|
||||||
|
|
||||||
/obj/item/weapon/card/id/proc/dat()
|
/obj/item/weapon/card/id/proc/dat()
|
||||||
var/dat = ("<table><tr><td>")
|
var/dat = ("<table><tr><td>")
|
||||||
@@ -213,7 +218,18 @@
|
|||||||
item_state = "gold_id"
|
item_state = "gold_id"
|
||||||
registered_name = "Captain"
|
registered_name = "Captain"
|
||||||
assignment = "Captain"
|
assignment = "Captain"
|
||||||
New()
|
/obj/item/weapon/card/id/captains_spare/New()
|
||||||
|
access = get_all_station_access()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/card/id/synthetic
|
||||||
|
name = "\improper Synthetic ID"
|
||||||
|
desc = "Access module for NanoTrasen Synthetics"
|
||||||
|
icon_state = "id-robot"
|
||||||
|
item_state = "tdgreen"
|
||||||
|
assignment = "Synthetic"
|
||||||
|
|
||||||
|
/obj/item/weapon/card/id/synthetic/New()
|
||||||
access = get_all_station_access()
|
access = get_all_station_access()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,11 @@ var/global/list/syndicate_ids = list()
|
|||||||
origin_tech = list(TECH_ILLEGAL = 3)
|
origin_tech = list(TECH_ILLEGAL = 3)
|
||||||
var/electronic_warfare = 1
|
var/electronic_warfare = 1
|
||||||
var/registered_user = null
|
var/registered_user = null
|
||||||
var/list/initial_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
||||||
syndicate_ids += src
|
syndicate_ids += src
|
||||||
..()
|
..()
|
||||||
access = initial_access.Copy()
|
access = syndicate_access.Copy()
|
||||||
|
|
||||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||||
syndicate_ids -= src
|
syndicate_ids -= src
|
||||||
@@ -39,8 +38,8 @@ var/global/list/syndicate_ids = list()
|
|||||||
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
|
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
|
||||||
if(!registered_user)
|
if(!registered_user)
|
||||||
registered_user = user
|
registered_user = user
|
||||||
set_owner_info(user)
|
user.set_id_info(src)
|
||||||
user << "<span class='notice'>The microscanner marks you as its owner, preventing others some accessing its internals.</span>"
|
user << "<span class='notice'>The microscanner marks you as its owner, preventing others from accessing its internals.</span>"
|
||||||
if(registered_user == user)
|
if(registered_user == user)
|
||||||
switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show"))
|
switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show"))
|
||||||
if("Edit")
|
if("Edit")
|
||||||
@@ -163,7 +162,7 @@ var/global/list/syndicate_ids = list()
|
|||||||
if("Factory Reset")
|
if("Factory Reset")
|
||||||
if(alert("This will factory reset the card, including access and owner. Continue?", "Factory Reset", "No", "Yes") == "Yes" && CanUseTopic(user, state))
|
if(alert("This will factory reset the card, including access and owner. Continue?", "Factory Reset", "No", "Yes") == "Yes" && CanUseTopic(user, state))
|
||||||
age = initial(age)
|
age = initial(age)
|
||||||
access = initial_access.Copy()
|
access = syndicate_access.Copy()
|
||||||
assignment = initial(assignment)
|
assignment = initial(assignment)
|
||||||
blood_type = initial(blood_type)
|
blood_type = initial(blood_type)
|
||||||
dna_hash = initial(dna_hash)
|
dna_hash = initial(dna_hash)
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
|||||||
get_data()
|
get_data()
|
||||||
var/dat = {"
|
var/dat = {"
|
||||||
<b>Implant Specifications:</b><BR>
|
<b>Implant Specifications:</b><BR>
|
||||||
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
|
<b>Name:</b> [company_name] Employee Management Implant<BR>
|
||||||
<b>Life:</b> Ten years.<BR>
|
<b>Life:</b> Ten years.<BR>
|
||||||
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
|
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
|
||||||
<HR>
|
<HR>
|
||||||
@@ -338,11 +338,11 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
|||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
|
var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
|
||||||
if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
|
if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
|
||||||
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!")
|
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!")
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
clear_antag_roles(H.mind, 1)
|
clear_antag_roles(H.mind, 1)
|
||||||
H << "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>"
|
H << "<span class='notice'>You feel a surge of loyalty towards [company_name].</span>"
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
|||||||
get_data()
|
get_data()
|
||||||
var/dat = {"
|
var/dat = {"
|
||||||
<b>Implant Specifications:</b><BR>
|
<b>Implant Specifications:</b><BR>
|
||||||
<b>Name:</b> NanoTrasen \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||||
<b>Life:</b> Activates upon death.<BR>
|
<b>Life:</b> Activates upon death.<BR>
|
||||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||||
<HR>
|
<HR>
|
||||||
@@ -465,7 +465,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
|||||||
get_data()
|
get_data()
|
||||||
var/dat = {"
|
var/dat = {"
|
||||||
<b>Implant Specifications:</b><BR>
|
<b>Implant Specifications:</b><BR>
|
||||||
<b>Name:</b> NanoTrasen \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||||
<b>Life:</b> Activates upon death.<BR>
|
<b>Life:</b> Activates upon death.<BR>
|
||||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||||
<HR>
|
<HR>
|
||||||
|
|||||||
@@ -77,7 +77,7 @@
|
|||||||
/obj/item/weapon/book/manual/supermatter_engine
|
/obj/item/weapon/book/manual/supermatter_engine
|
||||||
name = "Supermatter Engine Operating Manual"
|
name = "Supermatter Engine Operating Manual"
|
||||||
icon_state = "bookSupermatter"
|
icon_state = "bookSupermatter"
|
||||||
author = "Nanotrasen Central Engineering Division"
|
author = "Central Engineering Division"
|
||||||
title = "Supermatter Engine Operating Manual"
|
title = "Supermatter Engine Operating Manual"
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/supermatter_engine/New()
|
/obj/item/weapon/book/manual/supermatter_engine/New()
|
||||||
@@ -407,10 +407,10 @@
|
|||||||
<li>Secure the mainboard with a screwdriver.</li>
|
<li>Secure the mainboard with a screwdriver.</li>
|
||||||
<li>Install the peripherals control module (Not included. Use supplied datadisk to create one).</li>
|
<li>Install the peripherals control module (Not included. Use supplied datadisk to create one).</li>
|
||||||
<li>Secure the peripherals control module with a screwdriver.</li>
|
<li>Secure the peripherals control module with a screwdriver.</li>
|
||||||
<li>Install the internal armor plating (Not included due to NanoTrasen regulations. Can be made using 5 metal sheets).</li>
|
<li>Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).</li>
|
||||||
<li>Secure the internal armor plating with a wrench.</li>
|
<li>Secure the internal armor plating with a wrench.</li>
|
||||||
<li>Weld the internal armor plating to the chassis.</li>
|
<li>Weld the internal armor plating to the chassis.</li>
|
||||||
<li>Install the external reinforced armor plating (Not included due to NanoTrasen regulations. Can be made using 5 reinforced metal sheets).</li>
|
<li>Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).</li>
|
||||||
<li>Secure the external reinforced armor plating with a wrench.</li>
|
<li>Secure the external reinforced armor plating with a wrench.</li>
|
||||||
<li>Weld the external reinforced armor plating to the chassis.</li>
|
<li>Weld the external reinforced armor plating to the chassis.</li>
|
||||||
</ol>
|
</ol>
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
<li>Internal armor is plasteel for additional strength.</li>
|
<li>Internal armor is plasteel for additional strength.</li>
|
||||||
<li>External armor must be installed in 2 parts, totalling 10 sheets.</li>
|
<li>External armor must be installed in 2 parts, totalling 10 sheets.</li>
|
||||||
<li>Completed mech is more resilient against fire, and is a bit more durable overall.</li>
|
<li>Completed mech is more resilient against fire, and is a bit more durable overall.</li>
|
||||||
<li>NanoTrasen is determined to ensure the safety of its <s>investments</s> employees.</li>
|
<li>The Company is determined to ensure the safety of its <s>investments</s> employees.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -541,7 +541,7 @@
|
|||||||
This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge.
|
This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge.
|
||||||
|
|
||||||
<h3>Robotics Control Console</h3>
|
<h3>Robotics Control Console</h3>
|
||||||
This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or NanoTrasen may see to it that it never happens again.
|
This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again.
|
||||||
|
|
||||||
|
|
||||||
<h2><a name="Modules">Cyborg Modules</h2>
|
<h2><a name="Modules">Cyborg Modules</h2>
|
||||||
@@ -688,7 +688,7 @@
|
|||||||
<li>Expose the cyborg's internal wiring</li>
|
<li>Expose the cyborg's internal wiring</li>
|
||||||
<li>Check to make sure the LawSync and AI Sync lights are lit</li>
|
<li>Check to make sure the LawSync and AI Sync lights are lit</li>
|
||||||
<li>If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync</li>
|
<li>If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync</li>
|
||||||
<li>Proceed to a cyborg upload console. NanoTrasen usually places these in the same location as AI upload consoles.</li>
|
<li>Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.</li>
|
||||||
<li>Use a "Reset" upload moduleto reset the cyborg's laws</li>
|
<li>Use a "Reset" upload moduleto reset the cyborg's laws</li>
|
||||||
<li>Proceed to a Robotics Control console</li>
|
<li>Proceed to a Robotics Control console</li>
|
||||||
<li>Remove the lockdown on the cyborg</li>
|
<li>Remove the lockdown on the cyborg</li>
|
||||||
@@ -696,7 +696,7 @@
|
|||||||
|
|
||||||
<h3>As a last resort</h3>
|
<h3>As a last resort</h3>
|
||||||
If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg.
|
If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg.
|
||||||
<h3>WARNING:</h3> Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of NanoTrasen equipment, and you may be punished for detonating them without reason.
|
<h3>WARNING:</h3> Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason.
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -705,9 +705,9 @@
|
|||||||
|
|
||||||
/obj/item/weapon/book/manual/security_space_law
|
/obj/item/weapon/book/manual/security_space_law
|
||||||
name = "Corporate Regulations"
|
name = "Corporate Regulations"
|
||||||
desc = "A set of NanoTrasen guidelines for keeping law and order on their space stations."
|
desc = "A set of corporate guidelines for keeping law and order on privately-owned space stations."
|
||||||
icon_state = "bookSpaceLaw"
|
icon_state = "bookSpaceLaw"
|
||||||
author = "NanoTrasen"
|
author = "The Company"
|
||||||
title = "Corporate Regulations"
|
title = "Corporate Regulations"
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/security_space_law/New()
|
/obj/item/weapon/book/manual/security_space_law/New()
|
||||||
@@ -728,11 +728,11 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/medical_diagnostics_manual
|
/obj/item/weapon/book/manual/medical_diagnostics_manual
|
||||||
name = "NT Medical Diagnostics Manual"
|
name = "Medical Diagnostics Manual"
|
||||||
desc = "First, do no harm. A detailed medical practitioner's guide."
|
desc = "First, do no harm. A detailed medical practitioner's guide."
|
||||||
icon_state = "bookMedical"
|
icon_state = "bookMedical"
|
||||||
author = "NanoTrasen Medicine Department"
|
author = "Medical Department"
|
||||||
title = "NT Medical Diagnostics Manual"
|
title = "Medical Diagnostics Manual"
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/medical_diagnostics_manual/New()
|
/obj/item/weapon/book/manual/medical_diagnostics_manual/New()
|
||||||
..()
|
..()
|
||||||
@@ -751,7 +751,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<h1>The Oath</h1>
|
<h1>The Oath</h1>
|
||||||
|
|
||||||
<i>The Medical Oath sworn by recognised medical practitioners in the employ of NanoTrasen</i><br>
|
<i>The Medical Oath sworn by recognised medical practitioners in the employ of [company_name]</i><br>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
<li>Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.</li>
|
<li>Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.</li>
|
||||||
@@ -913,7 +913,7 @@
|
|||||||
/obj/item/weapon/book/manual/detective
|
/obj/item/weapon/book/manual/detective
|
||||||
name = "The Film Noir: Proper Procedures for Investigations"
|
name = "The Film Noir: Proper Procedures for Investigations"
|
||||||
icon_state ="bookDetective"
|
icon_state ="bookDetective"
|
||||||
author = "NanoTrasen"
|
author = "The Company"
|
||||||
title = "The Film Noir: Proper Procedures for Investigations"
|
title = "The Film Noir: Proper Procedures for Investigations"
|
||||||
|
|
||||||
dat = {"<html>
|
dat = {"<html>
|
||||||
@@ -972,7 +972,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Nuclear Explosives 101</h1>
|
<h1>Nuclear Explosives 101</h1>
|
||||||
Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Fusion Class NanoTrasen made Nuclear Device.<br><br>
|
Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.<br><br>
|
||||||
|
|
||||||
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.<br>
|
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.<br>
|
||||||
|
|
||||||
@@ -997,7 +997,7 @@
|
|||||||
|
|
||||||
Remember the order:<br>
|
Remember the order:<br>
|
||||||
<b>Disk, Code, Safety, Timer, Disk, RUN!</b><br><br>
|
<b>Disk, Code, Safety, Timer, Disk, RUN!</b><br><br>
|
||||||
Intelligence Analysts believe that normal NanoTrasen procedure is for the Captain to secure the nuclear authentication disk.<br><br>
|
Intelligence Analysts believe that normal corporate procedure is for the Captain to secure the nuclear authentication disk.<br><br>
|
||||||
|
|
||||||
Good luck!
|
Good luck!
|
||||||
</body>
|
</body>
|
||||||
@@ -1171,7 +1171,7 @@
|
|||||||
and then is screwed in for one and a quarter full rotations clockwise, leaving the faceplate directly in front of you. There is a small button on the right side of the helmet that activates the helmet light.
|
and then is screwed in for one and a quarter full rotations clockwise, leaving the faceplate directly in front of you. There is a small button on the right side of the helmet that activates the helmet light.
|
||||||
The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.<BR><BR>
|
The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.<BR><BR>
|
||||||
|
|
||||||
These suits generally only fit one species. Nanotrasen's are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.<BR><BR>
|
These suits generally only fit one species. NanoTrasen's are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.<BR><BR>
|
||||||
|
|
||||||
<h2><a name="Equipment">Modification Equipment</a></h2>
|
<h2><a name="Equipment">Modification Equipment</a></h2>
|
||||||
<I>How to actually make hardsuits fit you.</I><BR>
|
<I>How to actually make hardsuits fit you.</I><BR>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/material/hatchet/tacknife
|
/obj/item/weapon/material/hatchet/tacknife
|
||||||
name = "tactical knife"
|
name = "tactical knife"
|
||||||
desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Nyx."
|
desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space."
|
||||||
icon = 'icons/obj/weapons.dmi'
|
icon = 'icons/obj/weapons.dmi'
|
||||||
icon_state = "tacknife"
|
icon_state = "tacknife"
|
||||||
item_state = "knife"
|
item_state = "knife"
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
charge = maxcharge
|
charge = maxcharge
|
||||||
|
|
||||||
/obj/item/weapon/cell/crap
|
/obj/item/weapon/cell/crap
|
||||||
name = "\improper Nanotrasen brand rechargable AA battery"
|
name = "\improper rechargable AA battery"
|
||||||
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
|
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
|
||||||
origin_tech = list(TECH_POWER = 0)
|
origin_tech = list(TECH_POWER = 0)
|
||||||
maxcharge = 500
|
maxcharge = 500
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/storage/backpack/captain
|
/obj/item/weapon/storage/backpack/captain
|
||||||
name = "captain's backpack"
|
name = "captain's backpack"
|
||||||
desc = "It's a special backpack made exclusively for Nanotrasen officers."
|
desc = "It's a special backpack made exclusively for officers."
|
||||||
icon_state = "captainpack"
|
icon_state = "captainpack"
|
||||||
item_state_slots = null
|
item_state_slots = null
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/storage/backpack/satchel_cap
|
/obj/item/weapon/storage/backpack/satchel_cap
|
||||||
name = "captain's satchel"
|
name = "captain's satchel"
|
||||||
desc = "An exclusive satchel for Nanotrasen officers."
|
desc = "An exclusive satchel for officers."
|
||||||
icon_state = "satchel-cap"
|
icon_state = "satchel-cap"
|
||||||
item_state_slots = list(
|
item_state_slots = list(
|
||||||
slot_l_hand_str = "satchel-cap",
|
slot_l_hand_str = "satchel-cap",
|
||||||
@@ -222,7 +222,7 @@
|
|||||||
//ERT backpacks.
|
//ERT backpacks.
|
||||||
/obj/item/weapon/storage/backpack/ert
|
/obj/item/weapon/storage/backpack/ert
|
||||||
name = "emergency response team backpack"
|
name = "emergency response team backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team."
|
||||||
icon_state = "ert_commander"
|
icon_state = "ert_commander"
|
||||||
item_state_slots = list(
|
item_state_slots = list(
|
||||||
slot_l_hand_str = "securitypack",
|
slot_l_hand_str = "securitypack",
|
||||||
@@ -232,22 +232,22 @@
|
|||||||
//Commander
|
//Commander
|
||||||
/obj/item/weapon/storage/backpack/ert/commander
|
/obj/item/weapon/storage/backpack/ert/commander
|
||||||
name = "emergency response team commander backpack"
|
name = "emergency response team commander backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, worn by the commander of a Nanotrasen Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, worn by the commander of an Emergency Response Team."
|
||||||
|
|
||||||
//Security
|
//Security
|
||||||
/obj/item/weapon/storage/backpack/ert/security
|
/obj/item/weapon/storage/backpack/ert/security
|
||||||
name = "emergency response team security backpack"
|
name = "emergency response team security backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, worn by security members of a Nanotrasen Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, worn by security members of an Emergency Response Team."
|
||||||
icon_state = "ert_security"
|
icon_state = "ert_security"
|
||||||
|
|
||||||
//Engineering
|
//Engineering
|
||||||
/obj/item/weapon/storage/backpack/ert/engineer
|
/obj/item/weapon/storage/backpack/ert/engineer
|
||||||
name = "emergency response team engineer backpack"
|
name = "emergency response team engineer backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, worn by engineering members of a Nanotrasen Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, worn by engineering members of an Emergency Response Team."
|
||||||
icon_state = "ert_engineering"
|
icon_state = "ert_engineering"
|
||||||
|
|
||||||
//Medical
|
//Medical
|
||||||
/obj/item/weapon/storage/backpack/ert/medical
|
/obj/item/weapon/storage/backpack/ert/medical
|
||||||
name = "emergency response team medical backpack"
|
name = "emergency response team medical backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team."
|
||||||
icon_state = "ert_medical"
|
icon_state = "ert_medical"
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
name = "sheet snatcher"
|
name = "sheet snatcher"
|
||||||
icon = 'icons/obj/mining.dmi'
|
icon = 'icons/obj/mining.dmi'
|
||||||
icon_state = "sheetsnatcher"
|
icon_state = "sheetsnatcher"
|
||||||
desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet."
|
desc = "A patented storage system designed for any kind of mineral sheet."
|
||||||
|
|
||||||
var/capacity = 300; //the number of sheets it can carry.
|
var/capacity = 300; //the number of sheets it can carry.
|
||||||
w_class = 3
|
w_class = 3
|
||||||
|
|||||||
@@ -225,6 +225,9 @@
|
|||||||
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
||||||
if(!istype(W)) return //Not an item
|
if(!istype(W)) return //Not an item
|
||||||
|
|
||||||
|
if(!usr.canUnEquip(W))
|
||||||
|
return 0
|
||||||
|
|
||||||
if(src.loc == W)
|
if(src.loc == W)
|
||||||
return 0 //Means the item is already in the storage item
|
return 0 //Means the item is already in the storage item
|
||||||
if(contents.len >= storage_slots)
|
if(contents.len >= storage_slots)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
throwforce = 0
|
throwforce = 0
|
||||||
w_class = 3
|
w_class = 3
|
||||||
origin_tech = "materials=1"
|
origin_tech = "materials=1"
|
||||||
|
matter = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||||
var/deployed = 0
|
var/deployed = 0
|
||||||
|
|
||||||
/obj/item/weapon/beartrap/suicide_act(mob/user)
|
/obj/item/weapon/beartrap/suicide_act(mob/user)
|
||||||
|
|||||||
@@ -33,9 +33,21 @@
|
|||||||
CouldNotUseTopic(usr)
|
CouldNotUseTopic(usr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state)
|
||||||
|
if(user.CanUseObjTopic(src))
|
||||||
|
return ..()
|
||||||
|
user << "<span class='danger'>\icon[src]Access Denied!</span>"
|
||||||
|
return STATUS_CLOSE
|
||||||
|
|
||||||
|
/mob/living/silicon/CanUseObjTopic(var/obj/O)
|
||||||
|
return O.allowed(src)
|
||||||
|
|
||||||
|
/mob/proc/CanUseObjTopic()
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/proc/CouldUseTopic(var/mob/user)
|
/obj/proc/CouldUseTopic(var/mob/user)
|
||||||
var/atom/host = nano_host()
|
var/atom/host = nano_host()
|
||||||
host.add_fingerprint(user)
|
host.add_hiddenprint(user)
|
||||||
|
|
||||||
/obj/proc/CouldNotUseTopic(var/mob/user)
|
/obj/proc/CouldNotUseTopic(var/mob/user)
|
||||||
// Nada
|
// Nada
|
||||||
|
|||||||
@@ -210,6 +210,7 @@
|
|||||||
if(istype(W, /obj/item/weapon/grab))
|
if(istype(W, /obj/item/weapon/grab))
|
||||||
var/obj/item/weapon/grab/G = W
|
var/obj/item/weapon/grab/G = W
|
||||||
src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
|
src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
|
||||||
|
return 0
|
||||||
if(istype(W,/obj/item/tk_grab))
|
if(istype(W,/obj/item/tk_grab))
|
||||||
return 0
|
return 0
|
||||||
if(istype(W, /obj/item/weapon/weldingtool))
|
if(istype(W, /obj/item/weapon/weldingtool))
|
||||||
@@ -257,11 +258,9 @@
|
|||||||
return
|
return
|
||||||
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
|
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
|
||||||
return
|
return
|
||||||
if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
|
if((!( istype(O, /atom/movable) ) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O) || user.contents.Find(src)))
|
||||||
return
|
return
|
||||||
if(user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
|
if(!isturf(user.loc)) // are you in a container/closet/pod/etc?
|
||||||
return
|
|
||||||
if(!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
|
|
||||||
return
|
return
|
||||||
if(!src.opened)
|
if(!src.opened)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/obj/structure/closet/wardrobe
|
/obj/structure/closet/wardrobe
|
||||||
name = "wardrobe"
|
name = "wardrobe"
|
||||||
desc = "It's a storage unit for standard-issue Nanotrasen attire."
|
desc = "It's a storage unit for standard-issue attire."
|
||||||
icon_state = "blue"
|
icon_state = "blue"
|
||||||
icon_closed = "blue"
|
icon_closed = "blue"
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
|
|
||||||
/obj/structure/closet/wardrobe/chaplain_black
|
/obj/structure/closet/wardrobe/chaplain_black
|
||||||
name = "chapel wardrobe"
|
name = "chapel wardrobe"
|
||||||
desc = "It's a storage unit for Nanotrasen-approved religious attire."
|
desc = "It's a storage unit for approved religious attire."
|
||||||
icon_state = "black"
|
icon_state = "black"
|
||||||
icon_closed = "black"
|
icon_closed = "black"
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
|
|
||||||
/obj/structure/closet/wardrobe/orange
|
/obj/structure/closet/wardrobe/orange
|
||||||
name = "prison wardrobe"
|
name = "prison wardrobe"
|
||||||
desc = "It's a storage unit for Nanotrasen-regulation prisoner attire."
|
desc = "It's a storage unit for regulation prisoner attire."
|
||||||
icon_state = "orange"
|
icon_state = "orange"
|
||||||
icon_closed = "orange"
|
icon_closed = "orange"
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
var/health = 200
|
var/health = 200
|
||||||
var/cover = 50 //how much cover the girder provides against projectiles.
|
var/cover = 50 //how much cover the girder provides against projectiles.
|
||||||
var/material/reinf_material
|
var/material/reinf_material
|
||||||
|
var/reinforcing = 0
|
||||||
|
|
||||||
/obj/structure/girder/displaced
|
/obj/structure/girder/displaced
|
||||||
icon_state = "displaced"
|
icon_state = "displaced"
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
health = min(health,initial(health))
|
health = min(health,initial(health))
|
||||||
state = 0
|
state = 0
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
|
reinforcing = 0
|
||||||
if(reinf_material)
|
if(reinf_material)
|
||||||
reinforce_girder()
|
reinforce_girder()
|
||||||
|
|
||||||
@@ -78,13 +80,18 @@
|
|||||||
user << "<span class='notice'>You drill through the girder!</span>"
|
user << "<span class='notice'>You drill through the girder!</span>"
|
||||||
dismantle()
|
dismantle()
|
||||||
|
|
||||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2)
|
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
|
if(state == 2)
|
||||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||||
user << "<span class='notice'>Now unsecuring support struts...</span>"
|
user << "<span class='notice'>Now unsecuring support struts...</span>"
|
||||||
if(do_after(user,40))
|
if(do_after(user,40))
|
||||||
if(!src) return
|
if(!src) return
|
||||||
user << "<span class='notice'>You unsecured the support struts!</span>"
|
user << "<span class='notice'>You unsecured the support struts!</span>"
|
||||||
state = 1
|
state = 1
|
||||||
|
else if(anchored && !reinf_material)
|
||||||
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||||
|
reinforcing = !reinforcing
|
||||||
|
user << "<span class='notice'>\The [src] can now be [reinforcing? "reinforced" : "constructed"]!</span>"
|
||||||
|
|
||||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
||||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||||
@@ -108,26 +115,36 @@
|
|||||||
cover = 25
|
cover = 25
|
||||||
|
|
||||||
else if(istype(W, /obj/item/stack/material))
|
else if(istype(W, /obj/item/stack/material))
|
||||||
|
if(reinforcing && !reinf_material)
|
||||||
|
if(!reinforce_with_material(W, user))
|
||||||
|
return ..()
|
||||||
|
else
|
||||||
|
if(!construct_wall(W, user))
|
||||||
|
return ..()
|
||||||
|
|
||||||
var/obj/item/stack/S = W
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
|
||||||
if(S.get_amount() < 2)
|
if(S.get_amount() < 2)
|
||||||
return ..()
|
user << "<span class='notice'>There isn't enough material here to construct a wall.</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
var/material/M = S.get_material()
|
var/material/M = name_to_material[S.default_type]
|
||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return ..()
|
return 0
|
||||||
|
|
||||||
var/wall_fake
|
var/wall_fake
|
||||||
add_hiddenprint(usr)
|
add_hiddenprint(usr)
|
||||||
|
|
||||||
if(M.integrity < 50)
|
if(M.integrity < 50)
|
||||||
user << "<span class='notice'>This material is too soft for use in wall construction.</span>"
|
user << "<span class='notice'>This material is too soft for use in wall construction.</span>"
|
||||||
return
|
return 0
|
||||||
|
|
||||||
user << "<span class='notice'>You begin adding the plating...</span>"
|
user << "<span class='notice'>You begin adding the plating...</span>"
|
||||||
|
|
||||||
if(!do_after(user,40) || !S.use(2))
|
if(!do_after(user,40) || !S.use(2))
|
||||||
return
|
return 1 //once we've gotten this far don't call parent attackby()
|
||||||
|
|
||||||
if(anchored)
|
if(anchored)
|
||||||
user << "<span class='notice'>You added the plating!</span>"
|
user << "<span class='notice'>You added the plating!</span>"
|
||||||
@@ -143,60 +160,37 @@
|
|||||||
T.can_open = 1
|
T.can_open = 1
|
||||||
T.add_hiddenprint(usr)
|
T.add_hiddenprint(usr)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
else if(istype(W, /obj/item/pipe))
|
/obj/structure/girder/proc/reinforce_with_material(obj/item/stack/material/S, mob/user) //if the verb is removed this can be renamed.
|
||||||
var/obj/item/pipe/P = W
|
if(reinf_material)
|
||||||
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
|
user << "<span class='notice'>\The [src] is already reinforced.</span>"
|
||||||
user.drop_item()
|
return 0
|
||||||
P.loc = src.loc
|
|
||||||
user << "<span class='notice'>You fit the pipe into the [src]!</span>"
|
if(S.get_amount() < 2)
|
||||||
else
|
user << "<span class='notice'>There isn't enough material here to reinforce the girder.</span>"
|
||||||
..()
|
return 0
|
||||||
|
|
||||||
|
var/material/M = name_to_material[S.default_type]
|
||||||
|
if(!istype(M) || M.integrity < 50)
|
||||||
|
user << "You cannot reinforce \the [src] with that; it is too soft."
|
||||||
|
return 0
|
||||||
|
|
||||||
|
user << "<span class='notice'>Now reinforcing...</span>"
|
||||||
|
if (!do_after(user,40) || !S.use(2))
|
||||||
|
return 1 //don't call parent attackby() past this point
|
||||||
|
user << "<span class='notice'>You added reinforcement!</span>"
|
||||||
|
|
||||||
|
reinf_material = M
|
||||||
|
reinforce_girder()
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/structure/girder/proc/reinforce_girder()
|
/obj/structure/girder/proc/reinforce_girder()
|
||||||
cover = reinf_material.hardness
|
cover = reinf_material.hardness
|
||||||
health = 500
|
health = 500
|
||||||
state = 2
|
state = 2
|
||||||
icon_state = "reinforced"
|
icon_state = "reinforced"
|
||||||
|
reinforcing = 0
|
||||||
/obj/structure/girder/verb/reinforce_with_material()
|
|
||||||
set name = "Reinforce girder"
|
|
||||||
set desc = "Reinforce a girder with metal."
|
|
||||||
set src in view(1)
|
|
||||||
|
|
||||||
var/mob/living/user = usr
|
|
||||||
if(!istype(user) || !(user.l_hand || user.r_hand))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(reinf_material)
|
|
||||||
user << "\The [src] is already reinforced."
|
|
||||||
return
|
|
||||||
|
|
||||||
var/obj/item/stack/material/S = user.l_hand
|
|
||||||
if(!istype(S))
|
|
||||||
S = user.r_hand
|
|
||||||
if(!istype(S))
|
|
||||||
user << "You cannot plate \the [src] with that."
|
|
||||||
return
|
|
||||||
|
|
||||||
if(S.get_amount() < 2)
|
|
||||||
user << "There is not enough material here to reinforce the girder."
|
|
||||||
return
|
|
||||||
|
|
||||||
var/material/M = S.get_material()
|
|
||||||
if(!istype(M) || M.integrity < 50)
|
|
||||||
user << "You cannot reinforce \the [src] with that; it is too soft."
|
|
||||||
return
|
|
||||||
|
|
||||||
user << "<span class='notice'>Now reinforcing...</span>"
|
|
||||||
if (!do_after(user,40) || !S.use(2))
|
|
||||||
return
|
|
||||||
user << "<span class='notice'>You added reinforcement!</span>"
|
|
||||||
|
|
||||||
reinf_material = M
|
|
||||||
reinforce_girder()
|
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/girder/proc/dismantle()
|
/obj/structure/girder/proc/dismantle()
|
||||||
new /obj/item/stack/material/steel(get_turf(src))
|
new /obj/item/stack/material/steel(get_turf(src))
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
|
|
||||||
/obj/machinery/shower
|
/obj/machinery/shower
|
||||||
name = "shower"
|
name = "shower"
|
||||||
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
|
desc = "The HS-451. Installed in the 2550s by the Hygiene Division."
|
||||||
icon = 'icons/obj/watercloset.dmi'
|
icon = 'icons/obj/watercloset.dmi'
|
||||||
icon_state = "shower"
|
icon_state = "shower"
|
||||||
density = 0
|
density = 0
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
paycuts_suspicion
|
paycuts_suspicion
|
||||||
round_time = 60*10
|
round_time = 60*10
|
||||||
message = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into
|
message = {"Reports have leaked that NanoTrasen is planning to put paycuts into
|
||||||
effect on many of its Research Stations in Tau Ceti. Apparently these research
|
effect on many of its Research Stations in Tau Ceti. Apparently these research
|
||||||
stations haven't been able to yield the expected revenue, and thus adjustments
|
stations haven't been able to yield the expected revenue, and thus adjustments
|
||||||
have to be made."}
|
have to be made."}
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
on live humans, including virology research, genetic manipulation, and \"feeding them
|
on live humans, including virology research, genetic manipulation, and \"feeding them
|
||||||
to the slimes to see what happens\". Allegedly, these test subjects were neither
|
to the slimes to see what happens\". Allegedly, these test subjects were neither
|
||||||
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
|
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
|
||||||
the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."}
|
the experiments, and reported to have died in a \"work accident\" by NanoTrasen."}
|
||||||
author = "Unauthorized"
|
author = "Unauthorized"
|
||||||
|
|
||||||
bluespace_research
|
bluespace_research
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var/can_call_ert
|
|||||||
usr << "<span class='danger'>The round hasn't started yet!</span>"
|
usr << "<span class='danger'>The round hasn't started yet!</span>"
|
||||||
return
|
return
|
||||||
if(send_emergency_team)
|
if(send_emergency_team)
|
||||||
usr << "<span class='danger'>Central Command has already dispatched an emergency response team!</span>"
|
usr << "<span class='danger'>[boss_name] has already dispatched an emergency response team!</span>"
|
||||||
return
|
return
|
||||||
if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes")
|
if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes")
|
||||||
return
|
return
|
||||||
@@ -53,8 +53,9 @@ client/verb/JoinResponseTeam()
|
|||||||
if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer"))
|
if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer"))
|
||||||
usr << "<font color=red><b>You are jobbanned from the emergency reponse team!"
|
usr << "<font color=red><b>You are jobbanned from the emergency reponse team!"
|
||||||
return
|
return
|
||||||
if(ert.current_antagonists.len > 5)
|
if(ert.current_antagonists.len >= ert.max_antags)
|
||||||
usr << "The emergency response team is already full!"
|
usr << "The emergency response team is already full!"
|
||||||
|
return
|
||||||
ert.create_default(usr)
|
ert.create_default(usr)
|
||||||
else
|
else
|
||||||
usr << "You need to be an observer or new player to use this."
|
usr << "You need to be an observer or new player to use this."
|
||||||
@@ -113,11 +114,11 @@ proc/trigger_armed_response_team(var/force = 0)
|
|||||||
|
|
||||||
// there's only a certain chance a team will be sent
|
// there's only a certain chance a team will be sent
|
||||||
if(!prob(send_team_chance))
|
if(!prob(send_team_chance))
|
||||||
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "Central Command")
|
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[boss_name]")
|
||||||
can_call_ert = 0 // Only one call per round, ladies.
|
can_call_ert = 0 // Only one call per round, ladies.
|
||||||
return
|
return
|
||||||
|
|
||||||
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "Central Command")
|
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[boss_name]")
|
||||||
|
|
||||||
can_call_ert = 0 // Only one call per round, gentleman.
|
can_call_ert = 0 // Only one call per round, gentleman.
|
||||||
send_emergency_team = 1
|
send_emergency_team = 1
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
|
|||||||
var/diary = null
|
var/diary = null
|
||||||
var/href_logfile = null
|
var/href_logfile = null
|
||||||
var/station_name = "NSS Exodus"
|
var/station_name = "NSS Exodus"
|
||||||
|
var/station_short = "Exodus"
|
||||||
|
var/const/boss_name = "Central Command"
|
||||||
|
var/const/boss_short = "Centcomm"
|
||||||
|
var/const/company_name = "NanoTrasen"
|
||||||
|
var/const/company_short = "NT"
|
||||||
var/game_version = "Baystation12"
|
var/game_version = "Baystation12"
|
||||||
var/changelog_hash = ""
|
var/changelog_hash = ""
|
||||||
var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
|
var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
dat+={"<HR><B>Feed Security functions:</B><BR>
|
dat+={"<HR><B>Feed Security functions:</B><BR>
|
||||||
<BR><A href='?src=\ref[src];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
|
<BR><A href='?src=\ref[src];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
|
||||||
<BR><A href='?src=\ref[src];ac_menu_censor_story=1'>Censor Feed Stories</A>
|
<BR><A href='?src=\ref[src];ac_menu_censor_story=1'>Censor Feed Stories</A>
|
||||||
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel.</A>
|
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice (disables and locks the channel.</A>
|
||||||
<BR><HR><A href='?src=\ref[src];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
|
<BR><HR><A href='?src=\ref[src];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
|
||||||
"}
|
"}
|
||||||
if(1)
|
if(1)
|
||||||
@@ -419,7 +419,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
|
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
|
||||||
if(src.admincaster_feed_channel.censored)
|
if(src.admincaster_feed_channel.censored)
|
||||||
dat+={"
|
dat+={"
|
||||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>
|
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
|
||||||
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
||||||
"}
|
"}
|
||||||
else
|
else
|
||||||
@@ -440,7 +440,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
"}
|
"}
|
||||||
if(10)
|
if(10)
|
||||||
dat+={"
|
dat+={"
|
||||||
<B>Nanotrasen Feed Censorship Tool</B><BR>
|
<B>[company_name] Feed Censorship Tool</B><BR>
|
||||||
<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>
|
<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>
|
||||||
Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>
|
Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>
|
||||||
<HR>Select Feed channel to get Stories from:<BR>
|
<HR>Select Feed channel to get Stories from:<BR>
|
||||||
@@ -453,7 +453,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
|
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
|
||||||
if(11)
|
if(11)
|
||||||
dat+={"
|
dat+={"
|
||||||
<B>Nanotrasen D-Notice Handler</B><HR>
|
<B>[company_name] D-Notice Handler</B><HR>
|
||||||
<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's
|
<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's
|
||||||
morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed
|
morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed
|
||||||
stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>
|
stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>
|
||||||
@@ -486,7 +486,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
"}
|
"}
|
||||||
if(src.admincaster_feed_channel.censored)
|
if(src.admincaster_feed_channel.censored)
|
||||||
dat+={"
|
dat+={"
|
||||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>
|
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
|
||||||
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
||||||
"}
|
"}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var/list/admin_datums = list()
|
|||||||
error("Admin datum created without a ckey argument. Datum has been deleted")
|
error("Admin datum created without a ckey argument. Datum has been deleted")
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
|
admincaster_signature = "[company_name] Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
|
||||||
rank = initial_rank
|
rank = initial_rank
|
||||||
rights = initial_rights
|
rights = initial_rights
|
||||||
admin_datums[ckey] = src
|
admin_datums[ckey] = src
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||||
|
|
||||||
/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage)
|
/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage)
|
||||||
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
msg = "\blue <b><font color=orange>[uppertext(boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||||
for(var/client/C in admins)
|
for(var/client/C in admins)
|
||||||
if(R_ADMIN & C.holder.rights)
|
if(R_ADMIN & C.holder.rights)
|
||||||
C << msg
|
C << msg
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
if(!input)
|
if(!input)
|
||||||
return
|
return
|
||||||
if(!customname)
|
if(!customname)
|
||||||
customname = "NanoTrasen Update"
|
customname = "[company_name] Update"
|
||||||
for (var/obj/machinery/computer/communications/C in machines)
|
for (var/obj/machinery/computer/communications/C in machines)
|
||||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||||
@@ -529,7 +529,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
if("Yes")
|
if("Yes")
|
||||||
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
|
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
|
||||||
if("No")
|
if("No")
|
||||||
world << "\red New NanoTrasen Update available at all communication consoles."
|
world << "\red New [company_name] Update available at all communication consoles."
|
||||||
world << sound('sound/AI/commandreport.ogg')
|
world << sound('sound/AI/commandreport.ogg')
|
||||||
|
|
||||||
log_admin("[key_name(src)] has created a command report: [input]")
|
log_admin("[key_name(src)] has created a command report: [input]")
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
dat += "Locked on<BR>"
|
dat += "Locked on<BR>"
|
||||||
dat += "<B>Charge progress: [reload]/180:</B><BR>"
|
dat += "<B>Charge progress: [reload]/180:</B><BR>"
|
||||||
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
||||||
dat += "Deployment of weapon authorized by <br>Nanotrasen Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
dat += "Deployment of weapon authorized by <br>[company_name] Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||||
user << browse(dat, "window=scroll")
|
user << browse(dat, "window=scroll")
|
||||||
onclose(user, "scroll")
|
onclose(user, "scroll")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
W.access = list()
|
W.access = list()
|
||||||
if(corpseidjob)
|
if(corpseidjob)
|
||||||
W.assignment = corpseidjob
|
W.assignment = corpseidjob
|
||||||
W.set_owner_info(M)
|
M.set_id_info(W)
|
||||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user