Merge branch 'master' into tinytweaks-2-9-20
This commit is contained in:
+352
-251
File diff suppressed because it is too large
Load Diff
@@ -89,7 +89,7 @@
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/shuttle/pirate)
|
||||
"aj" = (
|
||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||
/area/shuttle/pirate)
|
||||
"ak" = (
|
||||
/obj/machinery/airalarm/all_access{
|
||||
@@ -419,6 +419,7 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"aK" = (
|
||||
@@ -463,21 +464,19 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"aQ" = (
|
||||
/obj/machinery/porta_turret/syndicate/energy{
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||
dir = 1;
|
||||
faction = list("pirate");
|
||||
icon_state = "standard_lethal";
|
||||
mode = 1
|
||||
icon_state = "standard_lethal"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||
/area/shuttle/pirate)
|
||||
"aR" = (
|
||||
/obj/machinery/porta_turret/syndicate/energy{
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||
faction = list("pirate");
|
||||
icon_state = "standard_lethal";
|
||||
mode = 1
|
||||
icon_state = "standard_lethal"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||
/area/shuttle/pirate)
|
||||
"aS" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
@@ -486,7 +485,7 @@
|
||||
/area/shuttle/pirate)
|
||||
"aU" = (
|
||||
/obj/structure/sign/departments/engineering,
|
||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||
/area/shuttle/pirate)
|
||||
"aV" = (
|
||||
/obj/effect/mob_spawn/human/pirate{
|
||||
@@ -867,37 +866,36 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/docking_port/mobile/pirate{
|
||||
callTime = 100;
|
||||
dheight = 0;
|
||||
dir = 1;
|
||||
dwidth = 11;
|
||||
height = 16;
|
||||
id = "pirateship";
|
||||
launch_status = 0;
|
||||
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
|
||||
name = "Pirate Ship";
|
||||
port_direction = 2;
|
||||
preferred_direction = 1;
|
||||
width = 17
|
||||
},
|
||||
/obj/docking_port/stationary{
|
||||
dir = 1;
|
||||
dwidth = 11;
|
||||
height = 16;
|
||||
id = "pirateship_home";
|
||||
name = "Deep Space";
|
||||
width = 17
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"db" = (
|
||||
/obj/structure/shuttle/engine/heater,
|
||||
/obj/effect/spawner/structure/window/plastitanium/pirate,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/pirate)
|
||||
"df" = (
|
||||
/obj/machinery/porta_turret/syndicate/energy{
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||
dir = 4;
|
||||
faction = list("pirate");
|
||||
icon_state = "standard_lethal";
|
||||
mode = 1
|
||||
icon_state = "standard_lethal"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||
/area/shuttle/pirate)
|
||||
"dy" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
@@ -988,7 +986,7 @@
|
||||
id = "piratebridge"
|
||||
},
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/plastitanium,
|
||||
/obj/structure/window/plastitanium/pirate,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"ez" = (
|
||||
@@ -1016,7 +1014,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"fW" = (
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||
/area/shuttle/pirate)
|
||||
"fY" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
@@ -1084,13 +1082,12 @@
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/shuttle/pirate)
|
||||
"wR" = (
|
||||
/obj/machinery/porta_turret/syndicate/energy{
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||
dir = 8;
|
||||
faction = list("pirate");
|
||||
icon_state = "standard_lethal";
|
||||
mode = 1
|
||||
icon_state = "standard_lethal"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||
/area/shuttle/pirate)
|
||||
"yi" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -1326,7 +1323,7 @@ aU
|
||||
be
|
||||
aD
|
||||
aG
|
||||
ep
|
||||
db
|
||||
aH
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
@@ -1344,7 +1341,7 @@ mU
|
||||
aL
|
||||
bP
|
||||
bX
|
||||
ep
|
||||
db
|
||||
aK
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
@@ -1362,7 +1359,7 @@ aj
|
||||
bO
|
||||
bQ
|
||||
bk
|
||||
ep
|
||||
db
|
||||
er
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
|
||||
@@ -187,10 +187,10 @@
|
||||
#define SPEECH_MESSAGE 1
|
||||
// #define SPEECH_BUBBLE_TYPE 2
|
||||
#define SPEECH_SPANS 3
|
||||
/* #define SPEECH_SANITIZE 4
|
||||
// #define SPEECH_SANITIZE 4
|
||||
#define SPEECH_LANGUAGE 5
|
||||
#define SPEECH_IGNORE_SPAM 6
|
||||
#define SPEECH_FORCED 7 */
|
||||
// #define SPEECH_IGNORE_SPAM 6
|
||||
// #define SPEECH_FORCED 7
|
||||
|
||||
// /mob/living signals
|
||||
#define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive)
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
#define TRAIT_NOHARDCRIT "nohardcrit"
|
||||
#define TRAIT_NOSOFTCRIT "nosoftcrit"
|
||||
#define TRAIT_MINDSHIELD "mindshield"
|
||||
#define TRAIT_HIJACKER "hijacker"
|
||||
#define TRAIT_SIXTHSENSE "sixthsense"
|
||||
#define TRAIT_DISSECTED "dissected"
|
||||
#define TRAIT_FEARLESS "fearless"
|
||||
|
||||
@@ -44,6 +44,12 @@
|
||||
index = findtext(t, char, index + length(char))
|
||||
return t
|
||||
|
||||
/proc/sanitize_name(t,list/repl_chars = null)
|
||||
if(t == "space" || t == "floor" || t == "wall" || t == "r-wall" || t == "monkey" || t == "unknown" || t == "inactive ai") //prevents these common metagamey names
|
||||
alert("Invalid name.")
|
||||
return ""
|
||||
return sanitize(t)
|
||||
|
||||
/proc/sanitize_filename(t)
|
||||
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
|
||||
|
||||
@@ -775,4 +781,4 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
||||
|
||||
|
||||
#define is_alpha(X) ((text2ascii(X) <= 122) && (text2ascii(X) >= 97))
|
||||
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
|
||||
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
|
||||
|
||||
@@ -1537,4 +1537,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
if(190)
|
||||
return "."
|
||||
if(189)
|
||||
return "-"
|
||||
return "-"
|
||||
|
||||
/proc/generate_items_inside(list/items_list, where_to)
|
||||
for(var/each_item in items_list)
|
||||
for(var/i in 1 to items_list[each_item])
|
||||
new each_item(where_to)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/datum/config_entry/number/snowflake_plushie_prob
|
||||
config_entry_value = 50
|
||||
|
||||
/datum/config_entry/keyed_list/snowflake_plushies
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_TEXT
|
||||
@@ -544,6 +544,70 @@
|
||||
cooldown = world.time
|
||||
owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
|
||||
|
||||
/datum/action/item_action/removeAPCs
|
||||
name = "Relinquish APC"
|
||||
desc = "Let go of an APC, relinquish control back to the station."
|
||||
icon_icon = 'icons/obj/implants.dmi'
|
||||
button_icon_state = "hijackx"
|
||||
|
||||
/datum/action/item_action/removeAPCs/Trigger()
|
||||
var/list/areas = list()
|
||||
for (var/area/a in owner.siliconaccessareas)
|
||||
areas[a.name] = a
|
||||
var/removeAPC = input("Select an APC to remove:","Remove APC Control",1) as null|anything in areas
|
||||
if (!removeAPC)
|
||||
return
|
||||
var/area/area = areas[removeAPC]
|
||||
var/obj/machinery/power/apc/apc = area.get_apc()
|
||||
if (!apc || !(area in owner.siliconaccessareas))
|
||||
return
|
||||
apc.hijacker = null
|
||||
apc.update_icon()
|
||||
apc.set_hijacked_lighting()
|
||||
owner.toggleSiliconAccessArea(area)
|
||||
|
||||
/datum/action/item_action/accessAPCs
|
||||
name = "Access APC Interface"
|
||||
desc = "Open the APC's interface."
|
||||
icon_icon = 'icons/obj/implants.dmi'
|
||||
button_icon_state = "hijacky"
|
||||
|
||||
/datum/action/item_action/accessAPCs/Trigger()
|
||||
var/list/areas = list()
|
||||
for (var/area/a in owner.siliconaccessareas)
|
||||
areas[a.name] = a
|
||||
var/accessAPC = input("Select an APC to access:","Access APC Interface",1) as null|anything in areas
|
||||
if (!accessAPC)
|
||||
return
|
||||
var/area/area = areas[accessAPC]
|
||||
var/obj/machinery/power/apc/apc = area.get_apc()
|
||||
if (!apc || !(area in owner.siliconaccessareas))
|
||||
return
|
||||
apc.ui_interact(owner)
|
||||
|
||||
/datum/action/item_action/stealthmodetoggle
|
||||
name = "Toggle Stealth Mode"
|
||||
desc = "Toggles the stealth mode on the hijack implant."
|
||||
icon_icon = 'icons/obj/implants.dmi'
|
||||
button_icon_state = "hijackz"
|
||||
|
||||
/datum/action/item_action/stealthmodetoggle/Trigger()
|
||||
var/obj/item/implant/hijack/H = target
|
||||
if (!istype(H))
|
||||
return
|
||||
if (H.stealthcooldown > world.time)
|
||||
to_chat(owner,"<span class='warning'>The hijack implant's stealth mode toggle is still rebooting!</span>")
|
||||
return
|
||||
H.stealthmode = !H.stealthmode
|
||||
for (var/area/area in H.imp_in.siliconaccessareas)
|
||||
var/obj/machinery/power/apc/apc = area.get_apc()
|
||||
if (apc)
|
||||
apc.set_hijacked_lighting()
|
||||
apc.update_icon()
|
||||
H.stealthcooldown = world.time + 15 SECONDS
|
||||
H.toggle_eyes()
|
||||
to_chat(owner,"<span class='notice'>You toggle the hijack implant's stealthmode [H.stealthmode ? "on" : "off"].</span>")
|
||||
|
||||
/datum/action/item_action/flash
|
||||
name = "Flash"
|
||||
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
/datum/crafting_recipe/bonearmor
|
||||
name = "Bone Armor"
|
||||
result = /obj/item/clothing/suit/armor/bone
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 6)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonetalisman
|
||||
name = "Bone Talisman"
|
||||
result = /obj/item/clothing/accessory/talisman
|
||||
@@ -29,13 +22,6 @@
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/skullhelm
|
||||
name = "Skull Helmet"
|
||||
result = /obj/item/clothing/head/helmet/skull
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 4)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/goliathcloak
|
||||
name = "Goliath Cloak"
|
||||
result = /obj/item/clothing/suit/hooded/cloak/goliath
|
||||
@@ -62,13 +48,6 @@
|
||||
/obj/item/stack/sheet/sinew = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonedagger
|
||||
name = "Bone Dagger"
|
||||
result = /obj/item/kitchen/knife/combat/bone
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonespear
|
||||
name = "Bone Spear"
|
||||
result = /obj/item/twohanded/bonespear
|
||||
|
||||
@@ -25,6 +25,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
var/unlock_code
|
||||
var/failsafe_code
|
||||
var/datum/ui_state/checkstate
|
||||
var/debug = FALSE
|
||||
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate)
|
||||
if(!isitem(parent))
|
||||
@@ -152,7 +153,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
if(I.restricted_roles.len)
|
||||
var/is_inaccessible = 1
|
||||
for(var/R in I.restricted_roles)
|
||||
if(R == user.mind.assigned_role)
|
||||
if(R == user.mind.assigned_role || debug)
|
||||
is_inaccessible = 0
|
||||
if(is_inaccessible)
|
||||
continue
|
||||
@@ -294,4 +295,4 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
if(!T)
|
||||
return
|
||||
explosion(T,1,2,3)
|
||||
qdel(parent) //Alternatively could brick the uplink.
|
||||
qdel(parent) //Alternatively could brick the uplink.
|
||||
|
||||
@@ -448,9 +448,11 @@
|
||||
symptom_delay_max = 1
|
||||
passive_message = "<span class='notice'>Your skin glows faintly for a moment.</span>"
|
||||
var/cellular_damage = FALSE
|
||||
threshold_desc = "<b>Transmission 6:</b> Additionally heals cellular damage and toxin lovers.<br>\
|
||||
<b>Resistance 7:</b> Increases healing speed."
|
||||
|
||||
threshold_desc = list(
|
||||
"Transmission 6" = "Additionally heals cellular damage and toxin lovers.",
|
||||
"Resistance 7" = "Increases healing speed.",
|
||||
)
|
||||
|
||||
/datum/symptom/heal/radiation/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/element/mob_holder
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
id_arg_index = 2
|
||||
var/worn_state
|
||||
var/alt_worn
|
||||
@@ -47,7 +47,7 @@
|
||||
return FALSE
|
||||
source.visible_message("<span class='warning'>[user] starts picking up [source].</span>", \
|
||||
"<span class='userdanger'>[user] starts picking you up!</span>")
|
||||
if(!do_after(user, 20, target = src) || source.buckled)
|
||||
if(!do_after(user, 20, target = source) || source.buckled)
|
||||
return FALSE
|
||||
|
||||
source.visible_message("<span class='warning'>[user] picks up [source]!</span>", \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/datum/element/wuv //D'awwwww
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
id_arg_index = 2
|
||||
//the for the me emote proc call when petted.
|
||||
var/pet_emote
|
||||
|
||||
@@ -144,9 +144,8 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
|
||||
/datum/quirk/nearsighted/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H))
|
||||
H.put_in_hands(glasses)
|
||||
H.equip_to_slot(glasses, SLOT_GLASSES)
|
||||
H.regenerate_icons() //this is to remove the inhand icon, which persists even if it's not in their hands
|
||||
if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES))
|
||||
H.put_in_hands(glasses)
|
||||
|
||||
/datum/quirk/nyctophobia
|
||||
name = "Nyctophobia"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
/datum/wires/airlock/interactable(mob/user)
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
if(!issilicon(user) && A.isElectrified() && A.shock(user, 100))
|
||||
if(!A.hasSiliconAccessInArea(user) && A.isElectrified() && A.shock(user, 100))
|
||||
return FALSE
|
||||
if(A.panel_open)
|
||||
return TRUE
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/wires/vending/interactable(mob/user)
|
||||
var/obj/machinery/vending/V = holder
|
||||
if(!issilicon(user) && V.seconds_electrified && V.shock(user, 100))
|
||||
if(!V.hasSiliconAccessInArea(user) && V.seconds_electrified && V.shock(user, 100))
|
||||
return FALSE
|
||||
if(V.panel_open)
|
||||
return TRUE
|
||||
|
||||
@@ -6,7 +6,8 @@ GLOBAL_LIST_EMPTY(gangs)
|
||||
name = "gang war"
|
||||
config_tag = "gang"
|
||||
antag_flag = ROLE_GANG
|
||||
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security")
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
|
||||
required_players = 15
|
||||
required_enemies = 0
|
||||
recommended_enemies = 2
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
/obj/machinery/sleeper/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(state_open)
|
||||
close_machine()
|
||||
|
||||
@@ -229,7 +229,7 @@ Class Procs:
|
||||
return !(stat & (NOPOWER|BROKEN|MAINT))
|
||||
|
||||
/obj/machinery/can_interact(mob/user)
|
||||
var/silicon = issiliconoradminghost(user)
|
||||
var/silicon = hasSiliconAccessInArea(user) || IsAdminGhost(user)
|
||||
if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE))
|
||||
return FALSE
|
||||
if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN))
|
||||
|
||||
@@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
|
||||
/obj/machinery/announcement_system/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
||||
@@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
/obj/machinery/announcement_system/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
||||
@@ -132,13 +132,13 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
|
||||
if(href_list["ArrivalTopic"])
|
||||
var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival)
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
||||
return
|
||||
if(NewMessage)
|
||||
arrival = NewMessage
|
||||
else if(href_list["NewheadTopic"])
|
||||
var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead)
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
||||
return
|
||||
if(NewMessage)
|
||||
newhead = NewMessage
|
||||
@@ -157,7 +157,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
. = attack_ai(user)
|
||||
|
||||
/obj/machinery/announcement_system/attack_ai(mob/user)
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='warning'>[src]'s firmware appears to be malfunctioning!</span>")
|
||||
|
||||
@@ -304,12 +304,12 @@
|
||||
/obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user)
|
||||
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound
|
||||
var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num
|
||||
if(!new_rows || !user.canUseTopic(src, !issilicon(user)))
|
||||
if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return FALSE
|
||||
new_rows = CLAMP(new_rows + 1, 4, 30)
|
||||
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
|
||||
var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num
|
||||
if(!new_columns || !user.canUseTopic(src, !issilicon(user)))
|
||||
if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return FALSE
|
||||
new_columns = CLAMP(new_columns + 1, 4, 50)
|
||||
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
|
||||
@@ -317,7 +317,7 @@
|
||||
var/lower_limit = round(grid_area*0.156)
|
||||
var/upper_limit = round(grid_area*0.85)
|
||||
var/new_mine_limit = input(user, "How many mines do you want? (Minimum: [lower_limit], Maximum: [upper_limit])", "Minesweeper Mines") as null|num
|
||||
if(!new_mine_limit || !user.canUseTopic(src, !issilicon(user)))
|
||||
if(!new_mine_limit || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return FALSE
|
||||
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
|
||||
rows = new_rows
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/security/can_interact(mob/user)
|
||||
if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
|
||||
if((!hasSiliconAccessInArea(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
|
||||
/obj/machinery/computer/card/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)) || !is_operational())
|
||||
return
|
||||
if(inserted_modify_id)
|
||||
if(id_eject(user, inserted_modify_id))
|
||||
@@ -360,7 +360,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational())
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)) || !is_operational())
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=id_com")
|
||||
return
|
||||
@@ -392,7 +392,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
inserted_scan_id = id_to_insert
|
||||
updateUsrDialog()
|
||||
if ("auth")
|
||||
if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode))
|
||||
if ((!( authenticated ) && (inserted_scan_id || hasSiliconAccessInArea(usr)) || mode))
|
||||
if (check_access(inserted_scan_id))
|
||||
region_access = list()
|
||||
head_subordinates = list()
|
||||
@@ -426,7 +426,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
get_subordinates("Quartermaster")
|
||||
if(region_access)
|
||||
authenticated = 1
|
||||
else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id))
|
||||
else if ((!( authenticated ) && hasSiliconAccessInArea(usr)) && (!inserted_modify_id))
|
||||
to_chat(usr, "<span class='warning'>You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.</span>")
|
||||
if ("logout")
|
||||
region_access = null
|
||||
@@ -481,7 +481,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
if ("reg")
|
||||
if (authenticated)
|
||||
var/t2 = inserted_modify_id
|
||||
if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc)))
|
||||
if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || hasSiliconAccessInArea(usr)) && isturf(loc)))
|
||||
var/newName = reject_bad_name(href_list["reg"])
|
||||
if(newName)
|
||||
inserted_modify_id.registered_name = newName
|
||||
|
||||
@@ -449,7 +449,7 @@
|
||||
var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
|
||||
if(issilicon(user))
|
||||
if(issilicon(user) || (hasSiliconAccessInArea(user) && !in_range(user,src)))
|
||||
var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access
|
||||
if(dat2)
|
||||
dat += dat2
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
if(!user)
|
||||
return
|
||||
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window
|
||||
if(!(in_range(src, user) || issilicon(user)))
|
||||
if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
|
||||
popup.close()
|
||||
return
|
||||
popup.add_stylesheet("scannernew", 'html/browser/scannernew.css')
|
||||
@@ -318,7 +318,7 @@
|
||||
return
|
||||
if(!isturf(usr.loc))
|
||||
return
|
||||
if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr)))
|
||||
if(!((isturf(loc) && in_range(src, usr)) || hasSiliconAccessInArea(usr)))
|
||||
return
|
||||
if(current_screen == "working")
|
||||
return
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
if(!(active2 in GLOB.data_core.medical))
|
||||
active2 = null
|
||||
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr) || IsAdminGhost(usr))
|
||||
usr.set_machine(src)
|
||||
if(href_list["temp"])
|
||||
temp = null
|
||||
@@ -216,7 +216,7 @@
|
||||
else if(href_list["login"])
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(issilicon(M))
|
||||
if(hasSiliconAccessInArea(M))
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = 1
|
||||
@@ -569,7 +569,7 @@
|
||||
if(user)
|
||||
if(message)
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src, !issilicon(user)))
|
||||
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
if(!record1 || record1 == active1)
|
||||
if(!record2 || record2 == active2)
|
||||
return 1
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
/obj/machinery/computer/pod/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
|
||||
usr.set_machine(src)
|
||||
if(href_list["power"])
|
||||
var/t = text2num(href_list["power"])
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
/obj/machinery/computer/prisoner/management/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["id"])
|
||||
|
||||
@@ -265,7 +265,7 @@ What a mess.*/
|
||||
active1 = null
|
||||
if(!( GLOB.data_core.security.Find(active2) ))
|
||||
active2 = null
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr) || IsAdminGhost(usr))
|
||||
usr.set_machine(src)
|
||||
switch(href_list["choice"])
|
||||
// SORTING!
|
||||
@@ -299,7 +299,7 @@ What a mess.*/
|
||||
if("Log In")
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
||||
if(issilicon(M))
|
||||
if(hasSiliconAccessInArea(M))
|
||||
var/mob/living/silicon/borg = M
|
||||
active1 = null
|
||||
active2 = null
|
||||
@@ -802,7 +802,7 @@ What a mess.*/
|
||||
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2)
|
||||
if(user)
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src, !issilicon(user)))
|
||||
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
if(!trim(message1))
|
||||
return 0
|
||||
if(!record1 || record1 == active1)
|
||||
|
||||
@@ -140,7 +140,7 @@ obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/t
|
||||
L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = M
|
||||
|
||||
var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L
|
||||
if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //check if we are still around
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user), NO_DEXTERY)) //check if we are still around
|
||||
return
|
||||
target = L[desc]
|
||||
if(imp_t)
|
||||
@@ -168,7 +168,7 @@ obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/t
|
||||
to_chat(user, "<span class='alert'>No active connected stations located.</span>")
|
||||
return
|
||||
var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L
|
||||
if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //again, check if we are still around
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user), NO_DEXTERY)) //again, check if we are still around
|
||||
return
|
||||
var/obj/machinery/teleport/station/target_station = L[desc]
|
||||
if(!target_station || !target_station.teleporter_hub)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
/obj/machinery/jukebox/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if (!anchored)
|
||||
to_chat(user,"<span class='warning'>This device must be anchored by a wrench!</span>")
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/obj/machinery/dish_drive/AltClick(mob/living/user)
|
||||
. = ..()
|
||||
if(user.canUseTopic(src, !issilicon(user)))
|
||||
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
do_the_dishes(TRUE)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
/obj/machinery/dna_scannernew/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
interact(user)
|
||||
return TRUE
|
||||
|
||||
@@ -676,7 +676,7 @@
|
||||
else
|
||||
. += "It looks very robust."
|
||||
|
||||
if(issilicon(user) && (!stat & BROKEN))
|
||||
if(hasSiliconAccessInArea(user) && (!stat & BROKEN))
|
||||
. += "<span class='notice'>Shift-click [src] to [ density ? "open" : "close"] it.</span>"
|
||||
. += "<span class='notice'>Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts.</span>"
|
||||
. += "<span class='notice'>Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.</span>"
|
||||
@@ -1322,9 +1322,9 @@
|
||||
if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
|
||||
to_chat(user, "<span class='warning'>Despite your efforts, [src] managed to resist your attempts to open it!</span>")
|
||||
|
||||
/obj/machinery/door/airlock/hostile_lockdown(mob/origin)
|
||||
/obj/machinery/door/airlock/hostile_lockdown(mob/origin, aicontrolneeded = TRUE)
|
||||
// Must be powered and have working AI wire.
|
||||
if(canAIControl(src) && !stat)
|
||||
if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded)
|
||||
locked = FALSE //For airlocks that were bolted open.
|
||||
safe = FALSE //DOOR CRUSH
|
||||
close()
|
||||
@@ -1334,9 +1334,9 @@
|
||||
LAZYADD(shockedby, "\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(origin)]")
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/disable_lockdown()
|
||||
/obj/machinery/door/airlock/disable_lockdown(aicontrolneeded = TRUE)
|
||||
// Must be powered and have working AI wire.
|
||||
if(canAIControl(src) && !stat)
|
||||
if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded)
|
||||
unbolt()
|
||||
set_electrified(NOT_ELECTRIFIED)
|
||||
open()
|
||||
@@ -1528,7 +1528,7 @@
|
||||
. = TRUE
|
||||
|
||||
/obj/machinery/door/airlock/proc/user_allowed(mob/user)
|
||||
return (issilicon(user) && canAIControl(user)) || IsAdminGhost(user)
|
||||
return (hasSiliconAccessInArea(user) && canAIControl(user)) || IsAdminGhost(user)
|
||||
|
||||
/obj/machinery/door/airlock/proc/shock_restore(mob/user)
|
||||
if(!user_allowed(user))
|
||||
|
||||
@@ -514,7 +514,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
if(active_user && !isobserver(active_user) && get_dist(active_user,src)<=1 && usr!=active_user)
|
||||
to_chat(usr, "<span class='warning'>You must wait for [active_user] to finish and move away.</span>")
|
||||
return
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || issilicon(usr) || isobserver(usr))
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || hasSiliconAccessInArea(usr) || isobserver(usr))
|
||||
usr.set_machine(src)
|
||||
scan_user(usr)
|
||||
if(href_list["set_channel_name"])
|
||||
|
||||
@@ -348,6 +348,26 @@
|
||||
spark_system.start() //creates some sparks because they look cool
|
||||
qdel(cover) //deletes the cover - no need on keeping it there!
|
||||
|
||||
//turret healing
|
||||
/obj/machinery/porta_turret/examine(mob/user)
|
||||
. = ..()
|
||||
if(obj_integrity < max_integrity)
|
||||
. += "<span class='notice'>Use a welder to fix it.</span>"
|
||||
|
||||
/obj/machinery/porta_turret/welder_act(mob/living/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(obj_integrity < max_integrity)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
user.visible_message("[user] is welding the turret.", \
|
||||
"<span class='notice'>You begin repairing the turret...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if(I.use_tool(src, user, 40, volume=50))
|
||||
obj_integrity = max_integrity
|
||||
user.visible_message("[user.name] has repaired [src].", \
|
||||
"<span class='notice'>You finish repairing the turret.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The turret doesn't need repairing.</span>")
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/process()
|
||||
@@ -672,6 +692,7 @@
|
||||
lethal_projectile_sound = 'sound/weapons/laser.ogg'
|
||||
desc = "An energy blaster auto-turret."
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/energy/heavy
|
||||
icon_state = "standard_stun"
|
||||
base_icon_state = "standard"
|
||||
@@ -683,6 +704,11 @@
|
||||
lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
desc = "An energy blaster auto-turret."
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate
|
||||
max_integrity = 260
|
||||
integrity_failure = 20
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/setup()
|
||||
return
|
||||
@@ -839,7 +865,7 @@
|
||||
|
||||
/obj/machinery/turretid/examine(mob/user)
|
||||
. = ..()
|
||||
if(issilicon(user) && (!stat & BROKEN))
|
||||
if(hasSiliconAccessInArea(user) && (!stat & BROKEN))
|
||||
. += "<span class='notice'>Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.</span>"
|
||||
. += "<span class='notice'>Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].</span>"
|
||||
|
||||
@@ -854,7 +880,7 @@
|
||||
to_chat(user, "You link \the [M.buffer] with \the [src]")
|
||||
return
|
||||
|
||||
if (issilicon(user))
|
||||
if (hasSiliconAccessInArea(user))
|
||||
return attack_hand(user)
|
||||
|
||||
if ( get_dist(src, user) == 0 ) // trying to unlock the interface
|
||||
@@ -895,7 +921,7 @@
|
||||
/obj/machinery/turretid/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if ( get_dist(src, user) > 0 )
|
||||
if ( !(issilicon(user) || IsAdminGhost(user)) )
|
||||
if ( !(hasSiliconAccessInArea(user) || IsAdminGhost(user)) )
|
||||
to_chat(user, "<span class='notice'>You are too far away.</span>")
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=turretid")
|
||||
@@ -903,10 +929,10 @@
|
||||
|
||||
var/t = ""
|
||||
|
||||
if(locked && !(issilicon(user) || IsAdminGhost(user)))
|
||||
if(locked && !(hasSiliconAccessInArea(user) || IsAdminGhost(user)))
|
||||
t += "<div class='notice icon'>Swipe ID card to unlock interface</div>"
|
||||
else
|
||||
if(!issilicon(user) && !IsAdminGhost(user))
|
||||
if(!hasSiliconAccessInArea(user) && !IsAdminGhost(user))
|
||||
t += "<div class='notice icon'>Swipe ID card to lock interface</div>"
|
||||
t += "Turrets [enabled?"activated":"deactivated"] - <A href='?src=[REF(src)];toggleOn=1'>[enabled?"Disable":"Enable"]?</a><br>"
|
||||
t += "Currently set for [lethal?"lethal":"stun repeatedly"] - <A href='?src=[REF(src)];toggleLethal=1'>Change to [lethal?"Stun repeatedly":"Lethal"]?</a><br>"
|
||||
@@ -920,7 +946,7 @@
|
||||
if(..())
|
||||
return
|
||||
if (locked)
|
||||
if(!(issilicon(usr) || IsAdminGhost(usr)))
|
||||
if(!(hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
|
||||
to_chat(usr, "Control panel is locked!")
|
||||
return
|
||||
if (href_list["toggleOn"])
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(locked && !issilicon(user))
|
||||
if(locked && !hasSiliconAccessInArea(user))
|
||||
to_chat(user, "<span class='warning'>The machine is locked, you are unable to use it!</span>")
|
||||
return
|
||||
if(panel_open)
|
||||
@@ -370,7 +370,7 @@
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be firmly secured to the floor first!</span>")
|
||||
return
|
||||
if(locked && !issilicon(user))
|
||||
if(locked && !hasSiliconAccessInArea(user))
|
||||
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
||||
return
|
||||
if(!power)
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
|
||||
var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network)
|
||||
|
||||
if(newnet && ((usr in range(1, src)) || issilicon(usr)))
|
||||
if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr)))
|
||||
if(length(newnet) > 15)
|
||||
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
|
||||
//Authenticate
|
||||
if (href_list["auth"])
|
||||
if(LINKED_SERVER_NONRESPONSIVE)
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
if(href_list["network"])
|
||||
|
||||
var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network)
|
||||
if(newnet && ((usr in range(1, src)) || issilicon(usr)))
|
||||
if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr)))
|
||||
if(length(newnet) > 15)
|
||||
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
/obj/machinery/telecomms/ui_interact(mob/user)
|
||||
. = ..()
|
||||
// You need a multitool to use this, or be silicon
|
||||
if(!issilicon(user))
|
||||
if(!hasSiliconAccessInArea(user))
|
||||
// istype returns false if the value is null
|
||||
if(!istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
return
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
var/obj/item/multitool/P = null
|
||||
// Let's double check
|
||||
if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
if(!hasSiliconAccessInArea(user) && istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
P = user.get_active_held_item()
|
||||
else if(isAI(user))
|
||||
var/mob/living/silicon/ai/U = user
|
||||
@@ -162,7 +162,7 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(!issilicon(usr))
|
||||
if(!hasSiliconAccessInArea(usr))
|
||||
if(!istype(usr.get_active_held_item(), /obj/item/multitool))
|
||||
return
|
||||
|
||||
@@ -270,6 +270,6 @@
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/telecomms/proc/canAccess(mob/user)
|
||||
if(issilicon(user) || in_range(user, src))
|
||||
if(hasSiliconAccessInArea(user) || in_range(user, src))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/obj/machinery/transformer/examine(mob/user)
|
||||
. = ..()
|
||||
if(cooldown && (issilicon(user) || isobserver(user)))
|
||||
if(cooldown && (hasSiliconAccessInArea(user) || isobserver(user)))
|
||||
. += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]."
|
||||
|
||||
/obj/machinery/transformer/Destroy()
|
||||
|
||||
@@ -163,6 +163,10 @@ again.
|
||||
icon_state = "plastitaniumwindow_spawner"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plastitanium)
|
||||
|
||||
//plastitanium pirate window
|
||||
|
||||
/obj/effect/spawner/structure/window/plastitanium/pirate
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plastitanium/pirate)
|
||||
|
||||
//ice window
|
||||
|
||||
|
||||
@@ -542,3 +542,14 @@ update_label("John Doe", "Clowny")
|
||||
|
||||
/obj/item/card/id/knight/captain
|
||||
id_color = "#FFD700"
|
||||
|
||||
/obj/item/card/id/debug
|
||||
name = "\improper Debug ID"
|
||||
desc = "A debug ID card. Has ALL the all access, you really shouldn't have this."
|
||||
icon_state = "ert_janitor"
|
||||
assignment = "Jannie"
|
||||
|
||||
/obj/item/card/id/debug/Initialize()
|
||||
access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/* This file contains standalone items for debug purposes. */
|
||||
|
||||
/obj/item/debug/human_spawner
|
||||
name = "human spawner"
|
||||
desc = "Spawn a human by aiming at a turf and clicking. Use in hand to change type."
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
icon_state = "nothingwand"
|
||||
item_state = "wand"
|
||||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/datum/species/selected_species
|
||||
var/valid_species = list()
|
||||
|
||||
/obj/item/debug/human_spawner/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(isturf(target))
|
||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human(target)
|
||||
if(selected_species)
|
||||
H.set_species(selected_species)
|
||||
|
||||
/obj/item/debug/human_spawner/attack_self(mob/user)
|
||||
..()
|
||||
var/choice = input("Select a species", "Human Spawner", null) in GLOB.species_list
|
||||
selected_species = GLOB.species_list[choice]
|
||||
|
||||
/* Revive this once we purge all the istype checks for tools for tool_behaviour
|
||||
/obj/item/debug/omnitool
|
||||
name = "omnitool"
|
||||
desc = "The original hypertool, born before them all. Use it in hand to unleash it's true power."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hypertool"
|
||||
item_state = "hypertool"
|
||||
toolspeed = 0.1
|
||||
tool_behaviour = null
|
||||
|
||||
/obj/item/debug/omnitool/examine()
|
||||
. = ..()
|
||||
. += " The mode is: [tool_behaviour]"
|
||||
|
||||
/obj/item/debug/omnitool/proc/check_menu(mob/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/debug/omnitool/attack_self(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
var/list/tool_list = list(
|
||||
"Crowbar" = image(icon = 'icons/obj/tools.dmi', icon_state = "crowbar"),
|
||||
"Multitool" = image(icon = 'icons/obj/device.dmi', icon_state = "multitool"),
|
||||
"Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_map"),
|
||||
"Wirecutters" = image(icon = 'icons/obj/tools.dmi', icon_state = "cutters_map"),
|
||||
"Wrench" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench"),
|
||||
"Welding Tool" = image(icon = 'icons/obj/tools.dmi', icon_state = "miniwelder"),
|
||||
"Analyzer" = image(icon = 'icons/obj/device.dmi', icon_state = "analyzer"),
|
||||
"Mining Tool" = image(icon = 'icons/obj/mining.dmi', icon_state = "minipick"),
|
||||
"Shovel" = image(icon = 'icons/obj/mining.dmi', icon_state = "spade"),
|
||||
"Retractor" = image(icon = 'icons/obj/surgery.dmi', icon_state = "retractor"),
|
||||
"Hemostat" = image(icon = 'icons/obj/surgery.dmi', icon_state = "hemostat"),
|
||||
"Cautery" = image(icon = 'icons/obj/surgery.dmi', icon_state = "cautery"),
|
||||
"Drill" = image(icon = 'icons/obj/surgery.dmi', icon_state = "drill"),
|
||||
"Scalpel" = image(icon = 'icons/obj/surgery.dmi', icon_state = "scalpel"),
|
||||
"Saw" = image(icon = 'icons/obj/surgery.dmi', icon_state = "saw")
|
||||
)
|
||||
var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(tool_result)
|
||||
if("Crowbar")
|
||||
tool_behaviour = TOOL_CROWBAR
|
||||
if("Multitool")
|
||||
tool_behaviour = TOOL_MULTITOOL
|
||||
if("Screwdriver")
|
||||
tool_behaviour = TOOL_SCREWDRIVER
|
||||
if("Wirecutters")
|
||||
tool_behaviour = TOOL_WIRECUTTER
|
||||
if("Wrench")
|
||||
tool_behaviour = TOOL_WRENCH
|
||||
if("Welding Tool")
|
||||
tool_behaviour = TOOL_WELDER
|
||||
if("Analyzer")
|
||||
tool_behaviour = TOOL_ANALYZER
|
||||
if("Mining Tool")
|
||||
tool_behaviour = TOOL_MINING
|
||||
if("Shovel")
|
||||
tool_behaviour = TOOL_SHOVEL
|
||||
if("Retractor")
|
||||
tool_behaviour = TOOL_RETRACTOR
|
||||
if("Hemostat")
|
||||
tool_behaviour = TOOL_HEMOSTAT
|
||||
if("Cautery")
|
||||
tool_behaviour = TOOL_CAUTERY
|
||||
if("Drill")
|
||||
tool_behaviour = TOOL_DRILL
|
||||
if("Scalpel")
|
||||
tool_behaviour = TOOL_SCALPEL
|
||||
if("Saw")
|
||||
tool_behaviour = TOOL_SAW
|
||||
*/
|
||||
@@ -8,6 +8,7 @@
|
||||
var/mob/owner = null //Carp doesn't attack owner, set when using in hand
|
||||
var/owned = 0 //Boolean, no owner to begin with
|
||||
var/mobtype = /mob/living/simple_animal/hostile/carp //So admins can change what mob spawns via var fuckery
|
||||
can_random_spawn = FALSE
|
||||
|
||||
//Attack self
|
||||
/obj/item/toy/plush/carpplushie/dehy_carp/attack_self(mob/user)
|
||||
|
||||
@@ -721,7 +721,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
return
|
||||
|
||||
/obj/item/pda/proc/remove_id(mob/user)
|
||||
if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
if(hasSiliconAccessInArea(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return
|
||||
do_remove_id(user)
|
||||
|
||||
@@ -916,7 +916,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
remove_pen()
|
||||
|
||||
/obj/item/pda/proc/toggle_light()
|
||||
if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE))
|
||||
if(hasSiliconAccessInArea(usr) || !usr.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(fon)
|
||||
fon = FALSE
|
||||
@@ -928,7 +928,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
/obj/item/pda/proc/remove_pen()
|
||||
|
||||
if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
if(hasSiliconAccessInArea(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return
|
||||
|
||||
if(inserted_item)
|
||||
|
||||
@@ -609,7 +609,7 @@ Code:
|
||||
/obj/item/cartridge/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=pda")
|
||||
return
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
#define HIJACK_APC_MAX_AMOUNT 5
|
||||
|
||||
/obj/item/implant/hijack
|
||||
name = "hijack implant"
|
||||
desc = "Allows you to control the machinery in a room by hacking into the APC."
|
||||
actions_types = list(/datum/action/item_action/hands_free/activate, /datum/action/item_action/removeAPCs, /datum/action/item_action/accessAPCs, /datum/action/item_action/stealthmodetoggle)
|
||||
activated = 1
|
||||
var/toggled = FALSE
|
||||
icon_state = "hijack"
|
||||
var/eye_color
|
||||
var/stealthmode = FALSE
|
||||
var/stealthcooldown = 0
|
||||
var/hijacking = FALSE
|
||||
|
||||
/obj/item/implant/hijack/activate()
|
||||
. = ..()
|
||||
toggled = !toggled
|
||||
imp_in.click_intercept = toggled ? src : null
|
||||
imp_in.siliconaccesstoggle = toggled ? TRUE : FALSE
|
||||
to_chat(imp_in,"<span class='notice'>You turn [toggled ? "on" : "off"] [src]'s silicon interactions.</span>")
|
||||
toggle_eyes()
|
||||
|
||||
/obj/item/implant/hijack/proc/toggle_eyes()
|
||||
if (!ishuman(imp_in))
|
||||
return
|
||||
var/on = toggled && !stealthmode
|
||||
var/mob/living/carbon/human/H = imp_in
|
||||
H.eye_color = on ? "ff0" : eye_color
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.update_body()
|
||||
|
||||
/obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE)
|
||||
if(..())
|
||||
ADD_TRAIT(target, TRAIT_HIJACKER, "implant")
|
||||
if (ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
eye_color = H.eye_color
|
||||
return TRUE
|
||||
|
||||
/obj/item/implant/hijack/removed(mob/target, silent = FALSE, special = 0)
|
||||
if(..())
|
||||
REMOVE_TRAIT(target, TRAIT_HIJACKER, "implant")
|
||||
for (var/area/area in imp_in.siliconaccessareas)
|
||||
imp_in.toggleSiliconAccessArea(area)
|
||||
var/obj/machinery/power/apc/apc = area.get_apc()
|
||||
if (apc)
|
||||
apc.hijacker = null
|
||||
apc.set_hijacked_lighting()
|
||||
apc.update_icon()
|
||||
if (ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.eye_color = eye_color
|
||||
return TRUE
|
||||
|
||||
/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object)
|
||||
if (isitem(object) || !toggled || user.incapacitated())
|
||||
return
|
||||
if (stealthmode == FALSE && istype(object,/obj/machinery/power/apc) && !user.CanReach(object))
|
||||
if (hijack_remotely(object))
|
||||
return
|
||||
if (stealthmode && !user.CanReach(object))
|
||||
return
|
||||
if (!object.hasSiliconAccessInArea(imp_in))
|
||||
return
|
||||
var/list/modifiers = params2list(params)
|
||||
imp_in.face_atom(object)
|
||||
if (modifiers["shift"] && modifiers["ctrl"])
|
||||
object.AICtrlShiftClick(imp_in)
|
||||
return TRUE
|
||||
if (modifiers["shift"])
|
||||
object.AIShiftClick(imp_in)
|
||||
return TRUE
|
||||
if (modifiers["ctrl"])
|
||||
object.AICtrlClick(imp_in)
|
||||
return TRUE
|
||||
if (modifiers["alt"])
|
||||
object.AIAltClick(imp_in)
|
||||
return TRUE
|
||||
if (user.get_active_held_item())
|
||||
return
|
||||
if (user.CanReach(object))
|
||||
object.attack_robot(imp_in)
|
||||
else
|
||||
object.attack_ai(imp_in)
|
||||
return TRUE
|
||||
|
||||
/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
|
||||
if (apc.hijacker || hijacking)
|
||||
return FALSE //can't remotely hijack an already hijacked APC
|
||||
hijacking = TRUE
|
||||
to_chat(imp_in, "<span class='notice'>Establishing remote connection with APC.</span>")
|
||||
if (!do_after(imp_in, 4 SECONDS,target=apc))
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
hijacking = FALSE
|
||||
return TRUE
|
||||
if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
|
||||
to_chat(src,"<span class='warning'>You are connected to too many APCs! Too many more will fry your brain.</span>")
|
||||
hijacking = FALSE
|
||||
return TRUE
|
||||
imp_in.light_power = 2
|
||||
imp_in.light_range = 2
|
||||
imp_in.light_color = COLOR_YELLOW
|
||||
imp_in.update_light()
|
||||
imp_in.visible_message("<span class='warning'>[imp_in] starts glowing a with a hollow yellow light!</span>")
|
||||
to_chat(imp_in, "<span class='notice'>Beginning hijack of APC.</span>")
|
||||
if (do_after(imp_in, 21 SECONDS,target=apc))
|
||||
apc.hijacker = imp_in
|
||||
stealthmode = FALSE
|
||||
apc.set_hijacked_lighting()
|
||||
imp_in.toggleSiliconAccessArea(apc.area)
|
||||
apc.update_icon()
|
||||
stealthcooldown = world.time + 1 MINUTES + 30 SECONDS
|
||||
toggle_eyes()
|
||||
else
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
hijacking = FALSE
|
||||
imp_in.light_power = 0
|
||||
imp_in.light_range = 0
|
||||
imp_in.light_color = COLOR_YELLOW
|
||||
imp_in.update_light()
|
||||
return TRUE
|
||||
@@ -74,4 +74,8 @@
|
||||
|
||||
/obj/item/implanter/stealth
|
||||
name = "implanter (stealth)"
|
||||
imp_type = /obj/item/implant/stealth
|
||||
imp_type = /obj/item/implant/stealth
|
||||
|
||||
/obj/item/implanter/hijack
|
||||
name = "implanter (hijack)"
|
||||
imp_type = /obj/item/implant/hijack
|
||||
+108
-400
@@ -31,7 +31,16 @@
|
||||
var/normal_desc
|
||||
//--end of love :'(--
|
||||
|
||||
/obj/item/toy/plush/Initialize()
|
||||
var/snowflake_id //if we set from a config snowflake plushie.
|
||||
var/can_random_spawn = TRUE //if this is FALSE, don't spawn this for random plushies.
|
||||
|
||||
/obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id)
|
||||
. = ..()
|
||||
var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
|
||||
var/id = pick(configlist)
|
||||
set_snowflake_from_config(id)
|
||||
|
||||
/obj/item/toy/plush/Initialize(mapload, set_snowflake_id)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, squeak_override)
|
||||
|
||||
@@ -50,6 +59,9 @@
|
||||
|
||||
normal_desc = desc
|
||||
|
||||
if(set_snowflake_id)
|
||||
set_snowflake_from_config(set_snowflake_id)
|
||||
|
||||
/obj/item/toy/plush/Destroy()
|
||||
QDEL_NULL(grenade)
|
||||
|
||||
@@ -97,6 +109,44 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/proc/set_snowflake_from_config(id)
|
||||
var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
|
||||
var/list/jsonlist = configlist[id]
|
||||
ASSERT(jsonlist)
|
||||
jsonlist = json_decode(jsonlist)
|
||||
if(jsonlist["inherit_from"])
|
||||
var/path = text2path(jsonlist["inherit_from"])
|
||||
if(!ispath(path, /obj/item/toy/plush))
|
||||
stack_trace("Invalid path for inheritance")
|
||||
else
|
||||
var/obj/item/toy/plush/P = new path //can't initial() lists
|
||||
name = P.name
|
||||
desc = P.desc
|
||||
icon_state = P.icon_state
|
||||
item_state = P.item_state
|
||||
icon = P.icon
|
||||
squeak_override = P.squeak_override
|
||||
attack_verb = P.attack_verb
|
||||
gender = P.gender
|
||||
qdel(P)
|
||||
if(jsonlist["name"])
|
||||
name = jsonlist["name"]
|
||||
if(jsonlist["desc"])
|
||||
desc = jsonlist["desc"]
|
||||
if(jsonlist["gender"])
|
||||
gender = jsonlist["gender"]
|
||||
if(jsonlist["icon_state"])
|
||||
icon_state = jsonlist["icon_state"]
|
||||
item_state = jsonlist["item_state"]
|
||||
icon = 'config/plushies/sprites.dmi'
|
||||
if(jsonlist["attack_verb"])
|
||||
attack_verb = jsonlist["attack_verb"]
|
||||
if(jsonlist["squeak_override"])
|
||||
squeak_override = jsonlist["squeak_override"]
|
||||
if(squeak_override)
|
||||
var/datum/component/squeak/S = GetComponent(/datum/component/squeak)
|
||||
S?.override_squeak_sounds = squeak_override
|
||||
|
||||
/obj/item/toy/plush/handle_atom_del(atom/A)
|
||||
if(A == grenade)
|
||||
grenade = null
|
||||
@@ -367,13 +417,22 @@
|
||||
if(mood_message)
|
||||
desc += mood_message
|
||||
|
||||
GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
|
||||
/proc/valid_plushie_paths()
|
||||
. = list()
|
||||
for(var/i in subtypesof(/obj/item/toy/plush))
|
||||
var/obj/item/toy/plush/abstract = i
|
||||
if(!initial(abstract.can_random_spawn))
|
||||
continue
|
||||
. += i
|
||||
|
||||
/obj/item/toy/plush/random
|
||||
name = "Illegal plushie"
|
||||
desc = "Something fucked up"
|
||||
var/blacklisted_plushes = list(/obj/item/toy/plush/carpplushie/dehy_carp, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/random/Initialize()
|
||||
var/newtype = pick(subtypesof(/obj/item/toy/plush) - typecacheof(blacklisted_plushes))
|
||||
var/newtype = prob(CONFIG_GET(number/snowflake_plushie_prob))? /obj/item/toy/plush/random_snowflake : pick(GLOB.valid_plushie_paths)
|
||||
new newtype(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -504,115 +563,12 @@
|
||||
attack_verb = list("clawed", "hissed", "tail slapped")
|
||||
squeak_override = list('sound/weapons/slash.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/durgit
|
||||
icon_state = "durgit"
|
||||
item_state = "durgit"
|
||||
squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //Durgit's the origin of the sound
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/rio
|
||||
icon_state = "rio"
|
||||
item_state = "rio"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/dan
|
||||
icon_state = "dan"
|
||||
item_state = "dan"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/urinsu
|
||||
icon_state = "urinsu"
|
||||
item_state = "urinsu"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/arfrehn
|
||||
icon_state = "arfrehn"
|
||||
item_state = "arfrehn"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/soars
|
||||
icon_state = "soars"
|
||||
item_state = "soars"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/ghostie
|
||||
icon_state = "ghostie"
|
||||
item_state = "ghostie"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/amber
|
||||
icon_state = "amber"
|
||||
item_state = "amber"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/cyan
|
||||
icon_state = "cyan"
|
||||
item_state = "cyan"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/meena
|
||||
icon_state = "meena"
|
||||
item_state = "meena"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/stalks
|
||||
icon_state = "stalks"
|
||||
item_state = "stalks"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/kobold
|
||||
name = "kobold plushie"
|
||||
desc = "An adorable stuffed toy that resembles a kobold."
|
||||
icon_state = "kobold"
|
||||
item_state = "kobold"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/gorgi
|
||||
icon_state = "gorgi"
|
||||
item_state = "gorgi"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/almaz
|
||||
icon_state = "almaz"
|
||||
item_state = "almaz"
|
||||
squeak_override = list('modular_citadel/sound/voice/raptor_purr.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/garou
|
||||
icon_state = "garou"
|
||||
item_state = "garou"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/augments
|
||||
icon_state = "augments"
|
||||
item_state = "augments"
|
||||
squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //I have no mouth and I must weh
|
||||
attack_verb = list("hugged", "patted", "snugged", "booped")
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/xekov
|
||||
icon_state = "xekov"
|
||||
item_state = "xekov"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/greg
|
||||
icon_state = "greg"
|
||||
item_state = "greg"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/sin
|
||||
icon_state = "sin"
|
||||
item_state = "sin"
|
||||
desc = "An adorable stuffed toy that resembles a lizardperson.. It faintly smells of sulfur."
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/ends
|
||||
icon_state = "ends"
|
||||
item_state = "ends"
|
||||
|
||||
/obj/item/toy/plush/lizardplushie/lyssa
|
||||
icon_state = "lyssa"
|
||||
item_state = "lyssa"
|
||||
|
||||
/obj/item/toy/plush/snakeplushie
|
||||
name = "snake plushie"
|
||||
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
|
||||
icon_state = "plushie_snake"
|
||||
item_state = "plushie_snake"
|
||||
attack_verb = list("bitten", "hissed", "tail slapped")
|
||||
squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/snakeplushie/sasha
|
||||
icon_state = "sasha"
|
||||
item_state = "sasha"
|
||||
|
||||
/obj/item/toy/plush/snakeplushie/shay
|
||||
icon_state = "shay"
|
||||
item_state = "shay"
|
||||
|
||||
/obj/item/toy/plush/snakeplushie/vulken
|
||||
icon_state = "vulken"
|
||||
item_state = "vulken"
|
||||
|
||||
/obj/item/toy/plush/nukeplushie
|
||||
name = "operative plushie"
|
||||
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
|
||||
@@ -630,29 +586,17 @@
|
||||
squeak_override = list('sound/effects/blobattack.ogg' = 1)
|
||||
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
|
||||
|
||||
/obj/item/toy/plush/slimeplushie/annie
|
||||
desc = "An adorable stuffed toy that resembles a slimey crewmember."
|
||||
icon_state = "annie"
|
||||
item_state = "annie"
|
||||
|
||||
/obj/item/toy/plush/slimeplushie/paxton
|
||||
desc = "An adorable stuffed toy that resembles a slimey crewmember."
|
||||
icon_state = "paxton"
|
||||
item_state = "paxton"
|
||||
attack_verb = list("CQC'd", "jabroni'd", "powergamed", "robusted", "cakehatted")
|
||||
gender = MALE
|
||||
|
||||
/obj/item/toy/plush/awakenedplushie
|
||||
name = "awakened plushie"
|
||||
desc = "An ancient plushie that has grown enlightened to the true nature of reality."
|
||||
icon_state = "plushie_awake"
|
||||
item_state = "plushie_awake"
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/edit_complainer)
|
||||
|
||||
|
||||
/obj/item/toy/plush/beeplushie
|
||||
name = "bee plushie"
|
||||
desc = "A cute toy that resembles an even cuter bee."
|
||||
@@ -668,21 +612,7 @@
|
||||
icon_state = "bumble"
|
||||
item_state = "bumble"
|
||||
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mothplushie/nameko
|
||||
icon_state = "nameko"
|
||||
item_state = "nameko"
|
||||
|
||||
/obj/item/toy/plush/mothplushie/suru
|
||||
icon_state = "suru"
|
||||
item_state = "suru"
|
||||
|
||||
/obj/item/toy/plush/xeno
|
||||
name = "xenohybrid plushie"
|
||||
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
|
||||
icon_state = "seras"
|
||||
item_state = "seras"
|
||||
squeak_override = list('sound/voice/hiss2.ogg' = 1)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/lampplushie
|
||||
name = "lamp plushie"
|
||||
@@ -736,20 +666,6 @@
|
||||
icon_state = "scrubpuppy"
|
||||
item_state = "scrubpuppy"
|
||||
|
||||
/obj/item/toy/plush/borgplushie/seeking
|
||||
icon_state = "seeking"
|
||||
item_state = "seeking"
|
||||
|
||||
/obj/item/toy/plush/borgplushie/neeb
|
||||
icon_state = "neeb"
|
||||
item_state = "neeb"
|
||||
|
||||
/obj/item/toy/plush/borgplushie/bhijn
|
||||
desc = "An adorable stuffed toy of a IPC."
|
||||
icon_state = "bhijn"
|
||||
item_state = "bhijn"
|
||||
attack_verb = list("closed", "reworked", "merged")
|
||||
|
||||
/obj/item/toy/plush/aiplush
|
||||
name = "AI plushie"
|
||||
desc = "A little stuffed toy AI core... it appears to be malfunctioning."
|
||||
@@ -758,246 +674,22 @@
|
||||
attack_verb = list("hacked", "detonated", "overloaded")
|
||||
squeak_override = list('sound/machines/beep.ogg' = 9, 'sound/machines/buzz-two.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/bird
|
||||
name = "bird plushie"
|
||||
desc = "An adorable stuffed plushie that resembles an avian."
|
||||
icon_state = "sylas"
|
||||
item_state = "sylas"
|
||||
attack_verb = list("peeped", "beeped", "poofed")
|
||||
squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/bird/esela
|
||||
icon_state = "esela"
|
||||
item_state = "esela"
|
||||
|
||||
/obj/item/toy/plush/bird/jahonna
|
||||
icon_state = "jahonna"
|
||||
item_state = "jahonna"
|
||||
|
||||
/obj/item/toy/plush/bird/krick
|
||||
icon_state = "krick"
|
||||
item_state = "krick"
|
||||
|
||||
/obj/item/toy/plush/bird/birddi
|
||||
icon_state = "birddi"
|
||||
item_state = "birddi"
|
||||
|
||||
/obj/item/toy/plush/bird/jewel
|
||||
icon_state = "jewel"
|
||||
item_state = "jewel"
|
||||
|
||||
/obj/item/toy/plush/sergal
|
||||
name = "sergal plushie"
|
||||
desc = "An adorable stuffed plushie that resembles a sagaru."
|
||||
icon_state = "faux"
|
||||
item_state = "faux"
|
||||
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/sergal/gladwyn
|
||||
icon_state = "gladwyn"
|
||||
item_state = "gladwyn"
|
||||
|
||||
/obj/item/toy/plush/sergal/jermaine
|
||||
icon_state = "jermaine"
|
||||
item_state = "jermaine"
|
||||
|
||||
/obj/item/toy/plush/mammal
|
||||
name = "mammal plushie"
|
||||
desc = "An adorable stuffed toy resembling some sort of crew member."
|
||||
icon_state = "dubious"
|
||||
item_state = "dubious"
|
||||
|
||||
/obj/item/toy/plush/mammal/gavin
|
||||
icon_state = "gavin"
|
||||
item_state = "gavin"
|
||||
|
||||
/obj/item/toy/plush/mammal/blep
|
||||
icon_state = "blep"
|
||||
item_state = "blep"
|
||||
|
||||
/obj/item/toy/plush/mammal/circe
|
||||
desc = "A luxuriously soft toy that resembles a nine-tailed kitsune."
|
||||
icon_state = "circe"
|
||||
item_state = "circe"
|
||||
attack_verb = list("medicated", "tailhugged", "kissed")
|
||||
|
||||
/obj/item/toy/plush/mammal/robin
|
||||
icon_state = "robin"
|
||||
item_state = "robin"
|
||||
|
||||
/obj/item/toy/plush/mammal/pavel
|
||||
icon_state = "pavel"
|
||||
item_state = "pavel"
|
||||
|
||||
/obj/item/toy/plush/mammal/mason
|
||||
icon_state = "mason"
|
||||
item_state = "mason"
|
||||
|
||||
/obj/item/toy/plush/mammal/oten
|
||||
icon_state = "oten"
|
||||
item_state = "oten"
|
||||
|
||||
/obj/item/toy/plush/mammal/ray
|
||||
icon_state = "ray"
|
||||
item_state = "ray"
|
||||
|
||||
/obj/item/toy/plush/mammal/redtail
|
||||
icon_state = "redtail"
|
||||
item_state = "redtail"
|
||||
|
||||
/obj/item/toy/plush/mammal/dawud
|
||||
icon_state = "dawud"
|
||||
item_state = "dawud"
|
||||
|
||||
/obj/item/toy/plush/mammal/edgar
|
||||
icon_state = "edgar"
|
||||
item_state = "edgar"
|
||||
attack_verb = list("collared", "tricked", "headpatted")
|
||||
|
||||
/obj/item/toy/plush/mammal/frank
|
||||
icon_state = "frank"
|
||||
item_state = "frank"
|
||||
|
||||
/obj/item/toy/plush/mammal/poojawa
|
||||
icon_state = "poojawa"
|
||||
item_state = "poojawa"
|
||||
|
||||
/obj/item/toy/plush/mammal/hazel
|
||||
icon_state = "hazel"
|
||||
item_state = "hazel"
|
||||
|
||||
/obj/item/toy/plush/mammal/joker
|
||||
icon_state = "joker"
|
||||
item_state = "joker"
|
||||
|
||||
/obj/item/toy/plush/mammal/gunther
|
||||
icon_state = "gunther"
|
||||
item_state = "gunther"
|
||||
|
||||
/obj/item/toy/plush/mammal/fox
|
||||
icon_state = "fox"
|
||||
item_state = "fox"
|
||||
|
||||
/obj/item/toy/plush/mammal/rae
|
||||
desc = "An adorable stuffed toy of an artic fox."
|
||||
icon_state = "rae"
|
||||
item_state = "rae"
|
||||
/obj/item/toy/plush/snakeplushie
|
||||
name = "snake plushie"
|
||||
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
|
||||
icon_state = "plushie_snake"
|
||||
item_state = "plushie_snake"
|
||||
attack_verb = list("bitten", "hissed", "tail slapped")
|
||||
squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mammal/zed
|
||||
desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!"
|
||||
icon_state = "zed"
|
||||
item_state = "zed"
|
||||
attack_verb = list("ENDED", "CRUSHED", "GNOMED")
|
||||
|
||||
/obj/item/toy/plush/mammal/justin
|
||||
icon_state = "justin"
|
||||
item_state = "justin"
|
||||
attack_verb = list("buttslapped", "fixed")
|
||||
|
||||
/obj/item/toy/plush/mammal/reece
|
||||
icon_state = "reece"
|
||||
item_state = "reece"
|
||||
attack_verb = list("healed", "cured", "demoted")
|
||||
|
||||
/obj/item/toy/plush/mammal/redwood
|
||||
desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny."
|
||||
icon_state = "redwood"
|
||||
item_state = "redwood"
|
||||
attack_verb = list("ordered", "bapped", "reprimanded")
|
||||
|
||||
/obj/item/toy/plush/mammal/marisol
|
||||
desc = "An adorable stuffed toy resembling a demi-wolf security officer."
|
||||
icon_state = "marisol"
|
||||
item_state = "marisol"
|
||||
attack_verb = list("arrested", "harmbattoned", "lasered")
|
||||
|
||||
/obj/item/toy/plush/mammal/minty
|
||||
desc = "An adorable stuffed toy resembling some sort of crew member. It smells like mint.."
|
||||
icon_state = "minty"
|
||||
item_state = "minty"
|
||||
attack_verb = list("freshened", "brushed")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog
|
||||
desc = "An adorable stuffed toy that resembles a canine."
|
||||
icon_state = "katlin"
|
||||
item_state = "katlin"
|
||||
attack_verb = list("barked", "boofed", "borked")
|
||||
squeak_override = list(
|
||||
'modular_citadel/sound/voice/bark1.ogg' = 1,
|
||||
'modular_citadel/sound/voice/bark2.ogg' = 1
|
||||
)
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/frost
|
||||
icon_state = "frost"
|
||||
item_state = "frost"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/atticus
|
||||
icon_state = "atticus"
|
||||
item_state = "atticus"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/fletch
|
||||
icon_state = "fletch"
|
||||
item_state = "fletch"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/vincent
|
||||
icon_state = "vincent"
|
||||
item_state = "vincent"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/zigfried
|
||||
desc = "An adorable stuffed toy of a very good boy."
|
||||
icon_state = "zigfried"
|
||||
item_state = "zigfried"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/nikolai
|
||||
icon_state = "nikolai"
|
||||
item_state = "nikolai"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/flynn
|
||||
icon_state = "flynn"
|
||||
item_state = "flynn"
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/fritz
|
||||
icon_state = "fritz"
|
||||
item_state = "fritz"
|
||||
attack_verb = list("barked", "boofed", "shotgun'd")
|
||||
obj_flags = UNIQUE_RENAME
|
||||
unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/jesse
|
||||
desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!"
|
||||
icon_state = "jesse"
|
||||
item_state = "jesse"
|
||||
attack_verb = list("greeted", "merc'd", "howdy'd")
|
||||
|
||||
/obj/item/toy/plush/catgirl
|
||||
name = "feline plushie"
|
||||
desc = "An adorable stuffed toy that resembles a feline."
|
||||
icon_state = "bailey"
|
||||
item_state = "bailey"
|
||||
attack_verb = list("headbutt", "scritched", "bit")
|
||||
squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl/mikeel
|
||||
desc = "An adorable stuffed toy of some tauric cat person."
|
||||
icon_state = "mikeel"
|
||||
item_state = "mikeel"
|
||||
|
||||
/obj/item/toy/plush/catgirl/skylar
|
||||
desc = "An adorable stuffed toy that resembles a degenerate."
|
||||
icon_state = "skylar2"
|
||||
item_state = "skylar2"
|
||||
attack_verb = list("powergamed", "merged", "tabled")
|
||||
squeak_override = list('sound/effects/meow1.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl/drew
|
||||
icon_state = "drew"
|
||||
item_state = "drew"
|
||||
|
||||
/obj/item/toy/plush/catgirl/trilby
|
||||
desc = "A masked stuffed toy that resembles a feline scientist."
|
||||
icon_state = "trilby"
|
||||
item_state = "trilby"
|
||||
attack_verb = list("PR'd", "coded", "remembered")
|
||||
/obj/item/toy/plush/mammal
|
||||
name = "mammal plushie"
|
||||
desc = "An adorable stuffed toy resembling some sort of crew member."
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/catgirl/fermis
|
||||
name = "medcat plushie"
|
||||
@@ -1007,20 +699,36 @@
|
||||
attack_verb = list("cuddled", "petpatted", "wigglepurred")
|
||||
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl/mariaf
|
||||
desc = "An adorable stuffed toy that resembles a very tall cat girl."
|
||||
icon_state = "mariaf"
|
||||
item_state = "mariaf"
|
||||
attack_verb = list("hugged", "stabbed", "licked")
|
||||
/obj/item/toy/plush/xeno
|
||||
name = "xenohybrid plushie"
|
||||
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
|
||||
squeak_override = list('sound/voice/hiss2.ogg' = 1)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/catgirl/maya
|
||||
desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!"
|
||||
icon_state = "maya"
|
||||
item_state = "maya"
|
||||
attack_verb = list("nuked", "arrested", "harmbatonned")
|
||||
/obj/item/toy/plush/bird
|
||||
name = "bird plushie"
|
||||
desc = "An adorable stuffed plushie that resembles an avian."
|
||||
attack_verb = list("peeped", "beeped", "poofed")
|
||||
squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/catgirl/marisa
|
||||
desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win."
|
||||
icon_state = "marisa"
|
||||
item_state = "marisa"
|
||||
attack_verb = list("blasted", "sparked", "dazzled")
|
||||
/obj/item/toy/plush/sergal
|
||||
name = "sergal plushie"
|
||||
desc = "An adorable stuffed plushie that resembles a sagaru."
|
||||
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/mammal/dog
|
||||
desc = "An adorable stuffed toy that resembles a canine."
|
||||
attack_verb = list("barked", "boofed", "borked")
|
||||
squeak_override = list(
|
||||
'modular_citadel/sound/voice/bark1.ogg' = 1,
|
||||
'modular_citadel/sound/voice/bark2.ogg' = 1
|
||||
)
|
||||
|
||||
/obj/item/toy/plush/catgirl
|
||||
name = "feline plushie"
|
||||
desc = "An adorable stuffed toy that resembles a feline."
|
||||
attack_verb = list("headbutt", "scritched", "bit")
|
||||
squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
|
||||
can_random_spawn = FALSE
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
/* Glass stack types
|
||||
* Contains:
|
||||
* Glass sheets
|
||||
* Plasma glass
|
||||
* Reinforced glass sheets
|
||||
* Reinforced plasma glass
|
||||
* Titanium glass
|
||||
* Plastitanium glass
|
||||
* Glass shards - TODO: Move this into code/game/object/item/weapons
|
||||
*/
|
||||
|
||||
@@ -373,4 +377,8 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
throwforce = 11
|
||||
icon_state = "plasmalarge"
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
icon_prefix = "plasma"
|
||||
icon_prefix = "plasma"
|
||||
|
||||
/obj/item/shard/plasma/alien
|
||||
name = "alien shard"
|
||||
desc = "A nasty looking shard of advanced alloy glass."
|
||||
@@ -401,6 +401,8 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
|
||||
new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("alien bar stool", /obj/item/chair/stool/bar/alien, 1, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("alien stool", /obj/item/chair/stool/alien, 1, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
|
||||
|
||||
@@ -699,6 +699,16 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
/*
|
||||
* Bones
|
||||
*/
|
||||
|
||||
GLOBAL_LIST_INIT(bone_recipes, list(
|
||||
new /datum/stack_recipe("Bone Dagger", /obj/item/kitchen/knife/combat/bone, 2, time = 20), \
|
||||
new /datum/stack_recipe("Skull Helmet", /obj/item/clothing/head/helmet/skull, 4, time = 30), \
|
||||
new /datum/stack_recipe("Bone Armor", /obj/item/clothing/suit/armor/bone, 6, time = 30)))
|
||||
|
||||
/obj/item/stack/sheet/bone/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.bone_recipes
|
||||
. = ..()
|
||||
|
||||
/obj/item/stack/sheet/bone
|
||||
name = "bones"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
@@ -715,6 +725,10 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
grind_results = list(/datum/reagent/carbon = 10)
|
||||
merge_type = /obj/item/stack/sheet/bone
|
||||
|
||||
/*
|
||||
* Plastic
|
||||
*/
|
||||
|
||||
GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
new /datum/stack_recipe("see-through plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
|
||||
new /datum/stack_recipe("opaque plastic flaps", /obj/structure/plasticflaps/opaque, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
|
||||
|
||||
@@ -1288,3 +1288,62 @@
|
||||
/obj/item/storage/box/marshmallow/PopulateContents()
|
||||
for (var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
|
||||
|
||||
/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive
|
||||
var/static/items_inside = list(
|
||||
/obj/item/stack/sheet/metal/fifty=1,\
|
||||
/obj/item/stack/sheet/glass/fifty=1,\
|
||||
/obj/item/stack/sheet/rglass=50,\
|
||||
/obj/item/stack/sheet/plasmaglass=50,\
|
||||
/obj/item/stack/sheet/titaniumglass=50,\
|
||||
/obj/item/stack/sheet/plastitaniumglass=50,\
|
||||
/obj/item/stack/sheet/plasteel=50,\
|
||||
/obj/item/stack/sheet/mineral/plastitanium=50,\
|
||||
/obj/item/stack/sheet/mineral/titanium=50,\
|
||||
/obj/item/stack/sheet/mineral/gold=50,\
|
||||
/obj/item/stack/sheet/mineral/silver=50,\
|
||||
/obj/item/stack/sheet/mineral/plasma=50,\
|
||||
/obj/item/stack/sheet/mineral/uranium=50,\
|
||||
/obj/item/stack/sheet/mineral/diamond=50,\
|
||||
/obj/item/stack/sheet/bluespace_crystal=50,\
|
||||
/obj/item/stack/sheet/mineral/bananium=50,\
|
||||
/obj/item/stack/sheet/mineral/wood=50,\
|
||||
/obj/item/stack/sheet/plastic/fifty=1,\
|
||||
/obj/item/stack/sheet/runed_metal/fifty=1
|
||||
)
|
||||
generate_items_inside(items_inside, src)
|
||||
|
||||
/obj/item/storage/box/debugtools
|
||||
name = "box of debug tools"
|
||||
icon_state = "syndiebox"
|
||||
|
||||
/obj/item/storage/box/debugtools/PopulateContents()
|
||||
var/static/items_inside = list(
|
||||
/obj/item/flashlight/emp/debug=1,\
|
||||
/obj/item/pda=1,\
|
||||
/obj/item/modular_computer/tablet/preset/advanced=1,\
|
||||
/obj/item/geiger_counter=1,\
|
||||
/obj/item/construction/rcd/combat/admin=1,\
|
||||
/obj/item/pipe_dispenser=1,\
|
||||
/obj/item/card/emag=1,\
|
||||
/obj/item/healthanalyzer/advanced=1,\
|
||||
/obj/item/disk/tech_disk/debug=1,\
|
||||
/obj/item/uplink/debug=1,\
|
||||
/obj/item/uplink/nuclear/debug=1,\
|
||||
/obj/item/storage/box/beakers/bluespace=1,\
|
||||
/obj/item/storage/box/beakers/variety=1,\
|
||||
/obj/item/storage/box/material=1,\
|
||||
/obj/item/storage/belt/medical/surgery_belt_adv
|
||||
)
|
||||
generate_items_inside(items_inside, src)
|
||||
|
||||
/obj/item/storage/box/beakers/variety
|
||||
name = "beaker variety box"
|
||||
|
||||
/obj/item/storage/box/beakers/variety/PopulateContents()
|
||||
new /obj/item/reagent_containers/glass/beaker(src)
|
||||
new /obj/item/reagent_containers/glass/beaker/large(src)
|
||||
new /obj/item/reagent_containers/glass/beaker/plastic(src)
|
||||
new /obj/item/reagent_containers/glass/beaker/meta(src)
|
||||
new /obj/item/reagent_containers/glass/beaker/noreact(src)
|
||||
new /obj/item/reagent_containers/glass/beaker/bluespace(src)
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
if ((M.client && M.machine == src))
|
||||
is_in_use = TRUE
|
||||
ui_interact(M)
|
||||
if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr))
|
||||
if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr) || hasSiliconAccessInArea(usr))
|
||||
if (!(usr in nearby))
|
||||
if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh.
|
||||
is_in_use = TRUE
|
||||
|
||||
@@ -370,6 +370,43 @@
|
||||
item_state = "stool_bar"
|
||||
origin_type = /obj/structure/chair/stool/bar
|
||||
|
||||
//////////////////////////
|
||||
//Alien(Disco) Stools!////
|
||||
//////////////////////////
|
||||
|
||||
/obj/structure/chair/stool/alien
|
||||
name = "alien stool"
|
||||
desc = "A hard stool made of advanced alien alloy."
|
||||
icon_state = "stoolalien"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
item_chair = /obj/item/chair/stool/alien
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/abductor
|
||||
buildstackamount = 1
|
||||
|
||||
/obj/structure/chair/stool/bar/alien
|
||||
name = "bronze bar stool"
|
||||
desc = "A hard bar stool made of advanced alien alloy."
|
||||
icon_state = "baralien"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
item_chair = /obj/item/chair/stool/bar/alien
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/abductor
|
||||
buildstackamount = 1
|
||||
|
||||
/obj/item/chair/stool/alien
|
||||
name = "stool"
|
||||
icon_state = "stoolalien_toppled"
|
||||
item_state = "stoolalien"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
origin_type = /obj/structure/chair/stool/alien
|
||||
break_chance = 0 //It's too sturdy.
|
||||
|
||||
/obj/item/chair/stool/bar/alien
|
||||
name = "bar stool"
|
||||
icon_state = "baralien_toppled"
|
||||
item_state = "baralien"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
origin_type = /obj/structure/chair/stool/bar/alien
|
||||
|
||||
//////////////////////////
|
||||
//Brass & Bronze stools!//
|
||||
//////////////////////////
|
||||
|
||||
@@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
|
||||
|
||||
/obj/structure/bodycontainer/morgue/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
beeper = !beeper
|
||||
to_chat(user, "<span class='notice'>You turn the speaker function [beeper ? "on" : "off"].</span>")
|
||||
|
||||
@@ -595,6 +595,14 @@
|
||||
/obj/structure/window/plastitanium/unanchored
|
||||
anchored = FALSE
|
||||
|
||||
//pirate ship windows
|
||||
/obj/structure/window/plastitanium/pirate
|
||||
desc = "Yarr this window be explosion proof!"
|
||||
explosion_block = 30
|
||||
|
||||
/obj/structure/window/plastitanium/pirate/unanchored
|
||||
anchored = FALSE
|
||||
|
||||
/obj/structure/window/reinforced/clockwork
|
||||
name = "brass window"
|
||||
desc = "A paper-thin pane of translucent yet reinforced brass."
|
||||
|
||||
@@ -302,4 +302,4 @@
|
||||
|
||||
/turf/closed/wall/mineral/plastitanium/copyTurf(turf/T)
|
||||
. = ..()
|
||||
T.transform = transform
|
||||
T.transform = transform
|
||||
@@ -258,3 +258,22 @@
|
||||
/turf/closed/wall/r_wall/syndicate/overspace
|
||||
icon_state = "map-overspace"
|
||||
fixed_underlay = list("space"=1)
|
||||
|
||||
/////////////////////Pirate Ship walls/////////////////////
|
||||
|
||||
/turf/closed/wall/r_wall/syndicate/pirate
|
||||
desc = "Yarr just try to blow this to smithereens!"
|
||||
explosion_block = 30
|
||||
canSmoothWith = list(/turf/closed/wall/r_wall/syndicate/pirate, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/plastitanium/pirate, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium)
|
||||
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal
|
||||
smooth = SMOOTH_MORE
|
||||
icon_state = "map-shuttle_nd"
|
||||
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/nosmooth
|
||||
icon = 'icons/turf/shuttle.dmi'
|
||||
icon_state = "wall"
|
||||
|
||||
/turf/closed/wall/r_wall/syndicate/pirate/overspace
|
||||
icon_state = "map-overspace"
|
||||
fixed_underlay = list("space"=1)
|
||||
|
||||
@@ -245,7 +245,7 @@
|
||||
/obj/machinery/airalarm/ui_data(mob/user)
|
||||
var/data = list(
|
||||
"locked" = locked,
|
||||
"siliconUser" = user.has_unlimited_silicon_privilege,
|
||||
"siliconUser" = user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user),
|
||||
"emagged" = (obj_flags & EMAGGED ? 1 : 0),
|
||||
"danger_level" = danger_level,
|
||||
)
|
||||
@@ -288,7 +288,7 @@
|
||||
"danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id] * partial_pressure)
|
||||
))
|
||||
|
||||
if(!locked || user.has_unlimited_silicon_privilege)
|
||||
if(!locked || user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user))
|
||||
data["vents"] = list()
|
||||
for(var/id_tag in A.air_vent_names)
|
||||
var/long_name = A.air_vent_names[id_tag]
|
||||
@@ -368,7 +368,7 @@
|
||||
/obj/machinery/airalarm/ui_act(action, params)
|
||||
if(..() || buildstage != 2)
|
||||
return
|
||||
if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled))
|
||||
if((locked && !usr.has_unlimited_silicon_privilege && !hasSiliconAccessInArea(usr)) || (usr.has_unlimited_silicon_privilege && aidisabled))
|
||||
return
|
||||
var/device_id = params["id_tag"]
|
||||
switch(action)
|
||||
@@ -840,7 +840,7 @@
|
||||
|
||||
/obj/machinery/airalarm/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)) || !isturf(loc))
|
||||
return
|
||||
togglelock(user)
|
||||
return TRUE
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
return
|
||||
if(reload < reload_cooldown)
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
|
||||
priority_announce("Bluespace artillery fire detected. Brace for impact.")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] has launched an artillery strike.")
|
||||
var/list/L = list()
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
/obj/item/supplypod_beacon/AltClick(mob/user)
|
||||
. = ..()
|
||||
if (!user.canUseTopic(src, !issilicon(user)))
|
||||
if (!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if (express_console)
|
||||
unlink_console()
|
||||
|
||||
@@ -488,4 +488,47 @@
|
||||
if(client && client.prefs.uses_glasses_colour && glasses_equipped)
|
||||
add_client_colour(G.glass_colour_type)
|
||||
else
|
||||
remove_client_colour(G.glass_colour_type)
|
||||
remove_client_colour(G.glass_colour_type)
|
||||
|
||||
/obj/item/clothing/glasses/debug
|
||||
name = "debug glasses"
|
||||
desc = "Medical, security and diagnostic hud. Alt click to toggle xray."
|
||||
icon_state = "nvgmeson"
|
||||
item_state = "nvgmeson"
|
||||
flags_cover = GLASSESCOVERSEYES
|
||||
darkness_view = 8
|
||||
flash_protect = 2
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
glass_colour_type = FALSE
|
||||
clothing_flags = SCAN_REAGENTS
|
||||
vision_flags = SEE_TURFS
|
||||
var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED, DATA_HUD_SECURITY_ADVANCED)
|
||||
var/xray = FALSE
|
||||
|
||||
/obj/item/clothing/glasses/debug/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(slot != ITEM_SLOT_EYES)
|
||||
return
|
||||
if(ishuman(user))
|
||||
for(var/hud in hudlist)
|
||||
var/datum/atom_hud/H = GLOB.huds[hud]
|
||||
H.add_hud_to(user)
|
||||
|
||||
/obj/item/clothing/glasses/debug/dropped(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
for(var/hud in hudlist)
|
||||
var/datum/atom_hud/H = GLOB.huds[hud]
|
||||
H.remove_hud_from(user)
|
||||
|
||||
/obj/item/clothing/glasses/debug/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
if(xray)
|
||||
vision_flags -= SEE_MOBS|SEE_OBJS
|
||||
else
|
||||
vision_flags += SEE_MOBS|SEE_OBJS
|
||||
xray = !xray
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_sight()
|
||||
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
/obj/item/clothing/mask/gas/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
|
||||
/obj/item/clothing/mask/gas/welding/up
|
||||
|
||||
/obj/item/clothing/mask/gas/welding/up/Initialize()
|
||||
..()
|
||||
visor_toggling()
|
||||
|
||||
|
||||
// ********************************************************************
|
||||
|
||||
|
||||
@@ -427,14 +427,27 @@
|
||||
/datum/outfit/debug //Debug objs plus hardsuit
|
||||
name = "Debug outfit"
|
||||
uniform = /obj/item/clothing/under/patriotsuit
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite
|
||||
shoes = /obj/item/clothing/shoes/magboots/advance
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
mask = /obj/item/clothing/mask/gas/welding
|
||||
belt = /obj/item/storage/belt/utility/chief/full
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
id = /obj/item/card/id/ert
|
||||
glasses = /obj/item/clothing/glasses/meson/night
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite/debug
|
||||
glasses = /obj/item/clothing/glasses/debug
|
||||
ears = /obj/item/radio/headset/headset_cent/commander
|
||||
mask = /obj/item/clothing/mask/gas/welding/up
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
belt = /obj/item/storage/belt/utility/chief/full
|
||||
l_pocket = /obj/item/gun/magic/wand/resurrection/debug
|
||||
r_pocket = /obj/item/gun/magic/wand/death/debug
|
||||
shoes = /obj/item/clothing/shoes/magboots/advance/debug
|
||||
id = /obj/item/card/id/debug
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
back = /obj/item/storage/backpack/holding
|
||||
backpack_contents = list(/obj/item/card/emag=1, /obj/item/flashlight/emp/debug=1, /obj/item/construction/rcd/combat=1, /obj/item/gun/magic/wand/resurrection/debug=1, /obj/item/melee/transforming/energy/axe=1)
|
||||
box = /obj/item/storage/box/debugtools
|
||||
internals_slot = ITEM_SLOT_SUITSTORE
|
||||
backpack_contents = list(
|
||||
/obj/item/melee/transforming/energy/axe=1,\
|
||||
/obj/item/storage/part_replacer/bluespace/tier4=1,\
|
||||
/obj/item/debug/human_spawner=1,\
|
||||
)
|
||||
|
||||
/datum/outfit/debug/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/obj/item/card/id/W = H.wear_id
|
||||
W.registered_name = H.real_name
|
||||
W.update_label()
|
||||
|
||||
@@ -30,8 +30,9 @@
|
||||
magpulse = !magpulse
|
||||
icon_state = "[magboot_state][magpulse]"
|
||||
to_chat(user, "<span class='notice'>You [magpulse ? "enable" : "disable"] the mag-pulse traction system.</span>")
|
||||
user.update_inv_shoes() //so our mob-overlays update
|
||||
user.update_gravity(user.has_gravity())
|
||||
if(user)
|
||||
user.update_inv_shoes() //so our mob-overlays update
|
||||
user.update_gravity(user.has_gravity())
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
@@ -52,6 +53,11 @@
|
||||
slowdown_active = SHOES_SLOWDOWN
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/shoes/magboots/advance/debug
|
||||
|
||||
/obj/item/clothing/shoes/magboots/advance/debug/Initialize()
|
||||
attack_self(src)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/syndie
|
||||
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
|
||||
name = "blood-red magboots"
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndi"
|
||||
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90)
|
||||
on = TRUE
|
||||
on = FALSE
|
||||
var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_mode)
|
||||
visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
|
||||
@@ -367,6 +367,12 @@
|
||||
on = FALSE
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize()
|
||||
. = ..()
|
||||
soundloop.volume = 0
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/syndi/elite
|
||||
name = "elite syndicate hardsuit"
|
||||
desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in travel mode."
|
||||
@@ -380,6 +386,9 @@
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/syndi/elite/debug
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug
|
||||
slowdown = 0
|
||||
|
||||
//The Owl Hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/owl
|
||||
|
||||
@@ -325,17 +325,16 @@
|
||||
body_parts_covered = CHEST|ARMS
|
||||
|
||||
/obj/item/clothing/suit/ran
|
||||
name = "Shikigami costume"
|
||||
name = "shikigami costume"
|
||||
desc = "A costume that looks like a certain shikigami, is super fluffy."
|
||||
icon_state = "ran_suit"
|
||||
item_state = "ran_suit"
|
||||
body_parts_covered = CHEST|GROIN|LEGS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAUR
|
||||
heat_protection = CHEST|GROIN|LEGS //fluffy tails!
|
||||
//2061
|
||||
|
||||
/obj/item/clothing/head/ran
|
||||
name = "Shikigami hat"
|
||||
name = "shikigami hat"
|
||||
desc = "A hat that looks like it keeps any fluffy ears contained super warm, has little charms over it."
|
||||
icon_state = "ran_hat"
|
||||
item_state = "ran_hat"
|
||||
@@ -880,7 +879,6 @@
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = CHEST
|
||||
resistance_flags = NONE
|
||||
mutantrace_variation = NONE
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -5, "acid" = -15) //nylon sucks against acid
|
||||
|
||||
/obj/item/clothing/suit/assu_suit
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
/obj/item/valentine/examine(mob/user)
|
||||
. = ..()
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
if( !(ishuman(user) || isobserver(user) || issilicon(user)) )
|
||||
if( !(ishuman(user) || isobserver(user) || hasSiliconAccessInArea(user)) )
|
||||
user << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[stars(message)]</BODY></HTML>", "window=[name]")
|
||||
onclose(user, "[name]")
|
||||
else
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
shuttleId = "pirateship"
|
||||
icon_screen = "syndishuttle"
|
||||
icon_keyboard = "syndie_key"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
light_color = LIGHT_COLOR_RED
|
||||
possible_destinations = "pirateship_away;pirateship_home;pirateship_custom"
|
||||
|
||||
@@ -184,6 +185,7 @@
|
||||
name = "pirate shuttle navigation computer"
|
||||
desc = "Used to designate a precise transit location for the pirate shuttle."
|
||||
shuttleId = "pirateship"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
lock_override = CAMERA_LOCK_STATION
|
||||
shuttlePortId = "pirateship_custom"
|
||||
x_offset = 9
|
||||
@@ -226,6 +228,7 @@
|
||||
desc = "This sophisticated machine scans the nearby space for items of value."
|
||||
icon = 'icons/obj/machines/research.dmi'
|
||||
icon_state = "tdoppler"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
density = TRUE
|
||||
var/cooldown = 300
|
||||
var/next_use = 0
|
||||
@@ -259,6 +262,7 @@
|
||||
name = "cargo hold pad"
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
icon_state = "lpad-idle-o"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
var/idle_state = "lpad-idle-o"
|
||||
var/warmup_state = "lpad-idle"
|
||||
var/sending_state = "lpad-beam"
|
||||
@@ -272,6 +276,7 @@
|
||||
|
||||
/obj/machinery/computer/piratepad_control
|
||||
name = "cargo hold control terminal"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
var/status_report = "Idle"
|
||||
var/obj/machinery/piratepad/pad
|
||||
var/warmup_time = 100
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
if(!operating)
|
||||
. += "<span class='notice'>Alt-click [src] to turn it on.</span>"
|
||||
|
||||
if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
|
||||
if(!in_range(user, src) && !hasSiliconAccessInArea(user) && !isobserver(user))
|
||||
. += "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>"
|
||||
return
|
||||
if(operating)
|
||||
@@ -63,7 +63,7 @@
|
||||
return
|
||||
|
||||
if(length(ingredients))
|
||||
if(issilicon(user))
|
||||
if(hasSiliconAccessInArea(user))
|
||||
. += "<span class='notice'>\The [src] camera shows:</span>"
|
||||
else
|
||||
. += "<span class='notice'>\The [src] contains:</span>"
|
||||
@@ -187,14 +187,14 @@
|
||||
|
||||
/obj/machinery/microwave/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(user.canUseTopic(src, !issilicon(usr)))
|
||||
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
cook()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/microwave/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user)))
|
||||
if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(isAI(user) && (stat & NOPOWER))
|
||||
return
|
||||
@@ -206,10 +206,10 @@
|
||||
to_chat(user, "<span class='warning'>\The [src] is empty.</span>")
|
||||
return
|
||||
|
||||
var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !issilicon(user))
|
||||
var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !hasSiliconAccessInArea(user))
|
||||
|
||||
// post choice verification
|
||||
if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user)))
|
||||
if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(isAI(user) && (stat & NOPOWER))
|
||||
return
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
data["emagged"] = TRUE
|
||||
data["emag_programs"] = emag_programs
|
||||
data["program"] = program
|
||||
data["can_toggle_safety"] = issilicon(user) || IsAdminGhost(user)
|
||||
data["can_toggle_safety"] = hasSiliconAccessInArea(user) || IsAdminGhost(user)
|
||||
|
||||
return data
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
if(A)
|
||||
load_program(A)
|
||||
if("safety")
|
||||
if(!issilicon(usr) && !IsAdminGhost(usr))
|
||||
if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr))
|
||||
var/msg = "[key_name(usr)] attempted to emag the holodeck using a href they shouldn't have!"
|
||||
message_admins(msg)
|
||||
log_admin(msg)
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
return
|
||||
|
||||
var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600)
|
||||
if(!(in_range(src, user) || issilicon(user)))
|
||||
if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
|
||||
popup.close()
|
||||
return
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
interact(user)
|
||||
|
||||
/obj/item/integrated_circuit_printer/interact(mob/user)
|
||||
if(!(in_range(src, user) || issilicon(user)))
|
||||
if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
|
||||
return
|
||||
|
||||
if(isnull(current_category))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//check if it doesn't require any access at all
|
||||
if(src.check_access(null))
|
||||
return TRUE
|
||||
if(issilicon(M))
|
||||
if(hasSiliconAccessInArea(M))
|
||||
if(ispAI(M))
|
||||
return FALSE
|
||||
return TRUE //AI can do whatever it wants
|
||||
|
||||
@@ -479,32 +479,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
pixel_y = 0
|
||||
animate(src, pixel_y = 2, time = 10, loop = -1)
|
||||
|
||||
/mob/dead/observer/verb/observe()
|
||||
set name = "Observe"
|
||||
set category = "Ghost"
|
||||
|
||||
var/list/creatures = getpois()
|
||||
|
||||
reset_perspective(null)
|
||||
|
||||
var/eye_name = null
|
||||
|
||||
eye_name = input("Please, select a player!", "Observe", null, null) as null|anything in creatures
|
||||
|
||||
if (!eye_name)
|
||||
return
|
||||
|
||||
var/mob/mob_eye = creatures[eye_name]
|
||||
//Istype so we filter out points of interest that are not mobs
|
||||
if(client && mob_eye && istype(mob_eye))
|
||||
client.eye = mob_eye
|
||||
if(mob_eye.hud_used)
|
||||
client.screen = list()
|
||||
LAZYINITLIST(mob_eye.observers)
|
||||
mob_eye.observers |= src
|
||||
mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src)
|
||||
observetarget = mob_eye
|
||||
|
||||
/mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
|
||||
set category = "Ghost"
|
||||
set name = "Jump to Mob"
|
||||
@@ -831,6 +805,32 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
client.screen = list()
|
||||
hud_used.show_hud(hud_used.hud_version)
|
||||
|
||||
/mob/dead/observer/verb/observe()
|
||||
set name = "Observe"
|
||||
set category = "OOC"
|
||||
|
||||
var/list/creatures = getpois()
|
||||
|
||||
reset_perspective(null)
|
||||
|
||||
var/eye_name = null
|
||||
|
||||
eye_name = input("Please, select a player!", "Observe", null, null) as null|anything in creatures
|
||||
|
||||
if (!eye_name)
|
||||
return
|
||||
|
||||
var/mob/mob_eye = creatures[eye_name]
|
||||
//Istype so we filter out points of interest that are not mobs
|
||||
if(client && mob_eye && istype(mob_eye))
|
||||
client.eye = mob_eye
|
||||
if(mob_eye.hud_used)
|
||||
client.screen = list()
|
||||
LAZYINITLIST(mob_eye.observers)
|
||||
mob_eye.observers |= src
|
||||
mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src)
|
||||
observetarget = mob_eye
|
||||
|
||||
/mob/dead/observer/verb/register_pai_candidate()
|
||||
set category = "Ghost"
|
||||
set name = "pAI Setup"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
. = say_dead(message)
|
||||
|
||||
/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
|
||||
. = ..()
|
||||
SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) //parent calls can't overwrite the current proc args.
|
||||
var/atom/movable/to_follow = speaker
|
||||
if(radio_freq)
|
||||
var/atom/movable/virtualspeaker/V = speaker
|
||||
@@ -36,4 +36,3 @@
|
||||
// Recompose the message, because it's scrambled by default
|
||||
message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source)
|
||||
to_chat(src, "[link] [message]")
|
||||
|
||||
|
||||
@@ -99,6 +99,10 @@
|
||||
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
|
||||
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
|
||||
. += "<span class='warning'><B>[t_His] eyes are glowing an unnatural red!</B></span>"
|
||||
else if(HAS_TRAIT(src, TRAIT_HIJACKER))
|
||||
var/obj/item/implant/hijack/H = user.getImplant(/obj/item/implant/hijack)
|
||||
if (H && !H.stealthmode && H.toggled)
|
||||
. += "<b><font color=orange>[t_His] eyes are flickering a bright yellow!</font></b>"
|
||||
|
||||
//ears
|
||||
if(ears && !(SLOT_EARS in obscured))
|
||||
|
||||
@@ -54,21 +54,20 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
|
||||
//Dwarf Speech handling - Basically a filter/forces them to say things. The IC helper
|
||||
/datum/species/dwarf/proc/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = " [message]" //Credits to goonstation for the strings list.
|
||||
var/list/dwarf_words = strings("dwarf_replacement.json", "dwarf") //thanks to regex too.
|
||||
if(speech_args[SPEECH_LANGUAGE] != /datum/language/dwarf) // No accent if they speak their language
|
||||
if(message[1] != "*")
|
||||
message = " [message]" //Credits to goonstation for the strings list.
|
||||
var/list/dwarf_words = strings("dwarf_replacement.json", "dwarf") //thanks to regex too.
|
||||
for(var/key in dwarf_words) //Theres like 1459 words or something man.
|
||||
var/value = dwarf_words[key] //Thus they will always be in character.
|
||||
if(islist(value)) //Whether they like it or not.
|
||||
value = pick(value) //This could be drastically reduced if needed though.
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]") //Also its scottish.
|
||||
|
||||
for(var/key in dwarf_words) //Theres like 1459 words or something man.
|
||||
var/value = dwarf_words[key] //Thus they will always be in character.
|
||||
if(islist(value)) //Whether they like it or not.
|
||||
value = pick(value) //This could be drastically reduced if needed though.
|
||||
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]") //Also its scottish.
|
||||
|
||||
if(prob(3))
|
||||
message += pick(" By Armok!")
|
||||
if(prob(3))
|
||||
message += " By Armok!"
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
//This mostly exists because my testdwarf's liver died while trying to also not die due to no alcohol.
|
||||
|
||||
@@ -224,7 +224,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
. = "<span class='small'>[.]</span>"
|
||||
|
||||
/mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
|
||||
. = ..()
|
||||
SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) //parent calls can't overwrite the current proc args.
|
||||
if(!client)
|
||||
return
|
||||
var/deaf_message
|
||||
|
||||
@@ -315,10 +315,10 @@
|
||||
var/is_anchored = FALSE
|
||||
if(move_resist == MOVE_FORCE_OVERPOWERING)
|
||||
move_resist = MOVE_FORCE_NORMAL
|
||||
REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src)
|
||||
else
|
||||
is_anchored = TRUE
|
||||
move_resist = MOVE_FORCE_OVERPOWERING
|
||||
REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src)
|
||||
ADD_TRAIT(src, TRAIT_NO_TELEPORT, src)
|
||||
|
||||
to_chat(src, "<b>You are now [is_anchored ? "" : "un"]anchored.</b>")
|
||||
|
||||
@@ -7,4 +7,7 @@
|
||||
var/datum/antagonist/bloodsucker/V = mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||
if(V)
|
||||
mind.remove_antag_datum(V)
|
||||
var/datum/antagonist/gang/G = mind.has_antag_datum(/datum/antagonist/gang)
|
||||
if(G)
|
||||
mind.remove_antag_datum(G)
|
||||
..()
|
||||
|
||||
@@ -810,14 +810,14 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
switch(href_list["operation"])
|
||||
if("patrol")
|
||||
if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
|
||||
if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
|
||||
return TRUE
|
||||
auto_patrol = !auto_patrol
|
||||
bot_reset()
|
||||
if("remote")
|
||||
remote_disabled = !remote_disabled
|
||||
if("hack")
|
||||
if(!issilicon(usr) && !IsAdminGhost(usr))
|
||||
if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr))
|
||||
var/msg = "[key_name(usr)] attempted to hack a bot with a href that shouldn't be available!"
|
||||
message_admins(msg)
|
||||
log_admin(msg)
|
||||
@@ -836,7 +836,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
to_chat(usr, "<span class='notice'>[text_dehack]</span>")
|
||||
bot_reset()
|
||||
if("ejectpai")
|
||||
if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr)))
|
||||
if(paicard && (!locked || hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
|
||||
to_chat(usr, "<span class='notice'>You eject [paicard] from [bot_name]</span>")
|
||||
ejectpai(usr)
|
||||
update_controls()
|
||||
@@ -863,13 +863,13 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it.
|
||||
if(!hacked) //Manually emagged by a human - access denied to all.
|
||||
return TRUE
|
||||
else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access.
|
||||
else if(!hasSiliconAccessInArea(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access.
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/proc/hack(mob/user)
|
||||
var/hack
|
||||
if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot.
|
||||
if(hasSiliconAccessInArea(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot.
|
||||
hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]<BR>"
|
||||
hack += "Harm Prevention Safety System: <A href='?src=[REF(src)];operation=hack'>[emagged ? "<span class='bad'>DANGER</span>" : "Engaged"]</A><BR>"
|
||||
else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control.
|
||||
@@ -878,7 +878,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
/mob/living/simple_animal/bot/proc/showpai(mob/user)
|
||||
var/eject = ""
|
||||
if((!locked || issilicon(usr) || IsAdminGhost(usr)))
|
||||
if((!locked || hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
|
||||
if(paicard || allow_pai)
|
||||
eject += "Personality card status: "
|
||||
if(paicard)
|
||||
|
||||
@@ -298,7 +298,7 @@
|
||||
Status: <A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A><BR>
|
||||
Behaviour controls are [locked ? "locked" : "unlocked"]<BR>
|
||||
Maintenance panel panel is [open ? "opened" : "closed"]"})
|
||||
if(!locked || issilicon(user)|| IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user)|| IsAdminGhost(user))
|
||||
dat += "<BR>Clean Blood: <A href='?src=[REF(src)];operation=blood'>[blood ? "Yes" : "No"]</A>"
|
||||
dat += "<BR>Clean Trash: <A href='?src=[REF(src)];operation=trash'>[trash ? "Yes" : "No"]</A>"
|
||||
dat += "<BR>Exterminate Pests: <A href='?src=[REF(src)];operation=pests'>[pests ? "Yes" : "No"]</A>"
|
||||
|
||||
@@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]<BR>"},
|
||||
|
||||
"<A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A>" )
|
||||
|
||||
if(!locked || issilicon(user)|| IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user)|| IsAdminGhost(user))
|
||||
if(!lasercolor)
|
||||
dat += text({"<BR>
|
||||
Arrest Unidentifiable Persons: []<BR>
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
dat += "Maintenance panel panel is [open ? "opened" : "closed"]<BR>"
|
||||
|
||||
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
|
||||
dat += "Extinguish Fires: <A href='?src=[REF(src)];operation=extinguish_fires'>[extinguish_fires ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Extinguish People: <A href='?src=[REF(src)];operation=extinguish_people'>[extinguish_people ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Patrol Station: <A href='?src=[REF(src)];operation=patrol'>[auto_patrol ? "Yes" : "No"]</A><BR>"
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
dat += "None Loaded<BR>"
|
||||
|
||||
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
|
||||
dat += "Add tiles to new hull plating: <A href='?src=[REF(src)];operation=autotile'>[autotile ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Place floor tiles: <A href='?src=[REF(src)];operation=place'>[placetiles ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Replace existing floor tiles with custom tiles: <A href='?src=[REF(src)];operation=replace'>[replacetiles ? "Yes" : "No"]</A><BR>"
|
||||
|
||||
@@ -90,7 +90,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
|
||||
"<A href='?src=[REF(src)];power=[TRUE]'>[on ? "On" : "Off"]</A>" )
|
||||
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
|
||||
dat += text({"<BR> Auto Patrol: []"},
|
||||
|
||||
"<A href='?src=[REF(src)];operation=patrol'>[auto_patrol ? "On" : "Off"]</A>" )
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
else
|
||||
dat += "None Loaded"
|
||||
dat += "<br>Behaviour controls are [locked ? "locked" : "unlocked"]<hr>"
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
|
||||
dat += "<TT>Healing Threshold: "
|
||||
dat += "<a href='?src=[REF(src)];adj_threshold=-10'>--</a> "
|
||||
dat += "<a href='?src=[REF(src)];adj_threshold=-5'>-</a> "
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
|
||||
// TODO: remove this; PDAs currently depend on it
|
||||
/mob/living/simple_animal/bot/mulebot/get_controls(mob/user)
|
||||
var/ai = issilicon(user)
|
||||
var/ai = hasSiliconAccessInArea(user)
|
||||
var/dat
|
||||
dat += "<h3>Multiple Utility Load Effector Mk. V</h3>"
|
||||
dat += "<b>ID:</b> [id]<BR>"
|
||||
|
||||
@@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
|
||||
"<A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A>" )
|
||||
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
|
||||
dat += text({"<BR>
|
||||
Arrest Unidentifiable Persons: []<BR>
|
||||
Arrest for Unauthorized Weapons: []<BR>
|
||||
@@ -131,7 +131,7 @@ Auto Patrol: []"},
|
||||
/mob/living/simple_animal/bot/secbot/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
|
||||
if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
|
||||
return TRUE
|
||||
switch(href_list["operation"])
|
||||
if("idcheck")
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/mob/living/simple_animal/pet/dog/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/wuv, "yaps_happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE)
|
||||
AddElement(/datum/element/wuv, "yaps happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE)
|
||||
AddElement(/datum/element/mob_holder, held_icon)
|
||||
|
||||
//Corgis and pugs are now under one dog subtype
|
||||
|
||||
@@ -808,7 +808,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
|
||||
|
||||
//Can the mob interact() with an atom?
|
||||
/mob/proc/can_interact_with(atom/A)
|
||||
return IsAdminGhost(src) || Adjacent(A)
|
||||
return IsAdminGhost(src) || Adjacent(A) || A.hasSiliconAccessInArea(src)
|
||||
|
||||
//Can the mob use Topic to interact with machines
|
||||
/mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
|
||||
|
||||
@@ -121,4 +121,7 @@
|
||||
|
||||
var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to
|
||||
|
||||
var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
|
||||
var/siliconaccessareas = list()
|
||||
var/siliconaccesstoggle = FALSE
|
||||
|
||||
var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
|
||||
@@ -402,6 +402,32 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/atom/proc/hasSiliconAccessInArea(mob/user)
|
||||
return user && (issilicon(user) || (user.siliconaccesstoggle && (get_area(src) in user.siliconaccessareas)))
|
||||
|
||||
/mob/proc/toggleSiliconAccessArea(area/area)
|
||||
if (area in siliconaccessareas)
|
||||
siliconaccessareas -= area
|
||||
to_chat(src,"<span class='warning'>You lost control of [area]!</span>")
|
||||
return FALSE
|
||||
else
|
||||
if (LAZYLEN(siliconaccessareas) < HIJACK_APC_MAX_AMOUNT)
|
||||
siliconaccessareas += area
|
||||
to_chat(src,"<span class='notice'>You successfully took control of [area].</span>")
|
||||
else
|
||||
to_chat(src,"<span class='warning'>You are connected to too many APCs! Too many more will fry your brain.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/proc/getImplant(type)
|
||||
if (!istype(src,/mob/living))
|
||||
return
|
||||
var/mob/living/L = src
|
||||
for (var/I in L.implants)
|
||||
if (istype(I,type))
|
||||
return I
|
||||
return null
|
||||
|
||||
/proc/canGhostWrite(var/mob/A, var/obj/target, var/desc="", var/allow_all=FALSE)
|
||||
if(allow_all & TRUE)
|
||||
if(!target.GetComponent(/datum/component/anti_magic))
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
return 0
|
||||
|
||||
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
|
||||
if(!screen_on && !issilicon(user))
|
||||
if(!screen_on && !hasSiliconAccessInArea(user))
|
||||
if(ui)
|
||||
ui.close()
|
||||
return 0
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
if(IsAdminGhost(user))
|
||||
return TRUE
|
||||
|
||||
if(issilicon(user))
|
||||
if(computer && computer.hasSiliconAccessInArea(user))
|
||||
return TRUE
|
||||
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/oui_canview(mob/user)
|
||||
if(user.has_unlimited_silicon_privilege)
|
||||
if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user))
|
||||
return TRUE
|
||||
if(!can_interact())
|
||||
if(!can_interact(user))
|
||||
return FALSE
|
||||
if(iscyborg(user))
|
||||
return can_see(user, src, 7)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user