Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into dev
Conflicts: baystation12.int code/controllers/verbs.dm
@@ -16,6 +16,7 @@
|
||||
#include "code\setup.dm"
|
||||
#include "code\stylesheet.dm"
|
||||
#include "code\world.dm"
|
||||
#include "code\__HELPERS\bygex.dm"
|
||||
#include "code\__HELPERS\files.dm"
|
||||
#include "code\__HELPERS\game.dm"
|
||||
#include "code\__HELPERS\global_lists.dm"
|
||||
@@ -227,6 +228,7 @@
|
||||
#include "code\game\gamemodes\malfunction\malfunction.dm"
|
||||
#include "code\game\gamemodes\meteor\meteor.dm"
|
||||
#include "code\game\gamemodes\meteor\meteors.dm"
|
||||
#include "code\game\gamemodes\ninja\ninja.dm"
|
||||
#include "code\game\gamemodes\nuclear\nuclear.dm"
|
||||
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
|
||||
#include "code\game\gamemodes\nuclear\pinpointer.dm"
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
// BEGIN_INTERNALS
|
||||
/*
|
||||
MAP_ICON_TYPE: 0
|
||||
LAST_COMPILE_VERSION: 501.1217
|
||||
DIR: code code\_onclick code\datums code\datums\visibility_networks code\defines\obj code\game code\game\gamemodes code\game\gamemodes\blob code\game\gamemodes\blob\blobs code\game\gamemodes\cult code\game\gamemodes\events code\game\gamemodes\malfunction code\modules code\modules\mining code\modules\telesci
|
||||
LAST_COMPILE_TIME: 1385167744
|
||||
AUTO_FILE_DIR: OFF
|
||||
*/
|
||||
// END_INTERNALS
|
||||
|
||||
107
code/__HELPERS/bygex.dm
Normal file
@@ -0,0 +1,107 @@
|
||||
#ifndef LIBREGEX_LIBRARY
|
||||
#define LIBREGEX_LIBRARY "bygex"
|
||||
#endif
|
||||
|
||||
proc
|
||||
regEx_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
|
||||
|
||||
regex_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
|
||||
|
||||
regEx_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
|
||||
|
||||
regex_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
|
||||
|
||||
regEx_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
|
||||
|
||||
regex_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
|
||||
|
||||
replacetextEx(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
replacetext(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
regEx_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
|
||||
|
||||
regex_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
|
||||
|
||||
regEx_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
|
||||
|
||||
regex_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
|
||||
|
||||
|
||||
//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set
|
||||
//it also contains a list(matches) of /datum/match objects, each of which holds the position and length of the match
|
||||
//matched strings are not returned from the dll, in order to save on memory allocation for large numbers of strings
|
||||
//instead, you can use regex.str(matchnum) to fetch this string as needed.
|
||||
//likewise you can also use regex.pos(matchnum) and regex.len(matchnum) as shorthands
|
||||
/datum/regex
|
||||
var/str
|
||||
var/exp
|
||||
var/error
|
||||
var/anchors = 0
|
||||
var/list/matches = list()
|
||||
|
||||
New(str, exp, results)
|
||||
src.str = str
|
||||
src.exp = exp
|
||||
|
||||
if(findtext(results, "Err", 1, 4)) //error message
|
||||
src.error = results
|
||||
else
|
||||
var/list/L = params2list(results)
|
||||
var/list/M
|
||||
var{i;j}
|
||||
for(i in L)
|
||||
M = L[i]
|
||||
for(j=2, j<=M.len, j+=2)
|
||||
matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
|
||||
anchors = (j-2)/2
|
||||
return matches
|
||||
|
||||
proc
|
||||
str(i)
|
||||
if(!i) return str
|
||||
var/datum/match/M = matches[i]
|
||||
return copytext(str, M.pos, M.pos+M.len)
|
||||
|
||||
pos(i)
|
||||
if(!i) return 1
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos
|
||||
|
||||
len(i)
|
||||
if(!i) return length(str)
|
||||
var/datum/match/M = matches[i]
|
||||
return M.len
|
||||
|
||||
end(i)
|
||||
if(!i) return length(str)
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos + M.len
|
||||
|
||||
report() //debug tool
|
||||
. = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
|
||||
if(error)
|
||||
. += "\n<font color='red'>[error]</font>"
|
||||
return
|
||||
for(var/i=1, i<=matches.len, ++i)
|
||||
. += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
|
||||
|
||||
/datum/match
|
||||
var/pos
|
||||
var/len
|
||||
|
||||
New(pos, len)
|
||||
src.pos = pos
|
||||
src.len = len
|
||||
@@ -194,35 +194,7 @@ proc/checkhtml(var/t)
|
||||
/*
|
||||
* Text modification
|
||||
*/
|
||||
/proc/replacetext(text, find, replacement)
|
||||
var/find_len = length(find)
|
||||
if(find_len < 1) return text
|
||||
. = ""
|
||||
var/last_found = 1
|
||||
while(1)
|
||||
var/found = findtext(text, find, last_found, 0)
|
||||
. += copytext(text, last_found, found)
|
||||
if(found)
|
||||
. += replacement
|
||||
last_found = found + find_len
|
||||
continue
|
||||
return .
|
||||
|
||||
/proc/replacetextEx(text, find, replacement)
|
||||
var/find_len = length(find)
|
||||
if(find_len < 1) return text
|
||||
. = ""
|
||||
var/last_found = 1
|
||||
while(1)
|
||||
var/found = findtextEx(text, find, last_found, 0)
|
||||
. += copytext(text, last_found, found)
|
||||
if(found)
|
||||
. += replacement
|
||||
last_found = found + find_len
|
||||
continue
|
||||
return .
|
||||
|
||||
//Adds 'u' number of zeros ahead of the text 't'
|
||||
//Adds 'u' number of zeros ahead of the text 't'
|
||||
/proc/add_zero(t, u)
|
||||
while (length(t) < u)
|
||||
t = "0[t]"
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
var/datum/controller/transfer_controller = new /transfer_controller()
|
||||
var/timerbuffer = 0 //buffer for time check
|
||||
/transfer_controller/New()
|
||||
var/datum/controller/transfer_controller/transfer_controller
|
||||
|
||||
datum/controller/transfer_controller
|
||||
var/timerbuffer = 0 //buffer for time check
|
||||
var/currenttick = 0
|
||||
datum/controller/transfer_controller/New()
|
||||
timerbuffer = config.vote_autotransfer_initial
|
||||
processing_objects += src
|
||||
|
||||
/transfer_controller/Del()
|
||||
datum/controller/transfer_controller/Del()
|
||||
processing_objects -= src
|
||||
|
||||
/transfer_controller/proc/process()
|
||||
datum/controller/transfer_controller/proc/process()
|
||||
currenttick = currenttick + 1
|
||||
if (world.time >= timerbuffer - 600)
|
||||
vote.autotransfer()
|
||||
timerbuffer = timerbuffer + config.vote_autotransfer_interval
|
||||
@@ -67,6 +67,8 @@ datum/controller/game_controller/proc/setup()
|
||||
setupfactions()
|
||||
setup_economy()
|
||||
|
||||
transfer_controller = new
|
||||
|
||||
for(var/i=0, i<max_secret_rooms, i++)
|
||||
make_mining_asteroid_secret()
|
||||
|
||||
@@ -119,6 +121,7 @@ datum/controller/game_controller/proc/process()
|
||||
controller_iteration++
|
||||
|
||||
vote.process()
|
||||
transfer_controller.process()
|
||||
process_newscaster()
|
||||
|
||||
//AIR
|
||||
@@ -196,7 +199,7 @@ datum/controller/game_controller/proc/process()
|
||||
timer = world.timeofday
|
||||
process_nano()
|
||||
nano_cost = (world.timeofday - timer) / 10
|
||||
|
||||
|
||||
sleep(breather_ticks)
|
||||
|
||||
//EVENTS
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
return
|
||||
|
||||
|
||||
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","CultNetwork"))
|
||||
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller","CultNetwork"))
|
||||
set category = "Debug"
|
||||
set name = "Debug Controller"
|
||||
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
||||
@@ -74,8 +74,12 @@
|
||||
if("Cameras")
|
||||
debug_variables(cameraNetwork)
|
||||
feedback_add_details("admin_verb","DCameras")
|
||||
if("Transfer Controller")
|
||||
debug_variables(transfer_controller)
|
||||
feedback_add_details("admin_verb","DAutovoter")
|
||||
if("CultNetwork")
|
||||
debug_variables(cultNetwork)
|
||||
feedback_add_details("admin_verb","DCultNetwork")
|
||||
|
||||
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
||||
return
|
||||
|
||||
@@ -48,7 +48,11 @@ datum/controller/vote
|
||||
|
||||
proc/autotransfer()
|
||||
initiate_vote("crew_transfer","the server")
|
||||
log_debug("The server has called an Autotransfer")
|
||||
log_debug("The server has called a crew transfer vote")
|
||||
|
||||
/* proc/autogamemode() //This is here for whoever can figure out how to make this work
|
||||
initiate_vote("gamemode","the server")
|
||||
log_debug("The server has called a gamemode vote")*/
|
||||
|
||||
proc/reset()
|
||||
initiator = null
|
||||
|
||||
@@ -26,18 +26,22 @@
|
||||
ninja.assigned_role = "MODE" //So they aren't chosen for other jobs.
|
||||
ninja.special_role = "Ninja"
|
||||
ninja.original = ninja.current
|
||||
if(ninjastart.len == 0)
|
||||
|
||||
/*if(ninjastart.len == 0)
|
||||
ninja.current << "<B>\red A proper starting location for you could not be found, please report this bug!</B>"
|
||||
ninja.current << "<B>\red Attempting to place at a carpspawn.</B>"
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "carpspawn")
|
||||
ninjastart.Add(L)
|
||||
if(ninjastart.len == 0 && latejoin.len > 0)
|
||||
ninja.current << "<B>\red Still no spawneable locations could be found. Defaulting to latejoin.</B>"
|
||||
return 1
|
||||
else if (ninjastart.len == 0)
|
||||
ninja.current << "<B>\red Still no spawneable locations could be found. Aborting.</B>"
|
||||
return 0
|
||||
ninja.current << "<B>\red Attempting to place at a carpspawn.</B>"*/
|
||||
|
||||
//Until such a time as people want to place ninja spawn points, carpspawn will do fine.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "carpspawn")
|
||||
ninjastart.Add(L)
|
||||
if(ninjastart.len == 0 && latejoin.len > 0)
|
||||
ninja.current << "<B>\red No spawneable locations could be found. Defaulting to latejoin.</B>"
|
||||
return 1
|
||||
else if (ninjastart.len == 0)
|
||||
ninja.current << "<B>\red No spawneable locations could be found. Aborting.</B>"
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/ninja/pre_setup()
|
||||
@@ -50,7 +54,7 @@
|
||||
/datum/game_mode/ninja/post_setup()
|
||||
for(var/datum/mind/ninja in ninjas)
|
||||
if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0
|
||||
//forge_ninja_objectives(ninja)
|
||||
forge_ninja_objectives(ninja)
|
||||
var/mob/living/carbon/human/N = ninja.current
|
||||
N.internal = N.s_store
|
||||
N.internals.icon_state = "internal1"
|
||||
@@ -78,7 +82,8 @@
|
||||
return 1
|
||||
|
||||
/datum/game_mode/ninja/proc/forge_ninja_objectives(var/datum/mind/ninja)
|
||||
var/objective_list[] = list(1,2,3,4,5)
|
||||
|
||||
var/objective_list = list(1,2,3,4,5)
|
||||
for(var/i=rand(2,4),i>0,i--)
|
||||
switch(pick(objective_list))
|
||||
if(1)//Kill
|
||||
|
||||
@@ -166,8 +166,13 @@ var/bomb_set
|
||||
|
||||
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
||||
if (src.extended)
|
||||
if (src.opened)
|
||||
nukehack_win(user,50)
|
||||
if (!ishuman(user))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
|
||||
if (!ishuman(user))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
@@ -216,6 +221,12 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
set name = "Make Deployable"
|
||||
set src in oview(1)
|
||||
|
||||
if (!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
if (!ishuman(usr))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
|
||||
if (src.deployable)
|
||||
usr << "\red You close several panels to make [src] undeployable."
|
||||
src.deployable = 0
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
//Clonepod
|
||||
|
||||
//Start growing a human clone in the pod!
|
||||
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace)
|
||||
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/languages)
|
||||
if(mess || attempting)
|
||||
return 0
|
||||
var/datum/mind/clonemind = locate(mindref)
|
||||
@@ -195,7 +195,8 @@
|
||||
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
|
||||
|
||||
H.species = mrace
|
||||
H.add_language(mrace.language)
|
||||
for(var/datum/language/L in languages)
|
||||
H.add_language(L.name)
|
||||
H.update_mutantrace()
|
||||
H.suiciding = 0
|
||||
src.attempting = 0
|
||||
@@ -437,4 +438,4 @@
|
||||
/* EMP grenade/spell effect
|
||||
if(istype(A, /obj/machinery/clonepod))
|
||||
A:malfunction()
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -313,7 +313,7 @@
|
||||
else if(!config.revival_cloning)
|
||||
temp = "Error: Unable to initiate cloning cycle."
|
||||
|
||||
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"]))
|
||||
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"]))
|
||||
temp = "Initiating cloning cycle..."
|
||||
records.Remove(C)
|
||||
del(C)
|
||||
@@ -323,7 +323,7 @@
|
||||
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
|
||||
selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
|
||||
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
|
||||
if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"]))
|
||||
if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"], C.fields["interface"]))
|
||||
temp = "Initiating cloning cycle..."
|
||||
records.Remove(C)
|
||||
del(C)
|
||||
@@ -370,6 +370,7 @@
|
||||
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||
R.fields["UI"] = subject.dna.uni_identity
|
||||
R.fields["SE"] = subject.dna.struc_enzymes
|
||||
R.fields["languages"] = subject.languages
|
||||
|
||||
//Add an implant if needed
|
||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||
|
||||
@@ -439,8 +439,18 @@
|
||||
var/atom/movable/locked
|
||||
var/mode = 1 //1 - gravsling 2 - gravpush
|
||||
|
||||
var/last_fired = 0 //Concept stolen from guns.
|
||||
var/fire_delay = 10 //Used to prevent spam-brute against humans.
|
||||
|
||||
action(atom/movable/target)
|
||||
|
||||
if(world.time >= last_fired + fire_delay)
|
||||
last_fired = world.time
|
||||
else
|
||||
if (world.time % 3)
|
||||
occupant_message("<span class='warning'>[src] is not ready to fire again!")
|
||||
return 0
|
||||
|
||||
switch(mode)
|
||||
if(1)
|
||||
if(!action_checks(target) && !locked) return
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
var/list/allowed = null //suit storage stuff.
|
||||
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
|
||||
var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc.
|
||||
|
||||
/obj/item/device
|
||||
icon = 'icons/obj/device.dmi'
|
||||
|
||||
@@ -715,8 +715,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||
U << browse(null, "window=pda")
|
||||
explode()
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1)
|
||||
else
|
||||
U.show_message("\blue Success!", 1)
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1)
|
||||
P.explode()
|
||||
else
|
||||
U << "PDA not found."
|
||||
@@ -1193,4 +1197,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||
/obj/item/device/pda/emp_act(severity)
|
||||
for(var/atom/A in src)
|
||||
A.emp_act(severity)
|
||||
A.emp_act(severity)
|
||||
|
||||
@@ -510,6 +510,12 @@
|
||||
if(counter >= 5) //So things dont get squiiiiished!
|
||||
jobs += "</tr><tr align='center'>"
|
||||
counter = 0
|
||||
|
||||
if(jobban_isbanned(M, "Internal Affairs Agent"))
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'><font color=red>Internal Affairs Agent</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'>Internal Affairs Agent</a></td>"
|
||||
|
||||
jobs += "</tr></table>"
|
||||
|
||||
//Non-Human (Green)
|
||||
@@ -587,6 +593,13 @@
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
||||
|
||||
//ERT
|
||||
if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>Emergency Response Team</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>Emergency Response Team</a></td>"
|
||||
|
||||
|
||||
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
||||
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[replacetext("Malf AI", " ", " ")]</font></a></td>"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
if(H.species.name in species_restricted)
|
||||
wearable = 1
|
||||
|
||||
if(!wearable)
|
||||
if(!wearable && (slot != 15 && slot != 16)) //Pockets.
|
||||
M << "\red Your species cannot wear [src]."
|
||||
return 0
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
desc = "Covers the eyes, preventing sight."
|
||||
icon_state = "blindfold"
|
||||
item_state = "blindfold"
|
||||
vision_flags = BLIND
|
||||
//vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/prescription
|
||||
name = "prescription sunglasses"
|
||||
@@ -193,4 +193,4 @@
|
||||
name = "Optical Thermal Implants"
|
||||
desc = "A set of implantable lenses designed to augment your vision"
|
||||
icon_state = "thermalimplants"
|
||||
item_state = "syringe_kit"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
var/candrain = 0
|
||||
var/mindrain = 200
|
||||
var/maxdrain = 400
|
||||
species_restricted = null
|
||||
|
||||
/*
|
||||
This runs the gamut of what ninja gloves can do
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
else
|
||||
user << "<span class='notice'>[src] already have a cell.</span>"
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
|
||||
|
||||
|
||||
wired = null
|
||||
@@ -43,7 +43,7 @@
|
||||
cell = null
|
||||
if(clipped == 0)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user.visible_message("\red [user] snips the fingertips off [src].","\red You snip the fingertips off [src].")
|
||||
user.visible_message("\red [user] cut the fingertips off [src].","\red You cut the fingertips off [src].")
|
||||
clipped = 1
|
||||
if("exclude" in species_restricted)
|
||||
name = "mangled [name]"
|
||||
@@ -78,4 +78,4 @@
|
||||
if(wired)
|
||||
overlays += "gloves_wire"
|
||||
if(cell)
|
||||
overlays += "gloves_cell"
|
||||
overlays += "gloves_cell"
|
||||
|
||||
@@ -213,4 +213,50 @@
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
..()
|
||||
|
||||
//Species-specific Syndicate rigs.
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/tajara
|
||||
icon_state = "rig0-syndie-taj"
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndie-taj"
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/tajara
|
||||
item_state = "syndie_hardsuit"
|
||||
icon_state = "rig-syndie-taj"
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/unathi
|
||||
icon_state = "rig0-syndie-unathi"
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndie-unathi"
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/unathi
|
||||
item_state = "syndie_hardsuit"
|
||||
icon_state = "rig-syndie-unathi"
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/skrell
|
||||
icon_state = "rig0-syndie-skrell"
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndie-skrell"
|
||||
species_restricted = list("Skrell")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/skrell
|
||||
item_state = "syndie_hardsuit"
|
||||
icon_state = "rig-syndie-skrell"
|
||||
species_restricted = list("Skrell")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/human
|
||||
icon_state = "rig0-syndie-human"
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndie-human"
|
||||
species_restricted = list("Human")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/human
|
||||
item_state = "syndie_hardsuit"
|
||||
icon_state = "rig-syndie-human"
|
||||
species_restricted = list("Human")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
species_restricted = null
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja
|
||||
name = "ninja suit"
|
||||
@@ -17,6 +17,7 @@
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.2
|
||||
species_restricted = null //Workaround for spawning alien ninja without internals.
|
||||
|
||||
//Important parts of the suit.
|
||||
var/mob/living/carbon/affecting = null//The wearer.
|
||||
|
||||
@@ -467,7 +467,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(!t_color) t_color = icon_state
|
||||
var/image/standing = image("icon_state" = "[t_color]_s")
|
||||
|
||||
standing.icon = 'icons/mob/uniform.dmi'
|
||||
standing.icon = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi')
|
||||
|
||||
if(w_uniform.blood_DNA)
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood")
|
||||
@@ -508,7 +508,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(gloves)
|
||||
var/t_state = gloves.item_state
|
||||
if(!t_state) t_state = gloves.icon_state
|
||||
var/image/standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]")
|
||||
var/image/standing = image("icon" = ((gloves.icon_override) ? gloves.icon_override : 'icons/mob/hands.dmi'), "icon_state" = "[t_state]")
|
||||
if(gloves.blood_DNA)
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands")
|
||||
gloves.screen_loc = ui_gloves
|
||||
@@ -523,7 +523,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
/mob/living/carbon/human/update_inv_glasses(var/update_icons=1)
|
||||
if(glasses)
|
||||
overlays_standing[GLASSES_LAYER] = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
|
||||
overlays_standing[GLASSES_LAYER] = image("icon" = ((glasses.icon_override) ? glasses.icon_override : 'icons/mob/eyes.dmi'), "icon_state" = "[glasses.icon_state]")
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
@@ -531,16 +531,16 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
|
||||
if(l_ear || r_ear)
|
||||
if(l_ear)
|
||||
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[l_ear.icon_state]")
|
||||
overlays_standing[EARS_LAYER] = image("icon" = ((l_ear.icon_override) ? l_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[l_ear.icon_state]")
|
||||
if(r_ear)
|
||||
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[r_ear.icon_state]")
|
||||
overlays_standing[EARS_LAYER] = image("icon" = ((r_ear.icon_override) ? r_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[r_ear.icon_state]")
|
||||
else
|
||||
overlays_standing[EARS_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_shoes(var/update_icons=1)
|
||||
if(shoes)
|
||||
var/image/standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]")
|
||||
var/image/standing = image("icon" = ((shoes.icon_override) ? shoes.icon_override : 'icons/mob/feet.dmi'), "icon_state" = "[shoes.icon_state]")
|
||||
if(shoes.blood_DNA)
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood")
|
||||
overlays_standing[SHOES_LAYER] = standing
|
||||
@@ -566,7 +566,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(istype(head,/obj/item/clothing/head/kitty))
|
||||
standing = image("icon" = head:mob)
|
||||
else
|
||||
standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
|
||||
standing = image("icon" = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'), "icon_state" = "[head.icon_state]")
|
||||
if(head.blood_DNA)
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood")
|
||||
overlays_standing[HEAD_LAYER] = standing
|
||||
@@ -579,7 +579,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
belt.screen_loc = ui_belt //TODO
|
||||
var/t_state = belt.item_state
|
||||
if(!t_state) t_state = belt.icon_state
|
||||
overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]")
|
||||
overlays_standing[BELT_LAYER] = image("icon" = ((belt.icon_override) ? belt.icon_override : 'icons/mob/belt.dmi'), "icon_state" = "[t_state]")
|
||||
else
|
||||
overlays_standing[BELT_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
@@ -588,7 +588,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1)
|
||||
if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this
|
||||
wear_suit.screen_loc = ui_oclothing //TODO
|
||||
var/image/standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]")
|
||||
var/image/standing = image("icon" = ((wear_suit.icon_override) ? wear_suit.icon_override : 'icons/mob/suit.dmi'), "icon_state" = "[wear_suit.icon_state]")
|
||||
|
||||
if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) )
|
||||
drop_from_inventory(handcuffed)
|
||||
@@ -619,7 +619,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1)
|
||||
if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/tie) ) )
|
||||
wear_mask.screen_loc = ui_mask //TODO
|
||||
var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
|
||||
var/image/standing = image("icon" = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'), "icon_state" = "[wear_mask.icon_state]")
|
||||
if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA )
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood")
|
||||
overlays_standing[FACEMASK_LAYER] = standing
|
||||
@@ -631,7 +631,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
|
||||
if(back)
|
||||
back.screen_loc = ui_back //TODO
|
||||
overlays_standing[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
|
||||
overlays_standing[BACK_LAYER] = image("icon" = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi'), "icon_state" = "[back.icon_state]")
|
||||
else
|
||||
overlays_standing[BACK_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 78 KiB |