From df837ff8b3431b0dcfd97df475f006b2a697ccb9 Mon Sep 17 00:00:00 2001 From: Tennessee116 Date: Thu, 10 Mar 2022 15:54:10 -0600 Subject: [PATCH 1/2] Holopads have better examine() and are now constructable --- baystation12.dme | 2 + .../machine_construction/floor.dm | 11 +++++ code/game/machinery/constructable_frame.dm | 33 ++++++++++--- code/game/machinery/hologram.dm | 46 ++++++++++-------- .../circuitboards/machinery/holopad.dm | 27 ++++++++++ code/modules/materials/material_recipes.dm | 1 + code/modules/materials/recipes_furniture.dm | 7 +++ .../research/designs/designs_circuits.dm | 18 ++++++- icons/obj/machines/constructable_frame.dmi | Bin 0 -> 5820 bytes icons/obj/stock_parts.dmi | Bin 15377 -> 4083 bytes 10 files changed, 117 insertions(+), 28 deletions(-) create mode 100644 code/game/machinery/_machines_base/machine_construction/floor.dm create mode 100644 code/game/objects/items/weapons/circuitboards/machinery/holopad.dm create mode 100644 icons/obj/machines/constructable_frame.dmi diff --git a/baystation12.dme b/baystation12.dme index eedc9319906..5b4c167a2a5 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -763,6 +763,7 @@ #include "code\game\machinery\_machines_base\machine_construction\_construction.dm" #include "code\game\machinery\_machines_base\machine_construction\computer.dm" #include "code\game\machinery\_machines_base\machine_construction\default.dm" +#include "code\game\machinery\_machines_base\machine_construction\floor.dm" #include "code\game\machinery\_machines_base\machine_construction\frame.dm" #include "code\game\machinery\_machines_base\machine_construction\item_chassis.dm" #include "code\game\machinery\_machines_base\machine_construction\tcomms.dm" @@ -1056,6 +1057,7 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\engineering_circuits.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\holopad.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\household.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\medical.dm" diff --git a/code/game/machinery/_machines_base/machine_construction/floor.dm b/code/game/machinery/_machines_base/machine_construction/floor.dm new file mode 100644 index 00000000000..66e5e7e2c08 --- /dev/null +++ b/code/game/machinery/_machines_base/machine_construction/floor.dm @@ -0,0 +1,11 @@ +//Same as default but with but with floor boards (get it?) +/decl/machine_construction/default/panel_closed/floor + down_state = /decl/machine_construction/default/panel_open/floor + needs_board = "floor" + +/decl/machine_construction/default/panel_closed/floor/no_deconstruct/attackby(obj/item/I, mob/user, obj/machinery/machine) + return FALSE + +/decl/machine_construction/default/panel_open/floor + up_state = /decl/machine_construction/default/panel_closed/floor + needs_board = "floor" \ No newline at end of file diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 7338d6273aa..fa5cd0ab6dd 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,10 +1,8 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -//Circuit boards are in /code/game/objects/items/weapons/stock_parts/circuitboards/machinery/ - -/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. +//Circuitboards and other stuff are inserted into these frames to make machines +/obj/machinery/constructable_frame name = "machine frame" - icon = 'icons/obj/stock_parts.dmi' + desc = "A rudimentary, hefty machine frame. Utilitarian!" + icon = 'icons/obj/machines/constructable_frame.dmi' icon_state = "box_0" density = TRUE anchored = FALSE @@ -37,5 +35,28 @@ icon_state = "box_0" /obj/machinery/constructable_frame/machine_frame/deconstruct + anchored = TRUE + construct_state = /decl/machine_construction/frame/awaiting_circuit + +//For floors! +/obj/machinery/constructable_frame/machine_frame/floor + name = "floor machine frame" + desc = "A sleek machine frame that mounts to the floor. Innovative!" + icon_state = "floor_0" + density = FALSE + expected_machine_type = "floor" + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE + +/obj/machinery/constructable_frame/machine_frame/floor/on_update_icon() + switch(construct_state && construct_state.type) + if(/decl/machine_construction/frame/awaiting_circuit) + icon_state = "floor_1" + if(/decl/machine_construction/frame/awaiting_parts) + icon_state = "floor_2" + else + icon_state = "floor_0" + + +/obj/machinery/constructable_frame/machine_frame/floor/deconstruct anchored = TRUE construct_state = /decl/machine_construction/frame/awaiting_circuit \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 400a7ca748d..5e4f215328c 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -38,6 +38,10 @@ var/const/HOLOPAD_MODE = RANGE_BASED layer = ABOVE_TILE_LAYER + construct_state = /decl/machine_construction/default/panel_closed/floor + frame_type = /obj/machinery/constructable_frame/machine_frame/floor/deconstruct + uncreated_component_parts = null + var/power_per_hologram = 500 //per usage per hologram idle_power_usage = 5 @@ -56,9 +60,9 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/allow_ai = TRUE -/obj/machinery/hologram/holopad/New() - ..() - desc = "It's a floor-mounted device for projecting holographic images. Its ID is '[loc.loc]'" +/obj/machinery/hologram/holopad/examine(user) + . = ..() + to_chat(user, SPAN_INFO("Its ID is [loc.loc].")) //God I fucking hate this loc.loc shit ~10sc /obj/machinery/hologram/holopad/interface_interact(var/mob/living/carbon/human/user) //Carn: Hologram requests. if(!CanInteract(user, DefaultTopicState())) @@ -88,16 +92,16 @@ var/const/HOLOPAD_MODE = RANGE_BASED if("AI") if(last_request + 200 < world.time) //don't spam the AI with requests you jerk! last_request = world.time - to_chat(user, "You request an AI's presence.") + to_chat(user, SPAN_NOTICE("You request an AI's presence.")) var/area/area = get_area(src) for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list_) if(!AI.client) continue - to_chat(AI, "Your presence is requested at \the [area].") + to_chat(AI, SPAN_INFO("Your presence is requested at \the [area].")) else - to_chat(user, "A request for AI presence was already sent recently.") + to_chat(user, SPAN_NOTICE("A request for AI presence was already sent recently.")) if("Holocomms") if(user.loc != src.loc) - to_chat(user, "Please step onto the holopad.") + to_chat(user, SPAN_INFO("Please step onto the holopad.")) return if(last_request + 200 < world.time) //don't spam other people with requests either, you jerk! last_request = world.time @@ -115,15 +119,15 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/temppad = input(user, "Which holopad would you like to contact?", "holopad list") as null|anything in holopadlist targetpad = holopadlist["[temppad]"] if(targetpad==src) - to_chat(user, "Using such sophisticated technology, just to talk to yourself seems a bit silly.") + to_chat(user, SPAN_INFO("Using such sophisticated technology, just to talk to yourself seems a bit silly.")) return if(targetpad && targetpad.caller_id) - to_chat(user, "The pad flashes a busy sign. Maybe you should try again later..") + to_chat(user, SPAN_INFO("The pad flashes a busy sign. Maybe you should try again later.")) return if(targetpad) make_call(targetpad, user) else - to_chat(user, "A request for holographic communication was already sent recently.") + to_chat(user, SPAN_NOTICE("A request for holographic communication was already sent recently.")) /obj/machinery/hologram/holopad/proc/make_call(var/obj/machinery/hologram/holopad/targetpad, var/mob/living/carbon/user) @@ -134,7 +138,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED playsound(targetpad.loc, 'sound/machines/chime.ogg', 25, 5) targetpad.icon_state = "[targetpad.base_icon]1" targetpad.audible_message("\The [src] announces, \"Incoming communications request from [targetpad.sourcepad.loc.loc].\"") - to_chat(user, "Trying to establish a connection to the holopad in [targetpad.loc.loc]... Please await confirmation from recipient.") + to_chat(user, SPAN_NOTICE("Trying to establish a connection to the holopad in [targetpad.loc.loc]... Please await confirmation from recipient.")) /obj/machinery/hologram/holopad/proc/take_call(mob/living/carbon/user) @@ -229,36 +233,36 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/get_hear_message(name_used, text, verb, datum/language/speaking, prefix = "") if(speaking) - return "Holopad received, [name_used][prefix] [speaking.format_message(text, verb)]" - return "Holopad received, [name_used][prefix] [verb], \"[text]\"" + return SPAN_ITALIC("Holopad received, [name_used][prefix] [speaking.format_message(text, verb)]") + return SPAN_ITALIC("Holopad received, [name_used][prefix] [verb], \"[text]\"") /obj/machinery/hologram/holopad/see_emote(mob/living/M, text) if(M) for(var/mob/living/silicon/ai/master in masters) //var/name_used = M.GetVoice() - var/rendered = "Holopad received, [text]" + var/rendered = SPAN_ITALIC("Holopad received, [text]") //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. master.show_message(rendered, 2) for(var/mob/living/carbon/master in masters) //var/name_used = M.GetVoice() - var/rendered = "Holopad received, [text]" + var/rendered = SPAN_ITALIC("Holopad received, [text]") //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. master.show_message(rendered, 2) if(targetpad) - targetpad.visible_message("[text]") + targetpad.visible_message(SPAN_ITALIC("[text]")) /obj/machinery/hologram/holopad/show_message(msg, type, alt, alt_type) for(var/mob/living/silicon/ai/master in masters) - var/rendered = "The holographic image of [msg]" + var/rendered = SPAN_ITALIC("The holographic image of [msg]") master.show_message(rendered, type) if(findtext(msg, "Holopad received,")) return for(var/mob/living/carbon/master in masters) - var/rendered = "The holographic image of [msg]" + var/rendered = SPAN_ITALIC("The holographic image of [msg]") master.show_message(rendered, type) if(targetpad) for(var/mob/living/carbon/master in view(targetpad)) - var/rendered = "The holographic image of [msg]" + var/rendered = SPAN_ITALIC("The holographic image of [msg]") master.show_message(rendered, type) /obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, mob/living/carbon/caller_id, turf/T = loc) @@ -322,7 +326,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ use_power_oneoff(power_per_hologram) if(last_request + 200 < world.time&&incoming_connection==1) if(sourcepad) - sourcepad.audible_message("The holopad connection timed out") + sourcepad.audible_message(SPAN_ITALIC("The holopad connection timed out")) incoming_connection = 0 end_call() if (caller_id&&sourcepad) @@ -421,7 +425,7 @@ Holographic project of everything else. /obj/machinery/hologram/holopad/longrange name = "long range holopad" - desc = "It's a floor-mounted device for projecting holographic images. This one utilizes bluespace transmitter to communicate with far away locations." + desc = "It's a floor-mounted device for projecting holographic images. This one utilizes an advanced bluespace transmitter to communicate with distant holopads." icon_state = "holopad-Y0" power_per_hologram = 1000 //per usage per hologram holopadType = HOLOPAD_LONG_RANGE diff --git a/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm b/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm new file mode 100644 index 00000000000..ed7819b5278 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm @@ -0,0 +1,27 @@ +//Holopads are now deconstructable and reconstructable and constructable, cry about it +/obj/item/weapon/stock_parts/circuitboard/holopad + name = T_BOARD("holopad") + build_path = /obj/machinery/hologram/holopad + board_type = "floor" + + origin_tech = list( + TECH_DATA = 2, + TECH_MAGNET = 2 + ) + + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/keyboard = 1 + ) + +//Bluespace because why not +/obj/item/weapon/stock_parts/circuitboard/holopad/longrange + name = T_BOARD("long range holopad") + build_path = /obj/machinery/hologram/holopad/longrange + + origin_tech = list( + TECH_BLUESPACE = 2, + TECH_DATA = 2, + TECH_MAGNET = 2 + ) \ No newline at end of file diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 08a66f3d560..8ccfb9b3785 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -78,6 +78,7 @@ . += new/datum/stack_recipe/furniture/computerframe(src) . += new/datum/stack_recipe/furniture/girder(src) . += new/datum/stack_recipe/furniture/machine(src) + . += new/datum/stack_recipe/furniture/floor_machine(src) . += new/datum/stack_recipe/furniture/turret(src) . += new/datum/stack_recipe_list("airlock assemblies", create_recipe_list(/datum/stack_recipe/furniture/door_assembly)) . += new/datum/stack_recipe/grenade(src) diff --git a/code/modules/materials/recipes_furniture.dm b/code/modules/materials/recipes_furniture.dm index f6991dfbaf1..fcd986cd94a 100644 --- a/code/modules/materials/recipes_furniture.dm +++ b/code/modules/materials/recipes_furniture.dm @@ -204,6 +204,13 @@ ARMCHAIR(yellow) time = 25 send_material_data = 0 +/datum/stack_recipe/furniture/floor_machine + title = "floor machine frame" + result_type = /obj/machinery/constructable_frame/machine_frame/floor + req_amount = 3 + time = 30 + send_material_data = 0 + /datum/stack_recipe/furniture/turret title = "turret frame" result_type = /obj/machinery/porta_turret_construct diff --git a/code/modules/research/designs/designs_circuits.dm b/code/modules/research/designs/designs_circuits.dm index ccafb40c714..b3df8300962 100644 --- a/code/modules/research/designs/designs_circuits.dm +++ b/code/modules/research/designs/designs_circuits.dm @@ -857,4 +857,20 @@ id = "pc_motherboard" req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) build_path = /obj/item/weapon/stock_parts/circuitboard/modular_computer - sort_string = "XAAAE" \ No newline at end of file + sort_string = "XAAAE" + +/datum/design/circuit/holopad + name = "holopad" + id = "holopad" + req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2) + build_path = /obj/item/weapon/stock_parts/circuitboard/holopad + sort_string = "XAAAF" + +/datum/design/circuit/holopad_longrange + name = "long range holopad" + id = "holopad" + req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2) + build_path = /obj/item/weapon/stock_parts/circuitboard/holopad/longrange + sort_string = "XAAAG" + + diff --git a/icons/obj/machines/constructable_frame.dmi b/icons/obj/machines/constructable_frame.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6eb1cb2f02c076221a93a73c875089cbcc4c9c27 GIT binary patch literal 5820 zcmX9?1y~f_*B?qsS{i8(X;iuv=>`Gm7HJj)B$ntgALnc*S%iAR(pm(P8j=zXEfbQmu^NWHSgK9d>B0G~DCgvAFU~CQq(e zDAx0c;IX{qZ>s=6J)^FqVCbKBlpn13$Pqfwxvt4$NT(`+8?hf}|@v%c#0oO+hT$?k7l5o*DO&`M8UkMDrZDfUS@YUdY*+y~xNTU|dUsXkeiW3a zGa&~mf61PUYKmv<2$8dX>Az&<3Xrf0IW_$%CI-J+tGC6T>09oZFo?1^jo(RTObL4Z zVLcA#zkIkqnm|7?p3Iz;4#1?nlE5YtBbMo>`6MB@Dm7QIh+uO~( zOsvIiB0ymlF{b=28>c5qbUc=&*q=0G`Q$#}Kb?He>>ek3LEUEAw*!`LdCjfmJoX zMP~@IVwZz_Ss|9mg5pEYR6)k}M#3F*8D4AX9=!QSy3)Orhu#FUtSFLPR9=fD{GVZ{ zl(h7hZ3Wi{Bn-G=H|{e=v?uC2A`_k(x6mk1@P?}6FkV;21WX~a!lGO+v$F!gVr64f zFxVOy8A<4ETlP7Axfpk8JEP@pQl+RoMX=*bXmq1Vbb>ada98~)&rd2|yiS@3K3q<8GE{GmD z{05PG?-4JIS3xPuY{08L)G;B5w#$osjOEe=x&Eg=62_!L&02+jX~ufR$!X&BxpQSd z$#d~YRtBrgQOo8DdwW}31)a_q!M#s7?CoNVm`e3!2?6(5V1_&&=o!f~X+QeLl-uq7 z*7_;dFY?1BVvH<@2^1bxn{9^49UWYVBk=N9?pf#Yg@s?c;q8z3vdr{qFsZCorqBcq zj!y6b5G7}HM6W&4@*e#9l^uO{MwKHdK-qBGq(yRQ4MEVV`Oe_+Tf!ee{M`FVQeziC z;z-6JG6k(8k#}fH;Yy3-3ger^D=g<~6+)%pUeWFC;YoK9T#{hIRa67B2CCMFTl_}-^W=$L+{`$QYu-AYaa16v zj}}c9A8{XGR)b@sR8cZ^M0RwBu3A|=kC=KYOHw@NlA%`_ml@gqRrzZ>h{!@C%1lOz zI75Z?)Jy-&yborH5|YU8;ksGwDQ{#@j_-2%r>>XqlVM<%J-i2yqX-H7%K>a^Co?Qn zRk>re^J)AX7%5){V_iJOl)(XG^%pa-lFXaLQdd|N7Z-)fN`|4OFV;Ril@f6-Uyt)t zXbi@=5yBdGP~2CfcH(xyTO_8Zm{-LY{V-E}Z;HjB0GMlPus7Y?I;NV$nh}5fCTMe6 zgEFc^@XtyNk6OkALo@);>!^|kj}(u+n0j+fOf$ zCET04pB{2Bs0{=!^gV5oI7*|ab33#5~e+k<=dVhCr-%wv6m|eegG$x%tDqcGJ z(KN75CMood)Ey(H3BcO^VuL?w2iy=g?Mh(^%eu|t7{^I3cR`sJTlp4~n*jbr?KM*EMry2@x;X_7N5fKPzXr`W$nm+NMAVZ>VWCDEGsJPAOG zpN{8|hliNu&2lKB0Cv8Y5FQ7!AsvF5Iy!;cq#34#-u`R^fQ?i7<3V~)6sZ@*(Zhe<>vx-5coD zwUyYLtSOf$!+CgoQ9W|qd7zCBy1m((dYtm7#g3oByf1ECzVfqsvw-I`1c7};yp`%i z<#xL_wI*Kxtqm4^Wgmb>GlzERAuhKh8W$78j)O}5=|XWCr!aaJ%O>VdSV|{VYDHEs zpeZ%{wQDh61F~c zXnJ~j4$3(?eQ)Z&VfGu&zKgLr>03MKC5RO?C13FF`voQ-C%8_xdj_$Ys2hSptK=f_ zh#BFsP&tQj%-q-Gzk}B0CeP#yRx<6vx7bFHFCl~0FPaE`uKc`5tfK9{>0hW^1b6>8 zpZpZLmE{%T{o``%iHYnc^@rkB4w=z#OJUX~SXWpaTquj1>_aHrHyUiSGNg;A#leFP zLW#1df)ZRob$EC`7VCBJC-gBGb+bd^n8yF}w!$3r)+6I2YaE7d+1y7e7^BLys2gB|wU9dO+;|n;5H)}kQm{jt>b=Ty;_@F_ zGD&pM1f#L-dhRjNDBeMVkVSf4oEY+4#JN?x`sMCW<&%d>U<*8^g<_4MuQ_YNivROb zK`6YE-)4(f>lDg@*lkbJuCZi5-SiMb0Zfn{VxxmhP0!mpiWkm9YhZs1gqF$OBmO@N zh{f-bI60^r7)FC!(zY4UNTlOdy`vo1i6G=03Q4kUsU3iF* zS%scH3s_T^_(N(Q*G;MyYpqSt9Yjn zh;DGNau0IW3Kq z@oF?*y54qiadF*KBBV+wia8bkU=~ceUs4Ob+9w#-<^Sh6eT}u?r~e0+!rI5@1!S12 z1V4sNF$Pv#tf)WldoYXdpvd>qy&wfZzTb3wZL#70)DZjlF_n};A8qAH#^ma1iuWEI z=At-UMsXPXmR)LocM6ccb52avG%(Q!&xqsWH&d4{YISP}ulz^~X>jhI z7yeq$qMLV{0uX)R^b^!h=<3!f?!%>dlhQ#{zN4!M{N2;skfSXYyP%y{Ko>G0(i7a4 zIDCoY>HSKl<|wx0!Nad)S+WrUJ5&nzA~E$>#BV;|t=QG6?GAOG?BMb%yX-Sr1O*8l zw+~1YQ&6#5vEDiAJmKIn;^|70Ng#G%9+%gl8^JN-&kQSK+e7x^wb@R`joa1PV9b?d zjw)c5ueJ^zMh{xZ1OK%BD7>32(vhhtWIbbV6Fc=27L_iVmbCf@(KeGj4Cc7g{^)Cc zI2r}H0a3=qC#|3Q&&x|@#BeOvNW|SyX zu@bf6uAN%xqW;VUVS~s$gRt50lCo2KudiOP z0j%Cgg|dL%C~0r0Y;9Gdw)3!UWW9n6@$Qe0uVb;|p*o8=msmSJt`lIc2uW`#dU+J# z^YOSZ5`&~t0Pyi0xpxy&wqtg89Aqk1O(4HF#(wj+bSaD-^nN1DZ*jZsw>eL+t|ddN zKnE9Uvz;8aXWuYCZ{qXbsx-5S;Z9wBV0=N685nnN*qGcW6G=ILS*(*ga<{=-^hBxX ze9U;k^Ow4;+cM}%los}SsIRN8;dn*}XCVgK&5ggo)vGRCf5kPnEqa1&kyXYVl2)R2g6`DjY14xp9(cp7tE+Nu<_ZGrSY zHIan~HZieuFUh=+;2sxy>yVbH`_E^Nt3NjW;Db=o0cDz~$Fs@jlYo;s0S1?tf_wtx zOA$M^%>%ZlonVE9ykvX|i30O0is=P#rI>V4SNwR@h4a}Xj0)B76Uv|kktJ(D8Nu6 z`%(M3Yo~9oSm1Xj#E>5!c{Ac>j+suG_0U>yEg;%87#^3ioSK4Tv?e zgD|lAFx-fW2)6>0Bw?+H{e7|Sd?7A5pf;I#go4e0s-%1=f)`ivZuSWjbQ_LSVf8&O z`Qynsq+&&LE(G#c_WfH@#T6(HUAFu~65T1>hu)w?W^YWuW{Q7=v zl>w5S(PYd|{UC!lz5Cp!08S%2bR>sasHD6e)CtF(#J;a=)0M;$~P8o7J4b_U7-pL(G~UA=qQY2IPkF^+#DK-gFn08 zrF%Wp|BEqH-}`R#=cfu2uSD69@4Mtp1wq7w99s)$$cl7b`8f^z2BkT27>m82f08}* zi!MDB7sLV1d}%!74uDpt%gG%Rm2Fpf`xfkeAV0;P!y|DdM#^J~)_X z011>lXfd-cm+}z4Iu|=fjyb!pd7#OB8kgVVGmiKQbllAPt8#8WPIu!giAL(N@pXAC z#;hOw6rpP>WX6OHca*?>G}Hb9o?AISxH3O8nT*k&1nrUeI&>)~^txyE!-qKUz29C{ zt@Qi!&i>PIPIt0eoF4_x;9 z$*Pm4`a*cpk8pGj|8&j8btfCY5?*(b0{V@a=yjI!G9t^qkEJ7NfMu0FpE7lBT{)F) zmTqJ7T^w@oXz4uWD6hM6Qn2eJ3im&Ax_Pl&*361T1;hD2tlNGV)5H-cf_3doZF*wXPdF@ zNWCs9SV?FbC}e}Dw~7$3=`M1_;LNtfdMRh^>QVOYw0A|$9aj{V6)N#?0o`)pcg3LMlel(C735I)gmwll8tVWyAEeqPY` z>tn1xYX9wM(5p1^c;l;Wk|gLEagu59LwQ{YCE;rJZLw(V`~_w=_PRMM_xHQ@FrwA; z*ke9QM6)i=LG0W9utp6ZVc{&;YXpt?HZH4NnMW>!s~V#U!pBsbI!TXbMAfa`J8i}b8oz*xe+&qFb4pD`{D%yYXD&T zCJY=v>?^NA2O9w3ww9(gh71NnSQvr;a0ftGc=9p;lK}Mg_EuF@y#e6)^XJ0CZ|HQo z6#$8eiBu}pN<#~0XbjcVK&h!vTpZ-*2j%5KckVzD5&AN6=IYw{`T3cdnMp}WBofKb z&(9VB=(6P9yLS^363Aq-HUL>!Sr?Vn&YwT8t*s5Yt3uX-qobouO-*<_9)xx3%gSF= zQG<3saB#5d{#|3nKtSF1@82UMBfY)7Jv=-lAy5Qm2L%OPyLOF0AlTa4f(*#VC)Cc4 zU~X!wk1~=GYKXQ!B_ji6 z00k-C+qZAO@B+$m2D!Pp6##nj_^-rU0TCu(%g87J04&W)#aF8FL#L9o&RME_+t8=p ziRs&E_jB`~KS3gUvDlBZ3mD87=hcPv!9@o$~Hh)~uk?70=RQD<4H@QRmDRc)JXU?42hfPjSPEb%# zQc}{w+V+y2gPju&OK?$EJ)@zeebLNpMenX$&be|-|adDCdN^9PS> zdS1zcswD+nlV1w8lqbm?-@8b>mw5Z#v-MkFC4^GpXyaPBqcC-kC|GFWbY-7S8nTrJ^H-r&( zz3nJ^Dp&KuM6HTYI6RLnQ?lH$9?3c4fLD^>s1~Sf{4Q~lM?}~u-)FK88=?y~r(1X?4x{hAbmK7QKCDu}KX@8XLW=F5kvKQM`B7!Of=C zZJNjTJBx4m_>}u+Y>?@V!Lc9h9%Ra^iP-B?fhv zgNox$^^qe!RpXJZ$M9uilbvUowF?Ee?6&GtKYysR7bsG^9NhIStjP|c*yuel)D$qj zJ6KM;fCCZXgaSG6Tq2XJF4taBTT!3P`Z< zr>xHPH2EK;uE=URCMh|tEo5o?6SD}}e}BMhIig#D(NV8o&@`0ZbKJO)Hl%Hh z+oc)qtvFed*UMT($)n}@4pG0BSeL_4J-JxtOOLnaF%i3m?Z#f`qJPe(pfA6v)n9D? zWK92X*>9jN^Lcje_O{3ismHJ~#dT@lcM1RC_OCRdIJG!rQk|==H2;N{TQ|nB$<@pJ z?I7nob$K1HYYX+4$Y}{!>RZ=m-KD5JSj$DZtW+}(F-nB|==U$2M9>UPEu_fDVaFXP zzyL0AY~=MIsL&ynp>QK<2T|FS7zewau~7YAqQkl%2~GwTZ%kCFqb5%PpH4>lyhQvC2yb*t&o*z})o9urV73hWINnqkRt$4^ zZ=;n}$!aN9LVlIgG+gnForkd2_RVeiYsU;&3{~l=H$+xE*1Yl!9^5!SoUaf}5Tq4) z4cBg1oIlah*7^zgZDFAZM}PK=eGxu7p~lXKaXGIZ5;Y@#e};s^EWtWR{G|;7-sGKiHNo<6fF7nTUU@Oy-m^F6z1*u6;=`+$^rOHQHgm-)~yzVS`;N)Th!z*h`=0^5` zlX-9hFfc;r;KR{19e33ienq`C;lr5R(xKcF2ov-qM#&NaQqtKOJI(|tuoeazKwbqs z#YCI-#MM%TI`G3+X%5~~7hXj5%;BN-0jUt(a@*Bc;)2}|3riC9fp^!Ga`f~;| zi7(rNk&*;F+M}W4Jz4nd9#x03S-Uwjvcz6`+J#}|H`3!iaIh3Ojh9N%Oe>{H@WCOt zH=^cS9Qo?X-Pxtm`AtwwE;;t|LVQEK_Z3qkd+Ogq ziWh9s-rVI`=M*pUTO4ISLHjmG`yAqEXQ3OPdpkJbfet$L5QK^KP6a%eALBJ57wG50 zhG3Kw6RR|hJkDS971^tOL?w9THEzF3j?!)W&s%Y_x+wi|)r9glOIpeFvO8zg1n@9z z*t@2yT?#__-RerH^7IVO{Xk8Xy4|8!RCbtfS_ z;ebg!-xvukw4(U%7T9E*;B$)?%sFd~0WMtKu8*SLjdL1gQZjKgChhSta4lQ>K=i+S z55=|fScNc%m!%l*|j8goTFQ{oLo;zXCRw zmqKONZanc~I_Dzn8^XqQiIM1o3a;}?zNjtb!o=T-YNMusLhE3Bm7RB z_0~{o6qifspEx89hDf(x{izx8@knqiRG%D*ZGBL_yKs1Y6s0tz=kKH z&av@|md{syt$`I$SvRJdYkf$fl))&lYN89V+EZg#CR|EspnvM@zQM=YJs>VH5pBab z#DoXpkz6oO4AopqoetyHn%4&0M=;u=kuNbv{ZBxABAJR?Ou{{L7Hf>LNk? zVV`%6x+%NhpdL1&Swdmae)IvXY%JoS{^-^nS9y6Hhi31Q|CZzb6{Q?^>CZq@=F*aF zsGpx?C?22P`)gaGr)S>Pl&KS*zR-|S+#H+4gWYI6ZdCm_ZC>m8n|*|yg5SIBSykd* zeF=6Gr=sMXjb^))8@BxE=UB(q8;?iv2nF@+AL4!ej!3tbrzKjqaOB=BYXy&Re=_ev zCRn)|1n{wGrn$>gT{XBU{s24X0b zsMP&Mt?CiVX__9FK#43u=nY}zxAUtV&8yvJVkoYlck~AeLe@tf2O>gO`A+9ci(MJ3 z)K;elche)o9jfFNH9{AM%cfc_!u=~yV*`XgVAUwOla!R`DQO1qt}W1$!`M?DC~&v$ zl7|3YF9f0>NV72}9K=MTg_DDxelL%HT-?X17h91k3M-2wrEdPUZp z*G&V=GuQc0jPChlXji!~P3N2u@|@A5p;v#T^5v(Y6@J0~2Y|tQ!k3^w`NQSZpLDW0 z)UYcByG$o=Qs^Z^YiwxNp^Jv2hh?@$kwveG(YVAF{qJ%O>(y1-pfIU>m0d$IoN zx>oQ2@>_WJ%Vl4;q(;2QBK%{Z=37n17ym(#8F{ZxHeQVR(M&C*S&7T`95PCYodqno z0LxR0gJWo2=p|vNFCJ@G8UH?@?=TndY>=uHt-}mC4CmwVfiY@T{)DlE?yr+OH7gZ6 z%8)%vU=deslq7`n z+TzZ0ht8#a9amxt1L1u#Qi-{eV&@R;xt{DHG0m64OVx0|kcGkao|dz2onx``>eG!1 z<*8G;k||kdDCJTbZ;c)-9T7{>V=*~IO5ol5=ArqvwU>v{Y_Src97nen;+4q9+OY5^ z#nE3YN22uqop%a^wb{AF?Jp0*6;a-M;Z6m8-3Zf>uWxzOBD9Z%7d}MDeLIU;&0*sf zPse56SG(LFk}fk277w%a)xZpWx6$X5-SDt?JDR)`t8V-Z@*_};ZLn^EP4N3W+EZ$H zzk_1u8mB>+>1}-74WFIE6`T(p6Zpm5ElN(czj*oro_-Uqp}N;p&W*9bpnx@uQGhWI z%E8vK(r3C(V2~^?3J!NiGH%*BuhZ9N`(WM2#aCU}ve8=#x7XZBakt7-<(JoHr^*lh e(`H{85bPkhDSYyap7Z`E3tTibHz?L8ME?isFm$s3 literal 15377 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 R@Ks+xMp9m)MBMP({{rzNy6gY| From 1cbaae8d3ec4037e47a2eb8851c58d312e2855ba Mon Sep 17 00:00:00 2001 From: Tennessee116 Date: Thu, 10 Mar 2022 17:01:33 -0600 Subject: [PATCH 2/2] Battery of fixes --- code/game/machinery/hologram.dm | 14 ++++++++------ .../weapons/circuitboards/machinery/holopad.dm | 7 ++++++- code/modules/ascent/ascent_machines.dm | 4 +++- code/modules/research/designs/designs_circuits.dm | 9 ++++++++- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 2213ecfa6c1..a45e1ad83d6 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -62,7 +62,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED /obj/machinery/hologram/holopad/examine(user) . = ..() - to_chat(user, SPAN_INFO("Its ID is [loc.loc].")) //God I fucking hate this loc.loc shit ~10sc + to_chat(user, SPAN_NOTICE("Its ID is [loc.loc].")) //God I fucking hate this loc.loc shit ~10sc /obj/machinery/hologram/holopad/interface_interact(var/mob/living/carbon/human/user) //Carn: Hologram requests. if(!CanInteract(user, DefaultTopicState())) @@ -96,12 +96,12 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/area/area = get_area(src) for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list_) if(!AI.client) continue - to_chat(AI, SPAN_INFO("Your presence is requested at \the [area].")) + to_chat(AI, SPAN_NOTICE("Your presence is requested at \the [area].")) else to_chat(user, SPAN_NOTICE("A request for AI presence was already sent recently.")) if("Holocomms") if(user.loc != src.loc) - to_chat(user, SPAN_INFO("Please step onto the holopad.")) + to_chat(user, SPAN_NOTICE("Please step onto the holopad.")) return if(last_request + 200 < world.time) //don't spam other people with requests either, you jerk! last_request = world.time @@ -119,11 +119,11 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/temppad = input(user, "Which holopad would you like to contact?", "holopad list") as null|anything in holopadlist targetpad = holopadlist["[temppad]"] if(targetpad==src) - to_chat(user, SPAN_INFO("Using such sophisticated technology, just to talk to yourself seems a bit silly.")) - targetpad = null //Clean up the mess after an unsuccessful call + to_chat(user, SPAN_NOTICE("Using such sophisticated technology, just to talk to yourself seems a bit silly.")) + targetpad = null //Clean up the mess after an unsuccessful call return if(targetpad && targetpad.caller_id) - to_chat(user, SPAN_INFO("The pad flashes a busy sign. Maybe you should try again later.")) + to_chat(user, SPAN_NOTICE("The pad flashes a busy sign. Maybe you should try again later.")) targetpad = null //Clean up the mess after an unsuccessful call return if(targetpad) @@ -435,6 +435,8 @@ Holographic project of everything else. // Used for overmap capable ships that should have communications, but not be AI accessible /obj/machinery/hologram/holopad/longrange/remoteship + name = "encrypted long range holopad" + desc = "It's a floor-mounted device for projecting holographic images. This one utilizes an advanced bluespace transmitter to communicate with distant holopads, and it also has end-to-end encryption." allow_ai = FALSE #undef RANGE_BASED diff --git a/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm b/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm index ed7819b5278..7df4a153976 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/holopad.dm @@ -24,4 +24,9 @@ TECH_BLUESPACE = 2, TECH_DATA = 2, TECH_MAGNET = 2 - ) \ No newline at end of file + ) + +//For overmap vessels +/obj/item/weapon/stock_parts/circuitboard/holopad/longrange/remoteship + name = T_BOARD("encrypted long range holopad") + build_path = /obj/machinery/hologram/holopad/longrange/remoteship diff --git a/code/modules/ascent/ascent_machines.dm b/code/modules/ascent/ascent_machines.dm index 5172dabf568..60dd3a618c7 100644 --- a/code/modules/ascent/ascent_machines.dm +++ b/code/modules/ascent/ascent_machines.dm @@ -89,7 +89,9 @@ MANTIDIFY(/obj/machinery/door/airlock/external/bolted, "mantid airlock", "door") base_type = /obj/machinery/power/apc /obj/machinery/hologram/holopad/longrange/ascent - req_access = list(access_ascent) + req_access = list(access_ascent) //Who the hell put access on a god damn HOLOPAD? ~10sc + construct_state = /decl/machine_construction/default/panel_closed/floor/no_deconstruct + base_type = /obj/machinery/hologram/holopad/longrange /obj/effect/catwalk_plated/ascent color = COLOR_GRAY40 diff --git a/code/modules/research/designs/designs_circuits.dm b/code/modules/research/designs/designs_circuits.dm index b3df8300962..9c4e4d9204e 100644 --- a/code/modules/research/designs/designs_circuits.dm +++ b/code/modules/research/designs/designs_circuits.dm @@ -868,9 +868,16 @@ /datum/design/circuit/holopad_longrange name = "long range holopad" - id = "holopad" + id = "holopad_longrange" req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2) build_path = /obj/item/weapon/stock_parts/circuitboard/holopad/longrange sort_string = "XAAAG" +/datum/design/circuit/holopad_longrange_remoteship + name = "encrypted long range holopad" + id = "holopad_longrange_remote" + req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2, TECH_ESOTERIC = 2) + build_path = /obj/item/weapon/stock_parts/circuitboard/holopad/longrange/remoteship + sort_string = "XAAAH" +