diff --git a/code/WorkInProgress/Cameras.dm b/code/WorkInProgress/Cameras.dm index 30eff37eabe..93ec9fa418c 100644 --- a/code/WorkInProgress/Cameras.dm +++ b/code/WorkInProgress/Cameras.dm @@ -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 diff --git a/code/defines/mob/living/silicon/ai.dm b/code/defines/mob/living/silicon/ai.dm index 1185ba63d99..92a7c97856c 100644 --- a/code/defines/mob/living/silicon/ai.dm +++ b/code/defines/mob/living/silicon/ai.dm @@ -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 \ No newline at end of file diff --git a/code/defines/obj/clothing/shoes.dm b/code/defines/obj/clothing/shoes.dm index 3be0687d5d2..4e7aaa4ca1c 100644 --- a/code/defines/obj/clothing/shoes.dm +++ b/code/defines/obj/clothing/shoes.dm @@ -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" diff --git a/code/defines/obj/clothing/suit.dm b/code/defines/obj/clothing/suit.dm index 66363fe6774..25012b98b5e 100644 --- a/code/defines/obj/clothing/suit.dm +++ b/code/defines/obj/clothing/suit.dm @@ -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. diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm index fe73135cc22..ab4c3ed252b 100644 --- a/code/defines/obj/computer.dm +++ b/code/defines/obj/computer.dm @@ -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 diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index cb67320ee16..4fa0a665a04 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -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 diff --git a/code/defines/procs/icon_procs.dm b/code/defines/procs/icon_procs.dm index 00b5e9a4fb2..3069645c828 100644 --- a/code/defines/procs/icon_procs.dm +++ b/code/defines/procs/icon_procs.dm @@ -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. \ No newline at end of file + 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 \ No newline at end of file diff --git a/code/game/gamemodes/events/ninja_abilities.dm b/code/game/gamemodes/events/ninja_abilities.dm index 0ea4bf3448c..a41d9e5c486 100644 --- a/code/game/gamemodes/events/ninja_abilities.dm +++ b/code/game/gamemodes/events/ninja_abilities.dm @@ -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) diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index d179e9f2702..f8175f98c01 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -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 SpiderOS, [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 diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 101fa269593..52749156d95 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -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() diff --git a/code/game/machinery/computer/AIcore.dm b/code/game/machinery/computer/AIcore.dm index ed0f13110af..6747055111d 100644 --- a/code/game/machinery/computer/AIcore.dm +++ b/code/game/machinery/computer/AIcore.dm @@ -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. diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index bff8bc932e3..aeb66c5c3df 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -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 diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm index a48c6839474..5539a616f49 100644 --- a/code/game/machinery/computer/hologram.dm +++ b/code/game/machinery/computer/hologram.dm @@ -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("[]

Clear", src.temp, src) else - dat = text("Hologram Status:
\nPower: []
\nHologram Control:
\nColor Luminosity: []/220 \[Reset\]
\nLighten: 1 10
\nDarken: 1 10
\n
\nHair Color: ([],[],[]) \[Reset\]
\nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
", 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("Hologram Status:
\nPower: []
\nHologram Control:
\nColor Luminosity: []/220 \[Reset\]
\nLighten: 1 10
\nDarken: 1 10
\n
\nHair Color: ([],[],[]) \[Reset\]
\nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
", 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 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index be7dca256b4..0b1088878d6 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -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 */ \ No newline at end of file diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 8e375c03d4e..4944d3209ab 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -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 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 4702aac66eb..a37af9c76a8 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -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 diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index f79ae49cc1b..a42b2628627 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -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 diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 3faa182c279..24f9bb2f653 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -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) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index cd41d524dcb..4e3f2ce20e1 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -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" diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 6774306471d..bef639e5838 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -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 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 25f5f3ff9e1..3a56c98fadb 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -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) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 52a7de461bd..a269296bcea 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -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 + diff --git a/code/modules/mob/living/silicon/ai/move.dm b/code/modules/mob/living/silicon/ai/move.dm index e15e470ca09..c9ecb3fe792 100644 --- a/code/modules/mob/living/silicon/ai/move.dm +++ b/code/modules/mob/living/silicon/ai/move.dm @@ -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 diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 135b834152c..dac3fc0413d 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -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) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1026c51602d..a5fe5a1b991 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -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 diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 859b437c54e..a6c994d7d96 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi new file mode 100644 index 00000000000..ad793eb68c6 Binary files /dev/null and b/icons/mob/AI.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 50147e00b49..d68dcfbe926 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f903b83316e..ae1e71a08c5 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 81c5ee22555..ba5a1d92988 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index ffc554e28e3..3cc44c6defc 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index a2b941b8d71..af774d69079 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index eb05058426b..f3e5c2cc0ad 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/AIcore.dmi b/icons/obj/AIcore.dmi deleted file mode 100644 index 15e0ffc1efa..00000000000 Binary files a/icons/obj/AIcore.dmi and /dev/null differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 3e8e9a12df5..c55784f176c 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index a738ec4b01b..3964ba50269 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index fe4a90283cb..fb7514eae01 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/maps/tgstation.2.0.7.dmm b/maps/tgstation.2.0.7.dmm index 10693db7ca1..e722a67eafc 100644 --- a/maps/tgstation.2.0.7.dmm +++ b/maps/tgstation.2.0.7.dmm @@ -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)