Created new icon dmi for ai icons. Threw all AI- related stuff in there.
Replaced swat gear in assassin equip list with black gloves and shoes. CentCom Commander equip now includes a bullet-proof vest. Upgraded holograms. It is now possible to create them dybamically through getHologramIcon(). If you want to tweak how they look, change that proc. AI can now project holograms for anyone registered on the crew. Holograms that do no fit this category can also be added now (like the one the AI starts with). Added generic holographic projection machinery category. Should now be possible to create wanted hologram projections and two-way communication using holograms. Unfinished but someone else can work on it. Fixed regular cigar sprite from another commit. Fixed deathsquad helmet down sprite. Also, adjusted it to look more unique. Updated swat mask. Made the swat boots use the jackboot sprite. Made swatboots actually as fast as other boots. Added a Honker destroyed and open sprites. Some misc icon tweaks. Ninjas: Adrenaline boost now resets player stat to 0. Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets stat. It's technically possible to come back from crit health (momentarily, before life.dm knocks you right back in crit) but I think it's a fair tradeoff. Some minor fixes. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1769 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -57,13 +57,7 @@
|
||||
item_state = "clipboard"
|
||||
w_class = 1.0
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/camera_test/proc/build_composite_icon(var/atom/C)
|
||||
var/icon/composite = icon(C.icon, C.icon_state, C.dir, 1)
|
||||
for(var/O in C.overlays)
|
||||
var/image/I = O
|
||||
composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY)
|
||||
return composite
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/camera_test/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/silicon/ai
|
||||
name = "AI"
|
||||
icon = 'mob.dmi'//
|
||||
icon = 'AI.dmi'//
|
||||
icon_state = "ai"
|
||||
anchored = 1 // -- TLE
|
||||
density = 1
|
||||
@@ -13,8 +13,9 @@
|
||||
var/viewalerts = 0
|
||||
var/lawcheck[1]
|
||||
var/ioncheck[1]
|
||||
var/icon/holo_icon//Default is assigned when AI is created.
|
||||
|
||||
|
||||
//MALFUNCTION
|
||||
var/datum/AI_Module/module_picker/malf_picker
|
||||
var/processing_time = 100
|
||||
var/list/datum/AI_Module/current_modules = list()
|
||||
@@ -22,5 +23,4 @@
|
||||
|
||||
var/control_disabled = 0 // Set to 1 to stop AI from interacting via Click() -- TLE
|
||||
var/malfhacking = 0 // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite
|
||||
|
||||
var/obj/machinery/power/apc/malfhack = null
|
||||
var/obj/machinery/power/apc/malfhack = null
|
||||
@@ -29,14 +29,12 @@
|
||||
name = "SWAT shoes"
|
||||
desc = "When you want to turn up the heat."
|
||||
icon_state = "swat"
|
||||
slowdown = 0
|
||||
armor = list(melee = 80, bullet = 60, laser = 50, taser = 25, bomb = 50, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/shoes/space_ninja
|
||||
name = "ninja shoes"
|
||||
desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
|
||||
icon_state = "s-ninja"
|
||||
slowdown = 0
|
||||
protective_temperature = 700
|
||||
permeability_coefficient = 0.01
|
||||
flags = NOSLIP
|
||||
@@ -63,7 +61,7 @@
|
||||
icon_state = "galoshes"
|
||||
permeability_coefficient = 0.05
|
||||
flags = NOSLIP
|
||||
slowdown = 0
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
|
||||
/obj/item/clothing/shoes/magboots
|
||||
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
|
||||
@@ -79,7 +77,7 @@
|
||||
name = "clown shoes"
|
||||
icon_state = "clown"
|
||||
item_state = "clown_shoes"
|
||||
slowdown = 0
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
|
||||
/obj/item/clothing/shoes/jackboots
|
||||
name = "Jackboots"
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
a_boost = 3.0//Number of adrenaline boosters.
|
||||
|
||||
//Onboard AI related variables.
|
||||
mob/living/silicon/AI//If there is an AI inside the suit.
|
||||
mob/living/silicon/ai/AI//If there is an AI inside the suit.
|
||||
obj/item/device/paicard/pai//A slot for a pAI device
|
||||
obj/overlay/hologram//Is the AI hologram on or off? Visible only to the wearer of the suit. This works by attaching an image to a blank overlay.
|
||||
flush = 0//If an AI purge is in progress.
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
desc = "Rumoured to control holograms."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "holo_console0"
|
||||
var/obj/machinery/hologram_proj/projector = null
|
||||
var/obj/machinery/hologram/projector/projector = null
|
||||
var/temp = null
|
||||
var/lumens = 0.0
|
||||
var/h_r = 245.0
|
||||
|
||||
@@ -131,35 +131,6 @@
|
||||
active_power_usage = 6
|
||||
|
||||
|
||||
/obj/machinery/hologram_proj
|
||||
name = "Hologram Projector"
|
||||
desc = "Makes a hologram appear...somehow..."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "hologram0"
|
||||
var/atom/projection = null
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 5
|
||||
|
||||
|
||||
/obj/machinery/hologram_ai
|
||||
name = "Hologram Projector Platform"
|
||||
desc = "Used for the fun of the diabolical AI."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "hologram0"
|
||||
var/atom/projection = null
|
||||
var/temp = null
|
||||
var/lumens = 0.0
|
||||
var/h_r = 245.0
|
||||
var/h_g = 245.0
|
||||
var/h_b = 245.0
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 10
|
||||
|
||||
|
||||
/obj/machinery/igniter
|
||||
name = "igniter"
|
||||
desc = "Fun for igniting plasma."
|
||||
@@ -611,15 +582,35 @@
|
||||
var/otherarea = null
|
||||
var/id = 1
|
||||
|
||||
/obj/machinery/holopad
|
||||
name = "holopad"
|
||||
desc = "A floor-mounted device for projecting a holographic image. It will activate remotely."
|
||||
icon_state = "holopad0"
|
||||
/obj/machinery/hologram
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
|
||||
var
|
||||
obj/overlay/hologram//The projection itself. If there is one, the instrument is on, off otherwise.
|
||||
|
||||
/obj/machinery/hologram/holopad
|
||||
name = "AI holopad"
|
||||
desc = "A floor-mounted device for projecting a holographic image. It will activate remotely."
|
||||
icon_state = "holopad0"
|
||||
var
|
||||
mob/living/silicon/ai/master//Which AI, if any, is controlling the object? Only one AI may control a hologram at any time.
|
||||
|
||||
/obj/machinery/hologram/projector
|
||||
name = "Hologram Projector"
|
||||
desc = "Makes a hologram appear...somehow..."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "hologram0"
|
||||
|
||||
/obj/machinery/hologram/proj_ai
|
||||
name = "Hologram Projector Platform"
|
||||
desc = "Used for the fun of the diabolical AI."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "hologram0"
|
||||
var
|
||||
temp = null
|
||||
lumens = 0.0
|
||||
h_r = 245.0
|
||||
h_g = 245.0
|
||||
h_b = 245.0
|
||||
|
||||
@@ -502,17 +502,17 @@ proc
|
||||
if(I:icon)
|
||||
if(I:icon_state)
|
||||
// Has icon and state set
|
||||
add = icon(I:icon, I:icon_state, dir, 1, 0)
|
||||
add = icon(I:icon, I:icon_state)
|
||||
else
|
||||
if(A.icon_state in icon_states(I:icon))
|
||||
// Inherits icon_state from atom
|
||||
add = icon(I:icon, A.icon_state, dir, 1, 0)
|
||||
add = icon(I:icon, A.icon_state)
|
||||
else
|
||||
// Uses default state ("")
|
||||
add = icon(I:icon, null, dir, 1, 0)
|
||||
add = icon(I:icon)
|
||||
else if(I:icon_state)
|
||||
// Inherits icon from atom
|
||||
add = icon(A.icon, I:icon_state, dir, 1, 0)
|
||||
add = icon(A.icon, I:icon_state)
|
||||
else
|
||||
// Unknown
|
||||
continue
|
||||
@@ -565,4 +565,20 @@ proc
|
||||
I.pixel_y -= 1
|
||||
if(4)
|
||||
I.pixel_y += 1
|
||||
overlays += I//And finally add the overlay.
|
||||
overlays += I//And finally add the overlay.
|
||||
|
||||
/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created.
|
||||
var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon.
|
||||
flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish.
|
||||
flat_icon.ChangeOpacity(0.5)//Make it half transparent.
|
||||
var/icon/alpha_mask = new('effects.dmi', "scanline")//Scanline effect.
|
||||
flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect.
|
||||
return flat_icon
|
||||
|
||||
//For photo camera.
|
||||
/proc/build_composite_icon(atom/A)
|
||||
var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1)
|
||||
for(var/O in A.overlays)
|
||||
var/image/I = O
|
||||
composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY)
|
||||
return composite
|
||||
@@ -272,7 +272,14 @@ Movement impairing would indicate drugs and the like.*/
|
||||
U.paralysis = 0
|
||||
U.stunned = 0
|
||||
U.weakened = 0
|
||||
spawn(30)
|
||||
/*
|
||||
Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat.
|
||||
This lead to me and others spamming adrenaline boosters because they failed to kick in on time.
|
||||
It's technically possible to come back from crit with this but it is very temporary.
|
||||
Life.dm will kick the player back into unconsciosness the next process loop.
|
||||
*/
|
||||
U.stat = 0//At least now you should be able to teleport away or shoot ninja stars.
|
||||
spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up.
|
||||
U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"))
|
||||
spawn(70)
|
||||
reagents.reaction(U, 2)
|
||||
|
||||
@@ -54,7 +54,7 @@ ________________________________________________________________________________
|
||||
del(n_shoes)
|
||||
del(src)
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/killai(var/mob/living/silicon/ai/A = AI)
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/killai(mob/living/silicon/ai/A = AI)
|
||||
if(A.client)
|
||||
A << "\red Self-erase protocol dete-- *bzzzzz*"
|
||||
A << browse(null, "window=hack spideros")
|
||||
@@ -109,7 +109,7 @@ ________________________________________________________________________________
|
||||
|
||||
//=======//PROCESS PROCS//=======//
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/ntick(var/mob/living/carbon/human/U as mob)
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting)
|
||||
set background = 1
|
||||
|
||||
//Runs in the background while the suit is initialized.
|
||||
@@ -177,7 +177,7 @@ ________________________________________________________________________________
|
||||
U << "\blue All systems operational. Welcome to <B>SpiderOS</B>, [U.real_name]."
|
||||
grant_ninja_verbs()
|
||||
grant_equip_verbs()
|
||||
ntick(U)
|
||||
ntick()
|
||||
sleep(delay)
|
||||
s_busy = 0
|
||||
else
|
||||
@@ -720,7 +720,7 @@ ________________________________________________________________________________
|
||||
hologram.invisibility = 101//So that it doesn't show up, ever. This also means one could attach a number of images to a single obj and display them differently to differnet people.
|
||||
hologram.anchored = 1//So it cannot be dragged by space wind and the like.
|
||||
hologram.dir = get_dir(T,affecting.loc)
|
||||
var/image/I = image('mob.dmi',hologram,"ai-holo")//Attach an image to object.
|
||||
var/image/I = image(AI.holo_icon,hologram)//Attach an image to object.
|
||||
hologram.i_attached = I//To attach the image in order to later reference.
|
||||
AI << I
|
||||
affecting << I
|
||||
|
||||
@@ -88,8 +88,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
distribute_jobs() //Distribute jobs and announce the captain
|
||||
create_characters() //Create player characters and transfer them
|
||||
collect_minds()
|
||||
equip_characters()
|
||||
data_core.manifest()
|
||||
equip_characters()
|
||||
current_state = GAME_STATE_PLAYING
|
||||
mode.post_setup()
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
density = 1
|
||||
anchored = 0
|
||||
name = "AI core"
|
||||
icon = 'AIcore.dmi'
|
||||
icon = 'AI.dmi'
|
||||
icon_state = "0"
|
||||
var/state = 0
|
||||
var/datum/ai_laws/laws = new /datum/ai_laws/asimov
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
/obj/AIcore/deactivated
|
||||
name = "Inactive AI"
|
||||
icon = 'mob.dmi'
|
||||
icon = 'AI.dmi'
|
||||
icon_state = "ai-empty"
|
||||
anchored = 1
|
||||
state = 20//So it doesn't interact based on the above. Not really necessary.
|
||||
|
||||
@@ -381,6 +381,7 @@ Pod/Blast Doors computer
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
L.fields["image"] = getFlatIcon(H,0)
|
||||
//End locked reporting
|
||||
|
||||
general += G
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/computer/hologram_comp/New()
|
||||
..()
|
||||
spawn( 10 )
|
||||
src.projector = locate(/obj/machinery/hologram_proj, get_step(src.loc, NORTH))
|
||||
src.projector = locate(/obj/machinery/hologram/projector, get_step(src.loc, NORTH))
|
||||
return
|
||||
return
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
I.Blend(U, ICON_OVERLAY)
|
||||
|
||||
src.projector.projection.icon = I
|
||||
src.projector.hologram.icon = I
|
||||
|
||||
/obj/machinery/computer/hologram_comp/proc/show_console(var/mob/user as mob)
|
||||
var/dat
|
||||
@@ -35,7 +35,7 @@
|
||||
if (src.temp)
|
||||
dat = text("[]<BR><BR><A href='?src=\ref[];temp=1'>Clear</A>", src.temp, src)
|
||||
else
|
||||
dat = text("<B>Hologram Status:</B><HR>\nPower: <A href='?src=\ref[];power=1'>[]</A><HR>\n<B>Hologram Control:</B><BR>\nColor Luminosity: []/220 <A href='?src=\ref[];reset=1'>\[Reset\]</A><BR>\nLighten: <A href='?src=\ref[];light=1'>1</A> <A href='?src=\ref[];light=10'>10</A><BR>\nDarken: <A href='?src=\ref[];light=-1'>1</A> <A href='?src=\ref[];light=-10'>10</A><BR>\n<BR>\nHair Color: ([],[],[]) <A href='?src=\ref[];h_reset=1'>\[Reset\]</A><BR>\nRed (0-255): <A href='?src=\ref[];h_r=-300'>\[0\]</A> <A href='?src=\ref[];h_r=-10'>-10</A> <A href='?src=\ref[];h_r=-1'>-1</A> [] <A href='?src=\ref[];h_r=1'>1</A> <A href='?src=\ref[];h_r=10'>10</A> <A href='?src=\ref[];h_r=300'>\[255\]</A><BR>\nGreen (0-255): <A href='?src=\ref[];h_g=-300'>\[0\]</A> <A href='?src=\ref[];h_g=-10'>-10</A> <A href='?src=\ref[];h_g=-1'>-1</A> [] <A href='?src=\ref[];h_g=1'>1</A> <A href='?src=\ref[];h_g=10'>10</A> <A href='?src=\ref[];h_g=300'>\[255\]</A><BR>\nBlue (0-255): <A href='?src=\ref[];h_b=-300'>\[0\]</A> <A href='?src=\ref[];h_b=-10'>-10</A> <A href='?src=\ref[];h_b=-1'>-1</A> [] <A href='?src=\ref[];h_b=1'>1</A> <A href='?src=\ref[];h_b=10'>10</A> <A href='?src=\ref[];h_b=300'>\[255\]</A><BR>", src, (src.projector.projection ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src)
|
||||
dat = text("<B>Hologram Status:</B><HR>\nPower: <A href='?src=\ref[];power=1'>[]</A><HR>\n<B>Hologram Control:</B><BR>\nColor Luminosity: []/220 <A href='?src=\ref[];reset=1'>\[Reset\]</A><BR>\nLighten: <A href='?src=\ref[];light=1'>1</A> <A href='?src=\ref[];light=10'>10</A><BR>\nDarken: <A href='?src=\ref[];light=-1'>1</A> <A href='?src=\ref[];light=-10'>10</A><BR>\n<BR>\nHair Color: ([],[],[]) <A href='?src=\ref[];h_reset=1'>\[Reset\]</A><BR>\nRed (0-255): <A href='?src=\ref[];h_r=-300'>\[0\]</A> <A href='?src=\ref[];h_r=-10'>-10</A> <A href='?src=\ref[];h_r=-1'>-1</A> [] <A href='?src=\ref[];h_r=1'>1</A> <A href='?src=\ref[];h_r=10'>10</A> <A href='?src=\ref[];h_r=300'>\[255\]</A><BR>\nGreen (0-255): <A href='?src=\ref[];h_g=-300'>\[0\]</A> <A href='?src=\ref[];h_g=-10'>-10</A> <A href='?src=\ref[];h_g=-1'>-1</A> [] <A href='?src=\ref[];h_g=1'>1</A> <A href='?src=\ref[];h_g=10'>10</A> <A href='?src=\ref[];h_g=300'>\[255\]</A><BR>\nBlue (0-255): <A href='?src=\ref[];h_b=-300'>\[0\]</A> <A href='?src=\ref[];h_b=-10'>-10</A> <A href='?src=\ref[];h_b=-1'>-1</A> [] <A href='?src=\ref[];h_b=1'>1</A> <A href='?src=\ref[];h_b=10'>10</A> <A href='?src=\ref[];h_b=300'>\[255\]</A><BR>", src, (src.projector.hologram ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src)
|
||||
user << browse(dat, "window=hologram_console")
|
||||
onclose(user, "hologram_console")
|
||||
return
|
||||
@@ -46,43 +46,43 @@
|
||||
if (in_range(src, usr))
|
||||
flick("holo_console1", src)
|
||||
if (href_list["power"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.projector.icon_state = "hologram0"
|
||||
//src.projector.projection = null
|
||||
del(src.projector.projection)
|
||||
//src.projector.hologram = null
|
||||
del(src.projector.hologram)
|
||||
else
|
||||
src.projector.projection = new /obj/projection(src.projector.loc)
|
||||
src.projector.projection.icon = 'human.dmi'
|
||||
src.projector.projection.icon_state = "body_m_s"
|
||||
src.projector.hologram = new(src.projector.loc)
|
||||
src.projector.hologram.icon = 'human.dmi'
|
||||
src.projector.hologram.icon_state = "body_m_s"
|
||||
src.projector.icon_state = "hologram1"
|
||||
src.render()
|
||||
else
|
||||
if (href_list["h_r"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.h_r += text2num(href_list["h_r"])
|
||||
src.h_r = min(max(src.h_r, 0), 255)
|
||||
render()
|
||||
else
|
||||
if (href_list["h_g"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.h_g += text2num(href_list["h_g"])
|
||||
src.h_g = min(max(src.h_g, 0), 255)
|
||||
render()
|
||||
else
|
||||
if (href_list["h_b"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.h_b += text2num(href_list["h_b"])
|
||||
src.h_b = min(max(src.h_b, 0), 255)
|
||||
render()
|
||||
else
|
||||
if (href_list["light"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.lumens += text2num(href_list["light"])
|
||||
src.lumens = min(max(src.lumens, -185.0), 35)
|
||||
render()
|
||||
else
|
||||
if (href_list["reset"])
|
||||
if (src.projector.projection)
|
||||
if (src.projector.hologram)
|
||||
src.lumens = 0
|
||||
render()
|
||||
else
|
||||
|
||||
@@ -11,7 +11,7 @@ Possible to do for anyone motivated enough:
|
||||
Give an AI variable for different hologram icons.
|
||||
Itegrate EMP effects to disable the unit.
|
||||
*/
|
||||
/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user)
|
||||
/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user)
|
||||
if (!istype(user))
|
||||
return
|
||||
/*There are pretty much only three ways to interact here.
|
||||
@@ -26,7 +26,7 @@ Possible to do for anyone motivated enough:
|
||||
clear_holo()
|
||||
return
|
||||
|
||||
/obj/machinery/holopad/proc/activate_holo(mob/living/silicon/ai/user)
|
||||
/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user)
|
||||
if(!(stat & NOPOWER)&&user.client.eye==src)//If the projector has power and client eye is on it.
|
||||
if(!hologram)//If there is not already a hologram.
|
||||
create_holo(user)//Create one.
|
||||
@@ -40,7 +40,7 @@ Possible to do for anyone motivated enough:
|
||||
|
||||
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
|
||||
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
/obj/machinery/holopad/hear_talk(mob/M, text)
|
||||
/obj/machinery/hologram/holopad/hear_talk(mob/M, text)
|
||||
if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something.
|
||||
if(!master.say_understands(M))//The AI will be able to understand most mobs talking through the holopad.
|
||||
text = stars(text)
|
||||
@@ -52,21 +52,21 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
master.show_message(rendered, 2)
|
||||
return
|
||||
|
||||
/obj/machinery/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
|
||||
/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
|
||||
hologram = new(T)//Spawn a blank effect at the location.
|
||||
hologram.icon = 'mob.dmi'
|
||||
hologram.icon_state = "ai-holo"
|
||||
hologram.icon = A.holo_icon
|
||||
hologram.mouse_opacity = 0//So you can't click on it.
|
||||
hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
|
||||
hologram.sd_SetLuminosity(1)//To make it glowy.
|
||||
hologram.anchored = 1//So space wind cannot drag it.
|
||||
hologram.name = "AI hologram"//If someone decides to right click.
|
||||
sd_SetLuminosity(1)//To make the pad glowy.
|
||||
icon_state = "holopad1"
|
||||
master = A//AI is the master.
|
||||
use_power = 2//Active power usage.
|
||||
return 1
|
||||
|
||||
/obj/machinery/holopad/proc/clear_holo()
|
||||
/obj/machinery/hologram/holopad/proc/clear_holo()
|
||||
hologram.sd_SetLuminosity(0)//Clear lighting.
|
||||
del(hologram)//Get rid of hologram.
|
||||
master = null//Null the master, since no-one is using it now.
|
||||
@@ -75,7 +75,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
use_power = 1//Passive power usage.
|
||||
return 1
|
||||
|
||||
/obj/machinery/holopad/process()
|
||||
/obj/machinery/hologram/holopad/process()
|
||||
if(hologram)//If there is a hologram.
|
||||
if(master&&!master.stat&&master.client&&master.client.eye==src)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector.
|
||||
if( !(get_dist(src,hologram.loc)>3||stat & NOPOWER) )//If the hologram is not out of bounds and the machine has power.
|
||||
@@ -83,14 +83,14 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
clear_holo()//If not, we want to get rid of the hologram.
|
||||
return 1
|
||||
|
||||
/obj/machinery/holopad/power_change()
|
||||
/obj/machinery/hologram/power_change()
|
||||
if (powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= ~NOPOWER
|
||||
|
||||
//Destruction procs.
|
||||
/obj/machinery/holopad/ex_act(severity)
|
||||
/obj/machinery/hologram/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
@@ -102,38 +102,36 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/machinery/holopad/blob_act()
|
||||
/obj/machinery/hologram/blob_act()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/machinery/holopad/meteorhit()
|
||||
/obj/machinery/hologram/meteorhit()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/machinery/holopad/Del()
|
||||
/obj/machinery/hologram/Del()
|
||||
if(hologram)
|
||||
clear_holo()
|
||||
src:clear_holo()
|
||||
..()
|
||||
|
||||
/*
|
||||
Holographic project of everything else.
|
||||
|
||||
/mob/verb/hologram_test()
|
||||
set name = "Hologram Debug New"
|
||||
set category = "CURRENT DEBUG"
|
||||
|
||||
/obj/machinery/holoprojector/attack_hand()
|
||||
var/obj/overlay/hologram = new(loc)//Spawn a blank effect at the location.
|
||||
var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused.
|
||||
flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish.
|
||||
flat_icon.ChangeOpacity(0.5)//Make it half transparent.
|
||||
var/input = input("Select what icon state to use in effects.",,"")
|
||||
if(input)
|
||||
var/icon/alpha_mask = new('effects.dmi', "[input]")
|
||||
flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect.
|
||||
hologram.icon = flat_icon
|
||||
|
||||
/obj/machinery/holoprojector/create_holo(turf/T = loc, mob/living/M)
|
||||
hologram = new(T)//Spawn a blank effect at the location.
|
||||
//Here we don't want to actually change icon directly. We're looking to create an image.
|
||||
var/flat_image = getFlatIcon(M,2)//Get the flat icon facing south. Respect cache.
|
||||
|
||||
hologram.overlay += flat_image
|
||||
hologram.mouse_opacity = 0//So you can't click on it.
|
||||
hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
|
||||
hologram.sd_SetLuminosity(1)//To make it glowy.
|
||||
sd_SetLuminosity(1)//To make the pad glowy.
|
||||
icon_state = "holopad1"
|
||||
use_power = 2//Active power usage.
|
||||
return 1
|
||||
|
||||
/obj/machinery/holoprojector/clear_holo()
|
||||
world << "Your icon should appear now."
|
||||
return
|
||||
*/
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/mecha/combat/durand
|
||||
desc = "Combat exosuit."
|
||||
desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
|
||||
name = "Durand"
|
||||
icon_state = "durand"
|
||||
step_in = 4
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/mecha/combat/gygax
|
||||
desc = "Security exosuit."
|
||||
desc = "A lightweight, security exosuit. Popular among private and corporate security."
|
||||
name = "Gygax"
|
||||
icon_state = "gygax"
|
||||
step_in = 3
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
max_temperature = 3500
|
||||
infra_luminosity = 5
|
||||
operation_req_access = list(access_clown)
|
||||
wreckage = "/obj/decal/mecha_wreckage/honker"
|
||||
add_req_access = 0
|
||||
max_equip = 3
|
||||
var/squeak = 0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/mecha/combat/marauder
|
||||
desc = "Heavy-duty, combat exosuit."
|
||||
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations."
|
||||
name = "Marauder"
|
||||
icon_state = "marauder"
|
||||
step_in = 5
|
||||
@@ -20,7 +20,7 @@
|
||||
force = 45
|
||||
|
||||
/obj/mecha/combat/marauder/seraph
|
||||
desc = "Heavy-duty, command-type exosuit."
|
||||
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
||||
name = "Seraph"
|
||||
icon_state = "seraph"
|
||||
operation_req_access = list(access_cent_creed)
|
||||
|
||||
@@ -91,7 +91,6 @@
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/decal/mecha_wreckage/marauder
|
||||
name = "Marauder wreckage"
|
||||
icon_state = "marauder-broken"
|
||||
@@ -119,6 +118,26 @@
|
||||
parts -= part
|
||||
return
|
||||
|
||||
/obj/decal/mecha_wreckage/honker
|
||||
name = "Honker wreckage"
|
||||
icon_state = "honker-broken"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/list/parts = list(
|
||||
/obj/item/mecha_parts/chassis/honker,
|
||||
/obj/item/mecha_parts/part/honker_torso,
|
||||
/obj/item/mecha_parts/part/honker_head,
|
||||
/obj/item/mecha_parts/part/honker_left_arm,
|
||||
/obj/item/mecha_parts/part/honker_right_arm,
|
||||
/obj/item/mecha_parts/part/honker_left_leg,
|
||||
/obj/item/mecha_parts/part/honker_right_leg)
|
||||
for(var/i=0;i<2;i++)
|
||||
if(!isemptylist(parts) && prob(40))
|
||||
var/part = pick(parts)
|
||||
welder_salvage += part
|
||||
parts -= part
|
||||
return
|
||||
|
||||
/obj/decal/mecha_wreckage/durand
|
||||
name = "Durand wreckage"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/mecha/working/ripley
|
||||
desc = "Autonomous Power Loader Unit."
|
||||
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
|
||||
name = "APLU \"Ripley\""
|
||||
icon_state = "ripley"
|
||||
step_in = 6
|
||||
|
||||
@@ -498,8 +498,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
if("assassin")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/suit_jacket(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/swat(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/swat(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/black(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/wcoat(M), M.slot_wear_suit)
|
||||
@@ -563,6 +563,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
if("centcom commander")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom_commander(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/armor/bulletproof(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/swat(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/swat(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), M.slot_ears)
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
loc = loc
|
||||
holo_icon = getHologramIcon(icon('AI.dmi',"holo1"))
|
||||
|
||||
proc_holder_list = new()
|
||||
|
||||
@@ -34,6 +35,9 @@
|
||||
verbs += /mob/living/silicon/ai/proc/lockdown
|
||||
verbs += /mob/living/silicon/ai/proc/disablelockdown
|
||||
verbs += /mob/living/silicon/ai/proc/ai_statuschange
|
||||
//Hologram verb./N
|
||||
verbs += /mob/living/silicon/ai/proc/ai_hologram_change
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
if (!B)//If there is no player/brain inside.
|
||||
new/obj/AIcore/deactivated(loc)//New empty terminal.
|
||||
@@ -417,6 +421,44 @@
|
||||
|
||||
malf_picker.use(src)
|
||||
|
||||
//I am the icon meister. Bow fefore me.
|
||||
/mob/living/silicon/ai/proc/ai_hologram_change()
|
||||
set name = "Change Hologram"
|
||||
set desc = "Change the default hologram available to AI to something else."
|
||||
set category = "AI Commands"
|
||||
|
||||
var/input
|
||||
if(alert("Would you like to select a hologram based on a crew member or switch to unique avatar?",,"Crew Member","Unique")=="Crew Member")
|
||||
|
||||
var/personnel_list[] = list()
|
||||
|
||||
for(var/datum/data/record/t in data_core.locked)//Look in data core locked.
|
||||
personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["image"]//Pull names, rank, and image.
|
||||
|
||||
if(personnel_list.len)
|
||||
input = input("Select a crew member:") as null|anything in personnel_list
|
||||
var/icon/character_icon = personnel_list[input]
|
||||
if(character_icon)
|
||||
del(holo_icon)//Clear old icon so we're not storing it in memory.
|
||||
holo_icon = getHologramIcon(icon(character_icon))
|
||||
else
|
||||
alert("No suitable records found. Aborting.")
|
||||
|
||||
else
|
||||
var/icon_list[] = list(
|
||||
"default",
|
||||
"floating face"
|
||||
)
|
||||
input = input("Please select a hologram:") as null|anything in icon_list
|
||||
if(input)
|
||||
del(holo_icon)
|
||||
switch(input)
|
||||
if("default")
|
||||
holo_icon = getHologramIcon(icon('AI.dmi',"holo1"))
|
||||
if("floating face")
|
||||
holo_icon = getHologramIcon(icon('AI.dmi',"holo2"))
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
return//Whatever the case, return since you can't move anyway.
|
||||
|
||||
if(user.client)//To make AI holograms work. They will relay directions as long as they are centered on the object.
|
||||
var/obj/machinery/holopad/T = user.client.eye//Client eye centers on an object.
|
||||
var/obj/machinery/hologram/holopad/T = user.client.eye//Client eye centers on an object.
|
||||
if(istype(T)&&T.hologram&&T.master==user)//If there is a hologram and its master is the user.
|
||||
T.hologram.loc = get_step(T.hologram, direct)
|
||||
T.hologram.dir = direct
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
if (!message)
|
||||
return
|
||||
|
||||
var/obj/machinery/holopad/T = client.eye//Client eye centers on an object.
|
||||
var/obj/machinery/hologram/holopad/T = client.eye//Client eye centers on an object.
|
||||
if(istype(T)&&T.hologram&&T.master==src)//If there is a hologram and its master is the user.
|
||||
var/message_a = say_quote(message)
|
||||
|
||||
|
||||
@@ -268,6 +268,7 @@ mob/new_player
|
||||
proc/AttemptLateSpawn(rank, maxAllowed)
|
||||
if(IsJobAvailable(rank, maxAllowed))
|
||||
var/mob/living/carbon/human/character = create_character()
|
||||
var/icon/char_icon = getFlatIcon(character,0)//We're creating out own cache so it's not needed.
|
||||
if (character)
|
||||
character.Equip_Rank(rank, joined_late=1)
|
||||
|
||||
@@ -276,7 +277,7 @@ mob/new_player
|
||||
// if((t.fields["name"] == character.real_name) && (t.fields["rank"] == "Unassigned"))
|
||||
// t.fields["rank"] = rank
|
||||
if(character.mind.assigned_role != "Cyborg")
|
||||
ManifestLateSpawn(character)
|
||||
ManifestLateSpawn(character,char_icon)
|
||||
if(ticker)
|
||||
character.loc = pick(latejoin)
|
||||
AnnounceArrival(character, rank)
|
||||
@@ -300,7 +301,7 @@ mob/new_player
|
||||
if(character.mind.assigned_role != "Cyborg"&&character.mind.special_role != "MODE")
|
||||
announcer.say("[character.real_name], the [rank], has awoken from cryo sleep.")
|
||||
|
||||
proc/ManifestLateSpawn(var/mob/living/carbon/human/H) // Attempted fix to add late joiners to various databases -- TLE
|
||||
proc/ManifestLateSpawn(var/mob/living/carbon/human/H, icon/H_icon) // Attempted fix to add late joiners to various databases -- TLE
|
||||
// This is basically ripped wholesale from the normal code for adding people to the databases during a fresh round
|
||||
if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
|
||||
var/datum/data/record/G = new()
|
||||
@@ -354,6 +355,7 @@ mob/new_player
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
L.fields["image"] = H_icon//What the person looks like. Naked, in this case.
|
||||
//End locked reporting
|
||||
|
||||
data_core.general += G
|
||||
|
||||
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 184 KiB |
BIN
icons/mob/AI.dmi
Normal file
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
@@ -669,7 +669,7 @@
|
||||
"amS" = (/obj/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
"amT" = (/obj/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
"amU" = (/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/brig)
|
||||
"amV" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/holopad,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
"amV" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
"amW" = (/obj/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/brig)
|
||||
"amX" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple,/obj/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
"amY" = (/obj/machinery/door_timer{name = "Cell 5 Control"; pixel_x = 0; pixel_y = 30; id = "cell5"},/obj/machinery/camera{c_tag = "Brig Cells East"},/obj/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
|
||||
@@ -737,7 +737,7 @@
|
||||
"aoi" = (/obj/stool/chair{dir = 4; name = "Defense"},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/crew_quarters/courtroom)
|
||||
"aoj" = (/obj/table/woodentable,/turf/simulated/floor{icon_state = "neutral"; dir = 9},/area/crew_quarters/courtroom)
|
||||
"aok" = (/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom)
|
||||
"aol" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom)
|
||||
"aol" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom)
|
||||
"aom" = (/obj/table/woodentable,/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/courtroom)
|
||||
"aon" = (/obj/stool/chair{dir = 8; name = "Prosecution"},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/crew_quarters/courtroom)
|
||||
"aoo" = (/obj/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||
@@ -1977,7 +1977,7 @@
|
||||
"aMa" = (/obj/grille,/obj/window/reinforced,/obj/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||
"aMb" = (/obj/grille,/obj/window/reinforced{dir = 4},/obj/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||
"aMc" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
||||
"aMd" = (/obj/machinery/holopad,/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||
"aMd" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||
"aMe" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||
"aMf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||
"aMg" = (/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry)
|
||||
@@ -2210,7 +2210,7 @@
|
||||
"aQz" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/bridge)
|
||||
"aQA" = (/obj/stool/chair{dir = 1; name = "Security Station"},/turf/simulated/floor,/area/bridge)
|
||||
"aQB" = (/obj/item/device/radio/beacon,/turf/simulated/floor,/area/bridge)
|
||||
"aQC" = (/obj/machinery/holopad,/turf/simulated/floor,/area/bridge)
|
||||
"aQC" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/bridge)
|
||||
"aQD" = (/obj/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor,/area/bridge)
|
||||
"aQE" = (/obj/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/bridge)
|
||||
"aQF" = (/obj/stool/chair{dir = 1; name = "Medical Station"},/obj/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/bridge)
|
||||
@@ -2297,7 +2297,7 @@
|
||||
"aSi" = (/obj/stool/chair{dir = 4},/turf/simulated/floor,/area/library)
|
||||
"aSj" = (/obj/table/reinforced,/obj/item/weapon/dice/d20,/turf/simulated/floor{icon_state = "dark"},/area/library)
|
||||
"aSk" = (/obj/stool/chair{dir = 8},/turf/simulated/floor,/area/library)
|
||||
"aSl" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "dark"},/area/library)
|
||||
"aSl" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/library)
|
||||
"aSm" = (/obj/table/reinforced,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/library)
|
||||
"aSn" = (/obj/stool/chair{dir = 8},/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/library)
|
||||
"aSo" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "wood"},/area/library)
|
||||
@@ -2387,7 +2387,7 @@
|
||||
"aTU" = (/obj/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
||||
"aTV" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
||||
"aTW" = (/obj/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||
"aTX" = (/obj/machinery/holopad,/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||
"aTX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||
"aTY" = (/obj/machinery/camera{c_tag = "Escape Arm Airlocks"; dir = 8; network = "SS13"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit)
|
||||
"aTZ" = (/obj/grille,/obj/window/reinforced{dir = 4},/obj/window/reinforced{dir = 8},/obj/machinery/status_display,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||
"aUa" = (/obj/lattice,/obj/lattice,/turf/space,/area)
|
||||
@@ -2614,7 +2614,7 @@
|
||||
"aYn" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/crew_quarters/captain)
|
||||
"aYo" = (/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYp" = (/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYq" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYq" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYr" = (/mob/living/carbon/monkey{name = "Pun Pun"},/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYs" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{dir = 6; icon_state = "carpetside"},/area/crew_quarters/captain)
|
||||
"aYt" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/crew_quarters/captain)
|
||||
@@ -3251,7 +3251,7 @@
|
||||
"bkA" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/teleporter)
|
||||
"bkB" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
|
||||
"bkC" = (/obj/table,/obj/item/weapon/aiModule/reset,/obj/machinery/camera{c_tag = "AI Upload Chamber"; dir = 4; network = "SS13"},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
|
||||
"bkD" = (/obj/machinery/holopad,/turf/simulated/floor,/area/turret_protected/ai_upload)
|
||||
"bkD" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/turret_protected/ai_upload)
|
||||
"bkE" = (/obj/table,/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
|
||||
"bkF" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/simulated/wall/r_wall,/area/security/nuke_storage)
|
||||
"bkG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/nuke_storage)
|
||||
@@ -3421,7 +3421,7 @@
|
||||
"bnO" = (/obj/disposalpipe/segment,/turf/simulated/wall,/area/crew_quarters/kitchen)
|
||||
"bnP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/kitchen)
|
||||
"bnQ" = (/obj/machinery/camera{c_tag = "Bar Center"; dir = 4; network = "SS13"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bnR" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bnR" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bnS" = (/obj/stool{pixel_y = 5},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bnT" = (/obj/machinery/vending/cigarette{pixel_x = -3; pixel_y = 2},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bnU" = (/obj/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
|
||||
@@ -4544,7 +4544,7 @@
|
||||
"bJt" = (/obj/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bJu" = (/obj/table,/obj/machinery/light,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bJv" = (/obj/table,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bJw" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bJw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bJx" = (/obj/machinery/door/window{dir = 8; icon = 'windoor.dmi'; name = "Server Room"; req_access_txt = "30"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
|
||||
"bJy" = (/obj/machinery/power/apc{dir = 2; name = "Server APC"; pixel_y = -25},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
|
||||
"bJz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window{dir = 8; icon = 'windoor.dmi'; name = "Server Room"; req_access_txt = "30"},/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'windoor.dmi'; icon_state = "right"; name = "Server Room"; req_access_txt = "30"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
|
||||
@@ -5098,7 +5098,7 @@
|
||||
"bUb" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/wall,/area/maintenance/aft)
|
||||
"bUc" = (/obj/machinery/camera{c_tag = "Aft Primary Hallway South"; dir = 4; network = "SS13"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
|
||||
"bUd" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
|
||||
"bUe" = (/obj/machinery/holopad,/turf/simulated/floor,/area/atmos)
|
||||
"bUe" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/atmos)
|
||||
"bUf" = (/obj/grille,/obj/window/reinforced{dir = 4},/obj/window/reinforced,/obj/window/reinforced{dir = 1},/obj/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos)
|
||||
"bUg" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 5; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
|
||||
"bUh" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
|
||||
@@ -5122,7 +5122,7 @@
|
||||
"bUz" = (/obj/table,/obj/item/weapon/circular_saw,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"bUA" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"bUB" = (/obj/landmark/start{name = "Xenobiologist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"bUC" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"bUC" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"bUD" = (/obj/item/weapon/paper{name = "Work in Progress"},/obj/machinery/door/window{dir = 8; icon = 'windoor.dmi'; name = "Containment Exterior"; req_access_txt = "55"},/obj/machinery/light,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
|
||||
"bUE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "containment"; name = "Xenobiology Blast Doors"; opacity = 0},/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'windoor.dmi'; icon_state = "right"; name = "Containment Interior"; req_access_txt = "55"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
|
||||
"bUF" = (/obj/landmark{name = "xeno_spawn"; pixel_x = -1},/mob/living/carbon/metroid,/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
|
||||
@@ -6827,7 +6827,7 @@
|
||||
"cBo" = (/obj/machinery/turret,/obj/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
"cBp" = (/obj/machinery/turret,/obj/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
"cBq" = (/obj/machinery/ai_slipper,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
"cBr" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
"cBr" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
"cBs" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area)
|
||||
"cBt" = (/obj/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/wall,/area/turret_protected/aisat_interior)
|
||||
"cBu" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/light,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/aisat_interior)
|
||||
|
||||